Completed
Push — master ( 08162c...3791b9 )
by Olivier
07:53 queued 05:25
created

server-extension-object-as-method-argument   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 79
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 59
dl 0
loc 79
rs 10
c 0
b 0
f 0
wmc 3

1 Function

Rating   Name   Duplication   Size   Complexity  
B main() 0 72 3
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())