From a77cda98be860d20639b04237fa249cdaf417eff Mon Sep 17 00:00:00 2001 From: Susa Giogoli <su.giogoli@icloud.com> Date: Wed, 5 Jul 2023 15:55:28 +0200 Subject: [PATCH] parameter have ranges and units too + string and Datetime as new varianttypes --- newmodeljsonparse.py | 62 ++++++++++++++++++++++++++++++-------------- writefile.py | 33 ++++++++++++----------- 2 files changed, 60 insertions(+), 35 deletions(-) diff --git a/newmodeljsonparse.py b/newmodeljsonparse.py index 41559d4..8f58cb9 100644 --- a/newmodeljsonparse.py +++ b/newmodeljsonparse.py @@ -76,6 +76,7 @@ def dimensionchange(string): value = 0 newdimension = {"dimension": value} string.update(newdimension) + return string def getdatatypes(argarray): @@ -88,14 +89,18 @@ def getdatatypes(argarray): return None -def changerange(string): - if iskeythere(string, "range"): - rangeval = string["range"] - rangetuple = (rangeval[0], rangeval[1]) - string.update({"range": rangetuple}) +def changerange(obj): + if iskeythere(obj, "range"): + if obj["datatype"] == "enum": + obj.update({"range": [None, None]}) else: - string.update({"range": (None, None)}) - # print(string) + obj["range"] = [None, None] + return obj + +def getunit(string): + if not iskeythere(string, "unit"): + string["unit"] = "UNITLESS" + return string def getobjnames(argarray): @@ -110,16 +115,20 @@ def getobjnames(argarray): def getParameters(parametersDict): - # extracts the measurements of a Json-Model + # extracts the measurements of a Json-Mode parameterobj = [] if len(parametersDict) > 0: for i in parametersDict: obj = i - dimensionchange(obj) - obj["value"]=getdefaultvalue(obj["dimension"], obj["datatype"]) - obj = json.dumps(i) + obj = dimensionchange(obj) + obj["value"] = getdefaultvalue(obj) + obj = changerange(obj) + obj = getunit(obj) + obj = json.dumps(obj) parameterobji = json.loads(obj, object_hook=parameterJsonDecod) parameterobj.append(parameterobji) + print("parameterobj") + print(parameterobj) return parameterobj @@ -128,12 +137,12 @@ def getMeasurements(measurementsDict): if len(measurementsDict) > 0: for i in measurementsDict: obj = i - dimensionchange(obj) - obj["value"] = getdefaultvalue(obj["dimension"], obj["datatype"]) - changerange(obj) + obj = dimensionchange(obj) + obj["value"] = getdefaultvalue(obj) + obj = changerange(obj) if not iskeythere(obj, "unit"): obj["unit"] = "UNITLESS" - obj = json.dumps(i) + obj = json.dumps(obj) measurementobji = json.loads(obj, object_hook=measurementJsonDecod) measurementobj.append(measurementobji) return measurementobj @@ -164,7 +173,7 @@ def getFunctions(functionsDict, jsonmeasurements, jsonparameters): def searchlists(list1, list2): - print("I am searching") + #print("I am searching") objmeasurementlist = [] if len(list1) <= 0: return [] @@ -174,8 +183,13 @@ def searchlists(list1, list2): objmeasurementlist.append(searchobj) return objmeasurementlist - -def getdefaultvalue(dimension, datatype): +def getdefaultvalue(obj): + if iskeythere(obj, "default"): + if obj["datatype"] == "string" or obj["datatype"] == "enum": + return "\"" + obj["default"] + "\"" + return obj["default"] + datatype = obj["datatype"] + dimension = obj["dimension"] if datatype == "float" or datatype == "double" or datatype == "int": if dimension > 1: value = [] @@ -184,8 +198,12 @@ def getdefaultvalue(dimension, datatype): return value else: return 0 - else: + elif datatype == "boolean": return True + elif datatype == "time": + return "ua.DateTime.now()" + else: + return "\"\"" def iskeythere(list, key): @@ -230,7 +248,7 @@ def buildComponents(interfacesreturn, jsoninterfaces, jsoncomponents, jsonmeasur if obj["name"] not in interfacesreturn.keys(): interfacesreturn[str(obj["name"])] = wf.openobject(obj["name"], rootobj["description"]) objmeasurementlist = getInterfaceparam([], rootobj, "measurements", jsoncomponents, jsonmeasurements) - print(objmeasurementlist) + #print(objmeasurementlist) measurementsobjs = getMeasurements(objmeasurementlist) wf.writemeasurement(measurementsobjs, interfacesreturn[str(obj["name"])]) objparameterlist = getInterfaceparam([], rootobj, "parameters", jsoncomponents, jsonparameters) @@ -267,6 +285,7 @@ def instantiate(typesdict, interfaces, jsoncomponents): if interface["rootComponent"] == component["uuid"]: root = component components = getInterfaceparam([], root, "components", jsoncomponents, jsoncomponents) + #events = getInterfaceparam([], root, "events", jsoncomponents, jsonevents) instantiatedict[str(interface["name"])] = wf.writeinterface(typesdict[str(interface["name"])], interface["name"], count) instantiateComponents(typesdict, components, jsoncomponents, interface, instantiatedict) @@ -292,6 +311,7 @@ def main(): jsonfunctions = [] jsoncomponents = [] jsoninterfaces = [] + jsonenums = [] for obj in elements: #print(obj) if obj["elementType"] == "measurement": @@ -304,6 +324,8 @@ def main(): jsoncomponents.append(obj) elif obj["elementType"] == "interface": jsoninterfaces.append(obj) + elif obj["elementType"] == "enum": + jsonenums.append(obj) typesdict = buildComponents({}, jsoninterfaces, jsoncomponents, jsonmeasurements, jsonparameters, jsonfunctions, []) intantiateddict = instantiate(typesdict, jsoninterfaces, jsoncomponents) diff --git a/writefile.py b/writefile.py index f0f87a7..164c601 100644 --- a/writefile.py +++ b/writefile.py @@ -29,6 +29,12 @@ def getVariantType(datatype): varianttype = "ua.VariantType.Double" elif datatype == "Boolean": varianttype = "ua.VariantType.Boolean" + elif datatype == "time": + varianttype = "ua.VariantType.DateTime" + elif datatype == "string": + varianttype = "ua.VariantType.String" + elif datatype == "enum": + varianttype = "ua.VariantType.String" return varianttype @@ -112,11 +118,9 @@ 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 or i.range != "(None, None)": + if i.range is not None and 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 + 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" @@ -144,17 +148,16 @@ 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 and 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") -- GitLab