Skip to content
Snippets Groups Projects
Commit 3df95ab4 authored by Susanna Weber's avatar Susanna Weber
Browse files

Events added & cleaner version of the main method

parent 82fff578
Branches
No related tags found
No related merge requests found
......@@ -9,6 +9,54 @@ from asyncua.common import node
logging.basicConfig(level=logging.INFO)
_logger = logging.getLogger('asyncua')
class Measurement:
def __init__(self, name, description, datatype, dimension, rangevar=None, unit=None):
self.name = name
self.description = description
self.datatype = datatype
self.range = rangevar
self.dimension = dimension
self.unit = unit
array = []
# calculate a start value
if self.dimension != 0:
for i in range(self.dimension):
array.append(self.datatype((self.range[0] + self.range[1]) / 2))
self.value = array
else:
self.value = self.datatype(((self.range[0] + self.range[1]) / 2))
# const parameter modeling missing
class Parameter:
def __init__(self, name, description, datatype, dimension, rangevar=None, unit=None, default=None, constant=False):
self.name = name
self.description = description
self.datatype = datatype
self.range = rangevar
self.dimension = dimension
self.unit = unit
self.default = default
self.constant = constant
array = []
# calculate a start value
if self.default == False:
if self.dimension != 0:
for i in range(self.dimension):
array.append(self.datatype((self.range[0] + self.range[1]) / 2))
self.value = array
else:
self.value = self.datatype(((self.range[0] + self.range[1]) / 2))
else:
self.value = self.datatype(default)
#goTo method
@uamethod
def goTo (parent, position, node):
node.set_value(position)
async def main():
# setup our server
server = Server()
......@@ -21,44 +69,6 @@ async def main():
#id des rangedatentyps
rangeid = await server.nodes.base_data_type.get_child(["0:Structure" , "0:Range"])
class Measurement:
def __init__(self, name, description, datatype, dimension, rangevar = None, unit= None):
self.name = name
self.description = description
self.datatype = datatype
self.range = rangevar
self.dimension = dimension
self.unit = unit
array = []
#calculate a start value
if self.dimension != 0:
for i in range(self.dimension):
array.append(self.datatype((self.range[0] + self.range[1]) / 2))
self.value = array
else: self.value = self.datatype(((self.range[0] + self.range[1]) / 2))
#const parameter modeling missing
class Parameter:
def __init__(self, name, description, datatype, dimension, rangevar = None, unit= None, default= None, constant = False):
self.name = name
self.description = description
self.datatype = datatype
self.range = rangevar
self.dimension = dimension
self.unit = unit
self.default = default
self.constant = constant
array = []
#calculate a start value
if self.default == False:
if self.dimension != 0:
for i in range(self.dimension):
array.append(self.datatype((self.range[0] + self.range[1]) / 2))
self.value = array
else: self.value = self.datatype(((self.range[0] + self.range[1]) / 2))
else: self.value = self.datatype(default)
#measurementobjekte für dynamischer
tcpobject = Measurement("Tool Center Point", "Tool center point of a six-arm robot.", float, 3 , (-0.5, 0.5), "metre")
positionobject = Measurement("Position", "Position in Cartesian coordinates given in metre.", float, 3, (-50, 50) , "metre")
......@@ -69,6 +79,7 @@ async def main():
openobject = Parameter("Open", "Flag to specify if something is open.", bool, 0, default = True)
automoveobject = Parameter("Autonomous Movement", "If true, the robot moves around freely autonomously.", bool, 0, default = True)
paraobjectlist = [openobject, automoveobject]
#hauptobjekt
myobj = await server.nodes.objects.add_object(idx, "Robot")
......@@ -78,7 +89,6 @@ async def main():
#tcpvar = await myobj.add_variable(idx, "TCP VAR" , [0,0,0] , datatype = vartype.nodeid)
#variable mit entsprechenden properties
#measurements evtl varianttype vom variabletype und datatype measurement
for a in measureobjectlist:
......@@ -110,24 +120,23 @@ async def main():
openvar = await gripper.add_variable(idx, "Open", True, datatype = paratype.nodeid)
await openvar.add_property(idx, "Description", "Flag to specify if something is open.")
#functions
#Warten auf umsetzen
#getting node ids of battery and position
robotposname = "2:" + positionobject.name
positionrobot = await myobj.get_child([robotposname])
@uamethod
def goTo(parent, position):
while positionrobot.get_value() != position:
print("Waiting for position")
goTofunc = await myobj.add_method(idx, "goTo", goTo, [vartype])
batteryvarname = "2:" + batteryobject.name
batterymeas = await myobj.get_child([batteryvarname])
#einfach umsetzen
@uamethod
def goTosetvalue (parent, position):
positionrobot.set_value(position)
#adding function goTo to robot
goTofunc = await myobj.add_method(idx, "goToset", goTo, [vartype, positionrobot])
goTosetvaluefunc = await myobj.add_method(idx, "goToset", goTosetvalue, [vartype])
#batterylow warning event
batterywarning = await server.create_custom_event_type(idx, "BatteryLowWarning", ua.ObjectIds.SystemEventType)
batterywarninggen = await server.get_event_generator(batterywarning, myobj)
#batterylow error event
batteryerror = await server.create_custom_event_type(idx, "BatteryLowWarning", ua.ObjectIds.SystemEventType)
batteryerrorgen = await server.get_event_generator(batteryerror, myobj)
......@@ -136,6 +145,14 @@ async def main():
async with server:
print("Server läuft!")
while True:
#checking triggering both events
batteryload = await batterymeas.get_value()
batterywarninggen.event.Severity = 800
batteryerrorgen.event.Severity = 1000
if 20 > batteryload >= 10:
await batterywarning.trigger("Battery level is below 20%. Load shortly.")
if batteryload < 10:
await batterywarning.trigger("Battery level is below 10%. Please load the battery immediately.")
await asyncio.sleep(1)
if __name__ == '__main__':
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment