zoukankan      html  css  js  c++  java
  • 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 

  • 相关阅读:
    【SqlSugarCore】SqlSugarScope的异步上下文问题
    web系统国际化思路
    mac iterm2 报错“iterm2_precmd:type:50”解决
    Atcoder 123C 1, 2, 3
    Atcoder 123D Yet Another Sorting Problem
    Atcoder 124F Chance Meeting
    Atcoder 212D Querying Multiset
    Atcoder 212E Safety Journey
    Atcoder 212F Greedy Takahashi
    Atcoder 212G Power Pair
  • 原文地址:https://www.cnblogs.com/mrlonely2018/p/15307913.html
Copyright © 2011-2022 走看看