在我们自己的命名空间中自动生成 NodeID
Posted
技术标签:
【中文标题】在我们自己的命名空间中自动生成 NodeID【英文标题】:Generating automatic NodeIDs in our own namespace 【发布时间】:2020-05-05 21:31:43 【问题描述】:为了从客户端创建一个新节点(任何类型,无关紧要),我使用了下面的函数。
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_id
在namespace = 0
中生成。问题是,有没有办法在我自己的命名空间中做同样的事情,而不是 namespace = 0
?
【问题讨论】:
在创建节点 ID 时使用my_namespace_idx
而不是 0
会发生什么情况?
【参考方案1】:
是的,您可以在自己的命名空间索引中创建节点。
命名空间索引 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
【讨论】:
以上是关于在我们自己的命名空间中自动生成 NodeID的主要内容,如果未能解决你的问题,请参考以下文章