PLCGenerator.py
changeset 1315 ff14a66bbd12
parent 1310 3d7fa2257b24
child 1322 0a9227f743b3
--- a/PLCGenerator.py	Tue Sep 10 23:23:45 2013 +0200
+++ b/PLCGenerator.py	Wed Sep 11 23:48:41 2013 +0200
@@ -271,10 +271,15 @@
         varlists = [(varlist, varlist.getvariable()[:]) for varlist in configuration.getglobalVars()]
         
         extra_variables = self.Controler.GetConfigurationExtraVariables()
-        if len(extra_variables) > 0:
-            if len(varlists) == 0:
-                varlists = [(PLCOpenParser.CreateElement("globalVars", "interface"), [])]
-            varlists[-1][1].extend(extra_variables)
+        extra_global_vars = None
+        if len(extra_variables) > 0 and len(varlists) == 0:
+            extra_global_vars = PLCOpenParser.CreateElement("globalVars", "interface")
+            configuration.setglobalVars([extra_global_vars])
+            varlists = [(extra_global_vars, [])]
+            
+        for variable in extra_variables:
+            varlists[-1][0].appendvariable(variable)
+            varlists[-1][1].append(variable)
             
         # Generate any global variable in configuration
         for varlist, varlist_variables in varlists:
@@ -310,12 +315,19 @@
                            (var.gettypeAsText(), (tagname, variable_type, var_number, "type"))]
                 # Generate variable initial value if exists
                 initial = var.getinitialValue()
-                if initial:
+                if initial is not None:
                     config += [(" := ", ()),
                                (self.ComputeValue(initial.getvalue(), var_type), (tagname, variable_type, var_number, "initial value"))]
                 config += [(";\n", ())]
                 var_number += 1
             config += [("  END_VAR\n", ())]
+        
+        if extra_global_vars is not None:
+            configuration.remove(extra_global_vars)
+        else:
+            for variable in extra_variables:
+                varlists[-1][1].remove(variable)
+        
         # Generate any resource in the configuration
         for resource in configuration.getresource():
             config += self.GenerateResource(resource, configuration.getname())
@@ -363,7 +375,7 @@
                            (var.gettypeAsText(), (tagname, variable_type, var_number, "type"))]
                 # Generate variable initial value if exists
                 initial = var.getinitialValue()
-                if initial:
+                if initial is not None:
                     resrce += [(" := ", ()),
                                (self.ComputeValue(initial.getvalue(), var_type), (tagname, variable_type, var_number, "initial value"))]
                 resrce += [(";\n", ())]
@@ -380,13 +392,13 @@
             args = []
             single = task.getsingle()
             # Single argument if exists
-            if single:
+            if single is not None:
                 resrce += [("SINGLE := ", ()),
                            (single, (tagname, "task", task_number, "single")),
                            (",", ())]
             # Interval argument if exists
             interval = task.getinterval()
-            if interval:
+            if interval is not None:
                 resrce += [("INTERVAL := ", ()),
                            (interval, (tagname, "task", task_number, "interval")),
                            (",", ())]