服务器重启后OpcUa命名空间更改

问题描述

我从opcua服务器读取了nodeid值。在服务器的第一次启动中,NodeId是“ ns = 2; i = 10934”,我读得很好,但是在服务器重启后,NodeId更改为“ ns = 4; i = 10934”。我的应用无法读取值,因为它记住NodeId“ ns = 2; i = 10934”。我可以执行什么程序来解决此问题?

解决方法

这是一个很好的问题-经常被忽略。我假设您正在开发客户端应用程序,因此您正在使用一些SDK。

作为主要原则,在客户端,应存储带有NamespaceUris而不是NamespaceIndexes引用的NodeId。 OPC UA的类型为ExpandedNodeId,可以提供NamespaceUri而不是NamespaceIndex,因此它为存储ID提供了更好的选择。只是,您将必须在NodeId和ExpandedNodeId之间进行转换才能存储它们,然后向后进行相同的操作以使用服务器中的服务(如读取)。某些SDK使其比其他SDK更容易,并且您将需要查阅所用SDK的文档。

另一种替代方法是在客户端中保存服务器的NamespaceArray(可从Server对象获得),每当重用NodeId时,您都将比较先前的NamespaceArray与当前的NamespaceArray,然后分别在所有存储的NodeId中转换NamespaceIndexes。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...