diff --git a/writefile.py b/writefile.py index ca438bf80fb25109f84dea868b02636272e0fd69..8c1f606158e3385ac6341b2a6d9d0b3a2603abab 100644 --- a/writefile.py +++ b/writefile.py @@ -186,6 +186,15 @@ def writeenumobj(variable, headnode, enumnodedict, enumvaldict, enumvariantdict) def writemeasurement(measurementobj, headnode, enumnodedict, enumvaldict, enumvariantdict): #ToDo: Schauen ob man returns rausnehmen kann + """ + Creates the measurement variables with their properties + :param measurementobj: a list of measurementobjects + :param headnode: the component to which the varianles belong + :param enumnodedict: Dict for the names of the enum nodes from writeenums (used for writeenumobj) + :param enumvaldict: Dict for the enumvalues from writenums (used for writeenumobj) + :param enumvariantdict: Dict for the name of the enums (used for writeenumobj) + :return: a dict for the measurement node names + """ server = open("opcua-server.py", "a") writeindent = " " measurementdict = {} @@ -220,6 +229,15 @@ def writemeasurement(measurementobj, headnode, enumnodedict, enumvaldict, enumva def writeparameter(parameterobj, headnode, enumnodedict, enumvaldict, enumvariantdict): + """ + Creates the parameter values. (Similar to writemeasurement) + :param parameterobj: A list of the objparameters + :param headnode: The component to which the variables belong + :param enumnodedict: Dict for the names of the enum nodes from writeenums (used for writeenumobj) + :param enumvaldict: Dict for the enumvalues from writenums (used for writeenumobj) + :param enumvariantdict: Dict for the name of the enums (used for writeenumobj) + :return: A dict with the node names of the parameters + """ writeindent = " " server = open("opcua-server.py", "a") parameterdict = {} @@ -253,6 +271,12 @@ def writeparameter(parameterobj, headnode, enumnodedict, enumvaldict, enumvarian def writefunction(functionobj, headnode): + """ + Takkes the function objects writes the function body by calling deffunction and adds it to the objecttypes + :param functionobj: List of functionobjects + :param headnode: component the functions belong to + :return: None + """ server = open("opcua-server.py", "a") writeindent = " " for i in functionobj: @@ -273,6 +297,16 @@ def writefunction(functionobj, headnode): def writeobjects(objtype, objname, headnode, count): + #ToDo: Implement count or cut it out + """ + Generates the objects of the components. + :param objtype: The node of the node with the objecttype + :param objname: The name of the object + :param headnode: The node the component belongs to. + :param count: (Currently not really implemented) but for counting the names up + if an object with the same name is instantiated twice. + :return: The name of the newly created objectnode + """ server = open("opcua-server.py", "a") writeindent = " " objtypename = (objname.lower()).replace(" ", "") + "var" + str(count) @@ -282,6 +316,14 @@ def writeobjects(objtype, objname, headnode, count): def writeinterface(objtype, objname, count): + """ + Generates the interface, meaning the highest object layer. (Works similar to writeobjects) + :param objtype: The name of the node with the objecttype + :param objname: The name of the object + :param count: (Currently not really implemented) but for counting the names up + if an object with the same name is instantiated twice. + :return: The name of the newly created objectnode + """ server = open("opcua-server.py", "a") writeindent = " " objtypename = (objname.lower()).replace(" ","") + "var" + str(count) @@ -290,11 +332,16 @@ def writeinterface(objtype, objname, count): def writeevents(events, component, eventlist): + """ + Generates the events and event generator for each event and adds the fitting severity. + :param events: List of eventdicts + :param component: The component the events belong to + :param eventlist: Empty dict (filled with the names of the eventgenerator nodes) + :return: The eventlist now filled in the format {event name(generated in the code) : eventgenerator node name} + """ server = open("opcua-server.py", "a") writeindent = " " - #eventelements = [] for event in events: - #eventelements.append(event["element"]) eventname = (event["element"].lower()).replace(" ", "") + component + str(event["severity"]) eventgenname = eventname + "generator" eventlist[eventname] = eventgenname @@ -309,7 +356,6 @@ def writeevents(events, component, eventlist): severity = 800 elif event["severity"] == "critical": severity = 1000 - #print(eventname) server.write(writeindent + eventname + " = await server.create_custom_event_type(idx, \"" + str(event["element"]) + " " + str(event["severity"]) + "\", ua.ObjectIds.SystemEventType)\n") server.write(writeindent + str(eventlist[eventname]) + " = await server.get_event_generator(" + eventname + ", " + component + ")\n") server.write(writeindent + str(eventlist[eventname]) + ".event.Severity = " + str(severity) + "\n") @@ -317,12 +363,23 @@ def writeevents(events, component, eventlist): def writestreams(streams, component, streamslist, variablelist, jsonmeasurements, jsonparameters): + """ + Generates the streams as events withe event generator, uses standard severity 1. + :param streams: List of streamdicts + :param component: Component the streams belong to. + :param streamslist: Empty dict (filled with streamgenerator node names later on) + :param variablelist: List of the variables belonging to the component in Format {name : value} + :param jsonmeasurements: List of all measurement elements + :param jsonparameters: List of all parameter elements + :return streamlist: The streamslist now filled in the format + {streamname(generated in the code) : streamgenerator node name} + :return updatestreamsdict: A dict in which the compare variable names for + update streams are saved in format {streamname: variablename} + """ server = open("opcua-server.py", "a") writeindent = " " - # eventelements = [] updatestreamdict = {} for stream in streams: - # eventelements.append(event["element"]) streamname = (stream["measurement"].lower()).replace(" ", "") + component streamgenname = streamname + "generator" streamslist[streamname] = streamgenname @@ -353,6 +410,10 @@ def writestreams(streams, component, streamslist, variablelist, jsonmeasurements def writendpt1(): + """ + Writes the beginning of the while loop which starts the server. + :return: None + """ server = open("opcua-server.py", "a") server.write(""" async with server: @@ -363,6 +424,17 @@ def writendpt1(): def triggerevents(generatordict, eventslist, component, variablelist, jsonmeasurements, jsonparameters): + """ + Writes the if cases in which the events get triggered. + :param generatordict: Dict with the format + {eventname (generated according to format from writeevents) : eventgeneratorname} + :param eventslist: List of eventdicts + :param component: Component the events belong to + :param variablelist: List of all variabledicts from component in the format {name : value} + :param jsonmeasurements: List of all measurements + :param jsonparameters: List of all parameters + :return: None + """ server = open("opcua-server.py", "a") indent = 3 writeindent = "" @@ -402,6 +474,19 @@ def triggerevents(generatordict, eventslist, component, variablelist, jsonmeasur def triggerstreams(generatordict, streamslist, component, variablelist, jsonmeasurements, jsonparameters, savevaldict): + """ + Generates the Streams according to their stream type. (Dynamic streams are still missing) + :param generatordict: Dict with the format + {streamname (generated according to format from writestreams) : streamgeneratorname} + :param streamslist: List of streamdicts + :param component: Component the streams belong to + :param variablelist: List of all variabledicts from the component in the format {name: value} + :param jsonmeasurements: List of all measurements + :param jsonparameters: List of all parameters + :param savevaldict: Dict with the name of the compare values for update streams. + Format {streamname : comparevaluename} + :return: None + """ server = open("opcua-server.py", "a") indent = 3 for stream in streamslist: @@ -442,6 +527,10 @@ def triggerstreams(generatordict, streamslist, component, variablelist, jsonmeas def writendpt2(): + """ + Writes the end of the server with the await asyncio.sleep(1) and the time counter. + :return: None + """ server = open("opcua-server.py", "a") server.write(""" await asyncio.sleep(1)