15 from ConfigTreeNode import ConfigTreeNode |
15 from ConfigTreeNode import ConfigTreeNode |
16 |
16 |
17 from ConfigEditor import NodeEditor |
17 from ConfigEditor import NodeEditor |
18 |
18 |
19 #------------------------------------------ |
19 #------------------------------------------ |
20 from CommonEtherCATFunction import _CommonSlave |
20 from CommonEtherCATFunction import _CommonSlave |
21 #------------------------------------------ |
21 #------------------------------------------ |
22 |
22 |
23 |
23 |
24 TYPECONVERSION = {"BOOL" : "X", "SINT" : "B", "INT" : "W", "DINT" : "D", "LINT" : "L", |
24 TYPECONVERSION = {"BOOL" : "X", "SINT" : "B", "INT" : "W", "DINT" : "D", "LINT" : "L", |
25 "USINT" : "B", "UINT" : "W", "UDINT" : "D", "ULINT" : "L", |
25 "USINT" : "B", "UINT" : "W", "UDINT" : "D", "ULINT" : "L", |
26 "BYTE" : "B", "WORD" : "W", "DWORD" : "D", "LWORD" : "L"} |
26 "BYTE" : "B", "WORD" : "W", "DWORD" : "D", "LWORD" : "L"} |
27 |
27 |
28 DATATYPECONVERSION = {"BOOL" : "BIT", "SINT" : "S8", "INT" : "S16", "DINT" : "S32", "LINT" : "S64", |
28 DATATYPECONVERSION = {"BOOL" : "BIT", "SINT" : "S8", "INT" : "S16", "DINT" : "S32", "LINT" : "S64", |
29 "USINT" : "U8", "UINT" : "U16", "UDINT" : "U32", "ULINT" : "U64", |
29 "USINT" : "U8", "UINT" : "U16", "UDINT" : "U32", "ULINT" : "U64", |
30 "BYTE" : "U8", "WORD" : "U16", "DWORD" : "U32", "LWORD" : "U64"} |
30 "BYTE" : "U8", "WORD" : "U16", "DWORD" : "U32", "LWORD" : "U64"} |
31 |
31 |
32 VARCLASSCONVERSION = {"T": LOCATION_VAR_INPUT, "R": LOCATION_VAR_OUTPUT, "RT": LOCATION_VAR_MEMORY} |
32 VARCLASSCONVERSION = {"T": LOCATION_VAR_INPUT, "R": LOCATION_VAR_OUTPUT, "RT": LOCATION_VAR_MEMORY} |
33 |
33 |
34 def ExtractHexDecValue(value): |
34 def ExtractHexDecValue(value): |
64 #-------------------------------------------------- |
64 #-------------------------------------------------- |
65 |
65 |
66 class _EthercatSlaveCTN: |
66 class _EthercatSlaveCTN: |
67 NODE_PROFILE = None |
67 NODE_PROFILE = None |
68 EditorType = NodeEditor |
68 EditorType = NodeEditor |
69 |
69 |
70 def __init__(self): |
70 def __init__(self): |
71 # ----------- call ethercat mng. function -------------- |
71 # ----------- call ethercat mng. function -------------- |
72 self.CommonMethod = _CommonSlave(self) |
72 self.CommonMethod = _CommonSlave(self) |
73 |
73 |
74 def GetIconName(self): |
74 def GetIconName(self): |
75 return "Slave" |
75 return "Slave" |
76 |
76 |
77 def ExtractHexDecValue(self, value): |
77 def ExtractHexDecValue(self, value): |
78 return ExtractHexDecValue(value) |
78 return ExtractHexDecValue(value) |
79 |
79 |
80 def GetSizeOfType(self, type): |
80 def GetSizeOfType(self, type): |
81 return TYPECONVERSION.get(self.GetCTRoot().GetBaseType(type), None) |
81 return TYPECONVERSION.get(self.GetCTRoot().GetBaseType(type), None) |
82 |
82 |
83 def GetSlavePos(self): |
83 def GetSlavePos(self): |
84 return self.BaseParams.getIEC_Channel() |
84 return self.BaseParams.getIEC_Channel() |
85 |
85 |
86 def GetParamsAttributes(self, path = None): |
86 def GetParamsAttributes(self, path = None): |
87 if path: |
87 if path: |
88 parts = path.split(".", 1) |
88 parts = path.split(".", 1) |
89 if self.MandatoryParams and parts[0] == self.MandatoryParams[0]: |
89 if self.MandatoryParams and parts[0] == self.MandatoryParams[0]: |
90 return self.MandatoryParams[1].getElementInfos(parts[0], parts[1]) |
90 return self.MandatoryParams[1].getElementInfos(parts[0], parts[1]) |
94 params = [] |
94 params = [] |
95 if self.CTNParams: |
95 if self.CTNParams: |
96 params.append(self.CTNParams[1].getElementInfos(self.CTNParams[0])) |
96 params.append(self.CTNParams[1].getElementInfos(self.CTNParams[0])) |
97 else: |
97 else: |
98 params.append({ |
98 params.append({ |
99 'use': 'required', |
99 'use': 'required', |
100 'type': 'element', |
100 'type': 'element', |
101 'name': 'SlaveParams', |
101 'name': 'SlaveParams', |
102 'value': None, |
102 'value': None, |
103 'children': [] |
103 'children': [] |
104 }) |
104 }) |
105 |
105 |
106 slave_type = self.CTNParent.GetSlaveType(self.GetSlavePos()) |
106 slave_type = self.CTNParent.GetSlaveType(self.GetSlavePos()) |
107 params[0]['children'].insert(0, |
107 params[0]['children'].insert(0, |
108 {'use': 'optional', |
108 {'use': 'optional', |
109 'type': self.CTNParent.GetSlaveTypesLibrary(self.NODE_PROFILE), |
109 'type': self.CTNParent.GetSlaveTypesLibrary(self.NODE_PROFILE), |
110 'name': 'Type', |
110 'name': 'Type', |
111 'value': (slave_type["device_type"], slave_type)}) |
111 'value': (slave_type["device_type"], slave_type)}) |
112 params[0]['children'].insert(1, |
112 params[0]['children'].insert(1, |
113 {'use': 'optional', |
113 {'use': 'optional', |
114 'type': 'unsignedLong', |
114 'type': 'unsignedLong', |
115 'name': 'Alias', |
115 'name': 'Alias', |
116 'value': self.CTNParent.GetSlaveAlias(self.GetSlavePos())}) |
116 'value': self.CTNParent.GetSlaveAlias(self.GetSlavePos())}) |
117 return params |
117 return params |
118 |
118 |
119 def SetParamsAttribute(self, path, value): |
119 def SetParamsAttribute(self, path, value): |
120 self.GetSlaveInfos() |
120 self.GetSlaveInfos() |
121 position = self.BaseParams.getIEC_Channel() |
121 position = self.BaseParams.getIEC_Channel() |
122 |
122 |
123 if path == "SlaveParams.Type": |
123 if path == "SlaveParams.Type": |
124 self.CTNParent.SetSlaveType(position, value) |
124 self.CTNParent.SetSlaveType(position, value) |
125 slave_type = self.CTNParent.GetSlaveType(self.GetSlavePos()) |
125 slave_type = self.CTNParent.GetSlaveType(self.GetSlavePos()) |
126 value = (slave_type["device_type"], slave_type) |
126 value = (slave_type["device_type"], slave_type) |
127 #if self._View is not None: |
127 #if self._View is not None: |
131 #self._View.EtherCATManagementTreebook.SmartView.Create_SmartView() |
131 #self._View.EtherCATManagementTreebook.SmartView.Create_SmartView() |
132 return value, True |
132 return value, True |
133 elif path == "SlaveParams.Alias": |
133 elif path == "SlaveParams.Alias": |
134 self.CTNParent.SetSlaveAlias(position, value) |
134 self.CTNParent.SetSlaveAlias(position, value) |
135 return value, True |
135 return value, True |
136 |
136 |
137 value, refresh = ConfigTreeNode.SetParamsAttribute(self, path, value) |
137 value, refresh = ConfigTreeNode.SetParamsAttribute(self, path, value) |
138 |
138 |
139 # Filter IEC_Channel, Slave_Type and Alias that have specific behavior |
139 # Filter IEC_Channel, Slave_Type and Alias that have specific behavior |
140 if path == "BaseParams.IEC_Channel" and value != position: |
140 if path == "BaseParams.IEC_Channel" and value != position: |
141 self.CTNParent.SetSlavePosition(position, value) |
141 self.CTNParent.SetSlavePosition(position, value) |
142 |
142 |
143 return value, refresh |
143 return value, refresh |
144 |
144 |
145 def GetSlaveInfos(self): |
145 def GetSlaveInfos(self): |
146 return self.CTNParent.GetSlaveInfos(self.GetSlavePos()) |
146 return self.CTNParent.GetSlaveInfos(self.GetSlavePos()) |
147 |
147 |
148 def GetSlaveVariables(self, limits): |
148 def GetSlaveVariables(self, limits): |
149 return self.CTNParent.GetSlaveVariables(self.GetSlavePos(), limits) |
149 return self.CTNParent.GetSlaveVariables(self.GetSlavePos(), limits) |
150 |
150 |
151 def GetVariableLocationTree(self): |
151 def GetVariableLocationTree(self): |
152 return {"name": self.BaseParams.getName(), |
152 return {"name": self.BaseParams.getName(), |
153 "type": LOCATION_CONFNODE, |
153 "type": LOCATION_CONFNODE, |
154 "location": self.GetFullIEC_Channel(), |
154 "location": self.GetFullIEC_Channel(), |
155 "children": self.CTNParent.GetDeviceLocationTree(self.GetSlavePos(), self.GetCurrentLocation(), self.BaseParams.getName()) |
155 "children": self.CTNParent.GetDeviceLocationTree(self.GetSlavePos(), self.GetCurrentLocation(), self.BaseParams.getName()) |