etherlab/EthercatSlave.py
changeset 2355 fec77f2b9e07
parent 2353 8f1a2846b2f5
child 2356 c26e0c66d8d5
equal deleted inserted replaced
2354:9460872f1440 2355:fec77f2b9e07
    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())