0

Qt 文档提供了方法

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

用于调用 Opc Ua 服务器上的方法。关于这种方法,我有 2 个问题:

  1. methodNodeId 到底是什么?我想这是我要调用的节点的 ID,但如果是这种情况,为什么函数不是静态的呢?

  2. 如何调用具有 0 个输入参数的方法?尝试在myNode->callMethod(methodNodeId)不指定进一步参数的情况下调用仍然返回BadTooManyArguments,但我真的没有其他方法可以看到它被使用。

4

1 回答 1

1
  1. 一个 OPC UA 调用服务请求需要包含一个CallMethodRequest CallMethod 请求数组,在 OPC UA 规范中定义如下:

    • objectId ( NodeId ) - NodeId 应该是调用方法的 Object 或 ObjectType。-> 我猜这是你的QOpcUaNode
    • methodId ( NodedId ) - 要调用的方法的 NodeId。
    • inputArguments [] ( BaseDataType ) - 输入参数值列表。
  2. 您将不得不检查您的方法定义,也许还有您的服务器。你callMethod(methodId)不带参数的调用很好。根据您正在调用的方法,此调用可能会成功或不成功。

无论如何,您的 OPC UA 服务器也可能有发送问题Bad_TooManyArguments,而不是Bad_ArgumentsMissing它正在等待您未提供的某些 inputArguments。

于 2020-02-18T08:18:52.333 回答