diff --git a/Dockerfile b/Dockerfile index 4f4661b8784b39f13615c5ee9b5f4b09a7fcb11f..7cb6f3f7388f17205e805bdb732ae59b5b9744d8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,12 +2,15 @@ FROM python:3.10 # install app dependencies #python vorpackage -WORKDIR /app -RUN ./requirements.txt . +RUN mkdir /soil-opc-ua + +WORKDIR /soil-opc-ua + +COPY requirements.txt . RUN pip3 install -r requirements.txt -COPY * /app +COPY * /soil-opc-ua CMD ["python", "newmodeljsonparse.py", "robot.json"] diff --git a/requirements.txt b/requirements.txt index 867b021efc6a45973bfba201ac6f033f8c3c6613..e817cac94b8002773957c98b74a5800309b1b7c7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,4 @@ -asyncua +asyncio tomli toml numpy -opcua-client \ No newline at end of file diff --git a/robottest.py b/robottest.py index 7b6294b6ec12c3be0f06e952961921f7bf620817..8cd8a02f5c665479dceeab35ee42eb871288c59c 100644 --- a/robottest.py +++ b/robottest.py @@ -9,8 +9,11 @@ from asyncua.common import node logging.basicConfig(level=logging.INFO) _logger = logging.getLogger('asyncua') + + + async def main(): - # setup our server + # setup our server() server = Server() await server.init() server.set_endpoint('opc.tcp://0.0.0.0:4840/freeopcua/server/') @@ -58,6 +61,22 @@ async def main(): ##evtl alle statischen variablen als struct dynamisch mit extra variablen myobj = await server.nodes.objects.add_object(idx, "Robot") + + enode = await new_enum(server, idx, "MyEnum", [ + "titi", + "toto", + "tutu", + ]) + + enum_node = await new_enum(server, idx, "EnumerateTest", [ "UNDEFINED", "GOOD", "BAD", ]) + await server.load_data_type_definitions() + enumTest = await myobj.add_variable(idx, "my_enumtest", ua.EnumerateTest.UNDEFINED, datatype=enum_node.nodeid) + await enumTest.set_modelling_rule(True) + + #custom_objs = await server.load_data_type_definitions() + valnode = await server.nodes.objects.add_variable(idx, "my_enum", ua.MyEnum.toto, datatype=enode.nodeid) + + #enum = await myobj.add_variable(idx, "my_enum", ua.MyEnum.toto, datatype=enode.nodeid) #custom_objs = await server.load_data_type_definitions() #pos struct hardcoded #var = await myobj.add_variable(idx, "position",ua.Variant(ua.PosStruct('Position', 'Position in Cartesian coordinates given in metre.', [0,0,0], ua.Range(-50, 50), 'm'), ua.VariantType.ExtensionObject)) @@ -84,23 +103,58 @@ async def main(): #tcp als variable mit properties vartype = await server.nodes.base_data_type.add_data_type(idx, tcpobject.name, tcpobject.description) - + #await vartype.write_value_rank(1) #if tcpobject.range is not None: # rangeprop = await vartype.add_property(idx, "range", ua.Range(-0.5,0.5)) # await rangeprop.set_modelling_rule(True) # #if tcpobject.unit is not None: # unitprop = await vartype.add_property(idx, "unit", "metre") # await unitprop.set_modelling_rule(True) - tcpvar = await myobj.add_variable(idx, "TCP Var" , [0,0,0] , datatype = vartype.nodeid) + tcpvar = await myobj.add_variable(idx, "TCP Var" , [0,0,0] , ua.VariantType.Float ,datatype = vartype.nodeid) + await tcpvar.set_writable() + # await tcpvar.write_value_rank(1) + # await tcpvar.write_array_dimensions(2) #object bekommt nicht datatypes properties await tcpvar.add_property(idx, "range", ua.Range(-0.5,0.5)) await tcpvar.add_property(idx, "unit", "metre") + #def func(variant): + # tcpvar.set_value(ua.Variant(variant, ua.VariantType.Float, is_array = True)) + testvar = await myobj.add_variable(idx, "test" , 3) + + # @uamethod + # async def goTo (position): + # await tcpvar.set_value(position) + + # @uamethod + # def test (position): + # testvar.set_value(position) + # return position + + async def test(parent, position): + await testvar.set_value(ua.Variant(position)) + + async def goTo(parent, position): + await tcpvar.set_value(ua.Variant(position)) + inargx = ua.Argument() + inargx.Name = "Position_neu" + inargx.DataType = ua.NodeId(ua.ObjectIds.Float) + inargx.ValueRank = 1 + inargx.ArrayDimensions = [1,1,1] + inargx.Description = ua.LocalizedText("bewegt zu neuer position") + + beweg_node = await myobj.add_method(idx, "bewegen", goTo, [ua.VariantType.Float]) + + testmethod = await myobj.add_method(idx, "test", test, [ua.VariantType.Int64]) + async with server: - print(tcpobject.value) + #print(tcpobject.value) + print(await tcpvar.get_value()) + #await tcpvar.set_value([1,1,1]) + print(await tcpvar.get_value()) while True: await asyncio.sleep(1) - + if __name__ == '__main__': asyncio.run(main()) \ No newline at end of file