OPCUA 添加对象函数 objects.add_object() 使用不同nodeid参数的辨析

    objects = server.get_objects_node()

    # populating our address space
    myobj = objects.add_object(idx, "MyObject")
    sensor1 = objects.add_object('ns=2;s="sens1"', "Sensor 1")
    sensor2 = objects.add_object('ns=2;xs=43', "Sensor 2")

myobj 使用的参数idx 是我们定义的地址空间的序号,idx 值为2, 如果在其后加上 print myobj 的语句,输出为:ns=2;i=1 。会使用默认递增的编号。

而sensor2 的第一个参数是错的,那么 add_object() 函数的第一个参数应该怎么写呢?

查询文档:

https://python-opcua.readthedocs.io/en/latest/opcua.common.html?highlight=add%20object#opcua.common.node.Node.add_object

 P 都没有。那查一下nodeid

https://reference.opcfoundation.org/v104/Core/DataTypes/NodeId/

 对了解第一个参数nodeid怎么写好像毫无裨益····看来还是要深入源码看个究竟。

通过断点调试,发现add_object() 的参数会首先进入 opcua.common.manage_nodes.py 里面的 _parse_nodeid_qname()函数:

对于 Sensor1 Sensor2, 会进入 from_string 这个函数。进一步发现,最后实际处理的函数是 opcua.ua.uatypes.py 里面的 _from_string() 函数:

 我们发现,nodeid参数可以使用分号分隔,用以添加多个不同的参数。

ns表示地址空间序号,isgb分别代表一种除了 TwoByte 和 FourByte 之外的 NodeIdType:

 而 nsu 和srv 分别代表 地址空间uri 和服务器序号。(376,377行)

关于 NodeIdType 参考我的另一篇博文:https://www.cnblogs.com/mrlonely2018/p/15304364.html 

原文地址:https://www.cnblogs.com/mrlonely2018/p/15307913.html