PLCControler.py
changeset 3704 c17fac18c663
parent 2739 7278186a2083
child 3750 f62625418bff
--- a/PLCControler.py	Tue Nov 29 10:59:53 2022 +0100
+++ b/PLCControler.py	Thu Dec 08 11:17:15 2022 +0100
@@ -448,12 +448,12 @@
             return len(self.GetInstanceList(pou_infos, name, debug)) > 0
         return False
 
-    def GenerateProgram(self, filepath=None):
+    def GenerateProgram(self, filepath=None, **kwargs):
         errors = []
         warnings = []
         if self.Project is not None:
             try:
-                self.ProgramChunks = GenerateCurrentProgram(self, self.Project, errors, warnings)
+                self.ProgramChunks = GenerateCurrentProgram(self, self.Project, errors, warnings,**kwargs)
                 self.NextCompiledProject = self.Copy(self.Project)
                 program_text = "".join([item[0] for item in self.ProgramChunks])
                 if filepath is not None:
@@ -1147,28 +1147,35 @@
 
     def GetConfigurationExtraVariables(self):
         global_vars = []
-        for var_name, var_type, var_initial in self.GetConfNodeGlobalInstances():
-            tempvar = PLCOpenParser.CreateElement("variable", "globalVars")
-            tempvar.setname(var_name)
-
-            tempvartype = PLCOpenParser.CreateElement("type", "variable")
-            if var_type in self.GetBaseTypes():
-                tempvartype.setcontent(PLCOpenParser.CreateElement(
-                    var_type.lower()
-                    if var_type in ["STRING", "WSTRING"]
-                    else var_type, "dataType"))
+        for global_instance in self.GetConfNodeGlobalInstances():
+            if type(global_instance)==tuple:
+                # usual global without modifier from a CTN or a library
+                var_name, var_type, var_initial = global_instance
+                tempvar = PLCOpenParser.CreateElement("variable", "globalVars")
+                tempvar.setname(var_name)
+
+                tempvartype = PLCOpenParser.CreateElement("type", "variable")
+                if var_type in self.GetBaseTypes():
+                    tempvartype.setcontent(PLCOpenParser.CreateElement(
+                        var_type.lower()
+                        if var_type in ["STRING", "WSTRING"]
+                        else var_type, "dataType"))
+                else:
+                    tempderivedtype = PLCOpenParser.CreateElement("derived", "dataType")
+                    tempderivedtype.setname(var_type)
+                    tempvartype.setcontent(tempderivedtype)
+                tempvar.settype(tempvartype)
+
+                if var_initial != "":
+                    value = PLCOpenParser.CreateElement("initialValue", "variable")
+                    value.setvalue(var_initial)
+                    tempvar.setinitialValue(value)
+
+                global_vars.append(tempvar)
             else:
-                tempderivedtype = PLCOpenParser.CreateElement("derived", "dataType")
-                tempderivedtype.setname(var_type)
-                tempvartype.setcontent(tempderivedtype)
-            tempvar.settype(tempvartype)
-
-            if var_initial != "":
-                value = PLCOpenParser.CreateElement("initialValue", "variable")
-                value.setvalue(var_initial)
-                tempvar.setinitialValue(value)
-
-            global_vars.append(tempvar)
+                # case of varlists from a TC6 library
+                global_vars.append(global_instance)
+
         return global_vars
 
     # Function that returns the block definition associated to the block type given