server-methods.py
Go to the documentation of this file.
1 import sys
2 sys.path.insert(0, "..")
3 import logging
4 
5 try:
6  from IPython import embed
7 except ImportError:
8  import code
9 
10  def embed():
11  vars = globals()
12  vars.update(locals())
13  shell = code.InteractiveConsole(vars)
14  shell.interact()
15 
16 
17 from opcua import ua, uamethod, Server
18 
19 
20 # method to be exposed through server
21 def func(parent, variant):
22  ret = False
23  if variant.Value % 2 == 0:
24  ret = True
25  return [ua.Variant(ret, ua.VariantType.Boolean)]
26 
27 
28 # method to be exposed through server
29 # uses a decorator to automatically convert to and from variants
30 
31 @uamethod
32 def multiply(parent, x, y):
33  print("multiply method call with parameters: ", x, y)
34  return x * y
35 
36 
37 if __name__ == "__main__":
38  # optional: setup logging
39  logging.basicConfig(level=logging.WARN)
40  #logger = logging.getLogger("opcua.address_space")
41  # logger.setLevel(logging.DEBUG)
42  #logger = logging.getLogger("opcua.internal_server")
43  # logger.setLevel(logging.DEBUG)
44  #logger = logging.getLogger("opcua.binary_server_asyncio")
45  # logger.setLevel(logging.DEBUG)
46  #logger = logging.getLogger("opcua.uaprocessor")
47  # logger.setLevel(logging.DEBUG)
48  #logger = logging.getLogger("opcua.subscription_service")
49  # logger.setLevel(logging.DEBUG)
50 
51  # now setup our server
52  server = Server()
53  #server.set_endpoint("opc.tcp://localhost:4840/freeopcua/server/")
54  server.set_endpoint("opc.tcp://0.0.0.0:4840/freeopcua/server/")
55  server.set_server_name("FreeOpcUa Example Server")
56 
57  # setup our own namespace
58  uri = "http://examples.freeopcua.github.io"
59  idx = server.register_namespace(uri)
60 
61  # get Objects node, this is where we should put our custom stuff
62  objects = server.get_objects_node()
63 
64  # populating our address space
65  myfolder = objects.add_folder(idx, "myEmptyFolder")
66  myobj = objects.add_object(idx, "MyObject")
67  myvar = myobj.add_variable(idx, "MyVariable", 6.7)
68  myvar.set_writable() # Set MyVariable to be writable by clients
69  myarrayvar = myobj.add_variable(idx, "myarrayvar", [6.7, 7.9])
70  myarrayvar = myobj.add_variable(idx, "myStronglytTypedVariable", ua.Variant([], ua.VariantType.UInt32))
71  myprop = myobj.add_property(idx, "myproperty", "I am a property")
72  mymethod = myobj.add_method(idx, "mymethod", func, [ua.VariantType.Int64], [ua.VariantType.Boolean])
73 
74  inargx = ua.Argument()
75  inargx.Name = "x"
76  inargx.DataType = ua.NodeId(ua.ObjectIds.Int64)
77  inargx.ValueRank = -1
78  inargx.ArrayDimensions = []
79  inargx.Description = ua.LocalizedText("First number x")
80  inargy = ua.Argument()
81  inargy.Name = "y"
82  inargy.DataType = ua.NodeId(ua.ObjectIds.Int64)
83  inargy.ValueRank = -1
84  inargy.ArrayDimensions = []
85  inargy.Description = ua.LocalizedText("Second number y")
86  outarg = ua.Argument()
87  outarg.Name = "Result"
88  outarg.DataType = ua.NodeId(ua.ObjectIds.Int64)
89  outarg.ValueRank = -1
90  outarg.ArrayDimensions = []
91  outarg.Description = ua.LocalizedText("Multiplication result")
92 
93  multiply_node = myobj.add_method(idx, "multiply", multiply, [inargx, inargy], [outarg])
94 
95  # starting!
96  server.start()
97  print("Available loggers are: ", logging.Logger.manager.loggerDict.keys())
98  try:
99 
100  embed()
101  finally:
102  server.stop()
def multiply(parent, x, y)
def func(parent, variant)


ros_opcua_impl_python_opcua
Author(s): Denis Štogl , Daniel Draper
autogenerated on Tue Jan 19 2021 03:12:44