From d2f6ab166614be87baa019e81fdf1e52e1afbfa2 Mon Sep 17 00:00:00 2001 From: Susa Giogoli <su.giogoli@icloud.com> Date: Wed, 28 Jun 2023 20:02:15 +0200 Subject: [PATCH] Objekte werden instanziiert lasertracker.json funktioniert noh nicht --- newmodeljsonparse.py | 171 ++++++++++++++++++++++++++++++++----------- writefile.py | 54 +++++++------- 2 files changed, 155 insertions(+), 70 deletions(-) diff --git a/newmodeljsonparse.py b/newmodeljsonparse.py index f7aaeaf..d0b5acc 100644 --- a/newmodeljsonparse.py +++ b/newmodeljsonparse.py @@ -154,12 +154,13 @@ def searchlists(list1, list2): def getdefaultvalue(dimension, datatype): if datatype == "float" or datatype == "double" or datatype == "int": - if dimension == 1: - return 0 - value = [] - for i in range(dimension): - value.append(0) - return value + if dimension > 1: + value = [] + for i in range(dimension): + value.append(0) + return value + else: + return 0 else: return True @@ -178,9 +179,16 @@ def iteratingInterface(obj, dict, componentslist): def getInterfaceparam(list1, interface, searched, jsoncomponents, searchinglist): #list1.append(searchlists(interface[searched], searchinglist)) + # if interface["name"] == "Gripper": + # print("I am searching Gripper in: ") + # print(searchinglist) + # print([interface[searched]]) for inputsearch in interface[searched]: for searchobj in searchinglist: + # print(inputsearch["value"] + " " + searchobj["uuid"]) if inputsearch["value"] == searchobj["uuid"]: + # print("found matching pair") + # print(inputsearch["value"] + " " + searchobj["uuid"]) list1.append(searchobj) if iskeythere(list(interface.keys()), "baseComponent"): for component in jsoncomponents: @@ -189,9 +197,76 @@ def getInterfaceparam(list1, interface, searched, jsoncomponents, searchinglist) else: return list1 +def buildComponents(interfacesreturn, jsoninterfaces, jsoncomponents, jsonmeasurements, jsonparameters): + for obj in jsoninterfaces: + rootobj = {} + if obj["elementType"] == "interface": + for search in jsoncomponents: + if obj["rootComponent"] == search["uuid"]: + rootobj = search + else: + rootobj = obj + objcomponentslist = getInterfaceparam([], rootobj, "components", jsoncomponents, jsoncomponents) + if obj["name"] not in interfacesreturn.keys(): + interfacesreturn[str(obj["name"])] = wf.openobject(obj["name"], rootobj["description"]) + #print(obj["name"]) + #del obj["cardOpen"] + #del obj["uuid"] + #rootObjname = obj["rootComponent"] + + # if iskeythere(list(obj.keys()), "baseComponent"): + # basecomponent = obj["baseComponent"] + # for search in jsoncomponents: + # #print(search["uuid"]) + # if basecomponent == search["uuid"]: + # wf.writebasecomponent(componenttypesdict[str(obj["name"])], componenttypesdict[str(search["name"])], search["name"]) + #wf.writecomponents(interfacestypesdict[str(obj["name"])], objcomponentslist, interfacestypesdict) + objmeasurementlist = getInterfaceparam([], rootobj, "measurements", jsoncomponents, jsonmeasurements) + measurementsobjs = getMeasurements(objmeasurementlist) + #print(objmeasurementlist) + # print(interfacesreturn) + wf.writemeasurement(measurementsobjs, interfacesreturn[str(obj["name"])]) + # print("I am searching Parameters") + objparameterlist = getInterfaceparam([], rootobj, "parameters", jsoncomponents, jsonparameters) + parameterobjs = getParameters(objparameterlist) + # print(objparameterlist) + wf.writeparameter(parameterobjs, interfacesreturn[str(obj["name"])]) + if len(objcomponentslist) <= 0: + return interfacesreturn + else: + for component in objcomponentslist: + return buildComponents(interfacesreturn, objcomponentslist, jsoncomponents, jsonmeasurements, jsonparameters) + else: + if len(objcomponentslist) > 0: + return buildComponents(interfacesreturn, objcomponentslist, jsoncomponents, jsonmeasurements, jsonparameters) + else: + +def instantiate(typesdict, interfaces, jsoncomponents): + count = 0 + countcomponent = 0 + instantiatedict = {} + for interface in interfaces: + root = {} + for component in jsoncomponents: + if interface["rootComponent"] == component["uuid"]: + root = component + + components = getInterfaceparam([], root, "components", jsoncomponents, jsoncomponents) + if interface["name"] in list(instantiatedict.keys()): + count += 1 + dictname = str(interface["name"]) + str(count) + instantiatedict[str(dictname)] = wf.writeinterface(typesdict[str(interface["name"])], interface["name"], count) + for component in components: + if component["name"] in list(instantiatedict.keys()): + countcomponent += 1 + dictnamecomponent = str(component["name"]) + str(count) + instantiatedict[dictnamecomponent] = wf.writeobjects(typesdict[str(component["name"])], component["name"], instantiatedict[dictname], countcomponent) + + return instantiatedict + def main(): try: JSON_MODEL = sys.argv[1][:-5] @@ -225,48 +300,56 @@ def main(): jsoncomponents.append(obj) elif obj["elementType"] == "interface": jsoninterfaces.append(obj) - interfacestypesdict = {} - for obj in jsoninterfaces: - #print(obj["name"]) - #del obj["cardOpen"] - #del obj["uuid"] - rootobj = {} - for search in jsoncomponents: - if obj["rootComponent"] == search["uuid"]: - rootobj = search - objname = wf.openobject(obj["name"], rootobj["description"]) - interfacestypesdict[str(obj["name"])] = objname - #rootObjname = obj["rootComponent"] - # if iskeythere(list(obj.keys()), "baseComponent"): - # basecomponent = obj["baseComponent"] - # for search in jsoncomponents: - # #print(search["uuid"]) - # if basecomponent == search["uuid"]: - # wf.writebasecomponent(componenttypesdict[str(obj["name"])], componenttypesdict[str(search["name"])], search["name"]) - objcomponentslist = getInterfaceparam([], rootobj, "components", jsoncomponents, jsoncomponents) - wf.writecomponents(interfacestypesdict[str(obj["name"])], objcomponentslist, interfacestypesdict) - objmeasurementlist = getInterfaceparam([], rootobj, "measurements", jsoncomponents, jsonmeasurements) - measurementsobjs = getMeasurements(objmeasurementlist) - #print(objmeasurementlist) - wf.writemeasurement(measurementsobjs, interfacestypesdict[str(obj["name"])]) - objparameterlist = getInterfaceparam([], rootobj, "parameters", jsoncomponents, jsonparameters) - parameterobjs = getParameters(objparameterlist) - wf.writemeasurement(parameterobjs, interfacestypesdict[str(obj["name"])]) + + # interfacestypesdict = {} + # for obj in jsoninterfaces: + # #print(obj["name"]) + # #del obj["cardOpen"] + # #del obj["uuid"] + # rootobj = {} + # for search in jsoncomponents: + # if obj["rootComponent"] == search["uuid"]: + # rootobj = search + # objname = wf.openobject(obj["name"], rootobj["description"]) + # interfacestypesdict[str(obj["name"])] = objname + # #rootObjname = obj["rootComponent"] + # + # # if iskeythere(list(obj.keys()), "baseComponent"): + # # basecomponent = obj["baseComponent"] + # # for search in jsoncomponents: + # # #print(search["uuid"]) + # # if basecomponent == search["uuid"]: + # # wf.writebasecomponent(componenttypesdict[str(obj["name"])], componenttypesdict[str(search["name"])], search["name"]) + # objcomponentslist = getInterfaceparam([], rootobj, "components", jsoncomponents, jsoncomponents) + # wf.writecomponents(interfacestypesdict[str(obj["name"])], objcomponentslist, interfacestypesdict) + # objmeasurementlist = getInterfaceparam([], rootobj, "measurements", jsoncomponents, jsonmeasurements) + # measurementsobjs = getMeasurements(objmeasurementlist) + # #print(objmeasurementlist) + # wf.writemeasurement(measurementsobjs, interfacestypesdict[str(obj["name"])]) + # objparameterlist = getInterfaceparam([], rootobj, "parameters", jsoncomponents, jsonparameters) + # parameterobjs = getParameters(objparameterlist) + # wf.writemeasurement(parameterobjs, interfacestypesdict[str(obj["name"])]) + + typesdict = buildComponents({}, jsoninterfaces, jsoncomponents, jsonmeasurements, jsonparameters) + print(typesdict) + intantiateddict = instantiate(typesdict, jsoninterfaces, jsoncomponents) wf.writend() - print("Measurements: ") - print(objmeasurementlist) - print("\n") - print("Components: ") - print(objcomponentslist) - print("\n") - print("Parameters: ") - print(objparameterlist) - print("\n") - print("Functions: ") - print(jsonfunctions) + + + # print("Measurements: ") + # print(objmeasurementlist) + # print("\n") + # print("Components: ") + # print(objcomponentslist) + # print("\n") + # print("Parameters: ") + # print(objparameterlist) + # print("\n") + # print("Functions: ") + # print(jsonfunctions) diff --git a/writefile.py b/writefile.py index 9765d2b..e6c9ee3 100644 --- a/writefile.py +++ b/writefile.py @@ -98,17 +98,17 @@ def writemeasurement(measurementobj, headnode): server.write(writeindent + varname + " = " + "await " + headnode + ".add_variable(idx, \"" + str( i.name) + "\", " + str(i.value) + ", " + varianttype + ", " + datatype + ")\n") server.write(writeindent + "await " + varname + "." + "set_modelling_rule(True)\n") - # if i.range is not None and i.range is not "(None, None)": - # rangename = "rangeprop" - # server.write( - # writeindent + rangename + " = await " + headnode + ".add_property(idx, \"range\", ua.Range(" + str( - # i.range[0]) + "," + str(i.range[1]) + "))\n") - # server.write(writeindent + "await " + rangename + ".set_modelling_rule(True)\n") - # if i.unit != "UNITLESS": - # unitname = "unitprop" - # server.write( - # writeindent + unitname + " = await " + headnode + ".add_property(idx, \"unit\"," + "\"" + i.unit + "\")\n") - # server.write(writeindent + "await " + unitname + ".set_modelling_rule(True)\n") + if i.range is not None or i.range != "(None, None)": + rangename = "rangeprop" + server.write( + writeindent + rangename + " = await " + varname + ".add_property(idx, \"range\", ua.Range(" + str( + i.range[0]) + "," + str(i.range[1]) + "))\n") + server.write(writeindent + "await " + rangename + ".set_modelling_rule(True)\n") + if i.unit != "UNITLESS": + unitname = "unitprop" + server.write( + writeindent + unitname + " = await " + varname + ".add_property(idx, \"unit\"," + "\"" + i.unit + "\")\n") + server.write(writeindent + "await " + unitname + ".set_modelling_rule(True)\n") server.write( writeindent + varname + "description = await " + varname + ".add_property(idx, \"Description\", " + "\"" + i.description + "\")" + "\n") @@ -129,17 +129,17 @@ def writeparameter(parameterobj, headnode): server.write(writeindent + varname + " = " + "await " + headnode + ".add_variable(idx, \"" + str( i.name) + "\", " + str(i.value) + ", " + varianttype + ", " + datatype + ")\n") server.write(writeindent + "await " + varname + "." + "set_modelling_rule(True)\n") - if i.range is not None or i.range != (None, None): - rangename = "rangeprop" - server.write( - writeindent + rangename + " = await " + headnode + ".add_property(idx, \"range\", ua.Range(" + str( - i.range[0]) + "," + str(i.range[1]) + "))\n") - server.write(writeindent + "await " + rangename + ".set_modelling_rule(True)\n") - if i.unit != "UNITLESS": - unitname = "unitprop" - server.write( - writeindent + unitname + " = await " + headnode + ".add_property(idx, \"unit\"," + "\"" + i.unit + "\")\n") - server.write(writeindent + "await " + unitname + ".set_modelling_rule(True)\n") + # if i.range is not None or i.range != (None, None): + # rangename = "rangeprop" + # server.write( + # writeindent + rangename + " = await " + headnode + ".add_property(idx, \"range\", ua.Range(" + str( + # i.range[0]) + "," + str(i.range[1]) + "))\n") + # server.write(writeindent + "await " + rangename + ".set_modelling_rule(True)\n") + # if i.unit != "UNITLESS": + # unitname = "unitprop" + # server.write( + # writeindent + unitname + " = await " + headnode + ".add_property(idx, \"unit\"," + "\"" + i.unit + "\")\n") + # server.write(writeindent + "await " + unitname + ".set_modelling_rule(True)\n") server.write( writeindent + varname + "description = await " + varname + ".add_property(idx, \"Description\", " + "\"" + i.description + "\")" + "\n") @@ -163,18 +163,20 @@ def writefunction(functionobj, headnode): inargslist.append(getVariantType(j)) server.write(writeindent + "await mobilerobot.add_method(idx, \"" + i.name +"\", " + functionname + ", " + str(inargslist) + ", "+ str(outargslist) + ")\n\n") -def writeobjects(objtype, objname, headnode): +def writeobjects(objtype, objname, headnode, count): server = open("opcua-server.py", "a") writeindent = " " - #objtypename = (objname.lower()).replace(" ", "") + "var" + objtypename = (objname.lower()).replace(" ", "") + "var" + str(count) server.write( writeindent + objtypename + "= await " + headnode + ".add_object(idx, \"" + objname + "\", " + objtype + ".nodeid)\n") + return objtypename -def writeinterface(objtype, objname): +def writeinterface(objtype, objname, count): server = open("opcua-server.py", "a") writeindent = " " - #objtypename = (objname.lower()).replace(" ","") + "var" + objtypename = (objname.lower()).replace(" ","") + "var" + str(count) server.write(writeindent + objtypename + "= await server.nodes.objects.add_object(idx, \"" + objname + "\", " + objtype + ".nodeid)\n") + return objtypename def writend(): server = open("opcua-server.py", "a") -- GitLab