diff -r 2a21d6060d64 -r a0932a52e53b etherlab/EthercatMaster.py
--- a/etherlab/EthercatMaster.py Thu Jun 04 11:14:21 2020 +0200
+++ b/etherlab/EthercatMaster.py Thu Jun 18 10:42:08 2020 +0200
@@ -243,20 +243,20 @@
config_filepath = self.ConfigFileName()
config_is_saved = False
self.Config = None
- if os.path.isfile(config_filepath):
- config_xmlfile = open(config_filepath, 'r')
- try:
- self.Config, error = \
- EtherCATConfigParser.LoadXMLString(config_xmlfile.read())
- if error is None:
- config_is_saved = True
- except Exception as e:
- error = str(e)
- config_xmlfile.close()
-
- if error is not None:
- self.GetCTRoot().logger.write_error(
- _("Couldn't load %s network configuration file.") % self.CTNName())
+ # if os.path.isfile(config_filepath):
+ # config_xmlfile = open(config_filepath, 'r')
+ # try:
+ # self.Config, error = \
+ # EtherCATConfigParser.LoadXMLString(config_xmlfile.read())
+ # if error is None:
+ # config_is_saved = True
+ # except Exception as e:
+ # error = str(e)
+ # config_xmlfile.close()
+
+ # if error is not None:
+ # self.GetCTRoot().logger.write_error(
+ # _("Couldn't load %s network configuration file.") % self.CTNName())
if self.Config is None:
self.Config = EtherCATConfigParser.CreateElement("EtherCATConfig")
@@ -282,12 +282,28 @@
if self.ProcessVariables is None:
self.ProcessVariables = ProcessVariablesParser.CreateElement("ProcessVariables")
- if config_is_saved and process_is_saved:
+ #if config_is_saved and process_is_saved:
+ if process_is_saved:
self.CreateBuffer(True)
else:
self.CreateBuffer(False)
self.OnCTNSave()
+ if os.path.isfile(config_filepath):
+ config_xmlfile = open(config_filepath, 'r')
+ try:
+ self.Config, error = \
+ EtherCATConfigParser.LoadXMLString(config_xmlfile.read())
+ if error is None:
+ config_is_saved = True
+ except Exception, e:
+ error = e.message
+ config_xmlfile.close()
+
+ if error is not None:
+ self.GetCTRoot().logger.write_error(
+ _("Couldn't load %s network configuration file.") % CTNName)
+
# ----------- call ethercat mng. function --------------
self.CommonMethod = _CommonSlave(self)
@@ -306,7 +322,7 @@
type_infos = dialog.GetValueInfos()
device, _module_extra_params = self.GetModuleInfos(type_infos)
if device is not None:
- if HAS_MCL and _EthercatCIA402SlaveCTN.NODE_PROFILE in device.GetProfileNumbers():
+ if HAS_MCL and str(_EthercatCIA402SlaveCTN.NODE_PROFILE) in device.GetProfileNumbers():
ConfNodeType = "EthercatCIA402Slave"
else:
ConfNodeType = "EthercatSlave"
@@ -577,14 +593,62 @@
return infos
return None
- def GetSlaveVariables(self, slave_pos=None, limits=None, device=None):
+ def GetSlaveVariables(self, slave_pos=None, limits=None, device=None, module=None):
+ # add jblee
+ files = os.listdir(self.CTNPath())
+ moduleNames = []
+ modulePos = 1
+ for file in files:
+ filepath = os.path.join(self.CTNPath(), file)
+ if os.path.isdir(filepath):
+ MDPFilePath = os.path.join(filepath, "DataForMDP.txt")
+ CheckConfNodePath = os.path.join(filepath, "baseconfnode.xml")
+
+ try :
+ moduleDataFile = open(MDPFilePath, 'r')
+ confNodeFile = open(CheckConfNodePath, 'r')
+
+ lines = moduleDataFile.readlines()
+ checklines = confNodeFile.readlines()
+
+ moduleDataFile.close()
+ confNodeFile.close()
+
+ module_info = self.GetModuleEntryList()
+ # checklines(ex) :
+ # checklines[1].split() : []
+ # checklines[1].split()[2] : IEC_Channel="0"
+ # checklines[1].split()[2].split("\"") = [IEC_Channel=, 0, ]
+ pos_check = int(checklines[1].split()[2].split("\"")[1])
+
+ if slave_pos != pos_check:
+ continue
+
+ for line in lines:
+ if line == "\n":
+ continue
+ # module_name : ST-1214, ST-2314, ...
+ # if user add module => ST-1214 3EA, ST-2314 3EA
+ # each result_module_name :
+ # (ST-1214, Module 1), (ST-1214, Module 2), (ST-1214, Module 3)
+ # (ST-2314, Module 4), (ST-2314, Module 5), (ST-2314, Module 6)
+ module_name = line.split()[0]
+ result_module_name = module_name + ", Module %d" % modulePos
+ moduleNames.append(result_module_name)
+ modulePos += 1
+ except :
+ pass
+
if device is None and slave_pos is not None:
slave = self.GetSlave(slave_pos)
if slave is not None:
type_infos = slave.getType()
device, _module_extra_params = self.GetModuleInfos(type_infos)
if device is not None:
+ # Test OD
entries = device.GetEntriesList(limits)
+ #entries = self.CTNParent.GetEntriesList()
entries_list = entries.items()
entries_list.sort()
entries = []
@@ -602,6 +666,49 @@
current_entry["children"].append(entry)
else:
entries.append(entry)
+
+ increment = self.CTNParent.GetModuleIncrement()[0]
+ count = 1
+ #print module_info
+ # moduleNameAndPos : (ST-1214, Module 1), (ST-1214, Module 2), ... ,
+ # moduleNameAndPos.split(",") : ["ST-1214", " Module 1"]
+ # moduleNameAndPos.split(",")[0] : "ST-1214"
+ for moduleNameAndPos in moduleNames:
+ moduleName = moduleNameAndPos.split(",")[0]
+ modulePosName = moduleNameAndPos.split(",")[1]
+ idx_increment = int(increment) * count
+
+ for MDP_entry in module_info.get(moduleName):
+ LocalMDPEntry = []
+ #print MDP_entry
+ local_idx = MDP_entry["Index"]
+ if ExtractHexDecValue(local_idx) == 0: #and local_idx[0] == "#":
+ temp_index = ExtractHexDecValue(local_idx)
+ else :
+ temp_index = ExtractHexDecValue(MDP_entry["Index"]) + idx_increment
+ #temp_index = ExtractHexDecValue(MDP_entry["Index"]) + idx_increment
+ entry_index = hex(temp_index)
+ entry_subidx = MDP_entry["SubIndex"]
+ entry_name = MDP_entry["Name"] + ", " + " " + \
+ moduleName + " - " + modulePosName
+ entry_type = MDP_entry["Type"]
+ entry_bitsize = MDP_entry["BitSize"]
+ entry_access = MDP_entry["Access"]
+ mapping_type = MDP_entry["PDOMapping"]
+
+ LocalMDPEntry.append({
+ "Index": entry_index,
+ "SubIndex": entry_subidx,
+ "Name": entry_name,
+ "Type": entry_type,
+ "BitSize": entry_bitsize,
+ "Access": entry_access,
+ "PDOMapping": mapping_type,
+ "children": ""})
+ entries.append(LocalMDPEntry[0])
+ count += 1
+
+ #print entries
return entries
return []
@@ -634,6 +741,10 @@
def GetModuleInfos(self, type_infos):
return self.CTNParent.GetModuleInfos(type_infos)
+ # add jblee
+ def GetModuleEntryList(self):
+ return self.CTNParent.GetModuleEntryList()
+
def GetSlaveTypesLibrary(self, profile_filter=None):
return self.CTNParent.GetModulesLibrary(profile_filter)
@@ -643,6 +754,53 @@
def GetDeviceLocationTree(self, slave_pos, current_location, device_name):
slave = self.GetSlave(slave_pos)
vars = []
+
+ # add jblee
+ files = os.listdir(self.CTNPath())
+ moduleNames = []
+ modulePos = 1
+ for file in files:
+ filepath = os.path.join(self.CTNPath(), file)
+ if os.path.isdir(filepath):
+ MDPFilePath = os.path.join(filepath, "DataForMDP.txt")
+ CheckConfNodePath = os.path.join(filepath, "baseconfnode.xml")
+
+ try :
+ moduleDataFile = open(MDPFilePath, 'r')
+ confNodeFile = open(CheckConfNodePath, 'r')
+
+ lines = moduleDataFile.readlines()
+ checklines = confNodeFile.readlines()
+
+ moduleDataFile.close()
+ confNodeFile.close()
+
+ module_info = self.GetModuleEntryList()
+ # checklines(ex) :
+ # checklines[1].split() : []
+ # checklines[1].split()[2] : IEC_Channel="0"
+ # checklines[1].split()[2].split("\"") = [IEC_Channel=, 0, ]
+ pos_check = int(checklines[1].split()[2].split("\"")[1])
+
+ if slave_pos != pos_check:
+ continue
+
+ for line in lines:
+ if line == "\n":
+ continue
+ # module_name : ST-1214, ST-2314, ...
+ # if user add module => ST-1214 3EA, ST-2314 3EA
+ # each result_module_name :
+ # (ST-1214, Module 1), (ST-1214, Module 2), (ST-1214, Module 3)
+ # (ST-2314, Module 4), (ST-2314, Module 5), (ST-2314, Module 6)
+ module_name = line.split()[0]
+ result_module_name = module_name + ", Module %d" % modulePos
+ moduleNames.append(result_module_name)
+ modulePos += 1
+ except :
+ pass
+
if slave is not None:
type_infos = slave.getType()
@@ -681,6 +839,39 @@
"children": [],
})
+ # add jblee for MDP
+ if not entries :
+ increment = self.CTNParent.GetModuleIncrement()[0]
+ count = 1
+ for moduleNameAndPos in moduleNames:
+ moduleName = moduleNameAndPos.split(",")[0]
+ idx_increment = int(increment) * count
+ for MDP_entry in module_info.get(moduleName):
+ local_idx = MDP_entry["Index"]
+ if ExtractHexDecValue(local_idx) != 0 and local_idx[0] == "#":
+ index = ExtractHexDecValue(local_idx) + idx_increment
+ else :
+ index = ExtractHexDecValue(MDP_entry["Index"])
+ subindex = int(MDP_entry["SubIndex"])
+ var_class = VARCLASSCONVERSION.get(MDP_entry["PDOMapping"], None)
+ if var_class is not None:
+ if var_class == LOCATION_VAR_INPUT:
+ var_dir = "%I"
+ else:
+ var_dir = "%Q"
+ var_size = self.GetSizeOfType(MDP_entry["Type"])
+ result_name = MDP_entry["Name"] + ", " + moduleNameAndPos
+ vars.append({"name": "0x%4.4x-0x%2.2x: %s" % (index, subindex, result_name),
+ "type": var_class,
+ "size": var_size,
+ "IEC_type": MDP_entry["Type"],
+ "var_name": "%s_%4.4x_%2.2x" % ("_".join(moduleName.split()), index, subindex),
+ "location": "%s%s%s"%(var_dir, var_size, ".".join(map(str, current_location +
+ (index, subindex)))),
+ "description": "",
+ "children": []})
+ count += 1
+
return vars
def CTNTestModified(self):
@@ -688,7 +879,6 @@
def OnCTNSave(self, from_project_path=None):
config_filepath = self.ConfigFileName()
-
config_xmlfile = open(config_filepath, "w")
config_xmlfile.write(etree.tostring(
self.Config,