在我们自己的命名空间中自动生成 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_idnamespace = 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的主要内容,如果未能解决你的问题,请参考以下文章

PHP自动加载autoload和命名空的应用

2)thinkphp的带有命名空间的自动加载机制

C#中的命名空间和程序集

C#中的命名空间和程序集

Thinkphp 空操作空控制器命名空间

6月14日 空操作 命名空间 视图