Beispiel #1
0
async def add_server_custom_enum_struct(server: Server):
    # import some nodes from xml
    await server.import_xml(f"{TEST_DIR}enum_struct_test_nodes.xml")
    ns = await server.get_namespace_index('http://yourorganisation.org/struct_enum_example/')
    uatypes.register_extension_object('ExampleStruct', ua.NodeId(5001, ns), ExampleStruct)
    val = ua.ExampleStruct()
    val.IntVal1 = 242
    val.EnumVal = ua.ExampleEnum.EnumVal2
    myvar = server.get_node(ua.NodeId(6009, ns))
    await myvar.write_value(val)
Beispiel #2
0
async def apply_references(server: Server, node_mapping_list: list,
                           node_mapping: DownstreamBridgeNodeMapping):
    for node_dict in tqdm(node_mapping_list):
        references = node_dict['references']
        original_node = server.get_node(node_dict['mapped_id'])
        for ref in references:
            new_target = node_mapping.get_bridge_id(ref['target'])
            if new_target is not None:
                try:
                    if ref['refTypeId'] == asyncua.ua.object_ids.ObjectIds.HasTypeDefinition:
                        continue
                    await original_node.add_reference(target=new_target,
                                                      reftype=ref['refTypeId'],
                                                      forward=ref['isForward'])
                except:
                    pass
 async def create_srv(port, key, cert):
     srv = Server()
     srvs.append(srv)
     await srv.init()
     await srv.set_application_uri("urn:freeopcua:python:discovery")
     srv.set_endpoint(f"opc.tcp://127.0.0.1:{port}")
     srv.set_security_policy([
         ua.SecurityPolicyType.NoSecurity,
         ua.SecurityPolicyType.Basic256Sha256_SignAndEncrypt,
     ])
     await srv.load_certificate(cert)
     await srv.load_private_key(key)
     await srv.start()
     # default the service level to 255 once started
     slevel = srv.get_node(ua.NodeId(ua.ObjectIds.Server_ServiceLevel))
     await slevel.write_value(ua.Variant(255, ua.VariantType.Byte))
     return srv
async def main():
    logging.basicConfig(level=logging.INFO)
    server = Server()
    await server.init()
    # import some nodes from xml
    nodes1 = await server.import_xml(
        "../schemas/UA-Nodeset-master/DI/Opc.Ua.Di.NodeSet2.xml")
    nodes2 = await server.import_xml(
        "../schemas/UA-Nodeset-master/Robotics/Opc.Ua.Robotics.NodeSet2.xml")
    nodes1 = [server.get_node(node) for node in nodes1]
    nodes2 = [server.get_node(node) for node in nodes2]
    await server.export_xml(nodes1, "di.xml")
    await server.export_xml(nodes2, "rob.xml")

    # starting!
    async with server:
        while True:
            await asyncio.sleep(1)
    # setup our own namespace, not really necessary but should as spec
    uri = "http://examples.freeopcua.github.io"
    idx = server.register_namespace(uri)

    # get Objects node, this is where we should put our custom stuff
    objects = server.get_objects_node()

    # Example 1 - create a basic object
    #-------------------------------------------------------------------------------
    myobj = objects.add_object(idx, "MyObject")
    #-------------------------------------------------------------------------------

    # Example 2 - create a new object type and a instance of the new object type
    #-------------------------------------------------------------------------------
    types = server.get_node(ua.ObjectIds.BaseObjectType)

    object_type_to_derive_from = server.get_root_node().get_child(
        ["0:Types", "0:ObjectTypes", "0:BaseObjectType"])
    mycustomobj_type = types.add_object_type(idx, "MyCustomObjectType")
    mycustomobj_type.add_variable(0, "var_should_be_there_after_instantiate",
                                  1.0)  # demonstrates instantiate

    myobj = objects.add_object(idx, "MyCustomObjectA", mycustomobj_type.nodeid)
    #-------------------------------------------------------------------------------

    # Example 3 - import a new object from xml address space and create a instance of the new object type
    #-------------------------------------------------------------------------------
    # Import customobject type
    server.import_xml('customobject.xml')
    # get an event generator for the server node which generates BaseEventType
    serverevgen = server.get_event_generator()
    serverevgen.event.Severity = 111

    # Configure server to use sqlite as history database (default is a simple in memory dict)
    server.iserver.history_manager.set_storage(HistorySQLite("my_event_history.sql"))

    # starting!
    server.start()

    # enable history for myobj events; must be called after start since it uses subscription
    server.iserver.enable_history_event(myobj, period=None)

    # enable history for server events; must be called after start since it uses subscription
    server_node = server.get_node(ua.ObjectIds.Server)
    server.historize_node_event(server_node, period=None)

    try:
        count = 0
        while True:
            time.sleep(1)
            count += 0.1

            # generate events for subscribed clients and history
            myevgen.trigger(message="This is MyFirstEvent " + str(count))
            myevgen2.trigger(message="This is MySecondEvent " + str(count))
            serverevgen.trigger(message="Server Event Message")

            # read event history from sql
            end_time = datetime.utcnow()
Beispiel #7
0
async def main():
    _logger = logging.getLogger('Server')
    #logger = logging.getLogger("asyncua.address_space")
    #logger = logging.getLogger("asyncua.internal_server")
    #logger = logging.getLogger("asyncua.binary_server_asyncio")
    #logger = logging.getLogger("asyncua.uaprocessor")

    server = Server()
    await server.init()
    server.set_endpoint("opc.tcp://0.0.0.0:16703/")
    server.set_server_name("Servidor OPC eMPC MA")
    await server.set_application_uri(uri="http://servidor-eMPC-MA.com/test/")
    server.set_security_policy([ua.SecurityPolicyType.NoSecurity])
    server._permission_ruleset = None
    server._policyIDs = ["Anonymous"]
    server.certificate = None

    uri = "Servidor OPC eMPC MA"
    idx = await server.register_namespace(uri)

    await server.import_xml("deck_opcua.xml")
    _logger.info("Iniciando servidor OPC-UA...")
    _logger.info("Escuchando en: opc.tcp://localhost:16703/")
    # Crear instancia del controlador
    controlador = clase_MPC.Controlador()
    # starting!
    async with server:
        while True:
            await asyncio.sleep(0.01)
            command_run = await server.get_node("ns=6;s=command_run"
                                                ).get_value()
            if command_run == 1:
                _logger.info(
                    f' [{datetime.now().strftime("%H:%M:%S.%f")[:-3]}]\t Node read: command_run = {command_run}'
                )
                _logger.info(
                    f' [{datetime.now().strftime("%H:%M:%S.%f")[:-3]}]\t Executing...'
                )
                await controlador.recibir_variables(server)
                controlador.actualizar_arrays()
                ControlFlag = await server.get_node("ns=4;s=ControlFlag"
                                                    ).read_value()
                _logger.info(
                    f' [{datetime.now().strftime("%H:%M:%S.%f")[:-3]}]\t Node read: Control_Flag = {ControlFlag}'
                )

                if ControlFlag:
                    controlador.ejecutar()
                    await server.write_attribute_value(
                        server.get_node("ns=4;s=uq[1]").nodeid,
                        ua.DataValue(controlador.uq1))
                    _logger.info(
                        f' [{datetime.now().strftime("%H:%M:%S.%f")[:-3]}]\t \
                                    Node written: uq1 = {controlador.uq1:.3f}')
                    await server.write_attribute_value(
                        server.get_node("ns=4;s=uFr[1]").nodeid,
                        ua.DataValue(controlador.uFr1))
                    _logger.info(
                        f' [{datetime.now().strftime("%H:%M:%S.%f")[:-3]}]\t \
                                    Node written: uFr1 = {controlador.uFr1:.3f}'
                    )
                    # Falta escribir todas las variables del controlador al servidor
                    await controlador.escribir_variables(server)
                await server.write_attribute_value(
                    server.get_node("ns=6;s=command_run").nodeid,
                    ua.DataValue(0))
                _logger.info(
                    f' [{datetime.now().strftime("%H:%M:%S.%f")[:-3]}]\t Node written: command_run = 0'
                )