├── .idea └── vcs.xml ├── ControlCAN.dll ├── ControlCAN.h ├── ControlCAN.lib ├── DecodeCanFrame.py ├── Doc └── 【使用手册】CAN测试软件与接口函数使用手册.pdf ├── README.md ├── SystemConfigureration.py ├── ZLGCanControl.py ├── config.json └── kerneldlls ├── CAN232.dll ├── CANDTU_NET.dll ├── CANETE.dll ├── CANET_TCP.dll ├── CANWIFI_TCP.dll ├── CANWIFI_UDP.dll ├── PC104C2.dll ├── PC104CAN.dll ├── PCI5121.dll ├── PCI9820B.DLL ├── USBCAN_4E_U.dll ├── USBCAN_8E_U_x64.dll ├── gisadll.dll ├── gpcidll.dll ├── isa5420.dll ├── kerneldll.ini ├── pci9810b.dll ├── pci9820i.dll ├── pci9840b.dll ├── pcie9140_x64.dll ├── pec9920.dll └── usbcan.dll /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /ControlCAN.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/123zmz123/ZlgCanDriver/fa11e0b53758e094c211ad1806ea062d4ebeff6f/ControlCAN.dll -------------------------------------------------------------------------------- /ControlCAN.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/123zmz123/ZlgCanDriver/fa11e0b53758e094c211ad1806ea062d4ebeff6f/ControlCAN.h -------------------------------------------------------------------------------- /ControlCAN.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/123zmz123/ZlgCanDriver/fa11e0b53758e094c211ad1806ea062d4ebeff6f/ControlCAN.lib -------------------------------------------------------------------------------- /DecodeCanFrame.py: -------------------------------------------------------------------------------- 1 | from typing import List 2 | import re 3 | class FrameDefine: 4 | def __init__(self, start, length, i_d, name: str, resolution=1, offset=0): 5 | self.id = i_d 6 | self.name = name 7 | self.start = self.__start_trans(start) 8 | self.length = length 9 | self.resolution = resolution 10 | self.offset = offset 11 | 12 | def __start_trans(self, start): 13 | convert = [56, 58, 60, 62, 64, 66, 68, 70] 14 | return convert[start % 8] - start 15 | 16 | 17 | class iDecodeCanFrame: 18 | def __init__(self): 19 | self.slave_num = 16 20 | self.not_use = 0 21 | self.temprature_msg_parse_define_list = [] 22 | self.__can_frames_divide_by_id = {} 23 | self.decode_messages = {} 24 | self.volt_list = [0]*150 25 | self.re_finCellVolt = re.compile("Cell_Voltage_\d*") 26 | self.re_findDigital = re.compile("\d*") 27 | self.__message_parse_list_init() 28 | pass 29 | 30 | def __message_parse_list_init(self): 31 | # slave temperatures can frames define 32 | for index in range(self.slave_num): 33 | slave_name = "_slave_board_" + str(index) 34 | self.__can_frames_divide_by_id[0x220 + index] = [ 35 | FrameDefine(i_d=0x220 + index, name="CellTemperature_01" + slave_name, start=8, length=14, 36 | resolution=0.1, offset=-40), 37 | FrameDefine(i_d=0x220 + index, name="Temprature_state_0" + slave_name, start=6, length=2, resolution=1, 38 | offset=0), 39 | 40 | FrameDefine(i_d=0x220 + index, name="CellTemperature_02" + slave_name, start=24, length=14, 41 | resolution=0.1, offset=-40), 42 | FrameDefine(i_d=0x220 + index, name="Temprature_state_02" + slave_name, start=22, length=2, 43 | resolution=1, offset=0), 44 | 45 | FrameDefine(i_d=0x220 + index, name="CellTemperature_03" + slave_name, start=39, length=14, 46 | resolution=0.1, offset=-40), 47 | FrameDefine(i_d=0x220 + index, name="Temprature_state_03" + slave_name, start=37, length=2, 48 | resolution=1, offset=0), 49 | 50 | FrameDefine(i_d=0x220 + index, name="CellTemperature_04" + slave_name, start=48, length=14, 51 | resolution=0.1, offset=-40), 52 | FrameDefine(i_d=0x220 + index, name="Temprature_state_04" + slave_name, start=46, length=2, 53 | resolution=1, offset=0), 54 | ] 55 | self.__can_frames_divide_by_id[0x230 + index] = [ 56 | FrameDefine(i_d=0x230 + index, name="CellTemperature_05" + slave_name, start=8, length=14, 57 | resolution=0.1, offset=-40), 58 | FrameDefine(i_d=0x230 + index, name="Temprature_state_05" + slave_name, start=6, length=2, resolution=1, 59 | offset=0), 60 | 61 | FrameDefine(i_d=0x230 + index, name="CellTemperature_06" + slave_name, start=24, length=14, 62 | resolution=0.1, offset=-40), 63 | FrameDefine(i_d=0x230 + index, name="Temprature_state_06" + slave_name, start=22, length=2, 64 | resolution=1, offset=0), 65 | 66 | FrameDefine(i_d=0x230 + index, name="CellTemperature_07" + slave_name, start=39, length=14, 67 | resolution=0.1, offset=-40), 68 | FrameDefine(i_d=0x230 + index, name="Temprature_state_07" + slave_name, start=37, length=2, 69 | resolution=1, offset=0), 70 | 71 | FrameDefine(i_d=0x230 + index, name="CellTemperature_08" + slave_name, start=48, length=14, 72 | resolution=0.1, offset=-40), 73 | FrameDefine(i_d=0x230 + index, name="Temprature_state_08" + slave_name, start=46, length=2, 74 | resolution=1, offset=0), 75 | 76 | ] 77 | self.__can_frames_divide_by_id[0x240 + index] = [ 78 | FrameDefine(i_d=0x240 + index, name="CellTemperature_05" + slave_name, start=8, length=14, 79 | resolution=0.1, offset=-40), 80 | FrameDefine(i_d=0x240 + index, name="Temprature_state_05" + slave_name, start=6, length=2, resolution=1, 81 | offset=0), 82 | 83 | FrameDefine(i_d=0x240 + index, name="CellTemperature_06" + slave_name, start=24, length=14, 84 | resolution=0.1, offset=-40), 85 | FrameDefine(i_d=0x240 + index, name="Temprature_state_06" + slave_name, start=22, length=2, 86 | resolution=1, offset=0), 87 | 88 | FrameDefine(i_d=0x240 + index, name="CellTemperature_07" + slave_name, start=39, length=14, 89 | resolution=0.1, offset=-40), 90 | FrameDefine(i_d=0x240 + index, name="Temprature_state_07" + slave_name, start=37, length=2, 91 | resolution=1, offset=0), 92 | 93 | FrameDefine(i_d=0x240 + index, name="CellTemperature_08" + slave_name, start=48, length=14, 94 | resolution=0.1, offset=-40), 95 | FrameDefine(i_d=0x240 + index, name="Temprature_state_08" + slave_name, start=46, length=2, 96 | resolution=1, offset=0), 97 | ] 98 | self.__can_frames_divide_by_id[0x250 + index] = [ 99 | FrameDefine(i_d=0x250 + index, name="CellTemperature_05" + slave_name, start=8, length=14, 100 | resolution=0.1, offset=-40), 101 | FrameDefine(i_d=0x250 + index, name="Temprature_state_05" + slave_name, start=6, length=2, resolution=1, 102 | offset=0), 103 | 104 | FrameDefine(i_d=0x250 + index, name="CellTemperature_06" + slave_name, start=24, length=14, 105 | resolution=0.1, offset=-40), 106 | FrameDefine(i_d=0x250 + index, name="Temprature_state_06" + slave_name, start=22, length=2, 107 | resolution=1, offset=0), 108 | 109 | FrameDefine(i_d=0x250 + index, name="CellTemperature_07" + slave_name, start=39, length=14, 110 | resolution=0.1, offset=-40), 111 | FrameDefine(i_d=0x250 + index, name="Temprature_state_07" + slave_name, start=37, length=2, 112 | resolution=1, offset=0), 113 | 114 | FrameDefine(i_d=0x250 + index, name="CellTemperature_08" + slave_name, start=48, length=14, 115 | resolution=0.1, offset=-40), 116 | FrameDefine(i_d=0x250 + index, name="Temprature_state_08" + slave_name, start=46, length=2, 117 | resolution=1, offset=0), 118 | ] 119 | self.__can_frames_divide_by_id[0x260 + index] = [ 120 | FrameDefine(i_d=0x260 + index, name="CellTemperature_05" + slave_name, start=8, length=14, 121 | resolution=0.1, offset=-40), 122 | FrameDefine(i_d=0x260 + index, name="Temprature_state_05" + slave_name, start=6, length=2, resolution=1, 123 | offset=0), 124 | 125 | FrameDefine(i_d=0x260 + index, name="CellTemperature_06" + slave_name, start=24, length=14, 126 | resolution=0.1, offset=-40), 127 | FrameDefine(i_d=0x260 + index, name="Temprature_state_06" + slave_name, start=22, length=2, 128 | resolution=1, offset=0), 129 | 130 | FrameDefine(i_d=0x260 + index, name="CellTemperature_07" + slave_name, start=39, length=14, 131 | resolution=0.1, offset=-40), 132 | FrameDefine(i_d=0x260 + index, name="Temprature_state_07" + slave_name, start=37, length=2, 133 | resolution=1, offset=0), 134 | 135 | FrameDefine(i_d=0x260 + index, name="CellTemperature_08" + slave_name, start=48, length=14, 136 | resolution=0.1, offset=-40), 137 | FrameDefine(i_d=0x260 + index, name="Temprature_state_08" + slave_name, start=46, length=2, 138 | resolution=1, offset=0), 139 | ] 140 | self.__can_frames_divide_by_id[0x270 + index] = [ 141 | FrameDefine(i_d=0x270 + index, name="CellTemperature_05" + slave_name, start=8, length=14, 142 | resolution=0.1, offset=-40), 143 | FrameDefine(i_d=0x270 + index, name="Temprature_state_05" + slave_name, start=6, length=2, resolution=1, 144 | offset=0), 145 | 146 | FrameDefine(i_d=0x270 + index, name="CellTemperature_06" + slave_name, start=24, length=14, 147 | resolution=0.1, offset=-40), 148 | FrameDefine(i_d=0x270 + index, name="Temprature_state_06" + slave_name, start=22, length=2, 149 | resolution=1, offset=0), 150 | 151 | FrameDefine(i_d=0x270 + index, name="CellTemperature_07" + slave_name, start=39, length=14, 152 | resolution=0.1, offset=-40), 153 | FrameDefine(i_d=0x270 + index, name="Temprature_state_07" + slave_name, start=37, length=2, 154 | resolution=1, offset=0), 155 | 156 | FrameDefine(i_d=0x270 + index, name="CellTemperature_08" + slave_name, start=48, length=14, 157 | resolution=0.1, offset=-40), 158 | FrameDefine(i_d=0x270 + index, name="Temprature_state_08" + slave_name, start=46, length=2, 159 | resolution=1, offset=0), 160 | ] 161 | self.__can_frames_divide_by_id[0x280 + index] = [ 162 | FrameDefine(i_d=0x280 + index, name="CellTemperature_05" + slave_name, start=8, length=14, 163 | resolution=0.1, offset=-40), 164 | FrameDefine(i_d=0x280 + index, name="Temprature_state_05" + slave_name, start=6, length=2, resolution=1, 165 | offset=0), 166 | 167 | FrameDefine(i_d=0x280 + index, name="CellTemperature_06" + slave_name, start=24, length=14, 168 | resolution=0.1, offset=-40), 169 | FrameDefine(i_d=0x280 + index, name="Temprature_state_06" + slave_name, start=22, length=2, 170 | resolution=1, offset=0), 171 | 172 | FrameDefine(i_d=0x280 + index, name="CellTemperature_07" + slave_name, start=39, length=14, 173 | resolution=0.1, offset=-40), 174 | FrameDefine(i_d=0x280 + index, name="Temprature_state_07" + slave_name, start=37, length=2, 175 | resolution=1, offset=0), 176 | 177 | FrameDefine(i_d=0x280 + index, name="CellTemperature_08" + slave_name, start=48, length=14, 178 | resolution=0.1, offset=-40), 179 | FrameDefine(i_d=0x280 + index, name="Temprature_state_08" + slave_name, start=46, length=2, 180 | resolution=1, offset=0), 181 | ] 182 | 183 | self.__can_frames_divide_by_id[0x2c0 + index] = [ 184 | FrameDefine(i_d=0x2c0 + index, name="CellTemperature_05" + slave_name, start=8, length=14, 185 | resolution=0.1, offset=-40), 186 | FrameDefine(i_d=0x2c0 + index, name="Temprature_state_05" + slave_name, start=6, length=2, resolution=1, 187 | offset=0), 188 | 189 | FrameDefine(i_d=0x2c0 + index, name="CellTemperature_06" + slave_name, start=24, length=14, 190 | resolution=0.1, offset=-40), 191 | FrameDefine(i_d=0x2c0 + index, name="Temprature_state_06" + slave_name, start=22, length=2, 192 | resolution=1, offset=0), 193 | 194 | FrameDefine(i_d=0x2c0 + index, name="CellTemperature_07" + slave_name, start=39, length=14, 195 | resolution=0.1, offset=-40), 196 | FrameDefine(i_d=0x2c0 + index, name="Temprature_state_07" + slave_name, start=37, length=2, 197 | resolution=1, offset=0), 198 | 199 | FrameDefine(i_d=0x2c0 + index, name="CellTemperature_08" + slave_name, start=48, length=14, 200 | resolution=0.1, offset=-40), 201 | FrameDefine(i_d=0x2c0 + index, name="Temprature_state_08" + slave_name, start=46, length=2, 202 | resolution=1, offset=0), 203 | ] 204 | 205 | # slave voltage can frames define 206 | for index in range(self.slave_num): 207 | slave_name = "_slave_board_" + str(index) 208 | self.__can_frames_divide_by_id[0x110 + index] = [ 209 | FrameDefine(i_d=0x110 + index, name="Cell_Voltage_Max" + slave_name, start=8, length=16, 210 | resolution=0.001, offset=0), 211 | 212 | FrameDefine(i_d=0x110 + index, name="Cell_Voltage_Min" + slave_name, start=24, length=16, 213 | resolution=0.001,offset=0), 214 | 215 | FrameDefine(i_d=0x110 + index, name="Max_Min_Counter" + slave_name, start=40, length=16, 216 | resolution=1, offset=0), 217 | 218 | FrameDefine(i_d=0x110 + index, name="Max_Cell_Num" + slave_name, start=48, length=8, 219 | resolution=1, offset=0), 220 | 221 | FrameDefine(i_d=0x110 + index, name="Min_Cell_Num" + slave_name, start=58, length=8, 222 | resolution=1, offset=0) 223 | ] 224 | 225 | base_cell_num = 1 226 | self.__can_frames_divide_by_id[0x120 + index] = [ 227 | 228 | FrameDefine(i_d=0x120 + index, name="Cell_Voltage_"+str(base_cell_num + 0) + slave_name, start=8, length=13, 229 | resolution=0.001, offset=0), 230 | 231 | FrameDefine(i_d=0x120 + index, name="Cell_Voltage_State_"+str(base_cell_num + 0) + slave_name, start=5, length=3, 232 | resolution=1, offset=0), 233 | 234 | FrameDefine(i_d=0x120 + index, name="Cell_Voltage_" +str(base_cell_num + 1) + slave_name, start=24, length=13, 235 | resolution=0.001, offset=0), 236 | 237 | FrameDefine(i_d=0x120 + index, name="Cell_Voltage_State_" +str(base_cell_num + 1)+ slave_name, start=21, length=3, 238 | resolution=1, offset=0), 239 | 240 | 241 | FrameDefine(i_d=0x120 + index, name="Cell_Voltage_" + str(base_cell_num + 2)+ slave_name, start=40, length=13, 242 | resolution=0.001, offset=0), 243 | 244 | FrameDefine(i_d=0x120 + index, name="Cell_Voltage_State_" + str(base_cell_num + 2)+ slave_name, start=37, length=3, 245 | resolution=1, offset=0), 246 | 247 | FrameDefine(i_d=0x120 + index, name="Cell_Voltage_" + str(base_cell_num + 3)+ slave_name, start=56, length=13, 248 | resolution=0.001, offset=0), 249 | 250 | FrameDefine(i_d=0x120 + index, name="Cell_Voltage_State_" + str(base_cell_num + 3)+ slave_name, start=53, length=3, 251 | resolution=1, offset=0), 252 | 253 | ] 254 | 255 | base_cell_num = 5 256 | self.__can_frames_divide_by_id[0x130 + index] = [ 257 | 258 | FrameDefine(i_d=0x130 + index, name="Cell_Voltage_"+str(base_cell_num + 0) + slave_name, start=8, length=13, 259 | resolution=0.001, offset=0), 260 | 261 | FrameDefine(i_d=0x130 + index, name="Cell_Voltage_State_"+str(base_cell_num + 0) + slave_name, start=5, length=3, 262 | resolution=1, offset=0), 263 | 264 | FrameDefine(i_d=0x130 + index, name="Cell_Voltage_" +str(base_cell_num + 1) + slave_name, start=24, length=13, 265 | resolution=0.001, offset=0), 266 | 267 | FrameDefine(i_d=0x130 + index, name="Cell_Voltage_State_" +str(base_cell_num + 1)+ slave_name, start=21, length=3, 268 | resolution=1, offset=0), 269 | 270 | 271 | FrameDefine(i_d=0x130 + index, name="Cell_Voltage_" + str(base_cell_num + 2)+ slave_name, start=40, length=13, 272 | resolution=0.001, offset=0), 273 | 274 | FrameDefine(i_d=0x130 + index, name="Cell_Voltage_State_" + str(base_cell_num + 2)+ slave_name, start=37, length=3, 275 | resolution=1, offset=0), 276 | 277 | FrameDefine(i_d=0x130 + index, name="Cell_Voltage_" + str(base_cell_num + 3)+ slave_name, start=56, length=13, 278 | resolution=0.001, offset=0), 279 | 280 | FrameDefine(i_d=0x130 + index, name="Cell_Voltage_State_" + str(base_cell_num + 3)+ slave_name, start=53, length=3, 281 | resolution=1, offset=0), 282 | 283 | ] 284 | 285 | base_cell_num = 9 286 | self.__can_frames_divide_by_id[0x140 + index] = [ 287 | 288 | FrameDefine(i_d=0x140 + index, name="Cell_Voltage_"+str(base_cell_num + 0) + slave_name, start=8, length=13, 289 | resolution=0.001, offset=0), 290 | 291 | FrameDefine(i_d=0x140 + index, name="Cell_Voltage_State_"+str(base_cell_num + 0) + slave_name, start=5, length=3, 292 | resolution=1, offset=0), 293 | 294 | FrameDefine(i_d=0x140 + index, name="Cell_Voltage_" +str(base_cell_num + 1) + slave_name, start=24, length=13, 295 | resolution=0.001, offset=0), 296 | 297 | FrameDefine(i_d=0x140 + index, name="Cell_Voltage_State_" +str(base_cell_num + 1)+ slave_name, start=21, length=3, 298 | resolution=1, offset=0), 299 | 300 | 301 | FrameDefine(i_d=0x140 + index, name="Cell_Voltage_" + str(base_cell_num + 2)+ slave_name, start=40, length=13, 302 | resolution=0.001, offset=0), 303 | 304 | FrameDefine(i_d=0x140 + index, name="Cell_Voltage_State_" + str(base_cell_num + 2)+ slave_name, start=37, length=3, 305 | resolution=1, offset=0), 306 | 307 | FrameDefine(i_d=0x140 + index, name="Cell_Voltage_" + str(base_cell_num + 3)+ slave_name, start=56, length=13, 308 | resolution=0.001, offset=0), 309 | 310 | FrameDefine(i_d=0x140 + index, name="Cell_Voltage_State_" + str(base_cell_num + 3)+ slave_name, start=53, length=3, 311 | resolution=1, offset=0), 312 | 313 | ] 314 | 315 | base_cell_num = 13 316 | self.__can_frames_divide_by_id[0x150 + index] = [ 317 | 318 | FrameDefine(i_d=0x150 + index, name="Cell_Voltage_"+str(base_cell_num + 0) + slave_name, start=8, length=13, 319 | resolution=0.001, offset=0), 320 | 321 | FrameDefine(i_d=0x150 + index, name="Cell_Voltage_State_"+str(base_cell_num + 0) + slave_name, start=5, length=3, 322 | resolution=1, offset=0), 323 | 324 | FrameDefine(i_d=0x150 + index, name="Cell_Voltage_" +str(base_cell_num + 1) + slave_name, start=24, length=13, 325 | resolution=0.001, offset=0), 326 | 327 | FrameDefine(i_d=0x150 + index, name="Cell_Voltage_State_" +str(base_cell_num + 1)+ slave_name, start=21, length=3, 328 | resolution=1, offset=0), 329 | 330 | 331 | FrameDefine(i_d=0x150 + index, name="Cell_Voltage_" + str(base_cell_num + 2)+ slave_name, start=40, length=13, 332 | resolution=0.001, offset=0), 333 | 334 | FrameDefine(i_d=0x150 + index, name="Cell_Voltage_State_" + str(base_cell_num + 2)+ slave_name, start=37, length=3, 335 | resolution=1, offset=0), 336 | 337 | FrameDefine(i_d=0x150 + index, name="Cell_Voltage_" + str(base_cell_num + 3)+ slave_name, start=56, length=13, 338 | resolution=0.001, offset=0), 339 | 340 | FrameDefine(i_d=0x150 + index, name="Cell_Voltage_State_" + str(base_cell_num + 3)+ slave_name, start=53, length=3, 341 | resolution=1, offset=0), 342 | 343 | ] 344 | 345 | base_cell_num = 17 346 | self.__can_frames_divide_by_id[0x160 + index] = [ 347 | 348 | FrameDefine(i_d=0x160 + index, name="Cell_Voltage_"+str(base_cell_num + 0) + slave_name, start=8, length=13, 349 | resolution=0.001, offset=0), 350 | 351 | FrameDefine(i_d=0x160 + index, name="Cell_Voltage_State_"+str(base_cell_num + 0) + slave_name, start=5, length=3, 352 | resolution=1, offset=0), 353 | 354 | FrameDefine(i_d=0x160 + index, name="Cell_Voltage_" +str(base_cell_num + 1) + slave_name, start=24, length=13, 355 | resolution=0.001, offset=0), 356 | 357 | FrameDefine(i_d=0x160 + index, name="Cell_Voltage_State_" +str(base_cell_num + 1)+ slave_name, start=21, length=3, 358 | resolution=1, offset=0), 359 | 360 | 361 | FrameDefine(i_d=0x160 + index, name="Cell_Voltage_" + str(base_cell_num + 2)+ slave_name, start=40, length=13, 362 | resolution=0.001, offset=0), 363 | 364 | FrameDefine(i_d=0x160 + index, name="Cell_Voltage_State_" + str(base_cell_num + 2)+ slave_name, start=37, length=3, 365 | resolution=1, offset=0), 366 | 367 | FrameDefine(i_d=0x160 + index, name="Cell_Voltage_" + str(base_cell_num + 3)+ slave_name, start=56, length=13, 368 | resolution=0.001, offset=0), 369 | 370 | FrameDefine(i_d=0x160 + index, name="Cell_Voltage_State_" + str(base_cell_num + 3)+ slave_name, start=53, length=3, 371 | resolution=1, offset=0), 372 | 373 | ] 374 | 375 | base_cell_num = 21 376 | self.__can_frames_divide_by_id[0x170 + index] = [ 377 | 378 | FrameDefine(i_d=0x170 + index, name="Cell_Voltage_"+str(base_cell_num + 0) + slave_name, start=8, length=13, 379 | resolution=0.001, offset=0), 380 | 381 | FrameDefine(i_d=0x170 + index, name="Cell_Voltage_State_"+str(base_cell_num + 0) + slave_name, start=5, length=3, 382 | resolution=1, offset=0), 383 | 384 | FrameDefine(i_d=0x170 + index, name="Cell_Voltage_" +str(base_cell_num + 1) + slave_name, start=24, length=13, 385 | resolution=0.001, offset=0), 386 | 387 | FrameDefine(i_d=0x170 + index, name="Cell_Voltage_State_" +str(base_cell_num + 1)+ slave_name, start=21, length=3, 388 | resolution=1, offset=0), 389 | 390 | 391 | FrameDefine(i_d=0x170 + index, name="Cell_Voltage_" + str(base_cell_num + 2)+ slave_name, start=40, length=13, 392 | resolution=0.001, offset=0), 393 | 394 | FrameDefine(i_d=0x170 + index, name="Cell_Voltage_State_" + str(base_cell_num + 2)+ slave_name, start=37, length=3, 395 | resolution=1, offset=0), 396 | 397 | FrameDefine(i_d=0x170 + index, name="Cell_Voltage_" + str(base_cell_num + 3)+ slave_name, start=56, length=13, 398 | resolution=0.001, offset=0), 399 | 400 | FrameDefine(i_d=0x170 + index, name="Cell_Voltage_State_" + str(base_cell_num + 3)+ slave_name, start=53, length=3, 401 | resolution=1, offset=0), 402 | 403 | ] 404 | 405 | base_cell_num = 25 406 | self.__can_frames_divide_by_id[0x180 + index] = [ 407 | 408 | FrameDefine(i_d=0x180 + index, name="Cell_Voltage_"+str(base_cell_num + 0) + slave_name, start=8, length=13, 409 | resolution=0.001, offset=0), 410 | 411 | FrameDefine(i_d=0x180 + index, name="Cell_Voltage_State_"+str(base_cell_num + 0) + slave_name, start=5, length=3, 412 | resolution=1, offset=0), 413 | 414 | FrameDefine(i_d=0x180 + index, name="Cell_Voltage_" +str(base_cell_num + 1) + slave_name, start=24, length=13, 415 | resolution=0.001, offset=0), 416 | 417 | FrameDefine(i_d=0x180 + index, name="Cell_Voltage_State_" +str(base_cell_num + 1)+ slave_name, start=21, length=3, 418 | resolution=1, offset=0), 419 | 420 | 421 | FrameDefine(i_d=0x180 + index, name="Cell_Voltage_" + str(base_cell_num + 2)+ slave_name, start=40, length=13, 422 | resolution=0.001, offset=0), 423 | 424 | FrameDefine(i_d=0x180 + index, name="Cell_Voltage_State_" + str(base_cell_num + 2)+ slave_name, start=37, length=3, 425 | resolution=1, offset=0), 426 | 427 | FrameDefine(i_d=0x180 + index, name="Cell_Voltage_" + str(base_cell_num + 3)+ slave_name, start=56, length=13, 428 | resolution=0.001, offset=0), 429 | 430 | FrameDefine(i_d=0x180 + index, name="Cell_Voltage_State_" + str(base_cell_num + 3)+ slave_name, start=53, length=3, 431 | resolution=1, offset=0), 432 | 433 | ] 434 | 435 | base_cell_num = 29 436 | self.__can_frames_divide_by_id[0x190 + index] = [ 437 | 438 | FrameDefine(i_d=0x190 + index, name="Cell_Voltage_"+str(base_cell_num + 0) + slave_name, start=8, length=13, 439 | resolution=0.001, offset=0), 440 | 441 | FrameDefine(i_d=0x190 + index, name="Cell_Voltage_State_"+str(base_cell_num + 0) + slave_name, start=5, length=3, 442 | resolution=1, offset=0), 443 | 444 | FrameDefine(i_d=0x190 + index, name="Cell_Voltage_" +str(base_cell_num + 1) + slave_name, start=24, length=13, 445 | resolution=0.001, offset=0), 446 | 447 | FrameDefine(i_d=0x190 + index, name="Cell_Voltage_State_" +str(base_cell_num + 1)+ slave_name, start=21, length=3, 448 | resolution=1, offset=0), 449 | 450 | 451 | FrameDefine(i_d=0x190 + index, name="Cell_Voltage_" + str(base_cell_num + 2)+ slave_name, start=40, length=13, 452 | resolution=0.001, offset=0), 453 | 454 | FrameDefine(i_d=0x190 + index, name="Cell_Voltage_State_" + str(base_cell_num + 2)+ slave_name, start=37, length=3, 455 | resolution=1, offset=0), 456 | 457 | FrameDefine(i_d=0x190 + index, name="Cell_Voltage_" + str(base_cell_num + 3)+ slave_name, start=56, length=13, 458 | resolution=0.001, offset=0), 459 | 460 | FrameDefine(i_d=0x190 + index, name="Cell_Voltage_State_" + str(base_cell_num + 3)+ slave_name, start=53, length=3, 461 | resolution=1, offset=0), 462 | 463 | ] 464 | 465 | base_cell_num = 33 466 | self.__can_frames_divide_by_id[0x1A0 + index] = [ 467 | 468 | FrameDefine(i_d=0x1A0 + index, name="Cell_Voltage_"+str(base_cell_num + 0) + slave_name, start=8, length=13, 469 | resolution=0.001, offset=0), 470 | 471 | FrameDefine(i_d=0x1A0 + index, name="Cell_Voltage_State_"+str(base_cell_num + 0) + slave_name, start=5, length=3, 472 | resolution=1, offset=0), 473 | 474 | FrameDefine(i_d=0x1A0 + index, name="Cell_Voltage_" +str(base_cell_num + 1) + slave_name, start=24, length=13, 475 | resolution=0.001, offset=0), 476 | 477 | FrameDefine(i_d=0x1A0 + index, name="Cell_Voltage_State_" +str(base_cell_num + 1)+ slave_name, start=21, length=3, 478 | resolution=1, offset=0), 479 | 480 | 481 | FrameDefine(i_d=0x1A0 + index, name="Cell_Voltage_" + str(base_cell_num + 2)+ slave_name, start=40, length=13, 482 | resolution=0.001, offset=0), 483 | 484 | FrameDefine(i_d=0x1A0 + index, name="Cell_Voltage_State_" + str(base_cell_num + 2)+ slave_name, start=37, length=3, 485 | resolution=1, offset=0), 486 | 487 | FrameDefine(i_d=0x1A0 + index, name="Cell_Voltage_" + str(base_cell_num + 3)+ slave_name, start=56, length=13, 488 | resolution=0.001, offset=0), 489 | 490 | FrameDefine(i_d=0x1A0 + index, name="Cell_Voltage_State_" + str(base_cell_num + 3)+ slave_name, start=53, length=3, 491 | resolution=1, offset=0), 492 | 493 | ] 494 | 495 | base_cell_num = 33 496 | self.__can_frames_divide_by_id[0x1B0 + index] = [ 497 | 498 | FrameDefine(i_d=0x1B0 + index, name="Cell_Voltage_"+str(base_cell_num + 0) + slave_name, start=8, length=13, 499 | resolution=0.001, offset=0), 500 | 501 | FrameDefine(i_d=0x1B0 + index, name="Cell_Voltage_State_"+str(base_cell_num + 0) + slave_name, start=5, length=3, 502 | resolution=1, offset=0), 503 | 504 | FrameDefine(i_d=0x1B0 + index, name="Cell_Voltage_" +str(base_cell_num + 1) + slave_name, start=24, length=13, 505 | resolution=0.001, offset=0), 506 | 507 | FrameDefine(i_d=0x1B0 + index, name="Cell_Voltage_State_" +str(base_cell_num + 1)+ slave_name, start=21, length=3, 508 | resolution=1, offset=0), 509 | 510 | 511 | FrameDefine(i_d=0x1B0 + index, name="Cell_Voltage_" + str(base_cell_num + 2)+ slave_name, start=40, length=13, 512 | resolution=0.001, offset=0), 513 | 514 | FrameDefine(i_d=0x1B0 + index, name="Cell_Voltage_State_" + str(base_cell_num + 2)+ slave_name, start=37, length=3, 515 | resolution=1, offset=0), 516 | 517 | FrameDefine(i_d=0x1B0 + index, name="Cell_Voltage_" + str(base_cell_num + 3)+ slave_name, start=56, length=13, 518 | resolution=0.001, offset=0), 519 | 520 | FrameDefine(i_d=0x1B0 + index, name="Cell_Voltage_State_" + str(base_cell_num + 3)+ slave_name, start=53, length=3, 521 | resolution=1, offset=0), 522 | 523 | ] 524 | 525 | base_cell_num = 37 526 | self.__can_frames_divide_by_id[0x1C0 + index] = [ 527 | 528 | FrameDefine(i_d=0x1C0 + index, name="Cell_Voltage_"+str(base_cell_num + 0) + slave_name, start=8, length=13, 529 | resolution=0.001, offset=0), 530 | 531 | FrameDefine(i_d=0x1C0 + index, name="Cell_Voltage_State_"+str(base_cell_num + 0) + slave_name, start=5, length=3, 532 | resolution=1, offset=0), 533 | 534 | FrameDefine(i_d=0x1C0 + index, name="Cell_Voltage_" +str(base_cell_num + 1) + slave_name, start=24, length=13, 535 | resolution=0.001, offset=0), 536 | 537 | FrameDefine(i_d=0x1C0 + index, name="Cell_Voltage_State_" +str(base_cell_num + 1)+ slave_name, start=21, length=3, 538 | resolution=1, offset=0), 539 | 540 | 541 | FrameDefine(i_d=0x1C0 + index, name="Cell_Voltage_" + str(base_cell_num + 2)+ slave_name, start=40, length=13, 542 | resolution=0.001, offset=0), 543 | 544 | FrameDefine(i_d=0x1C0 + index, name="Cell_Voltage_State_" + str(base_cell_num + 2)+ slave_name, start=37, length=3, 545 | resolution=1, offset=0), 546 | 547 | FrameDefine(i_d=0x1C0 + index, name="Cell_Voltage_" + str(base_cell_num + 3)+ slave_name, start=56, length=13, 548 | resolution=0.001, offset=0), 549 | 550 | FrameDefine(i_d=0x1C0 + index, name="Cell_Voltage_State_" + str(base_cell_num + 3)+ slave_name, start=53, length=3, 551 | resolution=1, offset=0), 552 | 553 | ] 554 | 555 | base_cell_num = 41 556 | self.__can_frames_divide_by_id[0x1D0 + index] = [ 557 | 558 | FrameDefine(i_d=0x1D0 + index, name="Cell_Voltage_"+str(base_cell_num + 0) + slave_name, start=8, length=13, 559 | resolution=0.001, offset=0), 560 | 561 | FrameDefine(i_d=0x1D0 + index, name="Cell_Voltage_State_"+str(base_cell_num + 0) + slave_name, start=5, length=3, 562 | resolution=1, offset=0), 563 | 564 | FrameDefine(i_d=0x1D0 + index, name="Cell_Voltage_" +str(base_cell_num + 1) + slave_name, start=24, length=13, 565 | resolution=0.001, offset=0), 566 | 567 | FrameDefine(i_d=0x1D0 + index, name="Cell_Voltage_State_" +str(base_cell_num + 1)+ slave_name, start=21, length=3, 568 | resolution=1, offset=0), 569 | 570 | 571 | FrameDefine(i_d=0x1D0 + index, name="Cell_Voltage_" + str(base_cell_num + 2)+ slave_name, start=40, length=13, 572 | resolution=0.001, offset=0), 573 | 574 | FrameDefine(i_d=0x1D0 + index, name="Cell_Voltage_State_" + str(base_cell_num + 2)+ slave_name, start=37, length=3, 575 | resolution=1, offset=0), 576 | 577 | FrameDefine(i_d=0x1D0 + index, name="Cell_Voltage_" + str(base_cell_num + 3)+ slave_name, start=56, length=13, 578 | resolution=0.001, offset=0), 579 | 580 | FrameDefine(i_d=0x1D0 + index, name="Cell_Voltage_State_" + str(base_cell_num + 3)+ slave_name, start=53, length=3, 581 | resolution=1, offset=0), 582 | 583 | ] 584 | 585 | base_cell_num = 45 586 | self.__can_frames_divide_by_id[0x1E0 + index] = [ 587 | 588 | FrameDefine(i_d=0x1E0 + index, name="Cell_Voltage_"+str(base_cell_num + 0) + slave_name, start=8, length=13, 589 | resolution=0.001, offset=0), 590 | 591 | FrameDefine(i_d=0x1E0 + index, name="Cell_Voltage_State_"+str(base_cell_num + 0) + slave_name, start=5, length=3, 592 | resolution=1, offset=0), 593 | 594 | FrameDefine(i_d=0x1E0 + index, name="Cell_Voltage_" +str(base_cell_num + 1) + slave_name, start=24, length=13, 595 | resolution=0.001, offset=0), 596 | 597 | FrameDefine(i_d=0x1E0 + index, name="Cell_Voltage_State_" +str(base_cell_num + 1)+ slave_name, start=21, length=3, 598 | resolution=1, offset=0), 599 | 600 | 601 | FrameDefine(i_d=0x1E0 + index, name="Cell_Voltage_" + str(base_cell_num + 2)+ slave_name, start=40, length=13, 602 | resolution=0.001, offset=0), 603 | 604 | FrameDefine(i_d=0x1E0 + index, name="Cell_Voltage_State_" + str(base_cell_num + 2)+ slave_name, start=37, length=3, 605 | resolution=1, offset=0), 606 | 607 | FrameDefine(i_d=0x1E0 + index, name="Cell_Voltage_" + str(base_cell_num + 3)+ slave_name, start=56, length=13, 608 | resolution=0.001, offset=0), 609 | 610 | FrameDefine(i_d=0x1E0 + index, name="Cell_Voltage_State_" + str(base_cell_num + 3)+ slave_name, start=53, length=3, 611 | resolution=1, offset=0), 612 | 613 | ] 614 | 615 | base_cell_num = 49 616 | self.__can_frames_divide_by_id[0x1F0 + index] = [ 617 | 618 | FrameDefine(i_d=0x1F0 + index, name="Cell_Voltage_"+str(base_cell_num + 0) + slave_name, start=8, length=13, 619 | resolution=0.001, offset=0), 620 | 621 | FrameDefine(i_d=0x1F0 + index, name="Cell_Voltage_State_"+str(base_cell_num + 0) + slave_name, start=5, length=3, 622 | resolution=1, offset=0), 623 | 624 | FrameDefine(i_d=0x1F0 + index, name="Cell_Voltage_" +str(base_cell_num + 1) + slave_name, start=24, length=13, 625 | resolution=0.001, offset=0), 626 | 627 | FrameDefine(i_d=0x1F0 + index, name="Cell_Voltage_State_" +str(base_cell_num + 1)+ slave_name, start=21, length=3, 628 | resolution=1, offset=0), 629 | 630 | 631 | FrameDefine(i_d=0x1F0 + index, name="Cell_Voltage_" + str(base_cell_num + 2)+ slave_name, start=40, length=13, 632 | resolution=0.001, offset=0), 633 | 634 | FrameDefine(i_d=0x1F0 + index, name="Cell_Voltage_State_" + str(base_cell_num + 2)+ slave_name, start=37, length=3, 635 | resolution=1, offset=0), 636 | 637 | FrameDefine(i_d=0x1F0 + index, name="Cell_Voltage_" + str(base_cell_num + 3)+ slave_name, start=56, length=13, 638 | resolution=0.001, offset=0), 639 | 640 | FrameDefine(i_d=0x1F0 + index, name="Cell_Voltage_State_" + str(base_cell_num + 3)+ slave_name, start=53, length=3, 641 | resolution=1, offset=0), 642 | 643 | ] 644 | 645 | base_cell_num = 53 646 | self.__can_frames_divide_by_id[0x500 + index] = [ 647 | 648 | FrameDefine(i_d=0x500 + index, name="Cell_Voltage_"+str(base_cell_num + 0) + slave_name, start=8, length=13, 649 | resolution=0.001, offset=0), 650 | 651 | FrameDefine(i_d=0x500 + index, name="Cell_Voltage_State_"+str(base_cell_num + 0) + slave_name, start=5, length=3, 652 | resolution=1, offset=0), 653 | 654 | FrameDefine(i_d=0x500 + index, name="Cell_Voltage_" +str(base_cell_num + 1) + slave_name, start=24, length=13, 655 | resolution=0.001, offset=0), 656 | 657 | FrameDefine(i_d=0x500 + index, name="Cell_Voltage_State_" +str(base_cell_num + 1)+ slave_name, start=21, length=3, 658 | resolution=1, offset=0), 659 | 660 | 661 | FrameDefine(i_d=0x500 + index, name="Cell_Voltage_" + str(base_cell_num + 2)+ slave_name, start=40, length=13, 662 | resolution=0.001, offset=0), 663 | 664 | FrameDefine(i_d=0x500 + index, name="Cell_Voltage_State_" + str(base_cell_num + 2)+ slave_name, start=37, length=3, 665 | resolution=1, offset=0), 666 | 667 | FrameDefine(i_d=0x500 + index, name="Cell_Voltage_" + str(base_cell_num + 3)+ slave_name, start=56, length=13, 668 | resolution=0.001, offset=0), 669 | 670 | FrameDefine(i_d=0x500 + index, name="Cell_Voltage_State_" + str(base_cell_num + 3)+ slave_name, start=53, length=3, 671 | resolution=1, offset=0), 672 | 673 | ] 674 | 675 | base_cell_num = 57 676 | self.__can_frames_divide_by_id[0x510 + index] = [ 677 | 678 | FrameDefine(i_d=0x510 + index, name="Cell_Voltage_"+str(base_cell_num + 0) + slave_name, start=8, length=13, 679 | resolution=0.001, offset=0), 680 | 681 | FrameDefine(i_d=0x510 + index, name="Cell_Voltage_State_"+str(base_cell_num + 0) + slave_name, start=5, length=3, 682 | resolution=1, offset=0), 683 | 684 | FrameDefine(i_d=0x510 + index, name="Cell_Voltage_" +str(base_cell_num + 1) + slave_name, start=24, length=13, 685 | resolution=0.001, offset=0), 686 | 687 | FrameDefine(i_d=0x510 + index, name="Cell_Voltage_State_" +str(base_cell_num + 1)+ slave_name, start=21, length=3, 688 | resolution=1, offset=0), 689 | 690 | 691 | FrameDefine(i_d=0x510 + index, name="Cell_Voltage_" + str(base_cell_num + 2)+ slave_name, start=40, length=13, 692 | resolution=0.001, offset=0), 693 | 694 | FrameDefine(i_d=0x510 + index, name="Cell_Voltage_State_" + str(base_cell_num + 2)+ slave_name, start=37, length=3, 695 | resolution=1, offset=0), 696 | 697 | FrameDefine(i_d=0x510 + index, name="Cell_Voltage_" + str(base_cell_num + 3)+ slave_name, start=56, length=13, 698 | resolution=0.001, offset=0), 699 | 700 | FrameDefine(i_d=0x510 + index, name="Cell_Voltage_State_" + str(base_cell_num + 3)+ slave_name, start=53, length=3, 701 | resolution=1, offset=0), 702 | 703 | ] 704 | 705 | base_cell_num = 61 706 | self.__can_frames_divide_by_id[0x520 + index] = [ 707 | 708 | FrameDefine(i_d=0x520 + index, name="Cell_Voltage_"+str(base_cell_num + 0) + slave_name, start=8, length=13, 709 | resolution=0.001, offset=0), 710 | 711 | FrameDefine(i_d=0x520 + index, name="Cell_Voltage_State_"+str(base_cell_num + 0) + slave_name, start=5, length=3, 712 | resolution=1, offset=0), 713 | 714 | FrameDefine(i_d=0x520 + index, name="Cell_Voltage_" +str(base_cell_num + 1) + slave_name, start=24, length=13, 715 | resolution=0.001, offset=0), 716 | 717 | FrameDefine(i_d=0x520 + index, name="Cell_Voltage_State_" +str(base_cell_num + 1)+ slave_name, start=21, length=3, 718 | resolution=1, offset=0), 719 | 720 | 721 | FrameDefine(i_d=0x520 + index, name="Cell_Voltage_" + str(base_cell_num + 2)+ slave_name, start=40, length=13, 722 | resolution=0.001, offset=0), 723 | 724 | FrameDefine(i_d=0x520 + index, name="Cell_Voltage_State_" + str(base_cell_num + 2)+ slave_name, start=37, length=3, 725 | resolution=1, offset=0), 726 | 727 | FrameDefine(i_d=0x520 + index, name="Cell_Voltage_" + str(base_cell_num + 3)+ slave_name, start=56, length=13, 728 | resolution=0.001, offset=0), 729 | 730 | FrameDefine(i_d=0x520 + index, name="Cell_Voltage_State_" + str(base_cell_num + 3)+ slave_name, start=53, length=3, 731 | resolution=1, offset=0), 732 | 733 | ] 734 | 735 | base_cell_num = 65 736 | self.__can_frames_divide_by_id[0x530 + index] = [ 737 | 738 | FrameDefine(i_d=0x530 + index, name="Cell_Voltage_"+str(base_cell_num + 0) + slave_name, start=8, length=13, 739 | resolution=0.001, offset=0), 740 | 741 | FrameDefine(i_d=0x530 + index, name="Cell_Voltage_State_"+str(base_cell_num + 0) + slave_name, start=5, length=3, 742 | resolution=1, offset=0), 743 | 744 | FrameDefine(i_d=0x530 + index, name="Cell_Voltage_" +str(base_cell_num + 1) + slave_name, start=24, length=13, 745 | resolution=0.001, offset=0), 746 | 747 | FrameDefine(i_d=0x530 + index, name="Cell_Voltage_State_" +str(base_cell_num + 1)+ slave_name, start=21, length=3, 748 | resolution=1, offset=0), 749 | 750 | 751 | FrameDefine(i_d=0x530 + index, name="Cell_Voltage_" + str(base_cell_num + 2)+ slave_name, start=40, length=13, 752 | resolution=0.001, offset=0), 753 | 754 | FrameDefine(i_d=0x530 + index, name="Cell_Voltage_State_" + str(base_cell_num + 2)+ slave_name, start=37, length=3, 755 | resolution=1, offset=0), 756 | 757 | FrameDefine(i_d=0x530 + index, name="Cell_Voltage_" + str(base_cell_num + 3)+ slave_name, start=56, length=13, 758 | resolution=0.001, offset=0), 759 | 760 | FrameDefine(i_d=0x530 + index, name="Cell_Voltage_State_" + str(base_cell_num + 3)+ slave_name, start=53, length=3, 761 | resolution=1, offset=0), 762 | 763 | ] 764 | 765 | base_cell_num = 69 766 | self.__can_frames_divide_by_id[0x540 + index] = [ 767 | 768 | FrameDefine(i_d=0x540 + index, name="Cell_Voltage_"+str(base_cell_num + 0) + slave_name, start=8, length=13, 769 | resolution=0.001, offset=0), 770 | 771 | FrameDefine(i_d=0x540 + index, name="Cell_Voltage_State_"+str(base_cell_num + 0) + slave_name, start=5, length=3, 772 | resolution=1, offset=0), 773 | 774 | FrameDefine(i_d=0x540 + index, name="Cell_Voltage_" +str(base_cell_num + 1) + slave_name, start=24, length=13, 775 | resolution=0.001, offset=0), 776 | 777 | FrameDefine(i_d=0x540 + index, name="Cell_Voltage_State_" +str(base_cell_num + 1)+ slave_name, start=21, length=3, 778 | resolution=1, offset=0), 779 | 780 | 781 | FrameDefine(i_d=0x540 + index, name="Cell_Voltage_" + str(base_cell_num + 2)+ slave_name, start=40, length=13, 782 | resolution=0.001, offset=0), 783 | 784 | FrameDefine(i_d=0x540 + index, name="Cell_Voltage_State_" + str(base_cell_num + 2)+ slave_name, start=37, length=3, 785 | resolution=1, offset=0), 786 | 787 | FrameDefine(i_d=0x540 + index, name="Cell_Voltage_" + str(base_cell_num + 3)+ slave_name, start=56, length=13, 788 | resolution=0.001, offset=0), 789 | 790 | FrameDefine(i_d=0x540 + index, name="Cell_Voltage_State_" + str(base_cell_num + 3)+ slave_name, start=53, length=3, 791 | resolution=1, offset=0), 792 | 793 | ] 794 | 795 | base_cell_num = 73 796 | self.__can_frames_divide_by_id[0x550 + index] = [ 797 | 798 | FrameDefine(i_d=0x550 + index, name="Cell_Voltage_"+str(base_cell_num + 0) + slave_name, start=8, length=13, 799 | resolution=0.001, offset=0), 800 | 801 | FrameDefine(i_d=0x550 + index, name="Cell_Voltage_State_"+str(base_cell_num + 0) + slave_name, start=5, length=3, 802 | resolution=1, offset=0), 803 | 804 | FrameDefine(i_d=0x550 + index, name="Cell_Voltage_" +str(base_cell_num + 1) + slave_name, start=24, length=13, 805 | resolution=0.001, offset=0), 806 | 807 | FrameDefine(i_d=0x550 + index, name="Cell_Voltage_State_" +str(base_cell_num + 1)+ slave_name, start=21, length=3, 808 | resolution=1, offset=0), 809 | 810 | 811 | FrameDefine(i_d=0x550 + index, name="Cell_Voltage_" + str(base_cell_num + 2)+ slave_name, start=40, length=13, 812 | resolution=0.001, offset=0), 813 | 814 | FrameDefine(i_d=0x550 + index, name="Cell_Voltage_State_" + str(base_cell_num + 2)+ slave_name, start=37, length=3, 815 | resolution=1, offset=0), 816 | 817 | FrameDefine(i_d=0x550 + index, name="Cell_Voltage_" + str(base_cell_num + 3)+ slave_name, start=56, length=13, 818 | resolution=0.001, offset=0), 819 | 820 | FrameDefine(i_d=0x550 + index, name="Cell_Voltage_State_" + str(base_cell_num + 3)+ slave_name, start=53, length=3, 821 | resolution=1, offset=0), 822 | 823 | ] 824 | 825 | base_cell_num = 77 826 | self.__can_frames_divide_by_id[0x560 + index] = [ 827 | 828 | FrameDefine(i_d=0x560 + index, name="Cell_Voltage_"+str(base_cell_num + 0) + slave_name, start=8, length=13, 829 | resolution=0.001, offset=0), 830 | 831 | FrameDefine(i_d=0x560 + index, name="Cell_Voltage_State_"+str(base_cell_num + 0) + slave_name, start=5, length=3, 832 | resolution=1, offset=0), 833 | 834 | FrameDefine(i_d=0x560 + index, name="Cell_Voltage_" +str(base_cell_num + 1) + slave_name, start=24, length=13, 835 | resolution=0.001, offset=0), 836 | 837 | FrameDefine(i_d=0x560 + index, name="Cell_Voltage_State_" +str(base_cell_num + 1)+ slave_name, start=21, length=3, 838 | resolution=1, offset=0), 839 | 840 | 841 | FrameDefine(i_d=0x560 + index, name="Cell_Voltage_" + str(base_cell_num + 2)+ slave_name, start=40, length=13, 842 | resolution=0.001, offset=0), 843 | 844 | FrameDefine(i_d=0x560 + index, name="Cell_Voltage_State_" + str(base_cell_num + 2)+ slave_name, start=37, length=3, 845 | resolution=1, offset=0), 846 | 847 | FrameDefine(i_d=0x560 + index, name="Cell_Voltage_" + str(base_cell_num + 3)+ slave_name, start=56, length=13, 848 | resolution=0.001, offset=0), 849 | 850 | FrameDefine(i_d=0x560 + index, name="Cell_Voltage_State_" + str(base_cell_num + 3)+ slave_name, start=53, length=3, 851 | resolution=1, offset=0), 852 | 853 | ] 854 | 855 | base_cell_num = 81 856 | self.__can_frames_divide_by_id[0x570 + index] = [ 857 | 858 | FrameDefine(i_d=0x570 + index, name="Cell_Voltage_"+str(base_cell_num + 0) + slave_name, start=8, length=13, 859 | resolution=0.001, offset=0), 860 | 861 | FrameDefine(i_d=0x570 + index, name="Cell_Voltage_State_"+str(base_cell_num + 0) + slave_name, start=5, length=3, 862 | resolution=1, offset=0), 863 | 864 | FrameDefine(i_d=0x570 + index, name="Cell_Voltage_" +str(base_cell_num + 1) + slave_name, start=24, length=13, 865 | resolution=0.001, offset=0), 866 | 867 | FrameDefine(i_d=0x570 + index, name="Cell_Voltage_State_" +str(base_cell_num + 1)+ slave_name, start=21, length=3, 868 | resolution=1, offset=0), 869 | 870 | 871 | FrameDefine(i_d=0x570 + index, name="Cell_Voltage_" + str(base_cell_num + 2)+ slave_name, start=40, length=13, 872 | resolution=0.001, offset=0), 873 | 874 | FrameDefine(i_d=0x570 + index, name="Cell_Voltage_State_" + str(base_cell_num + 2)+ slave_name, start=37, length=3, 875 | resolution=1, offset=0), 876 | 877 | FrameDefine(i_d=0x570 + index, name="Cell_Voltage_" + str(base_cell_num + 3)+ slave_name, start=56, length=13, 878 | resolution=0.001, offset=0), 879 | 880 | FrameDefine(i_d=0x570 + index, name="Cell_Voltage_State_" + str(base_cell_num + 3)+ slave_name, start=53, length=3, 881 | resolution=1, offset=0), 882 | 883 | ] 884 | 885 | base_cell_num = 85 886 | self.__can_frames_divide_by_id[0x580 + index] = [ 887 | 888 | FrameDefine(i_d=0x580 + index, name="Cell_Voltage_"+str(base_cell_num + 0) + slave_name, start=8, length=13, 889 | resolution=0.001, offset=0), 890 | 891 | FrameDefine(i_d=0x580 + index, name="Cell_Voltage_State_"+str(base_cell_num + 0) + slave_name, start=5, length=3, 892 | resolution=1, offset=0), 893 | 894 | FrameDefine(i_d=0x580 + index, name="Cell_Voltage_" +str(base_cell_num + 1) + slave_name, start=24, length=13, 895 | resolution=0.001, offset=0), 896 | 897 | FrameDefine(i_d=0x580 + index, name="Cell_Voltage_State_" +str(base_cell_num + 1)+ slave_name, start=21, length=3, 898 | resolution=1, offset=0), 899 | 900 | 901 | FrameDefine(i_d=0x580 + index, name="Cell_Voltage_" + str(base_cell_num + 2)+ slave_name, start=40, length=13, 902 | resolution=0.001, offset=0), 903 | 904 | FrameDefine(i_d=0x580 + index, name="Cell_Voltage_State_" + str(base_cell_num + 2)+ slave_name, start=37, length=3, 905 | resolution=1, offset=0), 906 | 907 | FrameDefine(i_d=0x580 + index, name="Cell_Voltage_" + str(base_cell_num + 3)+ slave_name, start=56, length=13, 908 | resolution=0.001, offset=0), 909 | 910 | FrameDefine(i_d=0x580 + index, name="Cell_Voltage_State_" + str(base_cell_num + 3)+ slave_name, start=53, length=3, 911 | resolution=1, offset=0), 912 | 913 | ] 914 | 915 | base_cell_num = 89 916 | self.__can_frames_divide_by_id[0x580 + index] = [ 917 | 918 | FrameDefine(i_d=0x580 + index, name="Cell_Voltage_"+str(base_cell_num + 0) + slave_name, start=8, length=13, 919 | resolution=0.001, offset=0), 920 | 921 | FrameDefine(i_d=0x580 + index, name="Cell_Voltage_State_"+str(base_cell_num + 0) + slave_name, start=5, length=3, 922 | resolution=1, offset=0), 923 | 924 | FrameDefine(i_d=0x580 + index, name="Cell_Voltage_" +str(base_cell_num + 1) + slave_name, start=24, length=13, 925 | resolution=0.001, offset=0), 926 | 927 | FrameDefine(i_d=0x580 + index, name="Cell_Voltage_State_" +str(base_cell_num + 1)+ slave_name, start=21, length=3, 928 | resolution=1, offset=0), 929 | 930 | 931 | FrameDefine(i_d=0x580 + index, name="Cell_Voltage_" + str(base_cell_num + 2)+ slave_name, start=40, length=13, 932 | resolution=0.001, offset=0), 933 | 934 | FrameDefine(i_d=0x580 + index, name="Cell_Voltage_State_" + str(base_cell_num + 2)+ slave_name, start=37, length=3, 935 | resolution=1, offset=0), 936 | 937 | FrameDefine(i_d=0x580 + index, name="Cell_Voltage_" + str(base_cell_num + 3)+ slave_name, start=56, length=13, 938 | resolution=0.001, offset=0), 939 | 940 | FrameDefine(i_d=0x580 + index, name="Cell_Voltage_State_" + str(base_cell_num + 3)+ slave_name, start=53, length=3, 941 | resolution=1, offset=0), 942 | 943 | ] 944 | 945 | # Cell voltage balance state can frame 946 | temp_id = 0x109 947 | self.__can_frames_divide_by_id[temp_id] = [FrameDefine(i_d=temp_id, name="V_BalanceEnable", start=0, length=1), 948 | FrameDefine(i_d=temp_id, name="V_BalanceTarget", start=16, length=15,resolution=0.001)] 949 | temp_id = 0x108 950 | self.__can_frames_divide_by_id[temp_id] = [FrameDefine(i_d=temp_id, name="Syn_Trigger", start=0, length=8)] 951 | 952 | temp_id = 0x10b 953 | self.__can_frames_divide_by_id[temp_id] = [FrameDefine(i_d=temp_id, name="Version_Trigger", start=0, length=8), 954 | FrameDefine(i_d=temp_id, name="Version_Num", start=8, length=8)] 955 | 956 | for index in range(self.slave_num): 957 | self.__can_frames_divide_by_id[0x2b0 + index] = [FrameDefine(i_d=0x2b0+index, name="BMU"+str(index)+"_ID", 958 | start=0, length=8)] 959 | 960 | self.__can_frames_divide_by_id[0x0F0 + index] =[ FrameDefine(i_d=0x0F0+index, name= "Syn_Trigger_ACK_slave_"+ str(index), 961 | start=0, length=8)] 962 | 963 | self.__can_frames_divide_by_id[0x0F0 + index] =[ FrameDefine(i_d=0x0F0+index, name="Bum_ID_Num" + str(index), 964 | start=8, length=8)] 965 | 966 | temp_id = 0x201 967 | self.__can_frames_divide_by_id[temp_id] = [FrameDefine(i_d=temp_id, name="FCT_Function", start=0, length=8)] 968 | 969 | temp_id = 0x202 970 | self.__can_frames_divide_by_id[temp_id] = [ 971 | FrameDefine(i_d=temp_id, name="IN_H_value", start=8, length=16, resolution=0.001, offset=0), 972 | FrameDefine(i_d=temp_id, name="IN_L_value", start=24, length=16, resolution=0.001, offset=0) 973 | ] 974 | 975 | temp_id = 0x203 976 | self.__can_frames_divide_by_id[temp_id] = [ 977 | FrameDefine(i_d=temp_id,name="应答信号数据1", start=0,length=8), 978 | FrameDefine(i_d=temp_id,name="应答信号数据2", start=8,length=8), 979 | FrameDefine(i_d=temp_id,name="应答信号数据3", start=16,length=8), 980 | FrameDefine(i_d=temp_id,name="应答信号数据4", start=24,length=8), 981 | FrameDefine(i_d=temp_id,name="应答信号数据5", start=32,length=8), 982 | FrameDefine(i_d=temp_id,name="应答信号数据6", start=40,length=8), 983 | FrameDefine(i_d=temp_id,name="应答信号数据7", start=48,length=8), 984 | FrameDefine(i_d=temp_id,name="应答信号数据8", start=56,length=8), 985 | ] 986 | 987 | temp_id = 0x204 988 | self.__can_frames_divide_by_id[temp_id] = [ 989 | FrameDefine(i_d=temp_id,name="TestModeKey1", start=0,length=8), 990 | FrameDefine(i_d=temp_id,name="TestModeKey2", start=8,length=8), 991 | FrameDefine(i_d=temp_id,name="TestModeKey3", start=16,length=8), 992 | FrameDefine(i_d=temp_id,name="TestModeKey4", start=24,length=8), 993 | FrameDefine(i_d=temp_id,name="TestModeKey5", start=32,length=8), 994 | FrameDefine(i_d=temp_id,name="TestModeKey6", start=40,length=8), 995 | FrameDefine(i_d=temp_id,name="TestModeKey7", start=48,length=8), 996 | FrameDefine(i_d=temp_id,name="TestModeKey8", start=56,length=8), 997 | ] 998 | 999 | # 把数字转换为2进制字符串 1000 | def __trans_int_2_bin_str(self, dt: int): 1001 | self.not_use 1002 | old_str = str(bin(dt)) 1003 | old_str = old_str[2:] 1004 | new_str = old_str.rjust(8, "0") 1005 | return new_str 1006 | # 将2进制字符串转换为数字 1007 | 1008 | def __trans_bin_str_2_int(self, dt: str): 1009 | return int(dt, 2) 1010 | 1011 | def show_can_frame_as_bin(self, dt: List[int]): 1012 | for items in dt: 1013 | print(self.__trans_int_2_bin_str(items)) 1014 | # 摩托罗拉格式 低字节在 1015 | # 返回值是右对齐 将收到的CAN报文转换为长度为64的,2进制字符串 1016 | # data[0] X_07_63 X_06_62 X_05_61 X_04_60 X_03_59 X_02_58 X_01_57 X_00_56 1017 | # data[1] X_15_55 X_14_54 X_13_53 X_12_52 X_11_51 X_10_50 X_09_49 X_08_48 1018 | # data[2] X_23_47 X_22_46 X_21_45 X_20_44 X_19_43 X_18_42 X_17_41 X_16_40 1019 | # data[3] X_31_39 X_30_38 X_29_37 X_28_36 X_27_35 X_26_34 X_25_33 X_24_32 1020 | # data[4] X_39_31 X_38_30 X_37_29 X_36_28 X_35_27 X_34_26 X_33_25 X_32_24 1021 | # data[5] X_47_23 X_46_22 X_45_21 X_44_20 X_43_19 X_42_18 X_41_17 X_40_16 1022 | # data[6] X_55_15 X_54_14 X_53_13 X_52_12 X_51_11 X_50_10 X_49_09 X_48_08 1023 | # data[7] X_63_07 X_62_06 X_61_05 X_60_04 X_59_03 X_58_02 X_57_01 X_56_00 1024 | 1025 | def msg_frame_2_bin_64bits_str(self, dt: []): 1026 | ret = "" 1027 | for items in dt: 1028 | ret += self.__trans_int_2_bin_str(items) 1029 | ret = ret.rjust(64, "0") 1030 | return ret[::-1] 1031 | 1032 | def calc_value(self, data_str: str, frame_define: FrameDefine): 1033 | st = frame_define.start 1034 | e = frame_define.start+frame_define.length 1035 | old_str = data_str[st:e] 1036 | new_str = old_str[::-1] 1037 | val = self.__trans_bin_str_2_int(new_str) 1038 | return val*frame_define.resolution + frame_define.offset 1039 | 1040 | def calc_value_and_store_2_decode_msg(self,data_str:str, frame_define: FrameDefine): 1041 | st = frame_define.start 1042 | e = frame_define.start+frame_define.length 1043 | old_str = data_str[st:e] 1044 | new_str = old_str[::-1] 1045 | val = self.__trans_bin_str_2_int(new_str) 1046 | convert_val = val*frame_define.resolution + frame_define.offset 1047 | self.decode_messages[frame_define.name] = convert_val 1048 | 1049 | 1050 | def test_store_msg(self, frame_define: FrameDefine): 1051 | self.decode_messages[frame_define.name] = 997 1052 | self.decode_messages[frame_define.name] = 998 1053 | pass 1054 | 1055 | def get_decode_msg(self): 1056 | return self.decode_messages 1057 | 1058 | def test_find_ids(self, i_d: int) -> List[FrameDefine]: 1059 | if self.__can_frames_divide_by_id.__contains__(i_d): 1060 | return self.__can_frames_divide_by_id.get(i_d) 1061 | 1062 | def decode_can_frame_and_store(self, i_d: int, dt: List[int]): 1063 | if self.__can_frames_divide_by_id.__contains__(i_d): 1064 | frame_information = self.__can_frames_divide_by_id.get(i_d) 1065 | d_str = self.msg_frame_2_bin_64bits_str(dt) 1066 | for information in frame_information: 1067 | self.calc_value_and_store_2_decode_msg(d_str, information) 1068 | 1069 | if __name__ == '__main__': 1070 | re_finCellVolt = re.compile("Cell_Voltage_\d*") 1071 | re_findDigital = re.compile("\d*") 1072 | s="Cell_Voltage_0_slave_board_15" 1073 | print(re_finCellVolt.match(s).group(0)) 1074 | 1075 | # can_frames_divide_by_id = {} 1076 | # ids = 0x220 1077 | # # can_frames_divide_by_id[ids]=[FrameDefine(name="温度1", start=8, length=12,i_d=ids, resolution=1,offset=40)] 1078 | # frame = FrameDefine(name="温度1",start=56,length=12,i_d=0x111, resolution=1,offset=0) 1079 | # data = [0x22,0x14,0x69,1,0x47,1,1,0xf0] 1080 | # d = iDecodeCanFrame() 1081 | # print(d.show_can_frame_as_bin(dt=data)) 1082 | # s = d.msg_frame_2_bin_64bits_str(data) 1083 | # print(s) 1084 | # print(bin(d.calc_value(s,frame))) 1085 | # res = d.test_find_ids(0x220) 1086 | # for item in res: 1087 | # print(item.name) 1088 | # print(d.calc_value(s, frame)) 1089 | # print(can_frames_divide_by_id) 1090 | pass 1091 | 1092 | 1093 | -------------------------------------------------------------------------------- /Doc/【使用手册】CAN测试软件与接口函数使用手册.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/123zmz123/ZlgCanDriver/fa11e0b53758e094c211ad1806ea062d4ebeff6f/Doc/【使用手册】CAN测试软件与接口函数使用手册.pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ZlgCanDriver 2 | The zlg can driver writting by python 3 | 4 | 用来驱动周立功系列的python 库 5 | 6 | #python 版本 7 | python3 8 | 9 | # 使用方式 10 | 文件夹内保存了 ZLG CAN系列驱动,适用于x64 ,windows系统,建议没有弄熟之前不要进行改动, 11 | 代码尾行有展示代码。我已尽量做到抽象。 12 | 13 | 基本使用如下 14 | ```python 15 | #新建对象 16 | c = Communication() 17 | #配置CAN卡, 型号:USB_CAN_2EU, CAN卡索引: 0, CAN卡通道:channel_0, 波特率: 500kbps 18 | c.set_can_board_configuration(can_type="usb_can_2eu",can_idx=0,chn=0,baud_rate=500) 19 | #打开CAN卡' 20 | c.open_new() 21 | 22 | # 注意发送函数默认发送数据长度为8个字节 23 | 24 | # 发送标准帧 id 为0x110 25 | data = [1,2,3,4,5,6,7,8] 26 | c.Transmit(0x110,data) 27 | 28 | # 发送拓展帧 29 | data = [1,2,3,4,5,6,7,8] 30 | c.Transmit(0x110,data,extern_flag = True) 31 | 32 | # 发送长度为6的帧 , 根据周立功官方手册,CAN帧最大发送数据长度为8,当然我对此表示怀疑, 33 | # 但既然周立功所提供驱动貌似只能发送最大长度为8 byte的帧,因此,请保证数据长度不大于8即可。 34 | data = [1,2,3,4,5,6] 35 | c.Transmit(0x110,data,data_len=6) 36 | 37 | # 新建线程,不断读取CAN卡上的报文并且打印出来 38 | cycle_read_thread = threading.Thread(target=c.PrintReceiveData) 39 | cycle_read_thread.start() 40 | 41 | 42 | ``` 43 | ## CAN 卡型号支持 44 | - can 卡型号格式 45 | + usb_can_2eu 46 | + usb_can_2 47 | + pci_5010_u 48 | + pci_5020_u 49 | + usb_can_eu 50 | + usb_can_4eu 51 | + pci_5121 52 | + pci_9810i 53 | + pci_9820 54 | + can_232 55 | + pci_5110 56 | + candtu 57 | 58 | 如 59 | ```python 60 | c.set_can_board_configuration(can_type="usb_can_2",can_idx=0,chn=0,baud_rate=500) 61 | c.set_can_board_configuration(can_type="pci_5121",can_idx=0,chn=0,baud_rate=500) 62 | c.set_can_board_configuration(can_type="candtu",can_idx=0,chn=0,baud_rate=500) 63 | ``` 64 | 周立功很多CAN卡已经不再支持, 相信经典型号大多为 usb-can-2eu/eu usb-can-2 系列,当前python库驱动 65 | usb-can-2eu, usb-can-eu,usb-can-2,usb-can-8eu成功 66 | 67 | can 卡型号最终会被转换为一个特定数字,可参考源码。 68 | ZLGCanControl.py 69 | ```python 70 | 71 | 72 | class CanBoardTypeDefines: 73 | VCI_PCI5121 = 1 74 | VCI_PCI9810 = 2 75 | VCI_USBCAN1 = 3 76 | VCI_USBCAN2 = 4 77 | VCI_USBCAN2A = 4 78 | VCI_PCI9820 = 5 79 | VCI_CAN232 = 6 80 | VCI_PCI5110 = 7 81 | VCI_CANLITE = 8 82 | VCI_ISA9620 = 9 83 | VCI_ISA5420 = 10 84 | VCI_PC104CAN = 11 85 | VCI_CANETUDP = 12 86 | VCI_CANETE = 12 87 | VCI_DNP9810 = 13 88 | VCI_PCI9840 = 14 89 | VCI_PC104CAN2 = 15 90 | VCI_PCI9820I = 16 91 | VCI_CANETTCP = 17 92 | VCI_PEC9920 = 18 93 | VCI_PCIE_9220 = 18 94 | VCI_PCI5010U = 19 95 | VCI_USBCAN_E_U = 20 96 | VCI_USBCAN_2E_U = 21 97 | VCI_PCI5020U = 22 98 | VCI_EG20T_CAN = 23 99 | VCI_PCIE9221 = 24 100 | VCI_WIFICAN_TCP = 25 101 | VCI_WIFICAN_UDP = 26 102 | VCI_PCIe9120 = 27 103 | VCI_PCIe9110 = 28 104 | VCI_PCIe9140 = 29 105 | VCI_USBCAN_4E_U = 31 106 | VCI_CANDTU_200UR = 32 107 | VCI_CANDTU_MINI = 33 108 | VCI_USBCAN_8E_U = 34 109 | VCI_CANREPLAY = 35 110 | VCI_CANDTU_NET = 36 111 | VCI_CANDTU_100UR = 37 112 | group1 = [VCI_USBCAN_2E_U, VCI_USBCAN_E_U, 113 | VCI_PCI5010U, VCI_PCI5020U] 114 | group2 = [VCI_USBCAN_4E_U] 115 | ``` 116 | 117 | ## 波特率设置 118 | 波特率设置请参考,周立功官方手册, 代码中并未对CAN卡是否支持某种波特率进行判断, 119 | 当然 1000, 500, 250, 100等常用波特率应该是支持的。 120 | 121 | 对于某些特殊波特率需要联系周立功官方,进行特殊参数写入。 122 | 123 | - 1000kpbs -----1000 124 | - 500kpbs -----500 125 | ## 通道设置 126 | 无论你的CAN卡通道有多少,请记住,最小通道号在在此以0为代表,然后依次递增 127 | 128 | # enjoy it 129 | 130 | # 下一步 131 | - 完善动态解析模块 132 | - 不太确定是否需要支持动态解析模块,或者说动态解析模块本质上没啥用 133 | 134 | 135 | 136 | 137 | -------------------------------------------------------------------------------- /SystemConfigureration.py: -------------------------------------------------------------------------------- 1 | import json 2 | import os 3 | class Configuration(): 4 | class Supported (): 5 | Type_USB_CAN_2EU = "usb_can_2eu" 6 | Type_USB_CAN_II = "usb_can_ii" 7 | 8 | Channel_CH0 = 0 9 | Channel_CH1 = 1 10 | Channel_CH2 = 2 11 | Channel_CH3 = 3 12 | Channel_CH4 = 4 13 | Channel_CH5 = 5 14 | Channel_CH6 = 6 15 | 16 | Baudrate_100k = 100 17 | Baudrate_250k = 250 18 | Baudrate_500k = 500 19 | Baudrate_1000k = 1000 20 | 21 | Index_0 = 0 22 | Index_1 = 1 23 | def __init__(self): 24 | pass 25 | 26 | def __init__(self): 27 | self.can_type = "usb_can_2eu" # CAN卡类型 28 | self.chn = 0 # CAN卡通道 29 | self.can_idx = 0 # CAN 卡 index 30 | self.baud_rate=500 # 波特率 31 | 32 | def setCan(self,can_type =Supported.Type_USB_CAN_2EU, \ 33 | chn = Supported.Channel_CH0,can_idx = Supported.Index_0, baud_rate = Supported.Baudrate_500k): 34 | self.can_type = can_type 35 | self.chn = chn 36 | self.can_idx = can_idx 37 | self.baud_rate = baud_rate 38 | def saveConfig(self): 39 | file_name = "config.json" 40 | try: 41 | with open(file_name,"w") as f: 42 | json.dump(self.__dict__,f) 43 | except Exception as e: 44 | print(e) 45 | pass 46 | def readConfig(self): 47 | file_name = "config.json" 48 | with open(file_name,"r") as f: 49 | self.__dict__=json.load(f) 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | if __name__ == '__main__': 62 | config = Configuration() 63 | config.readConfig() 64 | 65 | pass -------------------------------------------------------------------------------- /ZLGCanControl.py: -------------------------------------------------------------------------------- 1 | import ctypes 2 | from ctypes import * 3 | import time 4 | import traceback 5 | from DecodeCanFrame import iDecodeCanFrame 6 | import re 7 | from enum import * 8 | import threading 9 | from array import * 10 | 11 | class S19Line: 12 | def __init__(self): 13 | self.DataType = "" 14 | self.DataID = "" 15 | self.DataItem="" 16 | 17 | dll = ctypes.WinDLL("ControlCAN.dll") 18 | 19 | 20 | class VCI_INIT_CONFIG(Structure): 21 | _fields_ = [("AccCode", c_ulong), 22 | ("AccMask", c_ulong), 23 | ("Reserved", c_ulong), 24 | ("Filter", c_ubyte), 25 | ("Timing0", c_ubyte), 26 | ("Timing1", c_ubyte), 27 | ("Mode", c_ubyte) 28 | ] 29 | 30 | 31 | class VCI_CAN_OBJ(Structure): 32 | _fields_ = [("ID", c_uint), 33 | ("TimeStamp", c_uint), 34 | ("TimeFlag", c_byte), 35 | ("SendType", c_byte), 36 | ("RemoteFlag", c_byte), 37 | ("ExternFlag", c_byte), 38 | ("DataLen", c_ubyte), 39 | ("Data", c_ubyte*8), 40 | ("Reserved", c_ubyte*3) 41 | ] 42 | 43 | class VCI_CAN_OBJ_SEND(Structure): 44 | _fields_ = [("ID", c_uint), 45 | ("TimeStamp", c_uint), 46 | ("TimeFlag", c_byte), 47 | ("SendType", c_byte), 48 | ("RemoteFlag", c_byte), 49 | ("ExternFlag", c_byte), 50 | ("DataLen", c_byte), 51 | ("Data", c_ubyte*8), 52 | ("Reserved", c_ubyte*3) 53 | ] 54 | 55 | 56 | class CanBoardTypeDefines: 57 | VCI_PCI5121 = 1 58 | VCI_PCI9810 = 2 59 | VCI_USBCAN1 = 3 60 | VCI_USBCAN2 = 4 61 | VCI_USBCAN2A = 4 62 | VCI_PCI9820 = 5 63 | VCI_CAN232 = 6 64 | VCI_PCI5110 = 7 65 | VCI_CANLITE = 8 66 | VCI_ISA9620 = 9 67 | VCI_ISA5420 = 10 68 | VCI_PC104CAN = 11 69 | VCI_CANETUDP = 12 70 | VCI_CANETE = 12 71 | VCI_DNP9810 = 13 72 | VCI_PCI9840 = 14 73 | VCI_PC104CAN2 = 15 74 | VCI_PCI9820I = 16 75 | VCI_CANETTCP = 17 76 | VCI_PEC9920 = 18 77 | VCI_PCIE_9220 = 18 78 | VCI_PCI5010U = 19 79 | VCI_USBCAN_E_U = 20 80 | VCI_USBCAN_2E_U = 21 81 | VCI_PCI5020U = 22 82 | VCI_EG20T_CAN = 23 83 | VCI_PCIE9221 = 24 84 | VCI_WIFICAN_TCP = 25 85 | VCI_WIFICAN_UDP = 26 86 | VCI_PCIe9120 = 27 87 | VCI_PCIe9110 = 28 88 | VCI_PCIe9140 = 29 89 | VCI_USBCAN_4E_U = 31 90 | VCI_CANDTU_200UR = 32 91 | VCI_CANDTU_MINI = 33 92 | VCI_USBCAN_8E_U = 34 93 | VCI_CANREPLAY = 35 94 | VCI_CANDTU_NET = 36 95 | VCI_CANDTU_100UR = 37 96 | group1 = [VCI_USBCAN_2E_U, VCI_USBCAN_E_U, 97 | VCI_PCI5010U, VCI_PCI5020U] 98 | group2 = [VCI_USBCAN_4E_U] 99 | 100 | 101 | 102 | 103 | 104 | class CanBaudrateDefines: 105 | def group1_baud_rate(self,baud_rate: int): 106 | if baud_rate == 1000: 107 | return True,0x060003,"ok" 108 | elif baud_rate == 800: 109 | return True,0x060004,"ok" 110 | elif baud_rate == 500: 111 | return True,0x060007,"ok" 112 | elif baud_rate == 250: 113 | return True,0x1c0008,"ok" 114 | elif baud_rate == 125: 115 | return True,0x1c0011,"ok" 116 | elif baud_rate == 100: 117 | return True,0x160023,"ok" 118 | elif baud_rate == 50: 119 | return True,0x1c002c,"ok" 120 | elif baud_rate == 20: 121 | return True,0x1600b3,"ok" 122 | elif baud_rate == 10: 123 | return True,0x1c00e0,"ok" 124 | elif baud_rate == 5: 125 | return True,0x1c01c1,"ok" 126 | else: 127 | return False, 0, "baud rate is not supported!" 128 | 129 | def group2_baud_rate(self,baud_rate: int): 130 | if baud_rate == 1000: 131 | return True, baud_rate*1000, "ok" 132 | elif baud_rate == 800: 133 | return True, baud_rate*1000, "ok" 134 | elif baud_rate == 500: 135 | return True, baud_rate*1000, "ok" 136 | elif baud_rate == 250: 137 | return True, baud_rate*1000, "ok" 138 | elif baud_rate == 125: 139 | return True, baud_rate*1000, "ok" 140 | elif baud_rate == 100: 141 | return True, baud_rate*1000, "ok" 142 | elif baud_rate == 50: 143 | return True, baud_rate*1000, "ok" 144 | elif baud_rate == 20: 145 | return True, baud_rate*1000, "ok" 146 | elif baud_rate == 10: 147 | return True, baud_rate*1000, "ok" 148 | elif baud_rate == 5: 149 | return True, baud_rate*1000, "ok" 150 | else: 151 | return False, 0, "baud rate is not supported" 152 | def get_baud_rate_group_1_2(self,can_type: int, baud_rate: int): 153 | if can_type in CanBoardTypeDefines.group1: 154 | stat,bd ,msg= self.group1_baud_rate(baud_rate) 155 | return stat,bd, msg 156 | elif can_type in CanBoardTypeDefines.group2: 157 | stat,bd, msg = self.group2_baud_rate(baud_rate) 158 | return stat, bd, msg 159 | else: 160 | return False,0, "can type not supporrted" 161 | 162 | def get_baud_rate_group_3(self, baud_rate: int): 163 | try: 164 | if baud_rate == 10: 165 | timing0 = 0x31 166 | timing1 = 0x1c 167 | return timing0,timing1 168 | elif baud_rate == 20: 169 | timing0 = 0x18 170 | timing1 = 0x1c 171 | return timing0,timing1 172 | elif baud_rate == 40: 173 | timing0 = 0x87 174 | timing1 = 0xff 175 | return timing0,timing1 176 | elif baud_rate == 50: 177 | timing0 = 0x09 178 | timing1 = 0x1c 179 | return timing0,timing1 180 | elif baud_rate == 80: 181 | timing0 = 0x83 182 | timing1 = 0xff 183 | return timing0,timing1 184 | elif baud_rate == 100: 185 | timing0 = 0x04 186 | timing1 = 0x1c 187 | return timing0,timing1 188 | elif baud_rate == 125: 189 | timing0 = 0x03 190 | timing1 = 0x1c 191 | return timing0,timing1 192 | elif baud_rate == 200: 193 | timing0 = 0x81 194 | timing1 = 0xfa 195 | return timing0,timing1 196 | elif baud_rate == 250: 197 | timing0 = 0x01 198 | timing1 = 0x1c 199 | return timing0,timing1 200 | elif baud_rate == 400: 201 | timing0 = 0x80 202 | timing1 = 0xfa 203 | return timing0,timing1 204 | elif baud_rate == 500: 205 | timing0 = 0x00 206 | timing1 = 0x1c 207 | return timing0,timing1 208 | elif baud_rate == 666: 209 | timing0 = 0x80 210 | timing1 = 0xb6 211 | return timing0,timing1 212 | elif baud_rate == 800: 213 | timing0 = 0x00 214 | timing1 = 0x16 215 | return timing0,timing1 216 | elif baud_rate == 1000: 217 | timing0 = 0x00 218 | timing1 = 0x14 219 | return timing0,timing1 220 | else: 221 | raise Exception("group3 CAN卡所设置的波特率暂不被支持 波特率为"+ str(baud_rate)) 222 | except Exception as e: 223 | raise e 224 | # PCI-5010-U、PCI-5020-U、USBCAN-E-U、 USBCAN-2E-U、 USBCAN-4E-U、CANDTU 225 | 226 | 227 | class CanConfigGroup1: 228 | def __init__(self): 229 | self.BaudRate = 0 230 | self.CanType = 0 231 | self.Chn = 0 232 | self.CanIndex = 0 233 | self.init_config = VCI_INIT_CONFIG() 234 | 235 | 236 | class CanConfigGroup2: 237 | def __init__(self): 238 | self.BaudRate = 0 239 | self.CanType = 0 240 | self.Chn = 0 241 | self.CanIndex = 0 242 | self.init_config = VCI_INIT_CONFIG() 243 | 244 | 245 | class Communication(): 246 | baud_rate_define = CanBaudrateDefines() 247 | initconfig = VCI_INIT_CONFIG(0x00000000,0xffffffff, 0, 1, 0x00, 0x14, 0)# 248 | CanInfor = VCI_CAN_OBJ() 249 | ReceiveBuffer = (VCI_CAN_OBJ*1000)() 250 | 251 | def __init__(self, can_type=23, chn=0, ind=0): 252 | super().__init__() 253 | self.BaudRate = 0x60007 254 | self.CanType = can_type 255 | self.Chn = chn 256 | self.CanIndex = ind 257 | self.config1 = CanConfigGroup1() 258 | self.config2 = CanConfigGroup2() 259 | self.decode = iDecodeCanFrame() 260 | self.run_flag = False 261 | def _error_msg(self, msg: str): 262 | return msg 263 | 264 | def _trans_can_type(self, typename: str): 265 | if typename.lower() == "usb_can_2eu": # 此处应当用 re 去解析 266 | return True, CanBoardTypeDefines.VCI_USBCAN_2E_U, "ok" 267 | elif typename.lower() == "usb_can_1" or typename.lower() == "usb_can_i": 268 | return True, CanBoardTypeDefines.VCI_USBCAN1, "ok" 269 | elif typename.lower() == "usb_can_2" or typename.lower() == "usb_can_ii": 270 | return True, CanBoardTypeDefines.VCI_USBCAN2, "ok" 271 | elif typename.lower() == "pci_5010_u" or typename.lower() == "pci-5010-u": 272 | return True, CanBoardTypeDefines.VCI_PCI5010U, "ok" 273 | elif typename.lower() == "pci_5020_u" or typename.lower() == "pci-5020-u": 274 | return True, CanBoardTypeDefines.VCI_PCI5020U, "ok" 275 | elif typename.lower() == "usb_can_eu" or typename.lower() == "usb-can-eu": 276 | return True, CanBoardTypeDefines.VCI_USBCAN_E_U, "ok" 277 | elif typename.lower() == "usb_can_4eu" or typename.lower() == "usb-can-4eu": 278 | return True, CanBoardTypeDefines.VCI_USBCAN_E_U, "ok" 279 | elif typename.lower() == "pci_5121" or typename.lower() == "pci-5121": 280 | return True, CanBoardTypeDefines.VCI_PCI5121, "ok" 281 | elif typename.lower() == "pci_9810i" or typename.lower() == "pci-9810i": 282 | return True, CanBoardTypeDefines.VCI_PCI9810, "ok" 283 | elif typename.lower() == "pci_9820" or typename.lower() == "pci-9820": 284 | return True, CanBoardTypeDefines.VCI_PCI9820, "ok" 285 | elif typename.lower() == "can_232" or typename.lower() == "can232": 286 | return True, CanBoardTypeDefines.VCI_CAN232, "ok" 287 | elif typename.lower() == "pci_5110" or typename.lower() == "pci5110": 288 | return True, CanBoardTypeDefines.VCI_PCI5110, "ok" 289 | elif typename.lower() == "candtu": 290 | return True, CanBoardTypeDefines.VCI_CANDTU_MINI, "ok" 291 | else: 292 | return False, 0, "InputType is not satisfied! At GetCANBoardConfigurtaion Function" 293 | 294 | def set_can_board_configuration(self, can_type: str, can_idx: int, chn: int, baud_rate: int): 295 | try: 296 | if type(can_type) != str or type(chn) != int or type(baud_rate) != int: 297 | return False, self._error_msg(" InputType is not satisfied! At GetCANBoardConfigurtaion Function") 298 | 299 | # if can type like usb_can_2eu 300 | # CAN Type 解析 301 | stat, self.CanType, msg = self._trans_can_type(can_type) 302 | 303 | if not stat: 304 | return False, self._error_msg(msg) 305 | 306 | if self.CanType in CanBoardTypeDefines.group1 or self.CanType in CanBoardTypeDefines.group2: 307 | 308 | stat, self.config1.CanType , msg = self._trans_can_type(can_type) 309 | # CAN Board Index 解析 310 | self.CanIndex = can_idx 311 | self.config1.CanIndex = can_idx 312 | 313 | # CAN Board Channel 解析 314 | if chn <= 4: 315 | self.Chn = chn 316 | self.config1.Chn = chn 317 | else: 318 | return False, self._error_msg("CAN channel is larger then 4") 319 | 320 | stat, self.BaudRate, msg = self.baud_rate_define.get_baud_rate_group_1_2 \ 321 | (self.CanType, baud_rate) 322 | 323 | stat, self.config1.BaudRate , msg = self.baud_rate_define.get_baud_rate_group_1_2 \ 324 | (self.config1.CanType, baud_rate) 325 | 326 | self.config1.init_config.AccCode = 0x00000000 327 | self.config1.init_config.AccMask = 0xffffffff 328 | self.config1.init_config.Reserved = 0 329 | self.config1.init_config.Filter = 1 330 | self.config1.init_config.Timing0 = 0x00 331 | self.config1.init_config.Timing1 = 0x14 332 | self.config1.init_config.Mode = 0 333 | 334 | if not stat: 335 | return False, self._error_msg(msg) 336 | return True, self._error_msg("ok") 337 | else: 338 | stat, self.config2.CanType, msg = self._trans_can_type(can_type) 339 | self.config2.CanIndex = can_idx 340 | 341 | if chn <= 4: 342 | self.config2.Chn = chn 343 | else: 344 | raise Exception("Can 通道设置大于4") 345 | self.config2.init_config.AccCode = 0x00000000 346 | self.config2.init_config.AccMask = 0xffffffff 347 | self.config2.init_config.Filter = 1 348 | self.config2.init_config.Timing0 , self.config2.init_config.Timing1 = self.baud_rate_define.\ 349 | get_baud_rate_group_3(baud_rate) 350 | 351 | self.config2.init_config.Mode = 0 352 | 353 | except Exception as e: 354 | raise e 355 | print(e) 356 | 357 | 358 | 359 | 360 | 361 | def Open(self): 362 | if dll.VCI_OpenDevice(self.CanType, 0, 0) == 0: 363 | print("打开设备失败,请检查设备类型和设备索引号是否正确!") 364 | return 365 | if (self.CanType == 21 or self.CanType == 20): 366 | if dll.VCI_SetReference(self.CanType,self.CanIndex,self.Chn, 0, byref(c_int(self.BaudRate))) == 0: 367 | dll.VCI_CloseDevice(self.CanType,0) 368 | print("配置波特率失败!") 369 | return 370 | if dll.VCI_InitCAN(self.CanType, self.CanIndex, self.Chn, pointer(self.initconfig)) == 0: 371 | print("初始化CAN失败") 372 | return 373 | elif self.CanType == 4: 374 | vic = VCI_INIT_CONFIG() 375 | vic.AccCode = 0x00000000 376 | vic.AccMask = 0xffffffff 377 | vic.Filter = 1 378 | vic.Timing0 = 0x00 379 | vic.Timing1 = 0x1c 380 | vic.Mode = 0 381 | if dll.VCI_InitCAN(4,0,0,pointer(vic))== 0: 382 | print("初始化CAN卡失败!") 383 | if dll.VCI_StartCAN(self.CanType,self.CanIndex,self.Chn)==0: 384 | print("打开CAN失败!") 385 | return 386 | 387 | def Openx(self): 388 | if dll.VCI_OpenDevice(self.config1.CanType, 0, 0) == 0: 389 | print("打开设备失败,请检查设备类型和设备索引号是否正确!") 390 | return 391 | if (self.CanType == 21 or self.CanType == 20): 392 | if dll.VCI_SetReference(self.config1.CanType,self.config1.CanIndex,self.config1.Chn, 0, byref(c_int(self.config1.BaudRate))) == 0: 393 | dll.VCI_CloseDevice(self.config1.CanType,0) 394 | print("配置波特率失败!") 395 | return 396 | if dll.VCI_InitCAN(self.config1.CanType, self.config1.CanIndex, self.config1.Chn, pointer(self.config1.init_config)) == 0: 397 | print("初始化CAN失败") 398 | return 399 | elif self.CanType == 4: 400 | vic = VCI_INIT_CONFIG() 401 | vic.AccCode = 0x00000000 402 | vic.AccMask = 0xffffffff 403 | vic.Filter = 1 404 | vic.Timing0 = 0x00 405 | vic.Timing1 = 0x1c 406 | vic.Mode = 0 407 | if dll.VCI_InitCAN(4,0,0,pointer(vic))== 0: 408 | print("初始化CAN卡失败!") 409 | if dll.VCI_StartCAN(self.CanType,self.CanIndex,self.Chn)==0: 410 | print("打开CAN失败!") 411 | return 412 | def open_new(self): 413 | try: 414 | if self.config1.CanType == 0 and self.config2.CanType == 0: 415 | raise Exception("do not set Can type in Open_new func") 416 | 417 | if self.config1.CanType != 0: 418 | 419 | if dll.VCI_OpenDevice(self.config1.CanType, self.config1.CanIndex, 0) == 0: 420 | raise Exception("打开CAN卡失败,请检查设备索引和设备类型是否准确") 421 | 422 | if dll.VCI_SetReference(self.config1.CanType, self.config1.CanIndex, self.config1.Chn, 0, 423 | byref(c_int(self.config1.BaudRate))) == 0: 424 | dll.VCI_CloseDevice(self.config1.CanType, 0) 425 | raise Exception("配置波特率失败") 426 | 427 | if dll.VCI_InitCAN(self.config1.CanType, self.config1.CanIndex, self.config1.Chn, 428 | pointer(self.config1.init_config)) == 0: 429 | raise Exception("初始化失败") 430 | 431 | if dll.VCI_StartCAN(self.config1.CanType,self.config1.CanIndex,self.config1.Chn)==0: 432 | raise Exception("打开CAN卡失败") 433 | 434 | elif self.config2.CanType != 0: 435 | if dll.VCI_OpenDevice(self.config2.CanType, self.config2.CanIndex, 0) == 0: 436 | raise Exception("打开CAN卡失败,请检查设备索引和设备类型是否准确") 437 | 438 | if dll.VCI_InitCAN(self.config2.CanType,self.config2.CanIndex,0, pointer(self.config2.init_config))== 0: 439 | raise Exception("初始化CAN卡失败") 440 | 441 | if dll.VCI_StartCAN(self.config2.CanType,self.config2.CanIndex, self.config2.Chn)==0: 442 | raise Exception("打开CAN卡失败") 443 | 444 | except Exception as e: 445 | raise e 446 | return traceback.format_exc() 447 | 448 | 449 | def ReceiveData(self): 450 | RecvSize = dll.VCI_GetReceiveNum(self.CanType, self.CanIndex, self.Chn) 451 | respond = dll.VCI_Receive(self.CanType, self.CanIndex, self.Chn, byref(self.ReceiveBuffer), RecvSize, 10) 452 | if respond == 0xFFFFFFFF: 453 | print("读取数据失败") 454 | elif respond == 0: 455 | pass 456 | elif respond > 0: 457 | for i in range(0, respond): 458 | if self.ReceiveBuffer[i].ID == (self.m_AdrReceiveID + 0): 459 | print(hex(self.ReceiveBuffer[i].Data[0]), 460 | hex(self.ReceiveBuffer[i].Data[1]), 461 | hex(self.ReceiveBuffer[i].Data[2]), 462 | hex(self.ReceiveBuffer[i].Data[3]), 463 | hex(self.ReceiveBuffer[i].Data[4]), 464 | hex(self.ReceiveBuffer[i].Data[5]), 465 | hex(self.ReceiveBuffer[i].Data[6]), 466 | hex(self.ReceiveBuffer[i].Data[7])) 467 | self.GetLengthOfBlock(self.ReceiveBuffer[i].Data[0:]) 468 | self.CheckIsBlockWriterOver(self.ReceiveBuffer[i].Data[0:]) 469 | for j in range(0,len(self.m_ReturnData)): 470 | if self.CheckIsReturn(self.m_ReturnData[j],self.ReceiveBuffer[i].Data[0:]): 471 | self.m_ReturnResult[j] = True 472 | if j == self._MessageName.ReturnConstantMessage.value: 473 | print("收到保持通讯消息") 474 | 475 | def _PrintReceiveData(self): 476 | RecvSize = dll.VCI_GetReceiveNum(self.CanType, self.CanIndex, self.Chn) 477 | respond = dll.VCI_Receive(self.CanType, self.CanIndex, self.Chn, byref(self.ReceiveBuffer), RecvSize, 10) 478 | if respond == 0xFFFFFFFF: 479 | print("读取数据失败") 480 | elif respond == 0: 481 | pass 482 | elif respond > 0: 483 | for i in range(0, respond): 484 | print(hex(self.ReceiveBuffer[i].Data[0]), 485 | hex(self.ReceiveBuffer[i].Data[1]), 486 | hex(self.ReceiveBuffer[i].Data[2]), 487 | hex(self.ReceiveBuffer[i].Data[3]), 488 | hex(self.ReceiveBuffer[i].Data[4]), 489 | hex(self.ReceiveBuffer[i].Data[5]), 490 | hex(self.ReceiveBuffer[i].Data[6]), 491 | hex(self.ReceiveBuffer[i].Data[7])) 492 | def PrintReciveData(self): 493 | while True: 494 | self._PrintReceiveData() 495 | time.sleep(0.1) 496 | def ReceiveDataAndDecode(self): 497 | RecvSize = dll.VCI_GetReceiveNum(self.CanType, self.CanIndex, self.Chn) 498 | respond = dll.VCI_Receive(self.CanType, self.CanIndex, self.Chn, byref(self.ReceiveBuffer), RecvSize, 10) 499 | if respond == 0xFFFFFFFF: 500 | print("读取数据失败") 501 | elif respond == 0: 502 | pass 503 | elif respond > 0: 504 | for i in range(0, respond): 505 | self.decode.decode_can_frame_and_store(i_d=self.ReceiveBuffer[i].ID, dt=self.ReceiveBuffer[i].Data) 506 | def thread_begin(self): 507 | self.run_flag = True 508 | def thread_end(self): 509 | self.run_flag = False 510 | def receive(self): 511 | while True: 512 | # self.ReceiveData() 513 | self.ReceiveDataAndDecode() 514 | time.sleep(0.5) 515 | di = self.decode.get_decode_msg() 516 | print(di) 517 | 518 | 519 | def printx(self): 520 | while True: 521 | print("fuck fuck") 522 | time.sleep(0.1) 523 | 524 | 525 | 526 | 527 | def Close(self): 528 | dll.VCI_CloseDevice(self.CanType,0) 529 | def Transmit(self, ID, data,remote_flag=False,extern_flag = False,data_len = 8): #最基本的发送函数 530 | a = VCI_CAN_OBJ_SEND() 531 | a.ID = ID 532 | a.DataLen = data_len 533 | if remote_flag == True: 534 | a.RemoteFlag = 1 535 | if extern_flag == True: 536 | a.ExternFlag = 1 537 | if len(data)<8: 538 | data+=(8-len(data))*[0] 539 | #a.Data = (c_ubyte*8)(0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01) 540 | a.Data = (c_ubyte*8)(data[0],data[1],data[2],data[3],data[4],data[5],data[6],data[7] )# 终于尼玛搞定了 541 | # a.Data = (c_ubyte*8)(data[0],data[1],data[2],data[3],data[4],data[5],data[6],data[7]) # 终于尼玛搞定了 542 | # a.Data = (c_ubyte*8)(data[0],data[1],data[2],data[3],data[4],data[5],data[6],data[7]) # 终于尼玛搞定了 543 | res = 0 544 | if self.config1.CanType != 0: 545 | res = dll.VCI_Transmit(self.CanType, self.config1.CanIndex, self.config1.Chn, pointer(a), 1) 546 | elif self.config2.CanType != 0: 547 | res = dll.VCI_Transmit(self.CanType, self.config2.CanIndex, self.config2.Chn, pointer(a), 1) 548 | if res !=1: 549 | print("发送失败!") 550 | def TranExtentedSession(self): # 切换到扩展模式 551 | data =(0x02,0x10,0x03,0,0,0,0,0) 552 | self.Transmit(self.m_SendID,data) 553 | print("尝试切换到拓展模式") 554 | 555 | def TimeHandle(self,msg): 556 | pass 557 | def RoutineSend(self):#周期发送用来和BMS保持连接! 558 | while True: 559 | self.m_ReturnResult[self._MessageName.ReturnConstantMessage.value] = False 560 | self.SendConstantCommand() 561 | m_Time = time.clock() 562 | while self.m_ReturnResult[self._MessageName.ReturnConstantMessage.value] != True: 563 | if (time.clock()-m_Time)>1000: 564 | print("保持通讯失败") 565 | return 566 | time.sleep(1) 567 | print("保持通讯成功") 568 | time.sleep(2) 569 | 570 | class HowToUse(): 571 | def open_it(self): 572 | c = Communication() 573 | c.set_can_board_configuration(can_type="usb_can_2eu",can_idx=0,chn=0,baud_rate=500) 574 | c.open_new() 575 | def send_frames(self): 576 | c = Communication() 577 | c.set_can_board_configuration(can_type="usb_can_2eu",can_idx=0,chn=0,baud_rate=500) 578 | c.open_new() 579 | data = [1,2,3,4,5,6,7,8] 580 | for i in range(1000): 581 | time.sleep(5) 582 | c.Transmit(0x110,data) 583 | def send_extend_frames(self): 584 | c = Communication() 585 | c.set_can_board_configuration(can_type="usb_can_2eu",can_idx=0,chn=0,baud_rate=500) 586 | c.open_new() 587 | data = [1,2,3,4,5,6] 588 | for i in range(50): 589 | c.Transmit(0x111,data,extern_flag=True,data_len=7) 590 | def close_it(self): 591 | c = Communication() 592 | c.set_can_board_configuration(can_type="usb_can_2eu",can_idx=0,chn=0,baud_rate=500) 593 | c.open_new() 594 | time.sleep(10) 595 | c.Close() 596 | def receive_with_thread(self): 597 | c = Communication() 598 | c.set_can_board_configuration(can_type="usb_can_2eu",can_idx=0,chn=0,baud_rate=500) 599 | c.open_new() 600 | cycle_read_thread = threading.Thread(target=c.PrintReceiveData) 601 | cycle_read_thread.start() 602 | while True: 603 | pass 604 | 605 | 606 | 607 | 608 | if __name__ == "__main__": 609 | i_will_help_you = HowToUse() 610 | i_will_help_you.send_extend_frames() 611 | # i_will_help_you.open_it() 612 | # i_will_help_you.send_frames() 613 | # i_will_help_you.close_it() 614 | # i_will_help_you.receive_with_thread() 615 | 616 | 617 | 618 | 619 | 620 | -------------------------------------------------------------------------------- /config.json: -------------------------------------------------------------------------------- 1 | {"can_type": "usb_can_2eu", "chn": 0, "can_idx": 0, "baud_rate": 500} -------------------------------------------------------------------------------- /kerneldlls/CAN232.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/123zmz123/ZlgCanDriver/fa11e0b53758e094c211ad1806ea062d4ebeff6f/kerneldlls/CAN232.dll -------------------------------------------------------------------------------- /kerneldlls/CANDTU_NET.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/123zmz123/ZlgCanDriver/fa11e0b53758e094c211ad1806ea062d4ebeff6f/kerneldlls/CANDTU_NET.dll -------------------------------------------------------------------------------- /kerneldlls/CANETE.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/123zmz123/ZlgCanDriver/fa11e0b53758e094c211ad1806ea062d4ebeff6f/kerneldlls/CANETE.dll -------------------------------------------------------------------------------- /kerneldlls/CANET_TCP.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/123zmz123/ZlgCanDriver/fa11e0b53758e094c211ad1806ea062d4ebeff6f/kerneldlls/CANET_TCP.dll -------------------------------------------------------------------------------- /kerneldlls/CANWIFI_TCP.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/123zmz123/ZlgCanDriver/fa11e0b53758e094c211ad1806ea062d4ebeff6f/kerneldlls/CANWIFI_TCP.dll -------------------------------------------------------------------------------- /kerneldlls/CANWIFI_UDP.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/123zmz123/ZlgCanDriver/fa11e0b53758e094c211ad1806ea062d4ebeff6f/kerneldlls/CANWIFI_UDP.dll -------------------------------------------------------------------------------- /kerneldlls/PC104C2.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/123zmz123/ZlgCanDriver/fa11e0b53758e094c211ad1806ea062d4ebeff6f/kerneldlls/PC104C2.dll -------------------------------------------------------------------------------- /kerneldlls/PC104CAN.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/123zmz123/ZlgCanDriver/fa11e0b53758e094c211ad1806ea062d4ebeff6f/kerneldlls/PC104CAN.dll -------------------------------------------------------------------------------- /kerneldlls/PCI5121.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/123zmz123/ZlgCanDriver/fa11e0b53758e094c211ad1806ea062d4ebeff6f/kerneldlls/PCI5121.dll -------------------------------------------------------------------------------- /kerneldlls/PCI9820B.DLL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/123zmz123/ZlgCanDriver/fa11e0b53758e094c211ad1806ea062d4ebeff6f/kerneldlls/PCI9820B.DLL -------------------------------------------------------------------------------- /kerneldlls/USBCAN_4E_U.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/123zmz123/ZlgCanDriver/fa11e0b53758e094c211ad1806ea062d4ebeff6f/kerneldlls/USBCAN_4E_U.dll -------------------------------------------------------------------------------- /kerneldlls/USBCAN_8E_U_x64.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/123zmz123/ZlgCanDriver/fa11e0b53758e094c211ad1806ea062d4ebeff6f/kerneldlls/USBCAN_8E_U_x64.dll -------------------------------------------------------------------------------- /kerneldlls/gisadll.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/123zmz123/ZlgCanDriver/fa11e0b53758e094c211ad1806ea062d4ebeff6f/kerneldlls/gisadll.dll -------------------------------------------------------------------------------- /kerneldlls/gpcidll.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/123zmz123/ZlgCanDriver/fa11e0b53758e094c211ad1806ea062d4ebeff6f/kerneldlls/gpcidll.dll -------------------------------------------------------------------------------- /kerneldlls/isa5420.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/123zmz123/ZlgCanDriver/fa11e0b53758e094c211ad1806ea062d4ebeff6f/kerneldlls/isa5420.dll -------------------------------------------------------------------------------- /kerneldlls/kerneldll.ini: -------------------------------------------------------------------------------- 1 | [KERNELDLL] 2 | COUNT=40 3 | 1=PCI5121.dll 4 | 2=PCI9810B.dll 5 | 3=USBCAN.dll 6 | 4=USBCAN.dll 7 | 5=PCI9820B.dll 8 | 6=CAN232.dll 9 | 7=PCI5121.dll 10 | 8=CANLite.dll 11 | 9=ISA9620B.dll 12 | 10=ISA5420.dll 13 | 11=PC104CAN.dll 14 | 12=CANETE.dll 15 | 13=DNP9810B.dll 16 | 14=PCI9840B.dll 17 | 15=PC104C2.dll 18 | 16=PCI9820I.dll 19 | 17=CANET_TCP.dll 20 | 18=pec9920.dll 21 | 19=pci5010u.dll 22 | 20=USBCAN_E_64.dll 23 | 21=USBCAN_E_64.dll 24 | 22=pci50xx_u_X64_NULL.dll 25 | 23=topcliff_can_X64_NULL.dll 26 | 24=pcie9221_X64_NULL.dll 27 | 25=CANWIFI_TCP.dll 28 | 26=CANWIFI_UDP.dll 29 | 27=pcie9120_X64_NULL.dll 30 | 28=pcie9110_X64.dll 31 | 29=pcie9140_X64.dll 32 | 30=pci5010p_NULL.dll 33 | 31=USBCAN_4E_U_NULL.dll 34 | 32=CANDTU_NULL.dll 35 | 33=CANDTU_MINI_NULL.dll 36 | 34=USBCAN_8E_U_x64.dll 37 | 35=CAN_REPLAY_NULL.dll 38 | 36=CANDTU_NET.dll 39 | 37=CANDTU_NULL.dll 40 | 38=zpcfd_x86_NULL.dll 41 | 39=zpcfd_x86_NULL.dll 42 | 40=zpcfd_x86_NULL.dll -------------------------------------------------------------------------------- /kerneldlls/pci9810b.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/123zmz123/ZlgCanDriver/fa11e0b53758e094c211ad1806ea062d4ebeff6f/kerneldlls/pci9810b.dll -------------------------------------------------------------------------------- /kerneldlls/pci9820i.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/123zmz123/ZlgCanDriver/fa11e0b53758e094c211ad1806ea062d4ebeff6f/kerneldlls/pci9820i.dll -------------------------------------------------------------------------------- /kerneldlls/pci9840b.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/123zmz123/ZlgCanDriver/fa11e0b53758e094c211ad1806ea062d4ebeff6f/kerneldlls/pci9840b.dll -------------------------------------------------------------------------------- /kerneldlls/pcie9140_x64.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/123zmz123/ZlgCanDriver/fa11e0b53758e094c211ad1806ea062d4ebeff6f/kerneldlls/pcie9140_x64.dll -------------------------------------------------------------------------------- /kerneldlls/pec9920.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/123zmz123/ZlgCanDriver/fa11e0b53758e094c211ad1806ea062d4ebeff6f/kerneldlls/pec9920.dll -------------------------------------------------------------------------------- /kerneldlls/usbcan.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/123zmz123/ZlgCanDriver/fa11e0b53758e094c211ad1806ea062d4ebeff6f/kerneldlls/usbcan.dll --------------------------------------------------------------------------------