PLCControler.py
changeset 47 2b2f8d88e6d3
parent 46 4379e98a30aa
child 53 4988262d03e3
equal deleted inserted replaced
46:4379e98a30aa 47:2b2f8d88e6d3
   259                          "functionBlock": {"name": "Function Blocks", "type": ITEM_UNEDITABLE, "values":[]},
   259                          "functionBlock": {"name": "Function Blocks", "type": ITEM_UNEDITABLE, "values":[]},
   260                          "program": {"name": "Programs", "type": ITEM_UNEDITABLE, "values":[]}}
   260                          "program": {"name": "Programs", "type": ITEM_UNEDITABLE, "values":[]}}
   261             for pou in self.Project.getPous():
   261             for pou in self.Project.getPous():
   262                 pou_type = pou.getPouType().getValue()
   262                 pou_type = pou.getPouType().getValue()
   263                 pou_infos = {"name": pou.getName(), "type": ITEM_POU}
   263                 pou_infos = {"name": pou.getName(), "type": ITEM_POU}
   264                 var_types = {"Input": {"name": "Input", "type": ITEM_CLASS, "values": []},
       
   265                          "Output": {"name": "Output", "type": ITEM_CLASS, "values": []},
       
   266                          "InOut": {"name": "InOut", "type": ITEM_CLASS, "values": []},
       
   267                          "External": {"name": "External", "type": ITEM_CLASS, "values": []},
       
   268                          "Local": {"name": "Local", "type": ITEM_CLASS, "values": []},
       
   269                          "Temp": {"name": "Temp", "type": ITEM_CLASS, "values": []},
       
   270                          "Global": {"name": "Global", "type": ITEM_CLASS, "values": []}}
       
   271                 for var in self.GetPouInterfaceVars(pou):
       
   272                     var_values = {"name": var["Name"], "type": ITEM_VARIABLE, "values": []}
       
   273                     if var["Class"] in var_types.keys():
       
   274                         var_types[var["Class"]]["values"].append(var_values)
       
   275                 pou_values = []
   264                 pou_values = []
   276                 pou_values.append({"name": "Interface", "type": ITEM_CLASS, 
   265 ##                var_types = {"Input": {"name": "Input", "type": ITEM_CLASS, "values": []},
   277                     "values": [var_types["Input"], var_types["Output"], var_types["InOut"], var_types["External"]]})
   266 ##                         "Output": {"name": "Output", "type": ITEM_CLASS, "values": []},
   278                 pou_values.append({"name": "Variables", "type": ITEM_CLASS, 
   267 ##                         "InOut": {"name": "InOut", "type": ITEM_CLASS, "values": []},
   279                     "values": [var_types["Local"], var_types["Temp"]]})
   268 ##                         "External": {"name": "External", "type": ITEM_CLASS, "values": []},
   280                 if pou_type == "program":
   269 ##                         "Local": {"name": "Local", "type": ITEM_CLASS, "values": []},
   281                     pou_values.append(var_types["Global"])
   270 ##                         "Temp": {"name": "Temp", "type": ITEM_CLASS, "values": []},
       
   271 ##                         "Global": {"name": "Global", "type": ITEM_CLASS, "values": []}}
       
   272 ##                for var in self.GetPouInterfaceVars(pou):
       
   273 ##                    var_values = {"name": var["Name"], "type": ITEM_VARIABLE, "values": []}
       
   274 ##                    if var["Class"] in var_types.keys():
       
   275 ##                        var_types[var["Class"]]["values"].append(var_values)
       
   276 ##                pou_values.append({"name": "Interface", "type": ITEM_CLASS, 
       
   277 ##                    "values": [var_types["Input"], var_types["Output"], var_types["InOut"], var_types["External"]]})
       
   278 ##                pou_values.append({"name": "Variables", "type": ITEM_CLASS, 
       
   279 ##                    "values": [var_types["Local"], var_types["Temp"]]})
       
   280 ##                if pou_type == "program":
       
   281 ##                    pou_values.append(var_types["Global"])
   282                 if pou.getBodyType() == "SFC":
   282                 if pou.getBodyType() == "SFC":
   283                     transitions = []
   283                     transitions = []
   284                     for transition in pou.getTransitionList():
   284                     for transition in pou.getTransitionList():
   285                         transitions.append({"name": transition.getName(), "type": ITEM_TRANSITION, "values": []})
   285                         transitions.append({"name": transition.getName(), "type": ITEM_TRANSITION, "values": []})
   286                     pou_values.append({"name": "Transitions", "type": ITEM_UNEDITABLE, "values": transitions})
   286                     pou_values.append({"name": "Transitions", "type": ITEM_UNEDITABLE, "values": transitions})
   293                     pou_types[pou_type]["values"].append(pou_infos)
   293                     pou_types[pou_type]["values"].append(pou_infos)
   294             configurations = {"name": "Configurations", "type": ITEM_UNEDITABLE, "values": []}
   294             configurations = {"name": "Configurations", "type": ITEM_UNEDITABLE, "values": []}
   295             for config in self.Project.getConfigurations():
   295             for config in self.Project.getConfigurations():
   296                 config_name = config.getName()
   296                 config_name = config.getName()
   297                 config_infos = {"name": config_name, "type": ITEM_CONFIGURATION, "values": []}
   297                 config_infos = {"name": config_name, "type": ITEM_CONFIGURATION, "values": []}
   298                 config_vars = {"name": "Global", "type": ITEM_CLASS, "values": []}
   298 ##                config_vars = {"name": "Global", "type": ITEM_CLASS, "values": []}
   299                 for var in self.GetConfigurationGlobalVars(config_name):
   299 ##                for var in self.GetConfigurationGlobalVars(config_name):
   300                     var_values = {"name": var["Name"], "type": ITEM_VARIABLE, "values": []}
   300 ##                    var_values = {"name": var["Name"], "type": ITEM_VARIABLE, "values": []}
   301                     config_vars["values"].append(var_values)
   301 ##                    config_vars["values"].append(var_values)
   302                 resources = {"name": "Resources", "type": ITEM_UNEDITABLE, "values": []}
   302                 resources = {"name": "Resources", "type": ITEM_UNEDITABLE, "values": []}
   303                 for resource in config.getResource():
   303                 for resource in config.getResource():
   304                     resource_name = resource.getName()
   304                     resource_name = resource.getName()
   305                     resource_infos = {"name": resource_name, "type": ITEM_RESOURCE, "values": []}
   305                     resource_infos = {"name": resource_name, "type": ITEM_RESOURCE, "values": []}
   306                     resource_vars = {"name": "Global", "type": ITEM_CLASS, "values": []}
   306 ##                    resource_vars = {"name": "Global", "type": ITEM_CLASS, "values": []}
   307                     for var in self.GetConfigurationResourceGlobalVars(config_name, resource_name):
   307 ##                    for var in self.GetConfigurationResourceGlobalVars(config_name, resource_name):
   308                         var_values = {"name": var["Name"], "type": ITEM_VARIABLE, "values": []}
   308 ##                        var_values = {"name": var["Name"], "type": ITEM_VARIABLE, "values": []}
   309                         resource_vars["values"].append(var_values)
   309 ##                        resource_vars["values"].append(var_values)
   310                     resource_infos["values"].append(resource_vars)
   310 ##                    resource_infos["values"].append(resource_vars)
   311                     resources["values"].append(resource_infos)
   311                     resources["values"].append(resource_infos)
   312                 config_infos["values"] = [config_vars, resources]
   312 ##                config_infos["values"] = [config_vars, resources]
       
   313                 config_infos["values"] = [resources]
   313                 configurations["values"].append(config_infos)
   314                 configurations["values"].append(config_infos)
   314             infos["values"] = [{"name": "Properties", "type": ITEM_UNEDITABLE, "values": []},
   315             infos["values"] = [{"name": "Properties", "type": ITEM_UNEDITABLE, "values": []},
   315                                pou_types["function"], pou_types["functionBlock"], 
   316                                pou_types["function"], pou_types["functionBlock"], 
   316                                pou_types["program"], configurations]
   317                                pou_types["program"], configurations]
   317             return infos
   318             return infos
   849         names = []
   850         names = []
   850         for pou_name in self.ElementsOpened:
   851         for pou_name in self.ElementsOpened:
   851             words = pou_name.split("::")
   852             words = pou_name.split("::")
   852             if len(words) == 1:
   853             if len(words) == 1:
   853                 names.append(pou_name)
   854                 names.append(pou_name)
       
   855             elif len(words) == 2:
       
   856                 names.append(words[1])
   854             else:
   857             else:
   855                 names.append("%s-%s"%(words[1],words[2]))
   858                 names.append("%s-%s"%(words[1],words[2]))
   856         return names
   859         return names
   857     
   860     
   858     # Compute a pou transition name
   861     # Compute a pou transition name
   860         return "T::%s::%s" % (pou, transition)
   863         return "T::%s::%s" % (pou, transition)
   861     
   864     
   862     # Compute a pou action name
   865     # Compute a pou action name
   863     def ComputePouActionName(self, pou, action):
   866     def ComputePouActionName(self, pou, action):
   864         return "A::%s::%s" % (pou, action)
   867         return "A::%s::%s" % (pou, action)
       
   868 
       
   869     # Compute a pou  name
       
   870     def ComputeConfigurationName(self, config):
       
   871         return "C::%s" % config
   865 
   872 
   866     # Compute a pou  name
   873     # Compute a pou  name
   867     def ComputeConfigurationResourceName(self, config, resource):
   874     def ComputeConfigurationResourceName(self, config, resource):
   868         return "R::%s::%s" % (config, resource)
   875         return "R::%s::%s" % (config, resource)
   869     
   876     
   883 
   890 
   884     # Open a pou action by giving pou and action names
   891     # Open a pou action by giving pou and action names
   885     def OpenPouActionEditing(self, pou, action):
   892     def OpenPouActionEditing(self, pou, action):
   886         return self.OpenElementEditing(self.ComputePouActionName(pou, action))
   893         return self.OpenElementEditing(self.ComputePouActionName(pou, action))
   887 
   894 
       
   895     # Open a configuration resource by giving configuration name
       
   896     def OpenConfigurationEditing(self, config):
       
   897         return self.OpenElementEditing(self.ComputeConfigurationName(config))
       
   898 
   888     # Open a configuration resource by giving configuration and resource names
   899     # Open a configuration resource by giving configuration and resource names
   889     def OpenConfigurationResourceEditing(self, config, resource):
   900     def OpenConfigurationResourceEditing(self, config, resource):
   890         return self.OpenElementEditing(self.ComputeConfigurationResourceName(config, resource))
   901         return self.OpenElementEditing(self.ComputeConfigurationResourceName(config, resource))
   891 
   902 
   892     # Return if pou given by name is opened
   903     # Return if pou given by name is opened
   899 
   910 
   900     # Return if pou action given by pou and action names is opened
   911     # Return if pou action given by pou and action names is opened
   901     def IsPouActionEditing(self, pou, action):
   912     def IsPouActionEditing(self, pou, action):
   902         return self.ComputePouActionName(pou, action) in self.ElementsOpened
   913         return self.ComputePouActionName(pou, action) in self.ElementsOpened
   903 
   914 
   904     # Return if pou action given by pou and action names is opened
   915     # Return if pou action given by configuration name is opened
   905     def IsConfigurationResourceEditing(self, pou, action):
   916     def IsConfigurationEditing(self, pou):
       
   917         return self.ComputeConfigurationName(config) in self.ElementsOpened
       
   918 
       
   919     # Return if pou action given by configuration and resource names is opened
       
   920     def IsConfigurationResourceEditing(self, pou, resource):
   906         return self.ComputeConfigurationResourceName(config, resource) in self.ElementsOpened
   921         return self.ComputeConfigurationResourceName(config, resource) in self.ElementsOpened
   907 
   922 
   908     # Close current pou editing
   923     # Close current pou editing
   909     def CloseElementEditing(self):
   924     def CloseElementEditing(self):
   910         # Remove pou from list of pou opened
   925         # Remove pou from list of pou opened
   929         return self.ChangeElementEditing(self.ComputePouTransitionName(pou, transition))
   944         return self.ChangeElementEditing(self.ComputePouTransitionName(pou, transition))
   930 
   945 
   931     # Change current pou editing for action given by pou and action names
   946     # Change current pou editing for action given by pou and action names
   932     def ChangePouActionEditing(self, pou, action):
   947     def ChangePouActionEditing(self, pou, action):
   933         return self.ChangeElementEditing(self.ComputePouActionName(pou, action))
   948         return self.ChangeElementEditing(self.ComputePouActionName(pou, action))
       
   949 
       
   950     # Change current pou editing for action given by configuration name
       
   951     def ChangeConfigurationEditing(self, config):
       
   952         return self.ChangeElementEditing(self.ComputeConfigurationName(config))
   934 
   953 
   935     # Change current pou editing for action given by configuration and resource names
   954     # Change current pou editing for action given by configuration and resource names
   936     def ChangeConfigurationResourceEditing(self, config, resource):
   955     def ChangeConfigurationResourceEditing(self, config, resource):
   937         return self.ChangeElementEditing(self.ComputeConfigurationResourceName(config, resource))
   956         return self.ChangeElementEditing(self.ComputeConfigurationResourceName(config, resource))
   938 
   957 
   953                     pou = self.Project.getPou(words[1])
   972                     pou = self.Project.getPou(words[1])
   954                     if words[0] == 'T':
   973                     if words[0] == 'T':
   955                         return pou.getTransition(words[2])
   974                         return pou.getTransition(words[2])
   956                     elif words[0] == 'A':
   975                     elif words[0] == 'A':
   957                         return pou.getAction(words[2])
   976                         return pou.getAction(words[2])
       
   977                 elif words[0] == 'C':
       
   978                     result = self.Project.getConfiguration(words[1])
       
   979                     return result
   958                 elif words[0] == 'R':
   980                 elif words[0] == 'R':
   959                     result = self.Project.getConfigurationResource(words[1], words[2])
   981                     result = self.Project.getConfigurationResource(words[1], words[2])
   960                     return result
   982                     return result
   961         return None
   983         return None
   962     
   984     
   966         if self.CurrentElementEditing != None:
   988         if self.CurrentElementEditing != None:
   967             name = self.ElementsOpened[self.CurrentElementEditing]
   989             name = self.ElementsOpened[self.CurrentElementEditing]
   968             words = name.split("::")
   990             words = name.split("::")
   969             if len(words) == 1:
   991             if len(words) == 1:
   970                 return name
   992                 return name
       
   993             elif len(words) == 2:
       
   994                 return words[1]
   971             else:
   995             else:
   972                 return words[2]
   996                 return words[2]
   973         return None
   997         return None
   974     
   998     
   975     # Replace the index of current pou editing by the one given
   999     # Replace the index of current pou editing by the one given
   981         if self.CurrentElementEditing != None:
  1005         if self.CurrentElementEditing != None:
   982             name = self.ElementsOpened[self.CurrentElementEditing]
  1006             name = self.ElementsOpened[self.CurrentElementEditing]
   983             words = name.split("::")
  1007             words = name.split("::")
   984             if len(words) == 1:
  1008             if len(words) == 1:
   985                 return self.GetPouType(name)
  1009                 return self.GetPouType(name)
   986             else:
  1010             elif len(words) == 2:
       
  1011                 return None
       
  1012             elif words[0] != "R":
   987                 return self.GetPouType(words[1])
  1013                 return self.GetPouType(words[1])
   988         return None
  1014         return None
   989 
  1015 
   990     # Return language in which current pou editing is written
  1016     # Return language in which current pou editing is written
   991     def GetCurrentElementEditingBodyType(self):
  1017     def GetCurrentElementEditingBodyType(self):