123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388 |
- #!/usr/bin/env python
- # -*- encoding: utf-8 -*-
- '''
- @文件 :ccuWork.py
- @时间 :2021/12/09 08:31:48
- @作者 :None
- @版本 :1.0
- @说明 :二级BMS工作线程
- '''
- from utils.delay import m_delay
- from utils.globalvar import SD
- from utils.hex_bit import hex_bcd
- from utils.log_signal import LogSignal
- from utils.qt import QObject, Signal, QDateTime
- class BmsSend(QObject):
- def __init__(self):
- super(BmsSend, self).__init__()
- self.page = 1
- def send(self):
- i = 0
- while SD.START_RUN:
- if SD.FRAM_READ_START:
- if SD.FRAM_SEND_PAGE:
- self._fram_read(self.page)
- self.page += 1
- SD.FRAM_SEND_PAGE = False
- else:
- if SD.FRAM_DELAY_TIME < 10000:
- m_delay(1)
- SD.FRAM_DELAY_TIME = SD.FRAM_DELAY_TIME + 1
- else:
- LogSignal.print_log_signal().log_emit("BCMU 铁电数据接收超时重发!" if SD.SYSTEM_LANGUAGE == 0 else "BCMU Fram Timeout!")
- self.page -= 1
- SD.FRAM_SEND_PAGE = True
- else:
- if SD.CCU_CHIP == 0 or SD.CCU_CHIP == 1:
- self._run_old()
- elif SD.CCU_CHIP == 2:
- self._run_new(i)
- m_delay(100)
- self._run_relay(i)
- i = i + 1
- if i == 256:
- i = 0
- if SD.LIFE_CTL == 2:
- self._life_date()
- m_delay(1000)
- def _fram_read(self, page):
- data = []
- if len(data) < 8:
- data += (8 - len(data)) * [0]
- data[0] = 0x01
- data[1] = page & 0xFF
- data[2] = (page & 0xFF00) >> 8
- data[3] = 0x01
- data[4] = 0xFF
- data[5] = 0xFF
- data[6] = 0xFF
- data[7] = 0xFF
- SD.CAN_CONTROL.send(0x1801B1C1, data, extern_flag=True)
- def _run_old(self):
- if SD.CCU_CHIP == 0:
- id = 0x18F403F0
- elif SD.CCU_CHIP == 1:
- id = 0x18F403F0 | ((SD.BCU_ID & 0xF0) << 8) | (SD.BCU_ID & 0xF)
- SD.CAN_CONTROL.send(id, [0x52, 0x55, 0x4E, 0, 0, 0, 0, 0xF5], extern_flag=True)
- def _run_new(self, i):
- data = []
- if len(data) < 8:
- data += (8 - len(data)) * [0]
- data[0] = 2
- data[1] = SD.SINGLE_ACQUISITION_OR_BALANCE
- data[6] = i
- data[7] = data[0] + data[1] + data[2] + data[3] + data[4] + data[5] + data[6]
- SD.CAN_CONTROL.send((0x18 << 24) | (SD.BCU_ID << 16) | 0x0020, data, extern_flag=True)
- def _run_relay(self, i):
- data = []
- if len(data) < 8:
- data += (8 - len(data)) * [0]
- data[0] = 4
- data[6] = i
- data[7] = data[0] + data[1] + data[2] + data[3] + data[4] + data[5] + data[6]
- SD.CAN_CONTROL.send((0x18 << 24) | (SD.BCU_ID << 16) | 0x0020, data, extern_flag=True)
- def _life_date(self):
- data = []
- if len(data) < 8:
- data += (8 - len(data)) * [0x00]
- SD.CAN_CONTROL.send(0x18FF0000, data, extern_flag=True)
- class BmsReceived(QObject):
- to_show_masterid_signal = Signal(int)
- to_show_0000_signal = Signal(object)
- to_show_0001_signal = Signal(object)
- to_show_0002_signal = Signal(object)
- to_show_0003_signal = Signal(object)
- to_show_0004_signal = Signal(object)
- to_show_0005_signal = Signal(object)
- to_show_0006_signal = Signal(object)
- to_show_0007_signal = Signal(object)
- to_show_0008_signal = Signal(object)
- to_show_0009_signal = Signal(object)
- to_show_000A_signal = Signal(object)
- to_show_000B_signal = Signal(object)
- to_show_000C_signal = Signal(object)
- to_show_000D_signal = Signal(object)
- to_show_000E_signal = Signal(object)
- to_show_000F_signal = Signal(object)
- to_show_0010_signal = Signal(object)
- to_show_0011_signal = Signal(object)
- to_show_0012_signal = Signal(object)
- to_show_0013_signal = Signal(object)
- to_show_0014_signal = Signal(object)
- to_show_0015_signal = Signal(object)
- to_show_0016_signal = Signal(object)
- to_show_0017_signal = Signal(object)
- to_show_0018_signal = Signal(object)
- to_show_0019_signal = Signal(object)
- to_show_001A_signal = Signal(object)
- to_show_001B_signal = Signal(object)
- to_show_001C_signal = Signal(object)
- to_show_001D_signal = Signal(object)
- to_show_001E_signal = Signal(object)
- to_show_001F_signal = Signal(object)
- to_show_0020_signal = Signal(object)
- to_show_0021_signal = Signal(object)
- to_show_0022_signal = Signal(object)
- to_show_0023_signal = Signal(object)
- def __init__(self):
- super(BmsReceived, self).__init__()
- self.dantidianya = [0 for i in range(10000)]
- self.dantiwendu = [0 for i in range(10000)]
- self.masterVersion = ["" for i in range(18)]
- self.fram_param = ["" for i in range(24)]
- self.single_low_vol_x = ""
- self.single_high_temp_x = ""
- # 接收数据
- def received(self):
- while SD.CAN_ON_OFF:
- result = SD.CAN_CONTROL.receive()
- if (result[1]):
- # ID主机号识别
- if result[1] & 0xFFFF == 1:
- self.to_show_masterid_signal.emit((result[1] >> 16) & 0xFF)
- # 0001
- if result[1] == 0x18000000 | (SD.BCU_ID << 16):
- self.to_show_0000_signal.emit(result[2])
- # 0001
- if result[1] == 0x18000001 | (SD.BCU_ID << 16):
- self.to_show_0001_signal.emit(result[2])
- # 0002
- elif result[1] == 0x18000002 | (SD.BCU_ID << 16):
- self.to_show_0002_signal.emit(result[2])
- # 0003
- elif result[1] == 0x18000003 | (SD.BCU_ID << 16):
- self.to_show_0003_signal.emit(result[2])
- # 0004
- elif result[1] == 0x18000004 | (SD.BCU_ID << 16):
- self.to_show_0004_signal.emit(result[2])
- # 0005
- elif result[1] == 0x18000005 | (SD.BCU_ID << 16):
- self.to_show_0005_signal.emit(result[2])
- # 0006
- elif result[1] == 0x18000006 | (SD.BCU_ID << 16):
- self.to_show_0006_signal.emit(result[2])
- # 0007
- elif result[1] == 0x18000007 | (SD.BCU_ID << 16):
- self.to_show_0007_signal.emit(result[2])
- # 0008
- elif result[1] == 0x18000008 | (SD.BCU_ID << 16):
- self.to_show_0008_signal.emit(result[2])
- # 0009
- elif result[1] == 0x18000009 | (SD.BCU_ID << 16):
- self.to_show_0009_signal.emit(result[2])
- # 000A
- elif result[1] == 0x1800000A | (SD.BCU_ID << 16):
- self.to_show_000A_signal.emit(result[2])
- # 000B
- elif result[1] == 0x1800000B | (SD.BCU_ID << 16):
- self.to_show_000B_signal.emit(result[2])
- # 000C
- elif result[1] == 0x1800000C | (SD.BCU_ID << 16):
- self.to_show_000C_signal.emit(result[2])
- # 000D
- elif result[1] == 0x1800000D | (SD.BCU_ID << 16):
- self.to_show_000D_signal.emit(result[2])
- # 000E
- elif result[1] == 0x1800000E | (SD.BCU_ID << 16):
- self.to_show_000E_signal.emit(result[2])
- # 000F
- elif result[1] == 0x1800000F | (SD.BCU_ID << 16):
- self.to_show_000F_signal.emit(result[2])
- # 0010
- elif result[1] == 0x18000010 | (SD.BCU_ID << 16):
- self.to_show_0010_signal.emit(result[2])
- # 0011
- elif result[1] == 0x18000011 | (SD.BCU_ID << 16):
- self.to_show_0011_signal.emit(result[2])
- # 0012
- elif result[1] == 0x18000012 | (SD.BCU_ID << 16):
- self.to_show_0012_signal.emit(result[2])
- # 0013
- elif result[1] == 0x18000013 | (SD.BCU_ID << 16):
- self.to_show_0013_signal.emit(result[2])
- # 0014
- elif result[1] == 0x18000014 | (SD.BCU_ID << 16):
- self.to_show_0014_signal.emit(result[2])
- # 0015
- elif result[1] == 0x18000015 | (SD.BCU_ID << 16):
- self.to_show_0015_signal.emit(result[2])
- # 0016
- elif result[1] == 0x18000016 | (SD.BCU_ID << 16):
- self.to_show_0016_signal.emit(result[2])
- # 0017
- elif result[1] == 0x18000017 | (SD.BCU_ID << 16):
- self.to_show_0017_signal.emit(result[2])
- # 0018
- elif result[1] == 0x18000018 | (SD.BCU_ID << 16):
- self.to_show_0018_signal.emit(result[2])
- # 0019
- elif result[1] == 0x18000019 | (SD.BCU_ID << 16):
- self.to_show_0019_signal.emit(result[2])
- # 001A
- elif result[1] == 0x1800001A | (SD.BCU_ID << 16):
- self.to_show_001A_signal.emit(result[2])
- # 001B
- elif result[1] == 0x1800001B | (SD.BCU_ID << 16):
- self.to_show_001B_signal.emit(result[2])
- # 001C
- elif result[1] == 0x1800001C | (SD.BCU_ID << 16):
- self.to_show_001C_signal.emit(result[2])
- # 001D
- elif result[1] == 0x1800001D | (SD.BCU_ID << 16):
- self.to_show_001D_signal.emit(result[2])
- # 001E
- elif result[1] == 0x1800001E | (SD.BCU_ID << 16):
- self.to_show_001E_signal.emit(result[2])
- # 001F
- elif result[1] == 0x1800001F | (SD.BCU_ID << 16):
- self.to_show_001F_signal.emit(result[2])
- # 0020
- elif result[1] == 0x18000020 | (SD.BCU_ID << 16):
- self.to_show_0020_signal.emit(result[2])
- # 0021
- elif result[1] == 0x18000021 | (SD.BCU_ID << 16):
- self.to_show_0021_signal.emit(result[2])
- # 0022
- elif result[1] == 0x18000022 | (SD.BCU_ID << 16):
- self.to_show_0022_signal.emit(result[2])
- # 0023
- elif result[1] == 0x18000023 | (SD.BCU_ID << 16):
- self.to_show_0023_signal.emit(result[2])
-
- # # 接收数据
- # def received(self):
- # while SD.CAN_ON_OFF:
- # restNum = SD.CAN_CONTROL.get_undeal_number()
- # if restNum <= 0:
- # continue
- # revRet = SD.CAN_CONTROL.receive()
- # for i in revRet:
- # print(i)
- # if int(i.RemoteFlag) == 0:
- # print(i.ID)
- # # ID主机号识别
- # if i.ID & 0xFFFF == 1:
- # self.to_show_masterid_signal.emit((i.ID >> 16) & 0xFF)
- # # 0001
- # if i.ID == 0x18000001 | (SD.BCU_ID << 16):
- # self.to_show_0001_signal.emit(i.Data)
- # # 0002
- # elif i.ID == 0x18000002 | (SD.BCU_ID << 16):
- # self.to_show_0002_signal.emit(i.Data)
- # # 0003
- # elif i.ID == 0x18000003 | (SD.BCU_ID << 16):
- # self.to_show_0003_signal.emit(i.Data)
- # # 0004
- # elif i.ID == 0x18000004 | (SD.BCU_ID << 16):
- # self.to_show_0004_signal.emit(i.Data)
- # # 0005
- # elif i.ID == 0x18000005 | (SD.BCU_ID << 16):
- # self.to_show_0005_signal.emit(i.Data)
- # # 0006
- # elif i.ID == 0x18000006 | (SD.BCU_ID << 16):
- # self.to_show_0006_signal.emit(i.Data)
- # # 0007
- # elif i.ID == 0x18000007 | (SD.BCU_ID << 16):
- # self.to_show_0007_signal.emit(i.Data)
- # # 0008
- # elif i.ID == 0x18000008 | (SD.BCU_ID << 16):
- # self.to_show_0008_signal.emit(i.Data)
- # # 0009
- # elif i.ID == 0x18000009 | (SD.BCU_ID << 16):
- # self.to_show_0009_signal.emit(i.Data)
- # # 000A
- # elif i.ID == 0x1800000A | (SD.BCU_ID << 16):
- # self.to_show_000A_signal.emit(i.Data)
- # # 000B
- # elif i.ID == 0x1800000B | (SD.BCU_ID << 16):
- # self.to_show_000B_signal.emit(i.Data)
- # # 000C
- # elif i.ID == 0x1800000C | (SD.BCU_ID << 16):
- # self.to_show_000C_signal.emit(i.Data)
- # # 000D
- # elif i.ID == 0x1800000D | (SD.BCU_ID << 16):
- # self.to_show_000D_signal.emit(i.Data)
- # # 000E
- # elif i.ID == 0x1800000E | (SD.BCU_ID << 16):
- # self.to_show_000E_signal.emit(i.Data)
- # # 000F
- # elif i.ID == 0x1800000F | (SD.BCU_ID << 16):
- # self.to_show_000F_signal.emit(i.Data)
- # # 0010
- # elif i.ID == 0x18000010 | (SD.BCU_ID << 16):
- # self.to_show_0010_signal.emit(i.Data)
- # # 0011
- # elif i.ID == 0x18000011 | (SD.BCU_ID << 16):
- # self.to_show_0011_signal.emit(i.Data)
- # # 0012
- # elif i.ID == 0x18000012 | (SD.BCU_ID << 16):
- # self.to_show_0012_signal.emit(i.Data)
- # # 0013
- # elif i.ID == 0x18000013 | (SD.BCU_ID << 16):
- # self.to_show_0013_signal.emit(i.Data)
- # # 0014
- # elif i.ID == 0x18000014 | (SD.BCU_ID << 16):
- # self.to_show_0014_signal.emit(i.Data)
- # # 0015
- # elif i.ID == 0x18000015 | (SD.BCU_ID << 16):
- # self.to_show_0015_signal.emit(i.Data)
- # # 0016
- # elif i.ID == 0x18000016 | (SD.BCU_ID << 16):
- # self.to_show_0016_signal.emit(i.Data)
- # # 0017
- # elif i.ID == 0x18000017 | (SD.BCU_ID << 16):
- # self.to_show_0017_signal.emit(i.Data)
- # # 0018
- # elif i.ID == 0x18000018 | (SD.BCU_ID << 16):
- # self.to_show_0018_signal.emit(i.Data)
- # # 0019
- # elif i.ID == 0x18000019 | (SD.BCU_ID << 16):
- # self.to_show_0019_signal.emit(i.Data)
- # # 001A
- # elif i.ID == 0x1800001A | (SD.BCU_ID << 16):
- # self.to_show_001A_signal.emit(i.Data)
- # # 001B
- # elif i.ID == 0x1800001B | (SD.BCU_ID << 16):
- # self.to_show_001B_signal.emit(i.Data)
- # # 001C
- # elif i.ID == 0x1800001C | (SD.BCU_ID << 16):
- # self.to_show_001C_signal.emit(i.Data)
- # # 001D
- # elif i.ID == 0x1800001D | (SD.BCU_ID << 16):
- # self.to_show_001D_signal.emit(i.Data)
- # # 001E
- # elif i.ID == 0x1800001E | (SD.BCU_ID << 16):
- # self.to_show_001E_signal.emit(i.Data)
- # # 001F
- # elif i.ID == 0x1800001F | (SD.BCU_ID << 16):
- # self.to_show_001F_signal.emit(i.Data)
- # # 0020
- # elif i.ID == 0x18000020 | (SD.BCU_ID << 16):
- # self.to_show_0020_signal.emit(i.Data)
- # # 0021
- # elif i.ID == 0x18000021 | (SD.BCU_ID << 16):
- # self.to_show_0021_signal.emit(i.Data)
- # # 0022
- # elif i.ID == 0x18000022 | (SD.BCU_ID << 16):
- # self.to_show_0022_signal.emit(i.Data)
- # # 0023
- # elif i.ID == 0x18000023 | (SD.BCU_ID << 16):
- # self.to_show_0023_signal.emit(i.Data)
|