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 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM