1. 程式人生 > 其它 >python OPCUA伺服器和客戶端開發

python OPCUA伺服器和客戶端開發

技術標籤:Python樹莓派工業4.0 (智慧製造)

  1. 環境準備
    安裝開源的OPCUA包,安裝採用pip安裝。
pip install opcua
  1. 伺服器端程式開發
    主要需要修改的內容為釋出的網路地址:
    127.0.0.1表示釋出為本機地址。

import sys
sys.path.insert(0, "..")

import time

from opcua import ua, Server

if __name__ == "__main__":

    # setup our server
    server = Server()
    server.
set_endpoint("opc.tcp://127.0.0.1:4840/freeopcua/server/") # setup our own namespace, not really necessary but should as spec uri = "http://automan.freeopcua.github.io" idx = server.register_namespace(uri) # get Objects node, this is where we should put our nodes objects =
server.get_objects_node() # populating our address space myobj = objects.add_object(idx, "MyObject") myvar = myobj.add_variable(idx, "MyVariable", 6.7) myvar.set_writable() # Set MyVariable to be writable by clients # starting! server.start() try
: count = 0 while True: time.sleep(1) count += 0.1 myvar.set_value(count) finally: #close connection, remove subcsriptions, etc server.stop()
  1. 客戶端程式開發
import sys,time
sys.path.insert(0, "..")
from opcua import Client

if __name__ == "__main__":

 

    client = Client("opc.tcp://localhost:4840/freeopcua/server/")
    #client = Client("opc.tcp://127.0.0.1:4840/freeopcua/server/")
    #client = Client("opc.tcp://[email protected]:4840/freeopcua/server/") #connect using a user
    try:
        res = client.connect()

        # Client has a few methods to get proxy to UA nodes that should always be in address space such as Root or Objects
        root = client.get_root_node()
        print("Objects node is: ", root)

        # Node objects have methods to read and write node attributes as well as browse or populate address space
        print("Children of root are: ", root.get_children())

        # get a specific node knowing its node id
        #var = client.get_node(ua.NodeId(1002, 2))
        #var = client.get_node("ns=3;i=2002")
        #print(var)
        #var.get_data_value() # get value of node as a DataValue object
        #var.get_value() # get value of node as a python builtin
        #var.set_value(ua.Variant([23], ua.VariantType.Int64)) #set node value using explicit data type
        #var.set_value(3.9) # set node value using implicit data type

        # Now getting a variable node using its browse path
        while(1):
            myvar = root.get_child(["0:Objects", "2:MyObject", "2:MyVariable"])
            obj = root.get_child(["0:Objects", "2:MyObject"])
            print("myvar is: ", myvar)
            print("myobj is: ", obj)
            
            # Stacked myvar access
            print("myvar is: ", root.get_children()[0].get_children()[1].get_variables()[0].get_value())
            time.sleep(2)

    finally:
        client.disconnect()

client監聽資料
引用資訊來源:

https://blog.csdn.net/weixin_29482793/article/details/80537862