0

为了从客户端创建一个新节点(任何类型,无关紧要),我使用了以下函数。

UA_NodeId new_node_id;
.....some code...
UA_Client_addVariableNode(m_client,
                          UA_NODEID_NULL,
                          parent_node_id,
                          UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
                          UA_QUALIFIEDNAME(my_namespace_idx, "b"),
                          UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
                          v_attr,
                          &new_node_id);

因此,该函数会自动为我创建一个新的节点 id,这样我就不必费心寻找新的节点 id,当我动态创建新节点时(在我的应用程序中就是这种情况new_node_idnamespace = 0。问题是,有没有办法做我自己的命名空间,而不是namespace = 0

4

1 回答 1

3

是的,您可以在自己的命名空间索引中创建节点。

  • 命名空间索引 0 为信息模型中的节点保留,这些节点由核心 OPC UA 规范定义,URI 为 http://opcfoundation.org/UA
  • 命名空间索引 1 用于不属于特定信息模型的实例节点
  • 您可以在2 到 255范围内创建自定义命名空间索引,即属于特定用例信息模型的节点

例如,如果您希望为您的自定义节点分配一个数字节点 ID,您可以将自定义命名空间索引分配为第一个参数,并将数字 NodeId 作为第二个参数分配给 UA_NODEID_NUMERIC 函数

UA_NodeId new_node_id = UA_NODEID_NUMERIC(2, 1001);

如果您想尝试使用其他类型的节点 ID,可以尝试使用以下函数:

+======================+=================+===========================================================================+
|    Function Name     | Identifier Type |                                Description                                |
+======================+=================+===========================================================================+
| UA_NODEID_NUMERIC    | Numeric         | Assign numeric type NodeId can be in the range of 0 to 65535              |
+----------------------+-----------------+---------------------------------------------------------------------------+
| UA_NODEID_STRING     | String          | Assign string type NodeId can have up to 4096 characters                  |
+----------------------+-----------------+---------------------------------------------------------------------------+
| UA_NODEID_GUID       | GUID            | Assign GUID type NodeId which is a 128 but globally unique identifier     |
+----------------------+-----------------+---------------------------------------------------------------------------+
| UA_NODEID_BYTESTRING | Byte String     | Assign the namespace specific bytestring NodeId can have up to 4096 bytes |
+----------------------+-----------------+---------------------------------------------------------------------------+

您还可以参考此处提供的文档:https ://open62541.org/doc/current/

如果您正在寻找更多关于 open62541 堆栈的实践信息,您还可以查看付费在线课程:OPC UA 实用介绍 - 代码演练和本课程中的示例使用 open62541 堆栈:https://opcfoundation。 org/products/view/practical-introduction-to-opc-ua-part-i

于 2020-07-27T08:58:50.350 回答