“ns=2;s=”在OPC节点路径中的意义是什么?

14
我注意到所有OPC标签ID都以ns=2;s=为前缀。
一些可能的NodeId值示例如下:
  • ns=2;s=AcquisitionTimeRemaining
  • ns=2;s=Status
  • ns=2;s=Time
我想知道这个前缀的意义是什么。

研究:

有人在论坛上提出了这个问题。 给出的答案是ns前缀指定NodeId所属的命名空间索引。回答者接着说:

由于奇怪的历史原因,如果未明确指定,则我们假定ns = 1。Kepware的节点都在ns = 2中,因此必须指定。

我没有使用“Kepware的节点”,但我的命名空间仍设置为2...这将永远是2吗?我找不到关于前缀中s代表什么的任何信息。

2个回答

19

ns=2表示命名空间索引为2。

s=foo表示这是一个String类型的NodeId,其值为"foo"。

有4种类型的:

  1. 数字类型(值为UInteger)
  2. 字符串类型(值为String)
  3. GUID类型(值为Guid/UUID)
  4. 不透明类型(值为ByteString)

此语法借鉴了在OPC UA XML编码中用于编码NodeId的语法:

ns=<namespaceindex>;<type>=<value>

出现的命名空间节点以及有多少个命名空间取决于您连接的服务器。


2
应该注意到规范允许命名空间索引在会话之间发生更改。因此,保存数字命名空间索引应被视为不安全和不良(即使是广泛使用的)做法,因为它只保证在当前会话的上下文中有效。 - Marcus Ilgner
我知道"ns"代表"命名空间索引",但这是什么意思呢?为什么它总是2?为什么不是3?或者154742?这个数字的目的是什么,你如何确定它应该是多少? - GafferMan2112
@GafferMan2112 命名空间通过URI进行标识。索引表示其在服务器的NamespaceArray变量中的位置。你不需要提前“弄清楚”它 - 你可以浏览服务器并识别你感兴趣的节点,然后以适合你的客户端的方式存储NodeId,或者你会收到一个节点Id列表,并将其作为给定值使用。 - Kevin Herron

6

命名空间值仅取决于您的OPC UA服务器及其配置。

必须保留0以供OPC UA默认命名空间使用。

您可以读取/订阅描述您的OPC UA服务器命名空间配置的OPC UA节点所在的位置为“ns = 0;i = 2255”(Server_NamespaceArray)。节点值是此服务器上所有可用命名空间的数组。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接