client - 在我们自己的命名空间中自动生成 NodeID
问题描述
为了从客户端创建一个新节点(任何类型,无关紧要),我使用了以下函数。
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
?
解决方案
是的,您可以在自己的命名空间索引中创建节点。
- 命名空间索引 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
推荐阅读
- c# - 如何仅将时间插入数据库
- xamarin - 如何在 xamarin.forms 中备份 sqlite 数据库
- python - 为什么要对每个输出元素使用偏差
- laravel - laravel update 在我的本地机器上运行良好,但在实时服务器上返回错误“从空值创建默认对象”
- javascript - Javascript - 根据视频的重复更改文本
- c# - 如何从使用 Reflection.Emit 创建的构造函数中删除 .local init?
- javascript - 枚举 Handlebars.js 生成的元素在第一页加载时不返回任何内容
- java - Spring Boot + OUD 根据 userId 拉取 userRole
- python-3.x - 如何在迭代 pandas 分组 df 时修复 ValueError?
- swift - 应该使用谁的见证表?