Example #1
0
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()
Example #2
0
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()