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