PLCControler.py
changeset 1351 a546a63ce1bf
parent 1350 7280349a3375
child 1354 241c19ea80da
equal deleted inserted replaced
1350:7280349a3375 1351:a546a63ce1bf
   252 
   252 
   253 #-------------------------------------------------------------------------------
   253 #-------------------------------------------------------------------------------
   254 #            Helpers object for generating instance tagname
   254 #            Helpers object for generating instance tagname
   255 #-------------------------------------------------------------------------------
   255 #-------------------------------------------------------------------------------
   256 
   256 
   257 class InstanceTagName(etree.XSLTExtension):
   257 class InstanceTagName:
   258 
   258 
   259     def __init__(self, controller):
   259     def __init__(self, controller):
   260         etree.XSLTExtension.__init__(self)
       
   261         self.Controller = controller
   260         self.Controller = controller
   262     
   261         self.TagName = None
   263     def GetTagName(self, infos):
   262     
   264         return ""
   263     def GetTagName(self):
   265     
   264         return self.TagName
   266     def execute(self, context, self_node, input_node, output_parent):
   265     
   267         tagname_infos = etree.Element('infos')
   266     def ConfigTagName(self, context, *args):
   268         self.process_children(context, tagname_infos)
   267         self.TagName = self.Controller.ComputeConfigurationName(args[0][0])
   269         tagname = etree.Element('tagname')
   268         
   270         tagname.text = self.GetTagName(tagname_infos)
   269     def ResourceTagName(self, context, *args):
   271         try:
   270         self.TagName = self.Controller.ComputeConfigurationResourceName(args[0][0], args[1][0])
   272             output_parent.append(tagname)
   271 
   273         except:
   272     def PouTagName(self, context, *args):
   274             pass
   273         #print "PouTagName", etree.tostring(args[0][0])
   275 
   274         self.TagName = self.Controller.ComputePouName(args[0][0])
   276 class ConfigTagName(InstanceTagName):
   275 
   277     
   276     def ActionTagName(self, context, *args):
   278     def GetTagName(self, infos):
   277         self.TagName = self.Controller.ComputePouActionName(args[0][0], args[0][1])
   279         return self.Controller.ComputeConfigurationName(infos.get("name"))
   278 
   280         
   279     def TransitionTagName(self, context, *args):
   281 class ResourceTagName(InstanceTagName):
   280         self.TagName = self.Controller.ComputePouTransitionName(args[0][0], args[0][1])
   282     
       
   283     def GetTagName(self, infos):
       
   284         return self.Controller.ComputeConfigurationResourceName(
       
   285             infos.get("config_name"), infos.get("name"))
       
   286 
       
   287 class PouTagName(InstanceTagName):
       
   288     
       
   289     def GetTagName(self, infos):
       
   290         return self.Controller.ComputePouName(infos.get("name"))
       
   291 
       
   292 class ActionTagName(InstanceTagName):
       
   293     
       
   294     def GetTagName(self, infos):
       
   295         return self.Controller.ComputePouActionName(
       
   296             infos.get("pou_name"), infos.get("name"))
       
   297 
       
   298 class TransitionTagName(InstanceTagName):
       
   299     
       
   300     def GetTagName(self, infos):
       
   301         return self.Controller.ComputePouTransitionName(
       
   302             infos.get("pou_name"), infos.get("name"))
       
   303 
       
   304 instance_tagname_xslt = etree.parse(
       
   305     os.path.join(ScriptDirectory, "plcopen", "instance_tagname.xslt"))
       
   306 
   281 
   307 #-------------------------------------------------------------------------------
   282 #-------------------------------------------------------------------------------
   308 #           Helpers object for generating pou block instances list
   283 #           Helpers object for generating pou block instances list
   309 #-------------------------------------------------------------------------------
   284 #-------------------------------------------------------------------------------
   310 
   285 
   810                             self.ComputePouName(words[1]), debug)]
   785                             self.ComputePouName(words[1]), debug)]
   811         return []
   786         return []
   812     
   787     
   813     def GetPouInstanceTagName(self, instance_path, debug = False):
   788     def GetPouInstanceTagName(self, instance_path, debug = False):
   814         project = self.GetProject(debug)
   789         project = self.GetProject(debug)
       
   790         factory = InstanceTagName(self)
       
   791         
       
   792         parser = etree.XMLParser()
       
   793         parser.resolvers.add(LibraryResolver(self, debug))
   815         
   794         
   816         instance_tagname_xslt_tree = etree.XSLT(
   795         instance_tagname_xslt_tree = etree.XSLT(
   817             instance_tagname_xslt, 
   796             etree.parse(
   818             extensions = {
   797                 os.path.join(ScriptDirectory, "plcopen", "instance_tagname.xslt"),
   819                 ("instance_tagname_ns", "instance_definition"): InstanceDefinition(self, debug),
   798                 parser), 
   820                 ("instance_tagname_ns", "config_tagname"): ConfigTagName(self),
   799             extensions = {("instance_tagname_ns", name): getattr(factory, name)
   821                 ("instance_tagname_ns", "resource_tagname"): ResourceTagName(self),
   800                           for name in ["ConfigTagName", "ResourceTagName",
   822                 ("instance_tagname_ns", "pou_tagname"): PouTagName(self),
   801                                        "PouTagName", "ActionTagName", 
   823                 ("instance_tagname_ns", "action_tagname"): ActionTagName(self),
   802                                        "TransitionTagName"]})
   824                 ("instance_tagname_ns", "transition_tagname"): TransitionTagName(self)})
   803         
   825         
   804         instance_tagname_xslt_tree(project, 
   826         result = instance_tagname_xslt_tree(project, 
   805             instance_path=etree.XSLT.strparam(instance_path))
   827                 instance_path=etree.XSLT.strparam(instance_path)).getroot()
   806         
   828         if result is not None:
   807         return factory.GetTagName()
   829             return result.text
       
   830         
       
   831         return None
       
   832     
   808     
   833     def GetInstanceInfos(self, instance_path, debug = False):
   809     def GetInstanceInfos(self, instance_path, debug = False):
   834         tagname = self.GetPouInstanceTagName(instance_path)
   810         tagname = self.GetPouInstanceTagName(instance_path)
   835         if tagname is not None:
   811         if tagname is not None:
   836             infos = self.GetPouVariables(tagname, debug)
   812             infos = self.GetPouVariables(tagname, debug)