etherlab/etherlab.py
changeset 2064 810013fe8c1b
parent 2063 c9a1c5bb51cd
child 2066 de4817ce8b50
equal deleted inserted replaced
2063:c9a1c5bb51cd 2064:810013fe8c1b
   285                         self.GetSlavePos(), var_infos["index"], var_infos["subindex"], 
   285                         self.GetSlavePos(), var_infos["index"], var_infos["subindex"], 
   286                         var_infos["var_type"], var_infos["dir"], var_infos["var_name"])
   286                         var_infos["var_type"], var_infos["dir"], var_infos["var_name"])
   287             
   287             
   288             params = self.CTNParams[1].getElementInfos(self.CTNParams[0])
   288             params = self.CTNParams[1].getElementInfos(self.CTNParams[0])
   289             for param in params["children"]:
   289             for param in params["children"]:
   290                 if param["value"] is not None:
   290                 if param["value"] is not None and param["name"] != "DynamicPDOs":
   291                     param_infos = {
   291                     param_infos = {
   292                         "location": location_str,
   292                         "location": location_str,
   293                         "param_name": param["name"],
   293                         "param_name": param["name"],
   294                     }
   294                     }
   295                     if param["type"] == "boolean":
   295                     if param["type"] == "boolean":
   653         current_location = self.GetCurrentLocation()
   653         current_location = self.GetCurrentLocation()
   654         
   654         
   655         slaves = self.GetSlaves()
   655         slaves = self.GetSlaves()
   656         for slave_pos in slaves:
   656         for slave_pos in slaves:
   657             slave = self.GetSlave(slave_pos)
   657             slave = self.GetSlave(slave_pos)
       
   658             slave_node = self.GetChildByIECLocation([slave_pos])
       
   659             if slave_node.CTNParams is not None:
       
   660                 slave_infos = slave_node.CTNParams[1]
       
   661             else:
       
   662                 slave_infos = None
   658             if slave is not None:
   663             if slave is not None:
   659                 self.FileGenerator.DeclareSlave(slave_pos, slave.getInfo().getAutoIncAddr(), slave.getType())
   664                 self.FileGenerator.DeclareSlave(slave_pos, slave.getInfo().getAutoIncAddr(), slave.getType(), slave_infos)
   660         
   665         
   661         for location in locations:
   666         for location in locations:
   662             loc = location["LOC"][len(current_location):]
   667             loc = location["LOC"][len(current_location):]
   663             slave_pos = loc[0]
   668             slave_pos = loc[0]
   664             if slave_pos in slaves and len(loc) == 3:
   669             if slave_pos in slaves and len(loc) == 3:
   815         self.UsedVariables = {}
   820         self.UsedVariables = {}
   816 
   821 
   817     def __del__(self):
   822     def __del__(self):
   818         self.Controler = None            
   823         self.Controler = None            
   819 
   824 
   820     def DeclareSlave(self, slave_index, slave_alias, slave):
   825     def DeclareSlave(self, slave_index, slave_alias, slave, slave_infos):
   821         self.Slaves.append((slave_index, slave_alias, slave))
   826         self.Slaves.append((slave_index, slave_alias, slave, slave_infos))
   822 
   827 
   823     def DeclareVariable(self, slave_index, index, subindex, iec_type, dir, name):
   828     def DeclareVariable(self, slave_index, index, subindex, iec_type, dir, name):
   824         slave_variables = self.UsedVariables.setdefault(slave_index, {})
   829         slave_variables = self.UsedVariables.setdefault(slave_index, {})
   825         
   830         
   826         entry_infos = slave_variables.get((index, subindex), None)
   831         entry_infos = slave_variables.get((index, subindex), None)
   858             for entry_infos in slave_entries.itervalues():
   863             for entry_infos in slave_entries.itervalues():
   859                 entry_infos["mapped"] = False
   864                 entry_infos["mapped"] = False
   860         
   865         
   861         self.Slaves.sort()
   866         self.Slaves.sort()
   862         alias = {}
   867         alias = {}
   863         for (slave_idx, slave_alias, type_infos) in self.Slaves:
   868         for (slave_idx, slave_alias, type_infos, slave_infos) in self.Slaves:
   864             if alias.get(slave_alias) is not None:
   869             if alias.get(slave_alias) is not None:
   865                 alias[slave_alias] += 1
   870                 alias[slave_alias] += 1
   866             else:
   871             else:
   867                 alias[slave_alias] = 0
   872                 alias[slave_alias] = 0
   868             slave_pos = (slave_alias, alias[slave_alias])
   873             slave_pos = (slave_alias, alias[slave_alias])
  1017                                      "type": pdo_type, 
  1022                                      "type": pdo_type, 
  1018                                      "entries": entries_infos,
  1023                                      "entries": entries_infos,
  1019                                      "entries_number": len(entries_infos),
  1024                                      "entries_number": len(entries_infos),
  1020                                      "fixed": pdo.getFixed() == True})
  1025                                      "fixed": pdo.getFixed() == True})
  1021                     
  1026                     
  1022                     if etherlab_node_infos.getDynamicPDOs():
  1027                     if slave_infos is None or slave_infos.getDynamicPDOs():
  1023                         dynamic_pdos = {}
  1028                         dynamic_pdos = {}
  1024                         dynamic_pdos_number = 0
  1029                         dynamic_pdos_number = 0
  1025                         for category, min_index, max_index in [("Inputs", 0x1600, 0x1800), 
  1030                         for category, min_index, max_index in [("Inputs", 0x1600, 0x1800), 
  1026                                                                ("Outputs", 0x1a00, 0x1C00)]:
  1031                                                                ("Outputs", 0x1a00, 0x1C00)]:
  1027                             for sync_manager in sync_managers:
  1032                             for sync_manager in sync_managers: