--- a/etherlab/ConfigEditor.py Mon Jun 03 08:24:08 2013 +0200
+++ b/etherlab/ConfigEditor.py Wed Apr 02 15:03:32 2014 +0200
@@ -13,6 +13,10 @@
from util.BitmapLibrary import GetBitmap
from controls.CustomStyledTextCtrl import NAVIGATION_KEYS
+# ----------------------------------------------------------------------- +from EtherCATManagementEditor import EtherCATManagementTreebook, MasterStatePanelClass +# ----------------------------------------------------------------------- [ETHERCAT_VENDOR, ETHERCAT_GROUP, ETHERCAT_DEVICE] = range(3)
def AppendMenu(parent, help, id, kind, text):
@@ -240,7 +244,10 @@
class NodeEditor(ConfTreeNodeEditor):
- (_("Ethercat node"), "_create_EthercatNodeEditor")]
+ (_("Ethercat node"), "_create_EthercatNodeEditor"), + # Add Notebook Tab for EtherCAT Management Treebook + (_("EtherCAT Management"), "_create_EtherCATManagementEditor") def _create_EthercatNodeEditor(self, prnt):
self.EthercatNodeEditor = wx.Panel(prnt, style=wx.TAB_TRAVERSAL)
@@ -264,6 +271,9 @@
def __init__(self, parent, controler, window):
ConfTreeNodeEditor.__init__(self, parent, controler, window)
+ # add Contoler for use EthercatSlave.py Method + self.Controler = controler def GetBufferState(self):
@@ -272,8 +282,39 @@
self.NodeVariables.RefreshView()
+ # -------------------For EtherCAT Management ---------------------------------------------- + def _create_EtherCATManagementEditor(self, prnt): + self.EtherCATManagementEditor = wx.ScrolledWindow(prnt, + style=wx.TAB_TRAVERSAL|wx.HSCROLL|wx.VSCROLL) + self.EtherCATManagementEditor.Bind(wx.EVT_SIZE, self.OnResize) + self.EtherCATManagermentEditor_Main_Sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5) + self.EtherCATManagermentEditor_Main_Sizer.AddGrowableCol(0) + self.EtherCATManagermentEditor_Main_Sizer.AddGrowableRow(0) + self.EtherCATManagementTreebook = EtherCATManagementTreebook(self.EtherCATManagementEditor, self.Controler, self) + self.EtherCATManagermentEditor_Main_Sizer.AddSizer(self.EtherCATManagementTreebook, border=10, flag=wx.GROW) + self.EtherCATManagementEditor.SetSizer(self.EtherCATManagermentEditor_Main_Sizer) + return self.EtherCATManagementEditor + def OnResize(self, event): + self.EtherCATManagementEditor.GetBestSize() + xstart, ystart = self.EtherCATManagementEditor.GetViewStart() + window_size = self.EtherCATManagementEditor.GetClientSize() + maxx, maxy = self.EtherCATManagementEditor.GetMinSize() + posx = max(0, min(xstart, (maxx - window_size[0]) / SCROLLBAR_UNIT)) + posy = max(0, min(ystart, (maxy - window_size[1]) / SCROLLBAR_UNIT)) + self.EtherCATManagementEditor.Scroll(posx, posy) + self.EtherCATManagementEditor.SetScrollbars(SCROLLBAR_UNIT, SCROLLBAR_UNIT, + maxx / SCROLLBAR_UNIT, maxy / SCROLLBAR_UNIT, posx, posy) + # ------------------------------------------------------------------------------------------------------- CIA402NodeEditor = NodeEditor
def GetProcessVariablesTableColnames():
@@ -537,7 +578,36 @@
class MasterEditor(ConfTreeNodeEditor):
- (_("Network"), "_create_EthercatMasterEditor")]
+ (_("Network"), "_create_EthercatMasterEditor"), + (_("Master State"), "_create_MasterStateEditor") + def _create_MasterStateEditor(self, prnt): + self.MasterStateEditor = wx.ScrolledWindow(prnt, style=wx.TAB_TRAVERSAL|wx.HSCROLL|wx.VSCROLL) + self.MasterStateEditor.Bind(wx.EVT_SIZE, self.OnResize) + self.MasterStateEditor_Panel_Main_Sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5) + self.MasterStateEditor_Panel_Main_Sizer.AddGrowableCol(0) + self.MasterStateEditor_Panel_Main_Sizer.AddGrowableRow(0) + self.MasterStateEditor_Panel = MasterStatePanelClass(self.MasterStateEditor, self.Controler) + self.MasterStateEditor_Panel_Main_Sizer.AddSizer(self.MasterStateEditor_Panel, border=10, flag=wx.GROW) + self.MasterStateEditor.SetSizer(self.MasterStateEditor_Panel_Main_Sizer) + return self.MasterStateEditor + def OnResize(self, event): + self.MasterStateEditor.GetBestSize() + xstart, ystart = self.MasterStateEditor.GetViewStart() + window_size = self.MasterStateEditor.GetClientSize() + maxx, maxy = self.MasterStateEditor.GetMinSize() + posx = max(0, min(xstart, (maxx - window_size[0]) / SCROLLBAR_UNIT)) + posy = max(0, min(ystart, (maxy - window_size[1]) / SCROLLBAR_UNIT)) + self.MasterStateEditor.Scroll(posx, posy) + self.MasterStateEditor.SetScrollbars(SCROLLBAR_UNIT, SCROLLBAR_UNIT, + maxx / SCROLLBAR_UNIT, maxy / SCROLLBAR_UNIT, posx, posy) def _create_EthercatMasterEditor(self, prnt):
self.EthercatMasterEditor = wx.ScrolledWindow(prnt,
@@ -639,6 +709,10 @@
def __init__(self, parent, controler, window):
ConfTreeNodeEditor.__init__(self, parent, controler, window)
+ # ------------------------------------------------------------------ + self.Controler = controler + # ------------------------------------------------------------------ self.ProcessVariables = []
self.NodesFilterFirstCharacter = True
@@ -968,6 +1042,33 @@
self.EthercatMasterEditor.SetScrollbars(SCROLLBAR_UNIT, SCROLLBAR_UNIT,
maxx / SCROLLBAR_UNIT, maxy / SCROLLBAR_UNIT, posx, posy)
+ #def OnButtonClick(self, event): + # self.MasterState = self.Controler.getMasterState() + # self.Phase.SetValue(self.MasterState["phase"]) + # self.Active.SetValue(self.MasterState["active"]) + # self.SlaveCount.SetValue(self.MasterState["slave"]) + # self.MacAddress.SetValue(self.MasterState["MAC"]) + # self.LinkState.SetValue(self.MasterState["link"]) + # self.TxFrames.SetValue(self.MasterState["TXframe"]) + # self.RxFrames.SetValue(self.MasterState["RXframe"]) + # self.TxByte.SetValue(self.MasterState["TXbyte"]) + # self.TxError.SetValue(self.MasterState["TXerror"]) + # self.LostFrames.SetValue(self.MasterState["lost"]) + # self.TxFrameRate1.SetValue(self.MasterState["TXframerate1"]) + # self.TxFrameRate2.SetValue(self.MasterState["TXframerate2"]) + # self.TxFrameRate3.SetValue(self.MasterState["TXframerate3"]) + # self.TxRate1.SetValue(self.MasterState["TXrate1"]) + # self.TxRate2.SetValue(self.MasterState["TXrate2"]) + # self.TxRate3.SetValue(self.MasterState["TXrate3"]) + # self.LossRate1.SetValue(self.MasterState["loss1"]) + # self.LossRate2.SetValue(self.MasterState["loss2"]) + # self.LossRate3.SetValue(self.MasterState["loss3"]) + # self.FrameLoss1.SetValue(self.MasterState["frameloss1"]) + # self.FrameLoss2.SetValue(self.MasterState["frameloss2"]) + # self.FrameLoss3.SetValue(self.MasterState["frameloss3"]) class LibraryEditorSizer(wx.FlexGridSizer):
@@ -1289,5 +1390,4 @@
self.ModuleLibraryEditor.SetScrollbars(SCROLLBAR_UNIT, SCROLLBAR_UNIT,
maxx / SCROLLBAR_UNIT, maxy / SCROLLBAR_UNIT, posx, posy)
\ No newline at end of file
--- a/etherlab/EthercatCIA402Slave.py Mon Jun 03 08:24:08 2013 +0200
+++ b/etherlab/EthercatCIA402Slave.py Wed Apr 02 15:03:32 2014 +0200
@@ -5,9 +5,13 @@
from PLCControler import LOCATION_CONFNODE, LOCATION_MODULE, LOCATION_GROUP, LOCATION_VAR_INPUT, LOCATION_VAR_OUTPUT, LOCATION_VAR_MEMORY
from MotionLibrary import Headers, AxisXSD
-from EthercatSlave import _EthercatSlaveCTN
+from EthercatSlave import _EthercatSlaveCTN, _CommonSlave from ConfigEditor import CIA402NodeEditor
+#------------------------------------------ +#from CommonSlave import _CommonSlave +#------------------------------------------ ("ControlWord", 0x6040, 0x00, "UINT", "Q"),
("TargetPosition", 0x607a, 0x00, "DINT", "Q"),
@@ -102,7 +106,15 @@
"tooltip" : _("Initiate Drag'n drop of Axis ref located variable"),
"method" : "_getCIA402AxisRef",
+#-------------------------------------------------- +#-------------------------------------------------- + # ----------- call ethercat mng. function -------------- + self.CommonMethod = _CommonSlave(self) @@ -268,3 +280,4 @@
return [(Gen_CIA402Nodefile_path, '"-I%s"'%os.path.abspath(self.GetCTRoot().GetIECLibPath()))],"",True
\ No newline at end of file
--- a/etherlab/EthercatMaster.py Mon Jun 03 08:24:08 2013 +0200
+++ b/etherlab/EthercatMaster.py Wed Apr 02 15:03:32 2014 +0200
@@ -11,7 +11,7 @@
from dialogs import BrowseValuesLibraryDialog
from IDEFrame import TITLE, FILEMENU, PROJECTTREE
-from EthercatSlave import _EthercatSlaveCTN, ExtractHexDecValue, GenerateHexDecValue, TYPECONVERSION, VARCLASSCONVERSION
+from EthercatSlave import _EthercatSlaveCTN, ExtractHexDecValue, GenerateHexDecValue, TYPECONVERSION, VARCLASSCONVERSION, _CommonSlave from EthercatCFileGenerator import _EthercatCFileGenerator
from ConfigEditor import MasterEditor
from POULibrary import POULibrary
@@ -73,6 +73,7 @@
ethelabfile.write(etherlab_ext_code)
+ runtimefile_path = os.path.join(os.path.split(__file__)[0], "runtime_etherlab.py") return ((["etherlab_ext"], [(Gen_etherlabfile_path, IECCFLAGS)], True), "",
("runtime_etherlab.py", file(GetLocalPath("runtime_etherlab.py"))))
@@ -208,7 +209,7 @@
ProcessVariablesClasses = GenerateClassesFromXSDstring(ProcessVariablesXSD)
CTNChildrenTypes = [("EthercatSlave", _EthercatSlaveCTN, "Ethercat Slave")]
CTNChildrenTypes.append(("EthercatCIA402Slave", _EthercatCIA402SlaveCTN, "Ethercat CIA402 Slave"))
@@ -246,6 +247,9 @@
+ # ----------- call ethercat mng. function -------------- + self.CommonMethod = _CommonSlave(self) @@ -539,6 +543,7 @@
device, module_extra_params = self.GetModuleInfos(type_infos)
entries = device.GetEntriesList(limits)
entries_list = entries.items()
--- a/etherlab/EthercatSlave.py Mon Jun 03 08:24:08 2013 +0200
+++ b/etherlab/EthercatSlave.py Wed Apr 02 15:03:32 2014 +0200
@@ -5,6 +5,11 @@
from ConfigEditor import NodeEditor
+#------------------------------------------ +from CommonEtherCATFunction import _CommonSlave +#------------------------------------------ TYPECONVERSION = {"BOOL" : "X", "SINT" : "B", "INT" : "W", "DINT" : "D", "LINT" : "L",
"USINT" : "B", "UINT" : "W", "UDINT" : "D", "ULINT" : "L",
"BYTE" : "B", "WORD" : "W", "DWORD" : "D", "LWORD" : "L"}
@@ -42,15 +47,19 @@
#--------------------------------------------------
#--------------------------------------------------
+ # ----------- call ethercat mng. function -------------- + self.CommonMethod = _CommonSlave(self) @@ -97,12 +106,18 @@
def SetParamsAttribute(self, path, value):
position = self.BaseParams.getIEC_Channel()
if path == "SlaveParams.Type":
self.CTNParent.SetSlaveType(position, value)
slave_type = self.CTNParent.GetSlaveType(self.GetSlavePos())
value = (slave_type["device_type"], slave_type)
+ #if self._View is not None: + #wx.CallAfter(self._View.EtherCATManagementTreebook.SlaveStatePanel.RefreshSlaveInfos()) + #self._View.EtherCATManagementTreebook.SlaveStatePanel.RefreshSlaveInfos() + #self._View.EtherCATManagementTreebook.PDOMonitoringPanel.PDOInfoUpdate() + #self._View.EtherCATManagementTreebook.SmartView.Create_SmartView() elif path == "SlaveParams.Alias":
self.CTNParent.SetSlaveAlias(position, value)
--- a/etherlab/etherlab.py Mon Jun 03 08:24:08 2013 +0200
+++ b/etherlab/etherlab.py Wed Apr 02 15:03:32 2014 +0200
@@ -159,7 +159,7 @@
"BitSize": object.getBitSize(),
"PDOMapping": entry_pdomapping}
for TxPdo in self.getTxPdo():
ExtractPdoInfos(TxPdo, "Transmit", entries, limits)
for RxPdo in self.getRxPdo():
@@ -167,7 +167,7 @@
setattr(cls, "GetEntriesList", GetEntriesList)
def GetSyncManagers(self):
for sync_manager in self.getSm():
@@ -287,33 +287,36 @@
xml_tree = minidom.parse(xmlfile)
+ self.modules_infos = None for child in xml_tree.childNodes:
if child.nodeType == xml_tree.ELEMENT_NODE and child.nodeName == "EtherCATInfo":
- modules_infos = EtherCATInfoClasses["EtherCATInfo.xsd"]["EtherCATInfo"]()
- modules_infos.loadXMLTree(child)
+ self.modules_infos = EtherCATInfoClasses["EtherCATInfo.xsd"]["EtherCATInfo"]() + self.modules_infos.loadXMLTree(child) - if modules_infos is not None:
- vendor = modules_infos.getVendor()
+ if self.modules_infos is not None: + vendor = self.modules_infos.getVendor() vendor_category = self.Library.setdefault(ExtractHexDecValue(vendor.getId()),
{"name": ExtractName(vendor.getName(), _("Miscellaneous")),
- for group in modules_infos.getDescriptions().getGroups().getGroup():
+ for group in self.modules_infos.getDescriptions().getGroups().getGroup(): group_type = group.getType()
vendor_category["groups"].setdefault(group_type, {"name": ExtractName(group.getName(), group_type),
"parent": group.getParentGroup(),
"order": group.getSortOrder(),
+ "value": group.getcontent()["value"], - for device in modules_infos.getDescriptions().getDevices().getDevice():
+ for device in self.modules_infos.getDescriptions().getDevices().getDevice(): device_group = device.getGroupType()
if not vendor_category["groups"].has_key(device_group):
raise ValueError, "Not such group \"%\"" % device_group
vendor_category["groups"][device_group]["devices"].append((device.getType().getcontent(), device))
def GetModulesLibrary(self, profile_filter=None):
@@ -375,6 +378,8 @@
revision_number = ExtractHexDecValue(device_infos.getType().getRevisionNo())
if (product_code == ExtractHexDecValue(module_infos["product_code"]) and
revision_number == ExtractHexDecValue(module_infos["revision_number"])):
+ self.cntdevice = device_infos + self.cntdeviceType = device_type return device_infos, self.GetModuleExtraParams(vendor, product_code, revision_number)
@@ -459,7 +464,8 @@
CTNChildrenTypes = [("EthercatNode",_EthercatCTN,"Ethercat Master")]
EditorType = LibraryEditor
self.ModulesLibrary = None
self.LoadModulesLibrary()
@@ -502,4 +508,3 @@
def GetModuleInfos(self, module_infos):
return self.ModulesLibrary.GetModuleInfos(module_infos)