OpcUA 地址 space

OpcUA address space

我是第一次参与需要 OpcUA 连接的项目。 我在 open62541 后端使用 Qt 包装器 (Qt OPCUA)。

托管服务器的 PLC 制造商告诉我可以访问的变量列表:

MT_MAX_SETUP (qreal)
MT_ALARM (bool)
...

和其他几个人。 使用 example Qt OPC UA Viewer Example 我发现了那些变量的 nodeId ,例如:

`ns=4;s=MT_MAX_SETUP`

所以我可以通过这种方式在连接后检索它的值:

_opcNode = _opcUaClient->node("ns=4;s=MT_MAX_SETUP");
connect(_opcNode, &QOpcUaNode::attributeRead, this, &MyOPC::handleAttributes);
connect(_opcNode, &QOpcUaNode::attributeUpdated, this, &MyOPC::handleAttributes);

_opcNode->readAttributes(QOpcUa::NodeAttribute::Value);

这种做法正确吗?制造商是否应该也告诉我命名空间 ns=4?

Is it correct this approach? Should the manufacturer have told me also the namespace ns=4?

你或许应该自己问问他们。否则,您将不得不自己搜索这些变量,这可能是也可能不是挑战。

如果您需要 user-facing 工具来帮助您在开发过程中浏览 UA,我建议您使用 UAExpert

是的,您应该知道NamespaceUri,然后最好从服务器提供的NamespaceArray 中找到相应的NamespaceIndex。通常,您可以相信 NamespaceIndex 是固定的,但并非总是如此,因此这对您来说是安全的。

您可以使用 UaExpert or Prosys OPC UA Browser 读取 NamespaceArray(在 Server 对象下)并自己从那里找到 NamespaceUri。

或者,如果您的库支持将 NodeId 作为 ExpandedNodeId 提供,您可以简单地在其中使用 NamespaceUri。然后这将在 XML 字符串表示中查找类似 "nsu=urn:the_namespace_uri;s=MT_MAX_SETUP".