PLCGenerator.py
changeset 1322 0a9227f743b3
parent 1315 ff14a66bbd12
child 1358 fe7770a30527
equal deleted inserted replaced
1321:83f41ea00b97 1322:0a9227f743b3
   699         if body_type in ["FBD", "LD", "SFC"]:
   699         if body_type in ["FBD", "LD", "SFC"]:
   700             undefined_blocks = []
   700             undefined_blocks = []
   701             for instance in body.getcontentInstances():
   701             for instance in body.getcontentInstances():
   702                 if isinstance(instance, (InVariableClass, OutVariableClass, 
   702                 if isinstance(instance, (InVariableClass, OutVariableClass, 
   703                                          InOutVariableClass)):
   703                                          InOutVariableClass)):
   704                     expression = instance.getexpression().text
   704                     expression = instance.getexpression()
   705                     var_type = self.GetVariableType(expression)
   705                     var_type = self.GetVariableType(expression)
   706                     if (isinstance(pou, TransitionObjClass) 
   706                     if (isinstance(pou, TransitionObjClass) 
   707                         and expression == pou.getname()):
   707                         and expression == pou.getname()):
   708                         var_type = "BOOL"
   708                         var_type = "BOOL"
   709                     elif (not isinstance(pou, (TransitionObjClass, ActionObjClass)) and
   709                     elif (not isinstance(pou, (TransitionObjClass, ActionObjClass)) and
   931                     connections = instance.connectionPointIn.getconnections()
   931                     connections = instance.connectionPointIn.getconnections()
   932                     if connections is not None:
   932                     if connections is not None:
   933                         expression = self.ComputeExpression(body, connections)
   933                         expression = self.ComputeExpression(body, connections)
   934                         if expression is not None:
   934                         if expression is not None:
   935                             self.Program += [(self.CurrentIndent, ()),
   935                             self.Program += [(self.CurrentIndent, ()),
   936                                              (instance.getexpression().text, (self.TagName, "io_variable", instance.getlocalId(), "expression")),
   936                                              (instance.getexpression(), (self.TagName, "io_variable", instance.getlocalId(), "expression")),
   937                                              (" := ", ())]
   937                                              (" := ", ())]
   938                             self.Program += expression
   938                             self.Program += expression
   939                             self.Program += [(";\n", ())]
   939                             self.Program += [(";\n", ())]
   940                 elif isinstance(instance, BlockClass):
   940                 elif isinstance(instance, BlockClass):
   941                     block_type = instance.gettypeName()
   941                     block_type = instance.gettypeName()
   962                         coil_info = (self.TagName, "coil", instance.getlocalId())
   962                         coil_info = (self.TagName, "coil", instance.getlocalId())
   963                         expression = self.ComputeExpression(body, connections)
   963                         expression = self.ComputeExpression(body, connections)
   964                         if expression is not None:
   964                         if expression is not None:
   965                             expression = self.ExtractModifier(instance, expression, coil_info)
   965                             expression = self.ExtractModifier(instance, expression, coil_info)
   966                             self.Program += [(self.CurrentIndent, ())]
   966                             self.Program += [(self.CurrentIndent, ())]
   967                             self.Program += [(instance.getvariable().text, coil_info + ("reference",))]
   967                             self.Program += [(instance.getvariable(), coil_info + ("reference",))]
   968                             self.Program += [(" := ", ())] + expression + [(";\n", ())]
   968                             self.Program += [(" := ", ())] + expression + [(";\n", ())]
   969                         
   969                         
   970     def FactorizePaths(self, paths):
   970     def FactorizePaths(self, paths):
   971         same_paths = {}
   971         same_paths = {}
   972         uncomputed_index = range(len(paths))
   972         uncomputed_index = range(len(paths))
  1185             localId = connection.getrefLocalId()
  1185             localId = connection.getrefLocalId()
  1186             next = body.getcontentInstance(localId)
  1186             next = body.getcontentInstance(localId)
  1187             if isinstance(next, LeftPowerRailClass):
  1187             if isinstance(next, LeftPowerRailClass):
  1188                 paths.append(None)
  1188                 paths.append(None)
  1189             elif isinstance(next, (InVariableClass, InOutVariableClass)):
  1189             elif isinstance(next, (InVariableClass, InOutVariableClass)):
  1190                 paths.append(str([(next.getexpression().text, (self.TagName, "io_variable", localId, "expression"))]))
  1190                 paths.append(str([(next.getexpression(), (self.TagName, "io_variable", localId, "expression"))]))
  1191             elif isinstance(next, BlockClass):
  1191             elif isinstance(next, BlockClass):
  1192                 block_type = next.gettypeName()
  1192                 block_type = next.gettypeName()
  1193                 self.ParentGenerator.GeneratePouProgram(block_type)
  1193                 self.ParentGenerator.GeneratePouProgram(block_type)
  1194                 block_infos = self.GetBlockType(block_type, tuple([self.ConnectionTypes.get(variable.connectionPointIn, "ANY") for variable in next.inputVariables.getvariable() if variable.getformalParameter() != "EN"]))
  1194                 block_infos = self.GetBlockType(block_type, tuple([self.ConnectionTypes.get(variable.connectionPointIn, "ANY") for variable in next.inputVariables.getvariable() if variable.getformalParameter() != "EN"]))
  1195                 if block_infos is None:
  1195                 if block_infos is None:
  1221                                 paths.append(str(expression))
  1221                                 paths.append(str(expression))
  1222                     else:
  1222                     else:
  1223                         raise PLCGenException, _("No connector found corresponding to \"%s\" continuation in \"%s\" POU")%(name, self.Name)
  1223                         raise PLCGenException, _("No connector found corresponding to \"%s\" continuation in \"%s\" POU")%(name, self.Name)
  1224             elif isinstance(next, ContactClass):
  1224             elif isinstance(next, ContactClass):
  1225                 contact_info = (self.TagName, "contact", next.getlocalId())
  1225                 contact_info = (self.TagName, "contact", next.getlocalId())
  1226                 variable = str(self.ExtractModifier(next, [(next.getvariable().text, contact_info + ("reference",))], contact_info))
  1226                 variable = str(self.ExtractModifier(next, [(next.getvariable(), contact_info + ("reference",))], contact_info))
  1227                 result = self.GeneratePaths(next.connectionPointIn.getconnections(), body, order)
  1227                 result = self.GeneratePaths(next.connectionPointIn.getconnections(), body, order)
  1228                 if len(result) > 1:
  1228                 if len(result) > 1:
  1229                     factorized_paths = self.FactorizePaths(result)
  1229                     factorized_paths = self.FactorizePaths(result)
  1230                     if len(factorized_paths) > 1:
  1230                     if len(factorized_paths) > 1:
  1231                         paths.append([variable, tuple(factorized_paths)])
  1231                         paths.append([variable, tuple(factorized_paths)])
  1480                 elif transitionType == "ST":
  1480                 elif transitionType == "ST":
  1481                     transition_infos["content"] = [("\n", ()),
  1481                     transition_infos["content"] = [("\n", ()),
  1482                                                    (ReIndentText(transitionBody.getanyText(), len(self.CurrentIndent)), (self.TagName, "body", len(self.CurrentIndent)))]
  1482                                                    (ReIndentText(transitionBody.getanyText(), len(self.CurrentIndent)), (self.TagName, "body", len(self.CurrentIndent)))]
  1483                 else:
  1483                 else:
  1484                     for instance in transitionBody.getcontentInstances():
  1484                     for instance in transitionBody.getcontentInstances():
  1485                         if isinstance(instance, OutVariableClass) and instance.getexpression().text == transitionValues["value"]\
  1485                         if isinstance(instance, OutVariableClass) and instance.getexpression() == transitionValues["value"]\
  1486                             or isinstance(instance, CoilClass) and instance.getvariable().text == transitionValues["value"]:
  1486                             or isinstance(instance, CoilClass) and instance.getvariable() == transitionValues["value"]:
  1487                             connections = instance.connectionPointIn.getconnections()
  1487                             connections = instance.connectionPointIn.getconnections()
  1488                             if connections is not None:
  1488                             if connections is not None:
  1489                                 expression = self.ComputeExpression(transitionBody, connections)
  1489                                 expression = self.ComputeExpression(transitionBody, connections)
  1490                                 if expression is not None:
  1490                                 if expression is not None:
  1491                                     transition_infos["content"] = [("\n%s:= "%self.CurrentIndent, ())] + expression + [(";\n", ())]
  1491                                     transition_infos["content"] = [("\n%s:= "%self.CurrentIndent, ())] + expression + [(";\n", ())]