我从opcua服务器读取了nodeid值。在服务器的第一次启动中,NodeId是“ ns = 2; i = 10934”,我读得很好,但是在服务器重启后,NodeId更改为“ ns = 4; i = 10934”。我的应用无法读取值,因为它记住NodeId“ ns = 2; i = 10934”。我可以执行什么程序来解决此问题?
答案 0 :(得分:1)
这是一个很好的问题-经常被忽略。我假设您正在开发客户端应用程序,因此您正在使用一些SDK。
作为主要原则,在客户端,应存储带有NamespaceUris而不是NamespaceIndexes引用的NodeId。 OPC UA的类型为ExpandedNodeId,可以提供NamespaceUri而不是NamespaceIndex,因此它为存储ID提供了更好的选择。只是,您将必须在NodeId和ExpandedNodeId之间进行转换才能存储它们,然后向后进行相同的操作以使用服务器中的服务(如读取)。某些SDK使其比其他SDK更容易,并且您将需要查阅所用SDK的文档。
另一种替代方法是在客户端中保存服务器的NamespaceArray(可从Server对象获得),每当重用NodeId时,您都将比较先前的NamespaceArray与当前的NamespaceArray,然后分别在所有存储的NodeId中转换NamespaceIndexes。