PLCGenerator.py
changeset 70 0e48629c1e6d
parent 68 66308e07402c
child 71 0578bc212c20
--- a/PLCGenerator.py	Mon Aug 13 18:04:19 2007 +0200
+++ b/PLCGenerator.py	Mon Aug 13 18:06:50 2007 +0200
@@ -62,6 +62,7 @@
         self.Interface = []
         self.InitialSteps = []
         self.BlockComputed = {}
+        self.ComputedBlocks = ""
         self.SFCNetworks = {"Steps":{}, "Transitions":{}, "Actions":{}}
         self.ActionNumber = 0
         self.Program = ""
@@ -130,11 +131,11 @@
                     self.GenerateSFCTransition(instance, pou)
                 elif isinstance(instance, plcopen.jumpStep):
                     self.GenerateSFCJump(instance, pou)
-            if len(self.InitialSteps) > 0:
+            if len(self.InitialSteps) > 0 and self.ComputedBlocks != "":
                 action_name = "COMPUTE_FUNCTION_BLOCKS"
                 action_infos = {"qualifier" : "S", "content" : action_name}
                 self.SFCNetworks["Steps"][self.InitialSteps[0]]["actions"].append(action_infos)
-                self.SFCNetworks["Actions"][action_name] = ReIndentText(self.Program, 4)
+                self.SFCNetworks["Actions"][action_name] = ReIndentText(self.ComputedBlocks, 4)
                 self.Program = ""
             else:
                 raise Exception
@@ -205,7 +206,7 @@
             if isinstance(next, plcopen.leftPowerRail) or isinstance(next, plcopen.contact):
                 return "LD"
             elif isinstance(next, plcopen.block):
-                 for variable in instance.inputVariables.getVariable():
+                 for variable in next.inputVariables.getVariable():
                      result = self.GetNetworkType(variable.connectionPointIn.getConnections(), body)
                      if result != "FBD":
                          return result
@@ -326,16 +327,18 @@
                             connections = instance.connectionPointIn.getConnections()
                             if connections and len(connections) == 1:
                                 expression = self.ComputeFBDExpression(actionBody, connections[0])
-                                self.SFCNetworks["Actions"][action_name] = self.Program + "  %s := %s;\n"%(var, expression)
+                                action_content = self.Program + "  %s := %s;\n"%(var, expression)
                                 self.Program = ""
+                                self.SFCNetworks["Actions"][action_name] = ReIndentText(action_content, 4)
                 elif actionType == "LD":
                     for instance in actionbody.getContentInstances():
                         if isinstance(instance, plcopen.coil):
                             paths = self.GenerateLDPaths(instance.connectionPointIn.getConnections(), actionBody)
                             variable = self.ExtractModifier(instance, instance.getVariable())
                             expression = self.ComputeLDExpression(paths, True)
-                            self.SFCNetworks["Actions"][action_name] = self.Program + "  %s := %s;\n"%(variable, expression)
+                            action_content = self.Program + "  %s := %s;\n"%(variable, expression)
                             self.Program = ""
+                            self.SFCNetworks["Actions"][action_name] = ReIndentText(action_content, 4)
     
     def GenerateSFCTransition(self, transition, pou):
         if transition not in self.SFCNetworks["Transitions"].keys():
@@ -374,12 +377,16 @@
                             if connections and len(connections) == 1:
                                 expression = self.ComputeFBDExpression(transitionBody, connections[0])
                                 transition_infos["content"] = "\n    := %s;\n"%expression
+                                self.ComputedBlocks += self.Program
+                                self.Program = ""
                 elif transitionType == "LD":
                     for instance in transitionBody.getContentInstances():
                         if isinstance(instance, plcopen.coil):
                             paths = self.GenerateLDPaths(instance.connectionPointIn.getConnections(), transitionBody)
                             expression = self.ComputeLDExpression(paths, True)
                             transition_infos["content"] = "\n    := %s;\n"%expression
+                            self.ComputedBlocks += self.Program
+                            self.Program = ""
             elif transitionValues["type"] == "connection":
                 body = pou.getBody()
                 connections = transition.getConnections()
@@ -390,9 +397,13 @@
                     paths = self.GenerateLDPaths(connections, body)
                     expression = self.ComputeLDExpression(paths, True)
                     transition_infos["content"] = "\n    := %s;\n"%expression
+                    self.ComputedBlocks += self.Program
+                    self.Program = ""
                 else:
                     expression = self.ComputeFBDExpression(body, connections[0])
                     transition_infos["content"] = "\n    := %s;\n"%expression
+                    self.ComputedBlocks += self.Program
+                    self.Program = ""
             for step in steps:
                 self.GenerateSFCStep(step, pou)
                 step_name = step.getName()