Python基于OPC-UA的Push-pull消息传输案例。

版权声明:本文为博主原创文章,请转载时注明出处,欢迎浏览! https://blog.csdn.net/leemboy/article/details/81086164

OPC UA  Server侧Push代码

--------------------------------------------------------------

import logging
import random
from opcua import ua, Server
if __name__ == "__main__":
    logging.basicConfig(level=logging.WARN)
    logger = logging.getLogger("opcua.server.internal_subscription")
    logger.setLevel(logging.DEBUG)#logging level of this logger: 10
    server = Server()
    server.set_endpoint("opc.tcp://127.0.0.1:4841/freeopcua/server/")
    # setup  namespace
    uri = "http://examples.io"# this can be any
    idx = server.register_namespace(uri) #register the uri name space in the server
    objs = server.get_objects_node()
    myobj = objs.add_object(idx, "OT_Object")    # populating our address space
    custom_etype = server.nodes.base_event_type.add_object_type(1, 'VALUE_MSG')
    server.start()
    try:
        import time
        count=0
        while True:
            time.sleep(3)
            value=random.randint(100,1000)
            print("Push Value: ",value)
            custom_etype.add_property(0, 'MyRadomProperty', ua.Variant(value, ua.VariantType.Int16))
            event_obj = server.get_event_generator(custom_etype, myobj)
            event_obj.trigger(message="VALUE_MSG %d" % count)
            count += 1
    finally:
        server.stop()

------------------------------------------------

OPC-UA client 端代码

import pickle
from IPython import embed
from opcua import Client
class SubHandler(object):
    def event_notification(self, event):
        print("************************************")
        print("Value: ",event.MyRadomProperty)
if __name__ == "__main__":
    server_url="opc.tcp://127.0.0.1:4841/freeopcua/server/"
    client = Client(server_url)
    try:
        client.connect()
        root = client.get_root_node()
        obj = root.get_child(["0:Objects", "2:OT_Object"])
        myevent_tss = root.get_child(["0:Types", "0:EventTypes","0:BaseEventType",  "1:VALUE_MSG"])
        print("event is: ",myevent_tss)
        msclt_tss = SubHandler()
        sub_tss = client.create_subscription(100, msclt_tss)
        handle_tss = sub_tss.subscribe_events(obj, myevent_tss)
        embed()
        sub_tss.unsubscribe(handle_tss)
        sub_tss.delete()
    finally:
        client.disconnect()

-----------------------------------

参考资源:https://github.com/FreeOpcUa/python-opcua

猜你喜欢

转载自blog.csdn.net/leemboy/article/details/81086164