Как правильно вызывать методы без входных аргументов - PullRequest
0 голосов
/ 18 февраля 2020

Документация Qt предоставляет метод

bool QOpcUaNode::callMethod(const QString &methodNodeId, const QVector<QOpcUa::TypedVariant> &args = QVector<QOpcUa::TypedVariant>())

для вызова методов на сервере Op c Ua. Что касается этого метода, у меня есть 2 вопроса:

  1. Что такое methodNodeId? Я предполагаю, что это идентификатор узла, который я хочу вызвать, но если это так, почему бы функции не быть stati c вместо?

  2. Как вызывать методы с 0 входных аргументов? попытка вызвать myNode->callMethod(methodNodeId) без указания дальнейших аргументов по-прежнему возвращает BadTooManyArguments, но на самом деле нет другого способа увидеть, как он используется.

1 Ответ

1 голос
/ 18 февраля 2020
  1. Запрос OP C UA Call Service должен содержать массив из CallMethodRequest Запрос CallMethod определен следующим образом в спецификации OP C UA:

    • objectId ( NodeId ) - NodeId должен быть идентификатором Object или ObjectType, для которого вызывается метод. -> Полагаю, это ваш QOpcUaNode
    • methodId ( NodedId ) - NodeId вызываемого метода.
    • inputArguments [] ( BaseDataType ) - Список значений входных аргументов.
  2. Вам необходимо проверить определение метода и, возможно, ваш сервер. Ваш звонок callMethod(methodId) без аргументов в порядке. В зависимости от метода, который вы вызываете, этот вызов может быть успешным или нет.

В любом случае ваш сервер OP C UA может также иметь проблему с отправкой Bad_TooManyArguments вместо Bad_ArgumentsMissing, если он ждал некоторые входные аргументы, которые вы не предоставили.

...