예제 #1
0
class ServerPython(object):
    def __init__(self):
        self._server = None
        self.nodes = None
        self.get_node = None
        self.get_namespace_array = None

    def get_server(self):
        return self._server

    def start_server(self, endpoint):
        logger.info("Starting python-opcua server")
        self._server = Server()
        self._server.set_endpoint(endpoint)
        self._server.set_server_name("OpcUa Modeler Server")
        self.nodes = self._server.nodes
        self.get_node = self._server.get_node
        self.get_namespace_array = self._server.get_namespace_array
        self.load_type_definitions = self._server.load_type_definitions
        self.load_enums = self._server.load_enums
        # now remove freeopcua namespace, not necessary when modeling and
        # ensures correct idx for exported nodesets
        ns_node = self._server.get_node(
            ua.NodeId(ua.ObjectIds.Server_NamespaceArray))
        nss = ns_node.read_value()
        ns_node.write_value(nss[:1])
        self._server.start()

    def stop_server(self):
        if self._server is not None:
            self._server.stop()
            self._server = None
            self.get_node = None
            self.get_namespace_array = None

    def import_xml(self, path):
        return self._server.import_xml(path)

    def export_xml(self, nodes, uris, path):
        exp = XmlExporter(self._server)
        exp.build_etree(nodes, uris=uris)
        exp.write_xml(path)
예제 #2
0
        mydtvar = myobj.add_variable(idx, "MyDateTimeVar", datetime.utcnow())
        mydtvar.set_writable()  # Set MyVariable to be writable by clients
        myarrayvar = myobj.add_variable(idx, "myarrayvar", [6.7, 7.9])
        myarrayvar = myobj.add_variable(idx, "myStronglytTypedVariable",
                                        ua.Variant([], ua.VariantType.UInt32))
        myprop = myobj.add_property(idx, "myproperty", "I am a property")
        mymethod = myobj.add_method(idx, "mymethod", func,
                                    [ua.VariantType.Int64],
                                    [ua.VariantType.Boolean])
        multiply_node = myobj.add_method(
            idx, "multiply", multiply,
            [ua.VariantType.Int64, ua.VariantType.Int64],
            [ua.VariantType.Int64])

        # import some nodes from xml
        server.import_xml("custom_nodes.xml")

        # creating a default event object
        # The event object automatically will have members for all events properties
        # you probably want to create a custom event type, see other examples
        myevgen = server.get_event_generator()
        myevgen.event.Severity = 300

        # starting!
        with server:
            print("Available loggers are: ",
                  logging.Logger.manager.loggerDict.keys())
            vup = VarUpdater(mysin)  # just  a stupide class update a variable
            vup.start()

            # enable following if you want to subscribe to nodes on server side
예제 #3
0
        mydtvar.set_writable()  # Set MyVariable to be writable by clients
        myarrayvar = myobj.add_variable(idx, "myarrayvar", [6.7, 7.9])
        myarrayvar = myobj.add_variable(idx, "myStronglytTypedVariable",
                                        ua.Variant([], ua.VariantType.UInt32))
        myprop = myobj.add_property(idx, "myproperty", "I am a property")
        mymethod = myobj.add_method(idx, "mymethod", func,
                                    [ua.VariantType.Int64],
                                    [ua.VariantType.Boolean])
        multiply_node = myobj.add_method(
            idx, "multiply", multiply,
            [ua.VariantType.Int64, ua.VariantType.Int64],
            [ua.VariantType.Int64])

        # import some nodes from xml
        server.import_xml(
            "C:\Users\champouf\source\repos\opcua-asyncio\examples\sync\custom_nodes.xml"
        )

        # creating a default event object
        # The event object automatically will have members for all events properties
        # you probably want to create a custom event type, see other examples
        myevgen = server.get_event_generator()
        myevgen.event.Severity = 300

        # starting!
        with server:
            print("Available loggers are: ",
                  logging.Logger.manager.loggerDict.keys())
            vup = VarUpdater(mysin)  # just  a stupide class update a variable
            vup.start()