diff -r b0b7bd288b6e -r 5726f2bbdace etherlab/etherlab.py --- a/etherlab/etherlab.py Mon May 14 07:43:40 2012 +0900 +++ b/etherlab/etherlab.py Sun May 20 22:42:37 2012 +0200 @@ -5,17 +5,17 @@ import wx from xmlclass import * -from plugger import PlugTemplate -from PLCControler import UndoBuffer, LOCATION_PLUGIN, LOCATION_MODULE, LOCATION_GROUP, LOCATION_VAR_INPUT, LOCATION_VAR_OUTPUT, LOCATION_VAR_MEMORY +from ConfigTreeNode import ConfigTreeNode +from PLCControler import UndoBuffer, LOCATION_CONFNODE, LOCATION_MODULE, LOCATION_GROUP, LOCATION_VAR_INPUT, LOCATION_VAR_OUTPUT, LOCATION_VAR_MEMORY from ConfigEditor import NodeEditor, CIA402NodeEditor, ETHERCAT_VENDOR, ETHERCAT_GROUP, ETHERCAT_DEVICE try: - from plugins.motion import Headers, AxisXSD + from confnodes.motion import Headers, AxisXSD HAS_MCL = True except: HAS_MCL = False -PLUGINFOLDER = os.path.split(os.path.realpath(__file__))[0] +CONFNODEFOLDER = os.path.split(os.path.realpath(__file__))[0] TYPECONVERSION = {"BOOL" : "X", "SINT" : "B", "INT" : "W", "DINT" : "D", "LINT" : "L", "USINT" : "B", "UINT" : "W", "UDINT" : "D", "ULINT" : "L", @@ -61,19 +61,19 @@ # Ethercat Node #-------------------------------------------------- -class _EthercatSlavePlug: +class _EthercatSlaveCTN: NODE_PROFILE = None EditorType = NodeEditor def GetIconPath(self, icon): - return os.path.join(PLUGINFOLDER, "images", icon) + return os.path.join(CONFNODEFOLDER, "images", icon) def ExtractHexDecValue(self, value): return ExtractHexDecValue(value) def GetSizeOfType(self, type): - return TYPECONVERSION.get(self.GetPlugRoot().GetBaseType(type), None) + return TYPECONVERSION.get(self.GetCTRoot().GetBaseType(type), None) def GetSlavePos(self): return self.BaseParams.getIEC_Channel() @@ -83,13 +83,13 @@ parts = path.split(".", 1) if self.MandatoryParams and parts[0] == self.MandatoryParams[0]: return self.MandatoryParams[1].getElementInfos(parts[0], parts[1]) - elif self.PlugParams and parts[0] == self.PlugParams[0]: - return self.PlugParams[1].getElementInfos(parts[0], parts[1]) + elif self.CTNParams and parts[0] == self.CTNParams[0]: + return self.CTNParams[1].getElementInfos(parts[0], parts[1]) else: params = [] if wx.VERSION < (2, 8, 0) and self.MandatoryParams: params.append(self.MandatoryParams[1].getElementInfos(self.MandatoryParams[0])) - slave_type = self.PlugParent.GetSlaveType(self.GetSlavePos()) + slave_type = self.CTNParent.GetSlaveType(self.GetSlavePos()) params.append({ 'use': 'required', 'type': 'element', @@ -97,55 +97,55 @@ 'value': None, 'children': [{ 'use': 'optional', - 'type': self.PlugParent.GetSlaveTypesLibrary(self.NODE_PROFILE), + 'type': self.CTNParent.GetSlaveTypesLibrary(self.NODE_PROFILE), 'name': 'Type', 'value': (slave_type["device_type"], slave_type)}, {'use': 'optional', 'type': 'unsignedLong', 'name': 'Alias', - 'value': self.PlugParent.GetSlaveAlias(self.GetSlavePos())}] + 'value': self.CTNParent.GetSlaveAlias(self.GetSlavePos())}] }) - if self.PlugParams: - params.append(self.PlugParams[1].getElementInfos(self.PlugParams[0])) + if self.CTNParams: + params.append(self.CTNParams[1].getElementInfos(self.CTNParams[0])) return params def SetParamsAttribute(self, path, value): position = self.BaseParams.getIEC_Channel() - value, changed = PlugTemplate.SetParamsAttribute(self, path, value) + value, changed = ConfigTreeNode.SetParamsAttribute(self, path, value) # Filter IEC_Channel, Slave_Type and Alias that have specific behavior if path == "BaseParams.IEC_Channel": - self.PlugParent.SetSlavePosition(position, value) + self.CTNParent.SetSlavePosition(position, value) elif path == "SlaveParams.Type": - self.PlugParent.SetSlaveType(position, value) - slave_type = self.PlugParent.GetSlaveType(self.GetSlavePos()) + self.CTNParent.SetSlaveType(position, value) + slave_type = self.CTNParent.GetSlaveType(self.GetSlavePos()) value = (slave_type["device_type"], slave_type) changed = True elif path == "SlaveParams.Alias": - self.PlugParent.SetSlaveAlias(position, value) + self.CTNParent.SetSlaveAlias(position, value) changed = True return value, changed def GetSlaveInfos(self): - return self.PlugParent.GetSlaveInfos(self.GetSlavePos()) + return self.CTNParent.GetSlaveInfos(self.GetSlavePos()) def GetVariableLocationTree(self): return {"name": self.BaseParams.getName(), - "type": LOCATION_PLUGIN, + "type": LOCATION_CONFNODE, "location": self.GetFullIEC_Channel(), - "children": self.PlugParent.GetDeviceLocationTree(self.GetSlavePos(), self.GetCurrentLocation(), self.BaseParams.getName()) + "children": self.CTNParent.GetDeviceLocationTree(self.GetSlavePos(), self.GetCurrentLocation(), self.BaseParams.getName()) } - PluginMethods = [ - {"bitmap" : os.path.join(PLUGINFOLDER, "images", "editSlave"), + ConfNodeMethods = [ + {"bitmap" : os.path.join(CONFNODEFOLDER, "images", "editSlave"), "name" : _("Edit Slave"), "tooltip" : _("Edit Slave"), "method" : "_OpenView"}, ] - def PlugGenerate_C(self, buildpath, locations): + def CTNGenerate_C(self, buildpath, locations): """ Generate C code - @param current_location: Tupple containing plugin IEC location : %I0.0.4.5 => (0,0,4,5) + @param current_location: Tupple containing confnode IEC location : %I0.0.4.5 => (0,0,4,5) @param locations: List of complete variables locations \ [{"IEC_TYPE" : the IEC type (i.e. "INT", "STRING", ...) "NAME" : name of the variable (generally "__IW0_1_2" style) @@ -172,7 +172,7 @@ ("ActualPosition", 0x6064, 0x00, "DINT", "I"), ] - class _EthercatCIA402SlavePlug(_EthercatSlavePlug): + class _EthercatCIA402SlaveCTN(_EthercatSlaveCTN): XSD = """ @@ -186,17 +186,17 @@ NODE_PROFILE = 402 EditorType = CIA402NodeEditor - PluginMethods = [ - {"bitmap" : os.path.join(PLUGINFOLDER, "images", "editCIA402Slave"), + ConfNodeMethods = [ + {"bitmap" : os.path.join(CONFNODEFOLDER, "images", "editCIA402Slave"), "name" : _("Edit CIA402 Slave"), "tooltip" : _("Edit CIA402 Slave"), "method" : "_OpenView"}, ] - def PlugGenerate_C(self, buildpath, locations): + def CTNGenerate_C(self, buildpath, locations): """ Generate C code - @param current_location: Tupple containing plugin IEC location : %I0.0.4.5 => (0,0,4,5) + @param current_location: Tupple containing confnode IEC location : %I0.0.4.5 => (0,0,4,5) @param locations: List of complete variables locations \ [{"IEC_TYPE" : the IEC type (i.e. "INT", "STRING", ...) "NAME" : name of the variable (generally "__IW0_1_2" style) @@ -237,11 +237,11 @@ str_completion["init_entry_variables"].append( " __CIA402Node_%(location)s.%(name)s = %(var_name)s;" % var_infos) - self.PlugParent.FileGenerator.DeclareVariable( + self.CTNParent.FileGenerator.DeclareVariable( self.GetSlavePos(), var_infos["index"], var_infos["subindex"], var_infos["var_type"], var_infos["dir"], var_infos["var_name"]) - params = self.PlugParams[1].getElementInfos(self.PlugParams[0]) + params = self.CTNParams[1].getElementInfos(self.CTNParams[0]) for param in params["children"]: if param["value"] is not None: param_infos = { @@ -266,7 +266,7 @@ cia402nodefile.write(plc_cia402node_code % str_completion) cia402nodefile.close() - return [(Gen_CIA402Nodefile_path, '"-I%s"'%os.path.abspath(self.GetPlugRoot().GetIECLibPath()))],"",True + return [(Gen_CIA402Nodefile_path, '"-I%s"'%os.path.abspath(self.GetCTRoot().GetIECLibPath()))],"",True #-------------------------------------------------- # Ethercat MASTER @@ -311,7 +311,7 @@ slave_info.setRevisionNo(ExtractHexDecValue(type_infos["revision_number"])) setattr(cls, "setType", setType) -class _EthercatPlug: +class _EthercatCTN: XSD = """ @@ -323,9 +323,9 @@ """ - PlugChildsTypes = [("EthercatSlave", _EthercatSlavePlug, "Ethercat Slave")] + CTNChildrenTypes = [("EthercatSlave", _EthercatSlaveCTN, "Ethercat Slave")] if HAS_MCL: - PlugChildsTypes.append(("EthercatCIA402Slave", _EthercatCIA402SlavePlug, "Ethercat CIA402 Slave")) + CTNChildrenTypes.append(("EthercatCIA402Slave", _EthercatCIA402SlaveCTN, "Ethercat CIA402 Slave")) def __init__(self): filepath = self.ConfigFileName() @@ -342,16 +342,16 @@ self.CreateConfigBuffer(True) else: self.CreateConfigBuffer(False) - self.OnPlugSave() + self.OnCTNSave() def ExtractHexDecValue(self, value): return ExtractHexDecValue(value) def GetSizeOfType(self, type): - return TYPECONVERSION.get(self.GetPlugRoot().GetBaseType(type), None) + return TYPECONVERSION.get(self.GetCTRoot().GetBaseType(type), None) def ConfigFileName(self): - return os.path.join(self.PlugPath(), "config.xml") + return os.path.join(self.CTNPath(), "config.xml") def GetSlaves(self): slaves = [] @@ -368,10 +368,10 @@ return None def _ScanNetwork(self): - app_frame = self.GetPlugRoot().AppFrame + app_frame = self.GetCTRoot().AppFrame execute = True - if len(self.PluggedChilds) > 0: + if len(self.Children) > 0: dialog = wx.MessageDialog(app_frame, _("The current network configuration will be deleted.\nDo you want to continue?"), _("Scan Network"), @@ -386,7 +386,7 @@ dialog.ShowModal() dialog.Destroy() elif returnVal is not None: - for child in self.IECSortedChilds(): + for child in self.IECSortedChildren(): self._doRemoveChild(child) for slave in returnVal: @@ -397,46 +397,46 @@ } device = self.GetModuleInfos(type_infos) if device is not None: - if HAS_MCL and _EthercatCIA402SlavePlug.NODE_PROFILE in device.GetProfileNumbers(): - PlugType = "EthercatCIA402Slave" + if HAS_MCL and _EthercatCIA402SlaveCTN.NODE_PROFILE in device.GetProfileNumbers(): + CTNType = "EthercatCIA402Slave" else: - PlugType = "EthercatSlave" - self.PlugAddChild("slave%s" % slave["idx"], PlugType, slave["idx"]) + CTNType = "EthercatSlave" + self.CTNAddChild("slave%s" % slave["idx"], CTNType, slave["idx"]) self.SetSlaveAlias(slave["idx"], slave["alias"]) type_infos["device_type"] = device.getType().getcontent() self.SetSlaveType(slave["idx"], type_infos) - def PlugAddChild(self, PlugName, PlugType, IEC_Channel=0): + def CTNAddChild(self, CTNName, CTNType, IEC_Channel=0): """ - Create the plugins that may be added as child to this node self - @param PlugType: string desining the plugin class name (get name from PlugChildsTypes) - @param PlugName: string for the name of the plugin instance + Create the confnodes that may be added as child to this node self + @param CTNType: string desining the confnode class name (get name from CTNChildrenTypes) + @param CTNName: string for the name of the confnode instance """ - newPluginOpj = PlugTemplate.PlugAddChild(self, PlugName, PlugType, IEC_Channel) - - slave = self.GetSlave(newPluginOpj.BaseParams.getIEC_Channel()) + newConfNodeOpj = ConfigTreeNode.CTNAddChild(self, CTNName, CTNType, IEC_Channel) + + slave = self.GetSlave(newConfNodeOpj.BaseParams.getIEC_Channel()) if slave is None: slave = EtherCATConfigClasses["Config_Slave"]() slave_infos = slave.getInfo() slave_infos.setName("undefined") - slave_infos.setPhysAddr(newPluginOpj.BaseParams.getIEC_Channel()) + slave_infos.setPhysAddr(newConfNodeOpj.BaseParams.getIEC_Channel()) slave_infos.setAutoIncAddr(0) self.Config.getConfig().appendSlave(slave) self.BufferConfig() - self.OnPlugSave() - - return newPluginOpj - - def _doRemoveChild(self, PlugInstance): - slave_pos = PlugInstance.GetSlavePos() + self.OnCTNSave() + + return newConfNodeOpj + + def _doRemoveChild(self, CTNInstance): + slave_pos = CTNInstance.GetSlavePos() config = self.Config.getConfig() for idx, slave in enumerate(config.getSlave()): slave_infos = slave.getInfo() if slave_infos.getPhysAddr() == slave_pos: config.removeSlave(idx) self.BufferConfig() - self.OnPlugSave() - PlugTemplate._doRemoveChild(self, PlugInstance) + self.OnCTNSave() + ConfigTreeNode._doRemoveChild(self, CTNInstance) def SetSlavePosition(self, slave_pos, new_pos): slave = self.GetSlave(slave_pos) @@ -501,10 +501,10 @@ return None def GetModuleInfos(self, type_infos): - return self.PlugParent.GetModuleInfos(type_infos) + return self.CTNParent.GetModuleInfos(type_infos) def GetSlaveTypesLibrary(self, profile_filter=None): - return self.PlugParent.GetModulesLibrary(profile_filter) + return self.CTNParent.GetModulesLibrary(profile_filter) def GetDeviceLocationTree(self, slave_pos, current_location, device_name): slave = self.GetSlave(slave_pos) @@ -548,10 +548,10 @@ return vars - def PlugTestModified(self): + def CTNTestModified(self): return self.ChangesToSave or not self.ConfigIsSaved() - def OnPlugSave(self): + def OnCTNSave(self): filepath = self.ConfigFileName() text = "\n" @@ -575,29 +575,29 @@ self.FileGenerator = _EthercatCFileGenerator(self) - LocationCFilesAndCFLAGS, LDFLAGS, extra_files = PlugTemplate._Generate_C(self, buildpath, locations) + LocationCFilesAndCFLAGS, LDFLAGS, extra_files = ConfigTreeNode._Generate_C(self, buildpath, locations) self.FileGenerator.GenerateCFile(Gen_Ethercatfile_path, location_str, self.EtherlabNode) LocationCFilesAndCFLAGS.append( (current_location, - [(Gen_Ethercatfile_path, '"-I%s"'%os.path.abspath(self.GetPlugRoot().GetIECLibPath()))], + [(Gen_Ethercatfile_path, '"-I%s"'%os.path.abspath(self.GetCTRoot().GetIECLibPath()))], True)) LDFLAGS.append("-lethercat -lrtdm") return LocationCFilesAndCFLAGS, LDFLAGS, extra_files - PluginMethods = [ - {"bitmap" : os.path.join(PLUGINFOLDER, "images", "ScanNetwork"), + ConfNodeMethods = [ + {"bitmap" : os.path.join(CONFNODEFOLDER, "images", "ScanNetwork"), "name" : _("Scan Network"), "tooltip" : _("Scan Network"), "method" : "_ScanNetwork"}, ] - def PlugGenerate_C(self, buildpath, locations): + def CTNGenerate_C(self, buildpath, locations): """ Generate C code - @param current_location: Tupple containing plugin IEC location : %I0.0.4.5 => (0,0,4,5) + @param current_location: Tupple containing confnode IEC location : %I0.0.4.5 => (0,0,4,5) @param locations: List of complete variables locations \ [{"IEC_TYPE" : the IEC type (i.e. "INT", "STRING", ...) "NAME" : name of the variable (generally "__IW0_1_2" style) @@ -933,7 +933,7 @@ self.Controler.GetSizeOfType(entry_type)): raise ValueError, message else: - self.Controler.GetPlugRoot().logger.write_warning(message + "\n") + self.Controler.GetCTRoot().logger.write_warning(message + "\n") if (entry_infos["dir"] == "I" and pdo_type != "Inputs" or entry_infos["dir"] == "Q" and pdo_type != "Outputs"): @@ -1015,7 +1015,7 @@ self.Controler.GetSizeOfType(entry["Type"])): raise ValueError, message else: - self.Controler.GetPlugRoot().logger.write_warning(message + "\n") + self.Controler.GetCTRoot().logger.write_warning(message + "\n") if entry_infos["dir"] == "I" and entry["PDOMapping"] in ["T", "RT"]: pdo_type = "Inputs" @@ -1094,7 +1094,7 @@ etherlabfile.close() #-------------------------------------------------- -# Ethercat Plugin +# Ethercat ConfNode #-------------------------------------------------- EtherCATInfoClasses = GenerateClassesFromXSD(os.path.join(os.path.dirname(__file__), "EtherCATInfo.xsd")) @@ -1317,36 +1317,36 @@ class RootClass: - PlugChildsTypes = [("EthercatNode",_EthercatPlug,"Ethercat Master")] + CTNChildrenTypes = [("EthercatNode",_EthercatCTN,"Ethercat Master")] def __init__(self): self.LoadModulesLibrary() def GetModulesLibraryPath(self): - library_path = os.path.join(self.PlugPath(), "modules") + library_path = os.path.join(self.CTNPath(), "modules") if not os.path.exists(library_path): os.mkdir(library_path) return library_path def _ImportModuleLibrary(self): - dialog = wx.FileDialog(self.GetPlugRoot().AppFrame, _("Choose an XML file"), os.getcwd(), "", _("XML files (*.xml)|*.xml|All files|*.*"), wx.OPEN) + dialog = wx.FileDialog(self.GetCTRoot().AppFrame, _("Choose an XML file"), os.getcwd(), "", _("XML files (*.xml)|*.xml|All files|*.*"), wx.OPEN) if dialog.ShowModal() == wx.ID_OK: filepath = dialog.GetPath() if os.path.isfile(filepath): shutil.copy(filepath, self.GetModulesLibraryPath()) self.LoadModulesLibrary() else: - self.GetPlugRoot().logger.write_error(_("No such XML file: %s\n") % filepath) + self.GetCTRoot().logger.write_error(_("No such XML file: %s\n") % filepath) dialog.Destroy() - PluginMethods = [ - {"bitmap" : os.path.join(PLUGINFOLDER, "images", "ImportESI"), + ConfNodeMethods = [ + {"bitmap" : os.path.join(CONFNODEFOLDER, "images", "ImportESI"), "name" : _("Import module library"), "tooltip" : _("Import module library"), "method" : "_ImportModuleLibrary"}, ] - def PlugGenerate_C(self, buildpath, locations): + def CTNGenerate_C(self, buildpath, locations): return [],"",False def LoadModulesLibrary(self):