diff --git a/robot.py b/robot.py index 24c6863ea2c6f165d18bf7dd1eea3a12fdb10c06..5e774c7b2d2a0c0897d39c8ca1cef89fe859d3fc 100644 --- a/robot.py +++ b/robot.py @@ -74,7 +74,7 @@ async def main(): uri = 'http://examples.freeopcua.github.io' idx = await server.register_namespace(uri) #id des rangedatentyps - rangeid = await server.nodes.base_data_type.get_child(["0:Structure" , "0:Range"]) + rangeid = await server.nodes.base_data_type.get_child(["0:Structure", "0:Range"]) #measurementobjekte für dynamischer # tcpobject = Measurement("Tool Center Point", "Tool center point of a six-arm robot.", float, 3 , (-0.5, 0.5), "metre") @@ -82,12 +82,9 @@ async def main(): # batteryobject = Measurement("Battery level", "Battery level", int , 0 ,(0, 100), "percent") # measureobjectlist = [tcpobject , positionobject, batteryobject] - tcpobject = getobj( - "Tool Center Point") # Measurement("Tool Center Point", "Tool center point of a six-arm robot.", float, 3 , (-0.5, 0.5), "metre") - positionobject = getobj( - "Position") # Measurement("Position", "Position in Cartesian coordinates given in metre.", float, 3, (-50, 50) , "metre") - batteryobject = getobj( - "Battery level") # Measurement("Battery level", "Battery level", int , 0 ,(0, 100), "percent") + tcpobject = getobj("Tool Center Point") + positionobject = getobj("Position") + batteryobject = getobj("Battery level") measureobjectlist = jsonparse.measurementobj #parameterobjekte @@ -107,8 +104,13 @@ async def main(): #measurements evtl varianttype vom variabletype und datatype measurement for a in measureobjectlist: + varianttype = ua.VariantType.Int64 + if a.datatype == "float" or a.datatype == "double": + varianttype = ua.VariantType.Double + elif a.datatype == "boolean": + varianttype = ua.VariantType.Boolean name = a.name + "var" - name = await myobjtype.add_variable(idx, a.name , a.value , datatype = vartype.nodeid) + name = await myobjtype.add_variable(idx, a.name, a.value, varianttype=varianttype, datatype=vartype.nodeid) await name.set_modelling_rule(True) #namelist = namelist + name if a.range is not None: @@ -124,7 +126,7 @@ async def main(): #parameters for a in paraobjectlist: - para = await myobjtype.add_variable(idx, a.name , a.value , datatype = paratype.nodeid) + para = await myobjtype.add_variable(idx, a.name, a.value, datatype=paratype.nodeid) await para.set_modelling_rule(True) if a.range is not None: rangeprop = await para.add_property(idx, "range", ua.Range(a.range[0], a.range[1])) @@ -166,6 +168,9 @@ async def main(): tcpvarname = "2:" + tcpobject.name tcpvarmeas = await mobilerobot.get_child([tcpvarname]) + # tcpvarmeas.set_writable(True) + + # tcprobmeas = await robot.get_child([tcpvarname]) #adding function goTo to robot goTofunc = await mobilerobot.add_method(idx, "goToset", goTo, [ua.VariantType.Float], [ua.VariantType.Float]) @@ -181,11 +186,12 @@ async def main(): 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() + # 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) + tcpstreammob = await server.create_custom_event_type(idx, "StreamingMob", ua.ObjectIds.BaseEventType) + tcpstreamgenmobrob = await server.get_event_generator(tcpstreammob, mobilerobot) tcpstreamgenmobrob.tcpstream = await tcpvarmeas.get_value() #tryout für zugriff @@ -198,12 +204,11 @@ async def main(): while True: tcppos = await tcpvarmeas.get_value() + # tcpposrob = await tcprobmeas.get_value() if time % 10 == 0: - await tcpstreamgenmobrob.trigger( - message="MobileRobot updatet value [" + str(tcppos[0]) + "," + str(tcppos[1]) + "," + str(tcppos[2]) + "]") - await tcpstreamgenrob.trigger(message = "Robot updatet value [" + str(tcppos[0]) + "," + str(tcppos[1]) + "," + str(tcppos[2]) + "]") - - # await positionrobot.set_value([1.0, 0.0, 0.0]) + await tcpstreamgenmobrob.trigger(message="MobileRobot updatet value [" + str(tcppos[0]) + "," + str(tcppos[1]) + "," + str(tcppos[2]) + "]") + # await tcpstreamgenrob.trigger(message = "Robot updatet value [" + str(tcppos[0]) + "," + str(tcppos[1]) + "," + str(tcppos[2]) + "]") + # await positionrobot.set_value([1.0, 0.0, 0.0]) batteryload = await batterymeas.get_value() #await batterymeas.set_value(19) if 20 > batteryload >= 10: @@ -214,7 +219,7 @@ async def main(): time += 1 batterysave = batteryload - 1 await batterymeas.set_value(batterysave) - tcppossave = tcppos[0] + 1 + tcppossave = tcppos[0] + 1.0 await tcpvarmeas.set_value([tcppossave, 0.0, 0.0])