class HelloServer: def __init__(self, endpoint, name, model_filepath): self.server = Server() # This need to be imported at the start or else it will overwrite the data self.server.import_xml(model_filepath) self.server.set_endpoint(endpoint) self.server.set_server_name(name) objects = self.server.get_objects_node() freeopcua_namespace = self.server.get_namespace_index( "urn:freeopcua:python:server") hellower = objects.get_child("0:Hellower") hellower_say_hello = hellower.get_child("0:SayHello") self.server.link_method(hellower_say_hello, say_hello_xml) hellower.add_method(freeopcua_namespace, "SayHello2", say_hello, [ua.VariantType.Boolean], [ua.VariantType.String]) hellower.add_method(freeopcua_namespace, "SayHelloArray", say_hello_array, [ua.VariantType.Boolean], [ua.VariantType.String]) def __enter__(self): self.server.start() return self.server def __exit__(self, exc_type, exc_val, exc_tb): self.server.stop()
async def init_server(): with open(r'../configuration.yml') as config_file: config = yaml.load(config_file, Loader=yaml.FullLoader) server = Server() await server.init() server.set_endpoint("opc.tcp://" + config['host'] + ":" + str(config['port'])) namespace = await server.register_namespace(config['namespace']) root_node = server.get_objects_node() objects = await root_node.add_object(namespace, "BaseObjects") server_rtt = await objects.add_variable(namespace, "server_rtt", None) data_pool = await objects.add_variable(namespace, "data_pool", None) await server_rtt.set_writable() await data_pool.set_writable() server_tests = Server_tests(server_rtt, data_pool) server.link_method(root_node, server_tests.random_sort) random_sort_method = await objects.add_method( namespace, "random_sort", server_tests.random_sort, [ua.VariantType.Int64, ua.VariantType.Float, ua.VariantType.Float], [ua.VariantType.Float]) await server.start() try: print("OPC-UA server started") while True: await asyncio.sleep(1) finally: await server.stop()