1
|
|
|
from asyncua import Server, ua, uamethod |
2
|
|
|
import asyncio |
3
|
|
|
|
4
|
|
|
async def main(): |
5
|
|
|
|
6
|
|
|
@uamethod |
7
|
|
|
async def callback(parent, in_extobj): |
8
|
|
|
out_extobj = ua.uaprotocol_auto.AxisInformation() # get new instanace of AxisInformation |
9
|
|
|
out_extobj.EngineeringUnits = in_extobj.EngineeringUnits |
10
|
|
|
out_extobj.EURange.Low = in_extobj.EURange.Low |
11
|
|
|
out_extobj.EURange.High = in_extobj.EURange.High |
12
|
|
|
out_extobj.Title = in_extobj.Title |
13
|
|
|
out_extobj.AxisScaleType = in_extobj.AxisScaleType |
14
|
|
|
out_extobj.AxisSteps = in_extobj.AxisSteps |
15
|
|
|
|
16
|
|
|
await axis_info.set_value(out_extobj) #write values to variable |
17
|
|
|
|
18
|
|
|
ret = ( |
19
|
|
|
ua.Variant(out_extobj, ua.VariantType.ExtensionObject), |
20
|
|
|
ua.Variant("test", ua.VariantType.String) |
21
|
|
|
) |
22
|
|
|
|
23
|
|
|
return ret |
24
|
|
|
|
25
|
|
|
server = Server() |
26
|
|
|
await server.init() |
27
|
|
|
server.set_endpoint("opc.tcp://0.0.0.0:4840/freeopcua/server/") |
28
|
|
|
server.set_security_policy([ua.SecurityPolicyType.NoSecurity]) |
29
|
|
|
|
30
|
|
|
obj = server.get_objects_node() |
31
|
|
|
idx = await server.register_namespace("http://examples.freeopcua.github.io") |
32
|
|
|
|
33
|
|
|
await server.load_data_type_definitions() |
34
|
|
|
|
35
|
|
|
inarg_extobj = ua.Argument() |
36
|
|
|
inarg_extobj.Name = "In" |
37
|
|
|
inarg_extobj.DataType = ua.NodeId(12079, 0) |
38
|
|
|
inarg_extobj.ValueRank = -1 |
39
|
|
|
inarg_extobj.ArrayDimensions = [] |
40
|
|
|
inarg_extobj.Description = ua.LocalizedText("Wanted AxisInformation") |
41
|
|
|
|
42
|
|
|
outarg_extobj = ua.Argument() |
43
|
|
|
outarg_extobj.Name = "Out" |
44
|
|
|
outarg_extobj.DataType = ua.NodeId(12079, 0) |
45
|
|
|
outarg_extobj.ValueRank = -1 |
46
|
|
|
outarg_extobj.ArrayDimensions = [] |
47
|
|
|
outarg_extobj.Description = ua.LocalizedText("Actual AxisInformation") |
48
|
|
|
|
49
|
|
|
status = ua.Argument() |
50
|
|
|
status.Name = "Status" |
51
|
|
|
status.DataType = ua.NodeId(12, 0) |
52
|
|
|
status.ValueRank = -1 |
53
|
|
|
status.ArrayDimensions = [] |
54
|
|
|
status.Description = ua.LocalizedText("MSG") |
55
|
|
|
|
56
|
|
|
method_parent = await obj.add_object(idx, "Methods") |
57
|
|
|
method_node = await method_parent.add_method( |
58
|
|
|
idx, |
59
|
|
|
"SetAxisInformation", |
60
|
|
|
callback, |
61
|
|
|
[ |
62
|
|
|
inarg_extobj |
63
|
|
|
], |
64
|
|
|
[ |
65
|
|
|
outarg_extobj, |
66
|
|
|
status |
67
|
|
|
] |
68
|
|
|
) |
69
|
|
|
|
70
|
|
|
#add a variable of type AxisInformation |
71
|
|
|
axis_info = await obj.add_variable(idx, "AxisInformation", ua.uaprotocol_auto.AxisInformation(), varianttype=ua.VariantType.ExtensionObject) |
72
|
|
|
|
73
|
|
|
async with server: |
74
|
|
|
while 1: |
75
|
|
|
await asyncio.sleep(0) |
76
|
|
|
|
77
|
|
|
if __name__ == "__main__": |
78
|
|
|
asyncio.run(main()) |