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

Enums can be generated now althought only with strings as varianttypes

parent 1681b21d
Branches
No related tags found
No related merge requests found
......@@ -22,11 +22,12 @@ def functionJsonDecod(functiondict):
#Measurement class that can be instantiated using JsonDecod functions
class Measurement:
def __init__(self, name, description, datatype, value, dimension, unit=None, range=None):
def __init__(self, name, description, datatype, value, uuid, dimension, unit=None, range=None):
self.name = name
self.description = description
self.datatype = datatype
self.range = range
self.uuid = uuid
self.dimension = dimension
self.unit = unit
array = []
......@@ -38,7 +39,7 @@ class Measurement:
#Parameter class that can be instantiated using JsonDecod functions
class Parameter:
def __init__(self, name, description, datatype, dimension, value, rangevar=None, unit=None, default=None, constant=False):
def __init__(self, name, description, datatype, dimension, value, uuid, rangevar=None, unit=None, default=None, constant=False):
self.name = name
self.description = description
self.datatype = datatype
......@@ -46,6 +47,7 @@ class Parameter:
# self.range = None
# else:
self.range = rangevar
self.uuid = uuid
self.dimension = dimension
self.unit = unit
self.default = default
......@@ -275,7 +277,7 @@ def getStreams(list1, component, jsoncomponents):
return list1
def buildComponents(interfacesreturn, variabledict, jsoninterfaces, jsoncomponents, jsonmeasurements, jsonparameters, jsonfunctions, objcomponentsclone):
def buildComponents(interfacesreturn, variabledict, jsoninterfaces, jsoncomponents, jsonmeasurements, jsonparameters, jsonfunctions, objcomponentsclone, enumnodedict, enumvalues, enumnames):
for obj in jsoninterfaces:
rootobj = {}
if obj["elementType"] == "interface":
......@@ -292,16 +294,16 @@ def buildComponents(interfacesreturn, variabledict, jsoninterfaces, jsoncomponen
objmeasurementlist = getInterfaceparam([], rootobj, "measurements", jsoncomponents, jsonmeasurements)
#print(objmeasurementlist)
measurementsobjs = getMeasurements(objmeasurementlist)
wf.writemeasurement(measurementsobjs, interfacesreturn[str(obj["name"])])
wf.writemeasurement(measurementsobjs, interfacesreturn[str(obj["name"])], enumnodedict, enumvalues, enumnames)
variablelist = getVariables([], rootobj, jsoncomponents)
variabledict[obj["uuid"]] = variablelist
objparameterlist = getInterfaceparam([], rootobj, "parameters", jsoncomponents, jsonparameters)
parameterobjs = getParameters(objparameterlist)
wf.writeparameter(parameterobjs, interfacesreturn[str(obj["name"])])
wf.writeparameter(parameterobjs, interfacesreturn[str(obj["name"])], enumnodedict, enumvalues, enumnames)
objfunctionlist = getInterfaceparam([], rootobj, "functions", jsoncomponents, jsonfunctions)
functionobj = getFunctions(objfunctionlist, jsonparameters, jsonmeasurements)
wf.writefunction(functionobj, interfacesreturn[str(obj["name"])])
buildComponents(interfacesreturn, variabledict, objcomponentslist, jsoncomponents, jsonmeasurements, jsonparameters, jsonfunctions, objcomponentsclone)
buildComponents(interfacesreturn, variabledict, objcomponentslist, jsoncomponents, jsonmeasurements, jsonparameters, jsonfunctions, objcomponentsclone, enumnodedict, enumvalues, enumnames)
return interfacesreturn, variabledict
......@@ -377,26 +379,19 @@ def main():
jsoncomponents.append(obj)
elif obj["elementType"] == "interface":
jsoninterfaces.append(obj)
elif obj["elementType"] == "enum":
jsonenums.append(obj)
returnComponents = buildComponents({}, {}, jsoninterfaces, jsoncomponents, jsonmeasurements, jsonparameters, jsonfunctions, [])
returnvalenums = wf.writeenums(jsonenums)
enumnodedict = returnvalenums[0]
enumvalues = returnvalenums[1]
enumnames = returnvalenums[2]
returnComponents = buildComponents({}, {}, jsoninterfaces, jsoncomponents, jsonmeasurements, jsonparameters, jsonfunctions, [], enumnodedict, enumvalues, enumnames)
typesdict = returnComponents[0]
variabledict = returnComponents[1]
print("Variabledict: ")
print(variabledict)
returnval = instantiate(typesdict, jsoninterfaces, jsoncomponents)
instantiatedict = returnval[0]
eventsdict = returnval[1]
streamsdict = returnval[2]
print("Streamsdict:")
print(streamsdict)
print("Instantiatedict: ")
print(instantiatedict)
print("Eventsdict: ")
print(eventsdict)
print("Parametersdict: ")
print(jsonparameters)
generatordict = {}
streamgendict = {}
savestreamvaldict = {}
......
......@@ -81,6 +81,27 @@ _logger = logging.getLogger('asyncua')
measurementtype = await server.nodes.base_data_type.add_data_type(idx, "Measurement")
parametertype = await server.nodes.base_data_type.add_data_type(idx, "Parameter")
""")
def writeenums(enumslist):
server = open("opcua-server.py", "a")
writeindent = " "
returnvalues = {}
enumnodenames = {}
variantnames = {}
for enum in enumslist:
returnvallist = []
enumname = (enum["name"].lower()).replace(" ", "")
values = enum["values"]
for i in range(len(values)):
retval = str(i) + ":" + str(values[i])
returnvallist.append(retval)
server.write(writeindent + enumname + "= await new_enum(server, idx, \""+ str(enum["name"]) + "\", values=" + str(enum["values"]) + ")\n")
enumnodenames[enum["uuid"]] = enumname
returnvalues[enum["uuid"]] = returnvallist
variantnames[enum["uuid"]] = enum["name"]
return enumnodenames, returnvalues, variantnames
def openobject(objname, description):
server = open("opcua-server.py", "a")
writeindent = " "
......@@ -107,27 +128,47 @@ def writecomponents(headnode, componentslist, typesdict):
server.write(writeindent + "await " + objname + "." + "set_modelling_rule(True)\n")
def writemeasurement(measurementobj, headnode):
def writeenumobj(variable, headnode, enumnodedict, enumvaldict, enumvariantdict):
server = open("opcua-server.py", "a")
writeindent = " "
uuid = variable.uuid
varname = (variable.name.lower()).replace(" ","") + "var"
server.write(writeindent + varname + " = await " + headnode + ".add_variable(idx, \"" + variable.name + "\", " + variable.value + ", datatype=" + enumnodedict[variable.uuid] + ".nodeid)\n")
server.write(writeindent + "await " + varname + "." + "set_modelling_rule(True)\n")
i = 0
for value in enumvaldict[variable.uuid]:
valname = "value" + str(i)
server.write(writeindent + valname + " = await " + varname + ".add_property(idx, \"" + str(value) + "\", \"" + str(value) + "\")\n")
server.write(writeindent + "await " + valname + "." + "set_modelling_rule(True)\n")
i += 1
return varname
def writemeasurement(measurementobj, headnode, enumnodedict, enumvaldict, enumvariantdict):
server = open("opcua-server.py", "a")
writeindent = " "
measurementdict = {}
for i in measurementobj:
varianttype = getVariantType(i.datatype)
datatype = "measurementtype.nodeid"
varname = ((i.name).lower()).replace(" ", "") + "var"
measurementdict[i.name] = varname
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 != [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")
if i.datatype == "enum":
varname = writeenumobj(i, headnode, enumnodedict, enumvaldict, enumvariantdict)
measurementdict[i.name] = varname
else:
varianttype = getVariantType(i.datatype)
datatype = "measurementtype.nodeid"
varname = ((i.name).lower()).replace(" ", "") + "var"
measurementdict[i.name] = varname
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 != [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")
......@@ -137,32 +178,37 @@ def writemeasurement(measurementobj, headnode):
return measurementdict
def writeparameter(parameterobj, headnode):
def writeparameter(parameterobj, headnode, enumnodedict, enumvaldict, enumvariantdict):
writeindent = " "
server = open("opcua-server.py", "a")
parameterdict = {}
for i in parameterobj:
varianttype = getVariantType(i.datatype)
datatype = "parametertype.nodeid"
varname = ((i.name).lower()).replace(" ", "") + "var"
parameterdict[i.name] = varname
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 != [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")
if i.datatype == "enum":
varname = writeenumobj(i, headnode, enumnodedict, enumvaldict, enumvariantdict)
parameterdict[i.name] = varname
else:
varianttype = getVariantType(i.datatype)
datatype = "parametertype.nodeid"
varname = ((i.name).lower()).replace(" ", "") + "var"
parameterdict[i.name] = varname
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 != [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")
server.write(writeindent + "await " + varname+ "description.set_modelling_rule(True)\n\n")
server.write(writeindent + "await " + varname + "description.set_modelling_rule(True)\n\n")
return parameterdict
def writefunction(functionobj, headnode):
......@@ -243,9 +289,7 @@ def writestreams(streams, component, streamslist, variablelist, jsonmeasurements
if stream["streamType"] == "update":
value = 0
print(variablelist)
for variable in variablelist:
print(variable)
if variable["name"] == stream["measurement"]:
for measurement in jsonmeasurements:
if measurement["uuid"] == variable["value"]:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment