PLCGenerator.py
changeset 1298 f034fb2b1aab
parent 1297 cd639725fba5
child 1310 3d7fa2257b24
--- a/PLCGenerator.py	Fri Aug 30 09:18:41 2013 +0200
+++ b/PLCGenerator.py	Fri Aug 30 10:59:06 2013 +0200
@@ -554,7 +554,7 @@
     # Return connectors linked by a connection to the given connector
     def GetConnectedConnector(self, connector, body):
         links = connector.getconnections()
-        if links and len(links) == 1:
+        if links is not None and len(links) == 1:
             return self.GetLinkedConnector(links[0], body)
         return None        
 
@@ -720,17 +720,18 @@
                         if isinstance(instance, (OutVariableClass, InOutVariableClass)):
                             self.ConnectionTypes[instance.connectionPointIn] = var_type
                             connected = self.GetConnectedConnector(instance.connectionPointIn, body)
-                            if connected and not self.ConnectionTypes.has_key(connected):
-                                for connection in self.ExtractRelatedConnections(connected):
-                                    self.ConnectionTypes[connection] = var_type
+                            if connected is not None and not self.ConnectionTypes.has_key(connected):
+                                for related in self.ExtractRelatedConnections(connected):
+                                    self.ConnectionTypes[related] = var_type
                 elif isinstance(instance, (ContactClass, CoilClass)):
                     for connection in self.ExtractRelatedConnections(instance.connectionPointOut):
                         self.ConnectionTypes[connection] = "BOOL"
                     self.ConnectionTypes[instance.connectionPointIn] = "BOOL"
-                    connected = self.GetConnectedConnector(instance.connectionPointIn, body)
-                    if connected and not self.ConnectionTypes.has_key(connected):
-                        for connection in self.ExtractRelatedConnections(connected):
-                            self.ConnectionTypes[connection] = "BOOL"
+                    for link in instance.connectionPointIn.getconnections():
+                        connected = self.GetLinkedConnector(link, body)
+                        if connected is not None and not self.ConnectionTypes.has_key(connected):
+                            for related in self.ExtractRelatedConnections(connected):
+                                self.ConnectionTypes[related] = "BOOL"
                 elif isinstance(instance, LeftPowerRailClass):
                     for connection in instance.getconnectionPointOut():
                         for related in self.ExtractRelatedConnections(connection):
@@ -738,17 +739,20 @@
                 elif isinstance(instance, RightPowerRailClass):
                     for connection in instance.getconnectionPointIn():
                         self.ConnectionTypes[connection] = "BOOL"
-                        connected = self.GetConnectedConnector(connection, body)
-                        if connected and not self.ConnectionTypes.has_key(connected):
-                            for connection in self.ExtractRelatedConnections(connected):
-                                self.ConnectionTypes[connection] = "BOOL"
+                        for link in connection.getconnections():
+                            connected = self.GetLinkedConnector(link, body)
+                            if connected is not None and not self.ConnectionTypes.has_key(connected):
+                                for related in self.ExtractRelatedConnections(connected):
+                                    self.ConnectionTypes[related] = "BOOL"
                 elif isinstance(instance, TransitionClass):
                     content = instance.getconditionContent()
                     if content["type"] == "connection":
-                        connected = self.GetLinkedConnector(content["value"], body)
-                        if connected and not self.ConnectionTypes.has_key(connected):
-                            for connection in self.ExtractRelatedConnections(connected):
-                                self.ConnectionTypes[connection] = "BOOL"
+                        self.ConnectionTypes[content["value"]] = "BOOL"
+                        for link in content["value"].getconnections():
+                            connected = self.GetLinkedConnector(link, body)
+                            if connected is not None and not self.ConnectionTypes.has_key(connected):
+                                for related in self.ExtractRelatedConnections(connected):
+                                    self.ConnectionTypes[related] = "BOOL"
                 elif isinstance(instance, ContinuationClass):
                     name = instance.getname()
                     connector = None
@@ -761,7 +765,7 @@
                     if connector is not None:
                         undefined = [instance.connectionPointOut, connector.connectionPointIn]
                         connected = self.GetConnectedConnector(connector.connectionPointIn, body)
-                        if connected:
+                        if connected is not None:
                             undefined.append(connected)
                         related = []
                         for connection in undefined:
@@ -838,11 +842,11 @@
                             if not undefined.has_key(itype):
                                 undefined[itype] = []
                             undefined[itype].append(variable.connectionPointIn)
-                            if connected:
+                            if connected is not None:
                                 undefined[itype].append(connected)
                         else:
                             self.ConnectionTypes[variable.connectionPointIn] = itype
-                            if connected and not self.ConnectionTypes.has_key(connected):
+                            if connected is not None and not self.ConnectionTypes.has_key(connected):
                                 for connection in self.ExtractRelatedConnections(connected):
                                     self.ConnectionTypes[connection] = itype
         for var_type, connections in undefined.items():
@@ -879,7 +883,7 @@
                     self.GenerateSFCStepActions(instance, pou)
                 elif isinstance(instance, TransitionClass):
                     self.GenerateSFCTransition(instance, pou)
-                elif isinstance(instance, JumpClass):
+                elif isinstance(instance, JumpStepClass):
                     self.GenerateSFCJump(instance, pou)
             if len(self.InitialSteps) > 0 and len(self.SFCComputedBlocks) > 0:
                 action_name = "COMPUTE_FUNCTION_BLOCKS"
@@ -1108,7 +1112,7 @@
     
     def ExtractDivergenceInput(self, divergence, pou):
         connectionPointIn = divergence.getconnectionPointIn()
-        if connectionPointIn:
+        if connectionPointIn is not None:
             connections = connectionPointIn.getconnections()
             if connections is not None and len(connections) == 1:
                 instanceLocalId = connections[0].getrefLocalId()
@@ -1140,7 +1144,7 @@
                           "transitions" : [], 
                           "actions" : []}
             self.SFCNetworks["Steps"][step_name] = step_infos
-            if step.connectionPointIn:
+            if step.connectionPointIn is not None:
                 instances = []
                 connections = step.connectionPointIn.getconnections()
                 if connections is not None and len(connections) == 1:
@@ -1155,7 +1159,7 @@
                         instances.extend(self.ExtractConvergenceInputs(instance, pou))
                     elif isinstance(instance, SimultaneousDivergenceClass):
                         transition = self.ExtractDivergenceInput(instance, pou)
-                        if transition:
+                        if transition is not None:
                             if isinstance(transition, TransitionClass):
                                 instances.append(transition)
                             elif isinstance(transition, SelectionConvergenceClass):
@@ -1168,7 +1172,7 @@
     
     def GenerateSFCJump(self, jump, pou):
         jump_target = jump.gettargetName()
-        if jump.connectionPointIn:
+        if jump.connectionPointIn is not None:
             instances = []
             connections = jump.connectionPointIn.getconnections()
             if connections is not None and len(connections) == 1:
@@ -1183,7 +1187,7 @@
                     instances.extend(self.ExtractConvergenceInputs(instance, pou))
                 elif isinstance(instance, SimultaneousDivergenceClass):
                     transition = self.ExtractDivergenceInput(instance, pou)
-                    if transition:
+                    if transition is not None:
                         if isinstance(transition, TransitionClass):
                             instances.append(transition)
                         elif isinstance(transition, SelectionConvergenceClass):
@@ -1228,7 +1232,7 @@
     def GenerateSFCAction(self, action_name, pou):
         if action_name not in self.SFCNetworks["Actions"].keys():
             actionContent = pou.getaction(action_name)
-            if actionContent:
+            if actionContent is not None:
                 previous_tagname = self.TagName
                 self.TagName = self.ParentGenerator.Controler.ComputePouActionName(self.Name, action_name)
                 self.ComputeProgram(actionContent)
@@ -1250,7 +1254,7 @@
                     steps.append(instance)
                 elif isinstance(instance, SelectionDivergenceClass):
                     step = self.ExtractDivergenceInput(instance, pou)
-                    if step:
+                    if step is not None:
                         if isinstance(step, StepClass):
                             steps.append(step)
                         elif isinstance(step, SimultaneousConvergenceClass):
@@ -1260,7 +1264,8 @@
             transition_infos = {"id" : transition.getlocalId(), 
                                 "priority": transition.getpriority(), 
                                 "from": [], 
-                                "to" : []}
+                                "to" : [],
+                                "content": []}
             self.SFCNetworks["Transitions"][transition] = transition_infos
             transitionValues = transition.getconditionContent()
             if transitionValues["type"] == "inline":
@@ -1297,7 +1302,7 @@
                 body = pou.getbody()
                 if isinstance(body, ListType):
                     body = body[0]
-                connections = transition.getconnections()
+                connections = transitionValues["value"].getconnections()
                 if connections is not None:
                     expression = self.ComputeExpression(body, connections)
                     if expression is not None:
@@ -1351,7 +1356,7 @@
             action_content, action_info = self.SFCNetworks["Actions"].pop(action_name)
             self.Program += [("%sACTION "%self.CurrentIndent, ()),
                              (action_name, action_info),
-                             (" :\n", ())]
+                             (":\n", ())]
             self.Program += action_content
             self.Program += [("%sEND_ACTION\n\n"%self.CurrentIndent, ())]