如何将OPC UA模型节点的IdentifierType从Numeric改为String?
如何将OPC UA模型的NodeId从Numeric类型改为String类型
一、通过修改模型设计XML实现
可以直接在模型设计文件中为目标节点指定String类型的NodeId,只需给每个需要修改的节点添加<opc:NodeId>子元素,明确指定IdentifierType="String"和对应的字符串标识符值。
修改后的模型设计代码示例:
<opc:ObjectType SymbolicName="GenericSensorType" BaseType="ua:BaseObjectType"> <!-- 指定String类型NodeId --> <opc:NodeId IdentifierType="String" Value="GenericSensorType" /> <opc:Description>Generic Sensor</opc:Description> <opc:Children> <opc:Variable SymbolicName="Output" DataType="ua:Double" ValueRank="Scalar" TypeDefinition="ua:AnalogItemType"> <opc:NodeId IdentifierType="String" Value="GenericSensorType.Output" /> </opc:Variable> <opc:Property SymbolicName="Units" DataType="ua:Double" ValueRank="Scalar" AccessLevel="ReadWrite"> <opc:NodeId IdentifierType="String" Value="GenericSensorType.Units" /> </opc:Property> </opc:Children> </opc:ObjectType>
重新运行OPC UA模型编译器后,生成的NodeSet2文件中对应节点的NodeId会变为ns=1;s=GenericSensorType这类String格式,关联的引用也会同步使用字符串类型的节点ID。
二、无法修改模型文件时的替代方法
1. 手动编辑生成的NodeSet2 XML文件
直接打开生成的NodeSet2文件,将目标节点的NodeId属性从ns=1;i=X格式替换为ns=1;s=NodeName格式,同时同步修改所有指向该节点的引用(比如<Reference>标签内的节点ID值),确保引用关系一致。
2. 在服务器代码中动态修改
基于UA .NETStandard框架,可在服务器加载NodeSet2之后、启动之前,通过API遍历并修改节点的NodeId:
- 通过BrowseName或原Numeric NodeId定位目标节点;
- 创建新的
NodeId实例,指定命名空间索引和字符串标识符; - 替换原节点的NodeId,并更新所有相关的正向/反向引用,避免引用失效。
内容的提问来源于stack exchange,提问作者StefanF00
相关产品推荐
相关产品推荐

