diff --git a/robot.py b/robot.py index 89992feaf5eb564bd19ad16cf36cc8adc728030f..eb6bf8d0ed5283f8d119ece2cb940643ce036f9d 100644 --- a/robot.py +++ b/robot.py @@ -1,5 +1,6 @@ import logging import asyncio +import numpy from asyncua import ua, Server from asyncua.common.methods import uamethod @@ -86,7 +87,7 @@ async def main(): #tcp als variable mit properties vartype = await server.nodes.base_data_type.add_data_type(idx, "Measurement") paratype = await server.nodes.base_data_type.add_data_type(idx, "Parameter") - #tcpvar = await myobj.add_variable(idx, "TCP VAR" , [0,0,0] , datatype = vartype.nodeid) + #tcpvar = await .add_variable(idx, "TCP VAR" , [0,0,0] , datatype = vartype.nodeid) #variable mit entsprechenden properties #measurements evtl varianttype vom variabletype und datatype measurement @@ -131,41 +132,66 @@ async def main(): await openvar.set_modelling_rule(True) grip_desc = await openvar.add_property(idx, "Description", "Flag to specify if something is open.") await grip_desc.set_modelling_rule(True) + + robot = await server.nodes.objects.add_object(idx, "Robot", myobjtype) - myobj = await server.nodes.objects.add_object(idx, "Robot", myobjtype) + mobilerobot = await server.nodes.objects.add_object(idx, "MobileRobot", myobjtype) #getting node ids of battery and position robotposname = "2:" + positionobject.name - positionrobot = await myobj.get_child([robotposname]) + positionrobot = await mobilerobot.get_child([robotposname]) batteryvarname = "2:" + batteryobject.name - batterymeas = await myobj.get_child([batteryvarname]) + batterymeas = await mobilerobot.get_child([batteryvarname]) + + tcpvarname = "2:" + tcpobject.name + tcpvarmeas = await mobilerobot.get_child([tcpvarname]) #adding function goTo to robot - goTofunc = await myobj.add_method(idx, "goToset", goTo, [vartype, positionrobot]) + goTofunc = await mobilerobot.add_method(idx, "goToset", goTo, [vartype, positionrobot]) #batterylow warning event batterywarning = await server.create_custom_event_type(idx, "BatteryLowWarning", ua.ObjectIds.SystemEventType) - batterywarninggen = await server.get_event_generator(batterywarning, myobj) + batterywarninggen = await server.get_event_generator(batterywarning, ) #batterylow error event batteryerror = await server.create_custom_event_type(idx, "BatteryLowError", ua.ObjectIds.SystemEventType) - batteryerrorgen = await server.get_event_generator(batteryerror, myobj) + batteryerrorgen = await server.get_event_generator(batteryerror, mobilerobot) + batterywarninggen.event.Severity = 800 + batteryerrorgen.event.Severity = 1000 + + #streamevents + tcpstream = await server.create_custom_event_type(idx, "Streaming", ua.ObjectIds.BaseEventType, [("tcpstream", ua.VariantType.Float)]) + tcpstreamgenrob = await server.get_event_generator(tcpstream, robot) + tcpstreamgenrob.tcpstream = await tcpvarmeas.get_value() + tcpstreamgenmobrob = await server.get_event_generator(tcpstream, mobilerobot) + tcpstreamgenmobrob.tcpstream = await tcpvarmeas.get_value() - #server async with server: print("Server läuft!") + time = 0 + while True: - #checking triggering both events + tcppos = await tcpvarmeas.get_value() + if time % 10 == 0: + await tcpstreamgenrob.trigger(message = "Robot updatet value [" + str(tcppos[0]) + "," + str(tcppos[1]) + "," + str(tcppos[2]) + "]") + await tcpstreamgenmobrob.trigger( + message="MobileRobot updatet value [" + str(tcppos[0]) + "," + str(tcppos[1]) + "," + str(tcppos[2]) + "]") + batteryload = await batterymeas.get_value() - batterywarninggen.event.Severity = 800 - batteryerrorgen.event.Severity = 1000 + #await batterymeas.set_value(19) if 20 > batteryload >= 10: - await batterywarning.trigger("Battery level is below 20%. Load shortly.") + await batterywarninggen.trigger(message = "Battery level is below 20%. Load shortly.") if batteryload < 10: - await batteryerror.trigger("Battery level is below 10%. Please load the battery immediately.") + await batteryerrorgen.trigger(message = "Battery level is below 10%. Please load the battery immediately.") await asyncio.sleep(1) + time += 1 + batterysave = batteryload - 1 + await batterymeas.set_value(batterysave) + tcppossave = tcppos[0] + 1 + await tcpvarmeas.set_value([tcppossave, 0.0, 0.0]) + if __name__ == '__main__': asyncio.run(main()) \ No newline at end of file