PLCGenerator.py
changeset 1768 691083b5682a
parent 1767 c74815729afd
child 1769 4665ba25a0ba
equal deleted inserted replaced
1767:c74815729afd 1768:691083b5682a
   164             # Data type is an enumerated type
   164             # Data type is an enumerated type
   165             elif basetype_content_type == "enum":
   165             elif basetype_content_type == "enum":
   166                 values = [[(value.getname(), (tagname, "value", i))]
   166                 values = [[(value.getname(), (tagname, "value", i))]
   167                           for i, value in enumerate(
   167                           for i, value in enumerate(
   168                               basetype_content.xpath("ppx:values/ppx:value",
   168                               basetype_content.xpath("ppx:values/ppx:value",
   169                                   namespaces=PLCOpenParser.NSMAP))]
   169                                                      namespaces=PLCOpenParser.NSMAP))]
   170                 datatype_def += [("(", ())]
   170                 datatype_def += [("(", ())]
   171                 datatype_def += JoinList([(", ", ())], values)
   171                 datatype_def += JoinList([(", ", ())], values)
   172                 datatype_def += [(")", ())]
   172                 datatype_def += [(")", ())]
   173             # Data type is an array
   173             # Data type is an array
   174             elif basetype_content_type == "array":
   174             elif basetype_content_type == "array":
   495     for instance_name in ["contact", "coil", "leftPowerRail", "rightPowerRail"]]
   495     for instance_name in ["contact", "coil", "leftPowerRail", "rightPowerRail"]]
   496 [StepClass, TransitionClass, JumpStepClass,
   496 [StepClass, TransitionClass, JumpStepClass,
   497  SelectionConvergenceClass, SelectionDivergenceClass,
   497  SelectionConvergenceClass, SelectionDivergenceClass,
   498  SimultaneousConvergenceClass, SimultaneousDivergenceClass] = [
   498  SimultaneousConvergenceClass, SimultaneousDivergenceClass] = [
   499     PLCOpenParser.GetElementClass(instance_name, "sfcObjects")
   499     PLCOpenParser.GetElementClass(instance_name, "sfcObjects")
   500     for instance_name in ["step", "transition", "jumpStep",
   500     for instance_name in [
   501         "selectionConvergence", "selectionDivergence",
   501             "step", "transition", "jumpStep",
   502         "simultaneousConvergence", "simultaneousDivergence"]]
   502             "selectionConvergence", "selectionDivergence",
       
   503             "simultaneousConvergence", "simultaneousDivergence"]]
   503 TransitionObjClass = PLCOpenParser.GetElementClass("transition", "transitions")
   504 TransitionObjClass = PLCOpenParser.GetElementClass("transition", "transitions")
   504 ActionObjClass = PLCOpenParser.GetElementClass("action", "actions")
   505 ActionObjClass = PLCOpenParser.GetElementClass("action", "actions")
   505 
   506 
   506 
   507 
   507 class PouProgramGenerator:
   508 class PouProgramGenerator:
   592 
   593 
   593     def GetLinkedConnector(self, link, body):
   594     def GetLinkedConnector(self, link, body):
   594         parameter = link.getformalParameter()
   595         parameter = link.getformalParameter()
   595         instance = body.getcontentInstance(link.getrefLocalId())
   596         instance = body.getcontentInstance(link.getrefLocalId())
   596         if isinstance(instance, (InVariableClass, InOutVariableClass,
   597         if isinstance(instance, (InVariableClass, InOutVariableClass,
   597              ContinuationClass, ContactClass, CoilClass)):
   598                                  ContinuationClass, ContactClass, CoilClass)):
   598             return instance.connectionPointOut
   599             return instance.connectionPointOut
   599         elif isinstance(instance, BlockClass):
   600         elif isinstance(instance, BlockClass):
   600             outputvariables = instance.outputVariables.getvariable()
   601             outputvariables = instance.outputVariables.getvariable()
   601             if len(outputvariables) == 1:
   602             if len(outputvariables) == 1:
   602                 return outputvariables[0].connectionPointOut
   603                 return outputvariables[0].connectionPointOut
  1457                         action_infos["indicator"] = action["indicator"]
  1458                         action_infos["indicator"] = action["indicator"]
  1458                     if action["type"] == "reference":
  1459                     if action["type"] == "reference":
  1459                         self.GenerateSFCAction(action["value"], pou)
  1460                         self.GenerateSFCAction(action["value"], pou)
  1460                     else:
  1461                     else:
  1461                         action_name = "%s_INLINE%d" % (step_name.upper(), self.GetActionNumber())
  1462                         action_name = "%s_INLINE%d" % (step_name.upper(), self.GetActionNumber())
  1462                         self.SFCNetworks["Actions"][action_name] = ([(self.CurrentIndent, ()),
  1463                         self.SFCNetworks["Actions"][action_name] = ([
  1463                             (action["value"], (self.TagName, "action_block", action_infos["id"], "action", i, "inline")),
  1464                             (self.CurrentIndent, ()),
       
  1465                             (action["value"], (
       
  1466                                 self.TagName, "action_block", action_infos["id"],
       
  1467                                 "action", i, "inline")),
  1464                             ("\n", ())], ())
  1468                             ("\n", ())], ())
  1465                         action_infos["content"] = action_name
  1469                         action_infos["content"] = action_name
  1466                     self.SFCNetworks["Steps"][step_name]["actions"].append(action_infos)
  1470                     self.SFCNetworks["Steps"][step_name]["actions"].append(action_infos)
  1467 
  1471 
  1468     def GenerateSFCAction(self, action_name, pou):
  1472     def GenerateSFCAction(self, action_name, pou):