OPC UA вызывает метод подтверждения и получает Bad_EventIdUnkown в java

В настоящее время я разрабатываю клиент OPCUA с использованием Eclipse Milo. Я могу читать данные с сервера cpp OPC UA и записывать данные уставки на сервер.

Я не могу выполнить подтверждение сигналов тревоги и событий OPCUA.

Я пробовал использовать сервер opcua node-red и получать сигналы тревоги, теперь я хочу подтвердить то же самое, поэтому я попробовал код для вызова метода подтверждения для 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 node-red с использованием кода 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 = Good, value = 0x00000000, quality = good}], InputArgumentDiagnosticInfos = [], OutputArguments = []}

Пожалуйста, дайте мне несколько советов по устранению этой проблемы.


person Parth Tanna    schedule 16.05.2020    source источник


Ответы (1)


В этой строке кода:

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

Вы анализируете два идентификатора узла. Статус "CallMethodResult" показывает, что:

ns = 1; i = 1003:

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

Имея в виду

Bad_EventIdUnknown, 0x809A0000: указанный идентификатор события не распознан. (ссылка на здесь).

ns = 1; i = 1022:

StatusCode {имя = хорошее, значение = 0x00000000, качество = хорошее}], InputArgumentDiagnosticInfos = [], OutputArguments = []

Поэтому я хотел бы сделать вывод, что могут быть некоторые проблемы с синтаксическим анализом ns = 1; i = 1003: id узла.

person M.B. Explorer    schedule 26.05.2020
comment
Спасибо, это уже реализовано, но иногда это работает, а иногда дает тот же Bad_EventIdUnknown. - person Parth Tanna; 27.05.2020