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): |