簡體   English   中英

OPC UA 調用確認方法並獲取 java 中的 Bad_EventIdUnkown

[英]OPC UA calling Acknowlagement method and fetching Bad_EventIdUnkown in java

目前我正在使用 Eclipse Milo 開發 OPCUA 客戶端。 我能夠從 OPC UA cpp 服務器讀取數據並將設定點數據寫入服務器。

我無法確認 OPCUA 警報和事件。

我嘗試使用 node-red opcua 服務器並收到警報,現在我想確認相同,所以我嘗試了調用 opcua 確認方法的代碼。 這里是:

byte[] b=new byte[] {-66, -115, -121, -6, -39, 40, 89, 114, 60, -66, -126, -79, -72, -128, -21, 23, 0, 0, 4, -4};
        LocalizedText lt = new LocalizedText("bagiya");     
ByteString bs=new ByteString(b);
    Variant evntid1 = new Variant(bs);
        System.out.println("jangli id :=>"+vs[1]);

        Variant lt1 = new Variant(lt);
        Variant[] v = new Variant[] { evntid1,lt1 = new Variant(lt)};
        System.out.println(vs[1].getDataType());
        CallMethodRequest rec = new CallMethodRequest(NodeId.parse("ns=1;i=1003"), NodeId.parse("ns=1;i=1022"), v);

            System.out.println( rec.getTypeId()+"::=>"+client.call(rec).get());

此字節數組字符串由節點紅色 opcua 服務器使用事件訂閱示例的 eclipse milo 代碼給出。

    EventFilter eventFilter = new EventFilter(new SimpleAttributeOperand[] {

            new SimpleAttributeOperand(Identifiers.BaseEventType,
                    new QualifiedName[] { new QualifiedName(0, "EventId") }, AttributeId.Value.uid(), null),
            new SimpleAttributeOperand(Identifiers.BaseEventType,
                    new QualifiedName[] { new QualifiedName(0, "EventType") }, AttributeId.Value.uid(), null),
            new SimpleAttributeOperand(Identifiers.BaseEventType,
                    new QualifiedName[] { new QualifiedName(0, "Severity") }, AttributeId.Value.uid(), null),
            new SimpleAttributeOperand(Identifiers.BaseEventType,
                    new QualifiedName[] { new QualifiedName(0, "Time") }, AttributeId.Value.uid(), null),
            new SimpleAttributeOperand(Identifiers.BaseEventType,
                    new QualifiedName[] { new QualifiedName(0, "Time") }, AttributeId.Value.uid(), null),
            new SimpleAttributeOperand(Identifiers.BaseEventType,
                    new QualifiedName[] { new QualifiedName(0, "Message") }, AttributeId.Value.uid(), null) },
            new ContentFilter(null));

所以我們得到以下給定狀態: CallMethodResult{StatusCode=StatusCode{name= Bad_EventIdUnknown , value=0x809A0000, quality=bad}, InputArgumentResults=[StatusCode{name=Good, value=0x00000000, quality=good}, StatusCode{name=好,值=0x00000000,質量=好}],InputArgumentDiagnosticInfos=[],OutputArguments=[]}

請給我一些解決此問題的建議。

在這行代碼中:

CallMethodRequest rec = new CallMethodRequest(NodeId.parse("ns=1;i=1003"), 
NodeId.parse("ns=1;i=1022"), v);

您解析兩個節點 ID。 “CallMethodResult”狀態描述了:

ns=1;i=1003:

StatusCode{name=Bad_EventIdUnknown, value=0x809A0000, quality=bad}, InputArgumentResults=[StatusCode{name=Good, value=0x00000000, quality=good}

意義

Bad_EventIdUnknown, 0x809A0000: 指定的事件 ID 無法識別。 (參考這里)。

ns=1;i=1022:

StatusCode{name=Good, value=0x00000000, quality=good}], InputArgumentDiagnosticInfos=[], OutputArguments=[]

因此,我想得出結論,解析ns=1;i=1003: node id 可能存在一些問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM