123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425 |
- #!/usr/bin/env python
- # -*- encoding: utf-8 -*-
- '''
- @文件 :bms_home_ctl.py
- @时间 :2022/02/21 16:56:26
- @作者 :None
- @版本 :1.0
- @说明 :主页面 CTL
- '''
- from controller.bms_cell_ctl import BmsCellControll
- from controller.bms_double_ccu_ctl import BmsDoubleCcuControll
- from controller.bms_protect_ctl import BmsProtectControll
- from controller.bms_hard_ctl import BmsHardControll
- from controller.bms_balance_ctl import BmsBalanceControll
- from controller.bms_record_ctl import BmsRecordControll
- from controller.bms_download_ctl import BmsDownloadControll
- from controller.bms_set_ctl import BmsSetControll
- from controller.bms_status_ctl import BmsStatusControll
- from model.record_model import RecordModel
- from widget.bms_home import Win_GotionBMS
- from utils.globalvar import SD
- from controller.bms_main_ctl import BmsMainControll
- from utils.qt import QTimer, QThread, QColor, Qt, QDateTime, QtGui, QtWidgets, QPixmap,QApplication
- from utils.hex_bit import a_bit
- from worker.bms_work import BmsReceived
- from ui.own.palette_theme import set_edt_bg
- import csv
- class BmsHomeControll:
- def __init__(self):
- self._view = Win_GotionBMS()
- self._model = RecordModel()
- self.bms_sn_version = ["" for i in range(16)]
- self.battery_sn_version = ["" for i in range(16)]
- self.cell_single_volt = [0 for i in range(396)]
- self.cell_single_temp = [0 for i in range(360)]
- self.init()
- def init(self):
- self.bms_main_ctl = BmsMainControll()
- self._view.bms_tab.addWidget(self.bms_main_ctl._view.main)
- self.bms_cell_ctl = BmsCellControll()
- self._view.bms_tab.addWidget(self.bms_cell_ctl._view.cell)
- self.bms_double_ccu_ctl = BmsDoubleCcuControll()
- self._view.bms_tab.addWidget(self.bms_double_ccu_ctl._view.double_ccu)
- self.bms_protect_ctl = BmsProtectControll()
- self._view.bms_tab.addWidget(self.bms_protect_ctl._view.protect)
- self.bms_hard_ctl = BmsHardControll()
- self._view.bms_tab.addWidget(self.bms_hard_ctl._view.hard)
- self.bms_balance_ctl = BmsBalanceControll()
- self._view.bms_tab.addWidget(self.bms_balance_ctl._view.balance)
- self.bms_record_ctl = BmsRecordControll()
- self._view.bms_tab.addWidget(self.bms_record_ctl._view.record)
- self.bms_download_ctl = BmsDownloadControll()
- self._view.bms_tab.addWidget(self.bms_download_ctl._view.download)
- self.bms_set_ctl = BmsSetControll()
- self._view.bms_tab.addWidget(self.bms_set_ctl._view.set)
- self.bms_status = BmsStatusControll()
- self._view.setStatusBar(self.bms_status._view.statusbar)
- self._view.main_control_signal.connect(self._page_index)
- self._view.cell_inf_signal.connect(self._page_index)
- self._view.double_ccu_signal.connect(self._page_index)
- self._view.protect_inf_signal.connect(self._page_index)
- self._view.hard_cali_signal.connect(self._page_index)
- self._view.balance_inf_signal.connect(self._page_index)
- self._view.data_inf_signal.connect(self._page_index)
- self._view.download_signal.connect(self._page_index)
- self._view.set_inf_signal.connect(self._page_index)
- self._view.can_start_signal.connect(self.bcu_connect)
- self._view.can_stop_signal.connect(self.bcu_disconnect)
- self._view.cut_start_signal.connect(self.app_cut)
- self._view.bcu_online_list_signal.connect(self._view._bcu_connect_get)
- def _page_index(self,index):
- self._view.bms_tab.setCurrentIndex(index)
- def bcu_connect(self):
- try:
- SD.CAN_ON_OFF = SD.CAN_CONTROL.open_device()
- except:
- SD.CAN_ON_OFF = 0
- if SD.CAN_ON_OFF:
- self.bms_status._view.label_bms_connect.setText("通讯已连接" if SD.SYSTEM_LANGUAGE == 0 else "BMS Connected")
- SD.START_RUN = True
- # CAN数据发送类
- # self.bms_send_thread = QThread()
- # self.bms_send = BmsSend()
- # self.bms_send.moveToThread(self.bms_send_thread)
- # self.bms_send_thread.started.connect(self.bms_send.send)
- # CAN数据接收类
- self.bms_received_thread = QThread()
- self.bms_received = BmsReceived()
- self.bms_received.moveToThread(self.bms_received_thread)
- self.bms_received_thread.started.connect(self.bms_received.received)
- # 启动线程
- # self.bms_send_thread.start()
- self.bms_received_thread.start()
- self.bms_received.to_show_masterid_signal.connect(self._get_master_id)
- self.bms_received.to_show_0000_signal.connect(self._inf_0000_signal)
- self.bms_received.to_show_0001_signal.connect(self._inf_0001_signal)
- self.bms_received.to_show_0002_signal.connect(self._inf_0002_signal)
- self.bms_received.to_show_0003_signal.connect(self._inf_0003_signal)
- self.bms_received.to_show_0004_signal.connect(self._inf_0004_signal)
- self.bms_received.to_show_0005_signal.connect(self._inf_0005_signal)
- self.bms_received.to_show_0006_signal.connect(self._inf_0006_signal)
- self.bms_received.to_show_0007_signal.connect(self._inf_0007_signal)
- self.bms_received.to_show_0008_signal.connect(self._inf_0008_signal)
- self.bms_received.to_show_0009_signal.connect(self._inf_0009_signal)
- self.bms_received.to_show_000A_signal.connect(self._inf_000A_signal)
- self.bms_received.to_show_000B_signal.connect(self._inf_000B_signal)
- self.bms_received.to_show_000C_signal.connect(self._inf_000C_signal)
- self.bms_received.to_show_000D_signal.connect(self._inf_000D_signal)
- self.bms_received.to_show_000E_signal.connect(self._inf_000E_signal)
- self.bms_received.to_show_000F_signal.connect(self._inf_000F_signal)
- self.bms_received.to_show_0010_signal.connect(self._inf_0010_signal)
- self.bms_received.to_show_0011_signal.connect(self._inf_0011_signal)
- self.bms_received.to_show_0012_signal.connect(self._inf_0012_signal)
- self.bms_received.to_show_0013_signal.connect(self._inf_0013_signal)
- self.bms_received.to_show_0014_signal.connect(self._inf_0014_signal)
- self.bms_received.to_show_0015_signal.connect(self._inf_0015_signal)
- self.bms_received.to_show_0016_signal.connect(self._inf_0016_signal)
- self.bms_received.to_show_0017_signal.connect(self._inf_0017_signal)
- self.bms_received.to_show_0018_signal.connect(self._inf_0018_signal)
- self.bms_received.to_show_0019_signal.connect(self._inf_0019_signal)
- self.bms_received.to_show_001A_signal.connect(self._inf_001A_signal)
- self.bms_received.to_show_001B_signal.connect(self._inf_001B_signal)
- self.bms_received.to_show_001C_signal.connect(self._inf_001C_signal)
- self.bms_received.to_show_001D_signal.connect(self._inf_001D_signal)
- self.bms_received.to_show_001E_signal.connect(self._inf_001E_signal)
- self.bms_received.to_show_001F_signal.connect(self._inf_001F_signal)
- self.bms_received.to_show_0020_signal.connect(self._inf_0020_signal)
- self.bms_received.to_show_0021_signal.connect(self._inf_0021_signal)
- self.bms_received.to_show_0022_signal.connect(self._inf_0022_signal)
- self.bms_received.to_show_0023_signal.connect(self._inf_0023_signal)
- self._view.btn_start.setDisabled(True)
- self._view.btn_stop.setDisabled(False)
- else:
- self._view.can_connect_error()
-
- def bcu_disconnect(self):
- if SD.CAN_ON_OFF:
- SD.CAN_ON_OFF = False
- SD.START_RUN = False
- SD.CAN_CONTROL.close_can()
- # if self.bms_send_thread.isRunning():
- # self.bms_send_thread.quit()
- # self.bms_send_thread.wait()
- # if self.bms_send_thread.isFinished():
- # del self.bms_send
- # del self.bms_send_thread
- if self.bms_received_thread.isRunning():
- self.bms_received_thread.quit()
- self.bms_received_thread.wait()
- if self.bms_received_thread.isFinished():
- del self.bms_received
- del self.bms_received_thread
- self._view.btn_start.setDisabled(False)
- self._view.btn_stop.setDisabled(True)
- self.bms_status._view.label_bms_connect.setText("通讯未连接" if SD.SYSTEM_LANGUAGE == 0 else "Not Connected")
-
- else:
- self._view.can_connect_error()
- def app_cut(self):
- # return
- main_window = QApplication.primaryScreen()
- pixmap = main_window.grabWindow(QtWidgets.QApplication.desktop().winId())
- pixmap.save("screenshot.png");
- # QtWidgets.QWidget.screen().grabWindow(0).save()
- def _get_master_id(self, data):
- SD.BCU_LIST[data - 1] = 1
- SD.BCU_LIFE_STATE[data - 1] = QDateTime.currentMSecsSinceEpoch()
- current_secs_since_epoch = QDateTime.currentMSecsSinceEpoch()
- for i in range(9):
- if current_secs_since_epoch - SD.BCU_LIFE_STATE[i] > 2000:
- SD.BCU_LIST[i] = 0
- self._view.bcu_online_list_signal.emit(SD.BCU_LIST)
- # 簇号
- item = QtWidgets.QTableWidgetItem(str(data))
- item.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
- self.bms_double_ccu_ctl._view.on_line_ccu_table.setItem(data - 1, 0, item)
- def _inf_0000_signal(self, data, id):
- if id == SD.BCU_ID:
- self._model.ccu_id = SD.BCU_ID
- if SD.CCU_TYPE == 1:
- set_edt_bg(self.bms_main_ctl._view.under_widget.di_1, QColor(Qt.gray) if (data[0] & 0x01 == 0) else QColor(Qt.green))
- set_edt_bg(self.bms_main_ctl._view.under_widget.di_2, QColor(Qt.gray) if (data[0] & 0x02 == 0) else QColor(Qt.green))
- set_edt_bg(self.bms_main_ctl._view.under_widget.di_3, QColor(Qt.gray) if (data[0] & 0x04 == 0) else QColor(Qt.green))
- set_edt_bg(self.bms_main_ctl._view.under_widget.di_4, QColor(Qt.gray) if (data[0] & 0x08 == 0) else QColor(Qt.green))
- set_edt_bg(self.bms_main_ctl._view.under_widget.di_5, QColor(Qt.gray) if (data[0] & 0x10 == 0) else QColor(Qt.green))
- set_edt_bg(self.bms_main_ctl._view.under_widget.di_6, QColor(Qt.gray) if (data[0] & 0x20 == 0) else QColor(Qt.green))
- set_edt_bg(self.bms_main_ctl._view.under_widget.di_7, QColor(Qt.gray) if (data[0] & 0x40 == 0) else QColor(Qt.green))
- set_edt_bg(self.bms_main_ctl._view.under_widget.di_8, QColor(Qt.gray) if (data[0] & 0x80 == 0) else QColor(Qt.green))
- set_edt_bg(self.bms_main_ctl._view.under_widget.do_1, QColor(Qt.gray) if (data[1] & 0x01 == 0) else QColor(Qt.green))
- self._model.p = data[1] & 0x01
- set_edt_bg(self.bms_main_ctl._view.under_widget.do_2, QColor(Qt.gray) if (data[1] & 0x02 == 0) else QColor(Qt.green))
- self._model.n = (data[1] & 0x02) >> 1
- set_edt_bg(self.bms_main_ctl._view.under_widget.do_3, QColor(Qt.gray) if (data[1] & 0x04 == 0) else QColor(Qt.green))
- self._model.pre = (data[1] & 0x04) >> 2
- set_edt_bg(self.bms_main_ctl._view.under_widget.do_4, QColor(Qt.gray) if (data[1] & 0x08 == 0) else QColor(Qt.green))
- set_edt_bg(self.bms_main_ctl._view.under_widget.do_5, QColor(Qt.gray) if (data[1] & 0x10 == 0) else QColor(Qt.green))
- self._model.dlq = (data[1] & 0x10) >> 4
- set_edt_bg(self.bms_main_ctl._view.under_widget.do_6, QColor(Qt.gray) if (data[1] & 0x20 == 0) else QColor(Qt.green))
- set_edt_bg(self.bms_main_ctl._view.under_widget.do_7, QColor(Qt.gray) if (data[1] & 0x40 == 0) else QColor(Qt.green))
- set_edt_bg(self.bms_main_ctl._view.under_widget.do_8, QColor(Qt.gray) if (data[1] & 0x80 == 0) else QColor(Qt.green))
- else:
- set_edt_bg(self.bms_main_ctl._view.under_widget.fjd_1, QColor(Qt.gray) if (data[2] & 0x01 == 0) else QColor(Qt.green))
- self._model.gjd_first = data[2] & 0x01
- set_edt_bg(self.bms_main_ctl._view.under_widget.fjd_1, QColor(Qt.gray) if (data[2] & 0x02 == 0) else QColor(Qt.green))
- self._model.gjd_second = (data[2] & 0x02) >> 1
-
- def _inf_0001_signal(self, data, id):
- if id == SD.BCU_ID:
- # 系统状态
- if data[0] & 0x0F == 0x00:
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_no, QColor(Qt.green))
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_high_no, QColor(Qt.gray))
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_chg, QColor(Qt.gray))
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_dchg, QColor(Qt.gray))
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_stop, QColor(Qt.gray))
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_sleep, QColor(Qt.gray))
- elif data[0] & 0x0F == 0x01:
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_no, QColor(Qt.gray))
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_high_no, QColor(Qt.green))
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_chg, QColor(Qt.gray))
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_dchg, QColor(Qt.gray))
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_stop, QColor(Qt.gray))
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_sleep, QColor(Qt.gray))
- elif data[0] & 0x0F == 0x02:
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_no, QColor(Qt.gray))
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_high_no, QColor(Qt.gray))
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_chg, QColor(Qt.gray))
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_dchg, QColor(Qt.green))
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_stop, QColor(Qt.gray))
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_sleep, QColor(Qt.gray))
- elif data[0] & 0x0F == 0x03:
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_no, QColor(Qt.gray))
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_high_no, QColor(Qt.gray))
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_chg, QColor(Qt.green))
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_dchg, QColor(Qt.gray))
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_stop, QColor(Qt.gray))
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_sleep, QColor(Qt.gray))
- elif data[0] & 0x0F == 0x04:
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_no, QColor(Qt.gray))
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_high_no, QColor(Qt.gray))
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_chg, QColor(Qt.gray))
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_dchg, QColor(Qt.gray))
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_stop, QColor(Qt.green))
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_sleep, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_no, QColor(Qt.gray))
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_high_no, QColor(Qt.gray))
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_chg, QColor(Qt.gray))
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_dchg, QColor(Qt.gray))
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_stop, QColor(Qt.gray))
- set_edt_bg(self.bms_main_ctl._view.under_widget.sys_status_sleep, QColor(Qt.green))
-
- # 最高报警等级
- if (data[0] & 0x30) >> 4 == 0x00:
- self.bms_status._view.qrb_status_normal.setChecked(1)
- self.bms_status._view.qrb_status_warn.setChecked(0)
- self.bms_status._view.qrb_status_warner.setChecked(0)
- self.bms_status._view.qrb_status_warnest.setChecked(0)
- elif (data[0] & 0x30) >> 4 == 0x01:
- self.bms_status._view.qrb_status_normal.setChecked(0)
- self.bms_status._view.qrb_status_warn.setChecked(1)
- self.bms_status._view.qrb_status_warner.setChecked(0)
- self.bms_status._view.qrb_status_warnest.setChecked(0)
- elif (data[0] & 0x30) >> 4 == 0x02:
- self.bms_status._view.qrb_status_normal.setChecked(0)
- self.bms_status._view.qrb_status_warn.setChecked(0)
- self.bms_status._view.qrb_status_warner.setChecked(1)
- self.bms_status._view.qrb_status_warnest.setChecked(0)
- else:
- self.bms_status._view.qrb_status_normal.setChecked(0)
- self.bms_status._view.qrb_status_warn.setChecked(0)
- self.bms_status._view.qrb_status_warner.setChecked(0)
- self.bms_status._view.qrb_status_warnest.setChecked(1)
-
- self._model.fault_level = (data[0] & 0x30) >> 4
- # 继电器
- if SD.CCU_TYPE == 1:
- set_edt_bg(self.bms_main_ctl._view.under_widget.do_1, QColor(Qt.gray) if (data[0] & 0x40 == 0) else QColor(Qt.green))
- set_edt_bg(self.bms_main_ctl._view.under_widget.do_2, QColor(Qt.gray) if (data[0] & 0x80 == 0) else QColor(Qt.green))
- # SOC
- self.bms_main_ctl._view.top_widget.lb_soc_value.setText(str(round(data[1] * 0.4, 1)))
- self._model.soc = round(data[1] * 0.4, 1)
- # 总压
- self.bms_main_ctl._view.top_widget.lb_tv_value.setText(str(round((data[3] << 8 | data[2]) * 0.1, 1)))
- self._model.volt = round((data[3] << 8 | data[2]) * 0.1, 1)
- # 电流
- self.bms_main_ctl._view.top_widget.lb_tcur_value.setText(str(round((data[5] << 8 | data[4]) * 0.1 - 3200, 1)))
- self._model.cur = round((data[5] << 8 | data[4]) * 0.1 - 3200, 1)
- # SOH
- self.bms_main_ctl._view.top_widget.lb_tsoh_value.setText(str(round(data[6] * 0.4, 1)))
- self._model.soh = round(data[6] * 0.4, 1)
- # MOS标志
- if SD.CCU_TYPE == 0:
- set_edt_bg(self.bms_main_ctl._view.under_widget.mos_dchg, QColor(Qt.gray) if (data[7] & 0x01 == 0) else QColor(Qt.green))
- set_edt_bg(self.bms_main_ctl._view.under_widget.mos_chg, QColor(Qt.gray) if (data[7] & 0x02 == 0) else QColor(Qt.green))
- set_edt_bg(self.bms_main_ctl._view.under_widget.mos_pre, QColor(Qt.gray) if (data[7] & 0x04 == 0) else QColor(Qt.green))
-
- # if SD.CCU_TYPE == 1:
- # set_edt_bg(self.bms_main_ctl._view.under_widget.do_4, QColor(Qt.gray) if (data[7] & 0x08 == 0) else QColor(Qt.green))
- # set_edt_bg(self.bms_main_ctl._view.under_widget.do_3, QColor(Qt.gray) if (data[7] & 0x40 == 0) else QColor(Qt.green))
- # set_edt_bg(self.bms_main_ctl._view.under_widget.do_5, QColor(Qt.gray) if (data[7] & 0x80 == 0) else QColor(Qt.green))
- # 充电MOS故障
- if a_bit(data[7], 5) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.chg_mos_fault, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.chg_mos_fault, QColor(Qt.red))
- # 放电MOS故障
- if a_bit(data[5], 4) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.dchg_mos_fault, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.dchg_mos_fault, QColor(Qt.red))
- set_edt_bg(self.bms_main_ctl._view.under_widget.permit_chg, QColor(Qt.gray) if (data[0] & 0x40 == 0) else QColor(Qt.red))
- set_edt_bg(self.bms_main_ctl._view.under_widget.permit_dchg, QColor(Qt.gray) if (data[0] & 0x80 == 0) else QColor(Qt.red))
- # 运行状态
- if data[0] & 0x0F == 0x00:
- sys_status = "低压上电"
- elif data[0] & 0x0F == 0x01:
- sys_status = "待机"
- elif data[0] & 0x0F == 0x02:
- sys_status = "放电"
- elif data[0] & 0x0F == 0x03:
- sys_status = "充电"
- elif data[0] & 0x0F == 0x04:
- sys_status = "停机"
- elif data[0] & 0x0F == 0x04:
- sys_status = "准备休眠"
- else:
- sys_status = "无"
- item = QtWidgets.QTableWidgetItem(sys_status)
- item.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
- self.bms_double_ccu_ctl._view.on_line_ccu_table.setItem(id - 1, 1, item)
- # 总电压
- item = QtWidgets.QTableWidgetItem(str(round((data[3] << 8 | data[2]) * 0.1, 1)))
- item.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
- self.bms_double_ccu_ctl._view.on_line_ccu_table.setItem(id - 1, 2, item)
- # 总电流
- item = QtWidgets.QTableWidgetItem(str(round((data[5] << 8 | data[4]) * 0.1 - 3200, 1)))
- item.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
- self.bms_double_ccu_ctl._view.on_line_ccu_table.setItem(id - 1, 3, item)
- # SOC
- item = QtWidgets.QTableWidgetItem(str(round(data[1] * 0.4, 1)))
- item.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
- self.bms_double_ccu_ctl._view.on_line_ccu_table.setItem(id - 1, 4, item)
- # SOH
- item = QtWidgets.QTableWidgetItem(str(round(data[6] * 0.4, 1)))
- item.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
- self.bms_double_ccu_ctl._view.on_line_ccu_table.setItem(id - 1, 5, item)
- def _inf_0002_signal(self, data, id):
- if id == SD.BCU_ID:
- # 单体过压告警
- if data[0] & 0x03 == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.over_cell_warn, QColor(Qt.gray))
- elif data[0] & 0x03 == 1:
- set_edt_bg(self.bms_main_ctl._view.center_widget.over_cell_warn, QColor(Qt.red))
- elif data[0] & 0x03 == 2:
- set_edt_bg(self.bms_main_ctl._view.center_widget.over_cell_warn, QColor(Qt.magenta))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.over_cell_warn, QColor(Qt.yellow))
- # 总压过压告警
- if ((data[0] & 0x0C) >> 2) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.hv_warn, QColor(Qt.gray))
- elif ((data[0] & 0x0C) >> 2) == 1:
- set_edt_bg(self.bms_main_ctl._view.center_widget.hv_warn, QColor(Qt.red))
- elif ((data[0] & 0x0C) >> 2) == 2:
- set_edt_bg(self.bms_main_ctl._view.center_widget.hv_warn, QColor(Qt.magenta))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.hv_warn, QColor(Qt.yellow))
- # 单体欠压告警
- if ((data[0] & 0x30) >> 4) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.under_cell_warn, QColor(Qt.gray))
- elif ((data[0] & 0x30) >> 4) == 1:
- set_edt_bg(self.bms_main_ctl._view.center_widget.under_cell_warn, QColor(Qt.red))
- elif ((data[0] & 0x30) >> 4) == 2:
- set_edt_bg(self.bms_main_ctl._view.center_widget.under_cell_warn, QColor(Qt.magenta))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.under_cell_warn, QColor(Qt.yellow))
- # 总压欠压告警
- if ((data[0] & 0xC0) >> 6) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.lv_warn, QColor(Qt.gray))
- elif ((data[0] & 0xC0) >> 6) == 1:
- set_edt_bg(self.bms_main_ctl._view.center_widget.lv_warn, QColor(Qt.red))
- elif ((data[0] & 0xC0) >> 6) == 2:
- set_edt_bg(self.bms_main_ctl._view.center_widget.lv_warn, QColor(Qt.magenta))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.lv_warn, QColor(Qt.yellow))
- # =====================================================================================
- # 充电低温告警
- if data[1] & 0x03 == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.chg_lt_warn, QColor(Qt.gray))
- elif data[1] & 0x03 == 1:
- set_edt_bg(self.bms_main_ctl._view.center_widget.chg_lt_warn, QColor(Qt.red))
- elif data[1] & 0x03 == 2:
- set_edt_bg(self.bms_main_ctl._view.center_widget.chg_lt_warn, QColor(Qt.magenta))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.chg_lt_warn, QColor(Qt.yellow))
- # 充电高温告警
- if ((data[1] & 0x0C) >> 2) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.chg_ht_warn, QColor(Qt.gray))
- elif ((data[1] & 0x0C) >> 2) == 1:
- set_edt_bg(self.bms_main_ctl._view.center_widget.chg_ht_warn, QColor(Qt.red))
- elif ((data[1] & 0x0C) >> 2) == 2:
- set_edt_bg(self.bms_main_ctl._view.center_widget.chg_ht_warn, QColor(Qt.magenta))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.chg_ht_warn, QColor(Qt.yellow))
- # 放电低温告警
- if ((data[1] & 0x30) >> 4) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.dchg_lt_warn, QColor(Qt.gray))
- elif ((data[1] & 0x30) >> 4) == 1:
- set_edt_bg(self.bms_main_ctl._view.center_widget.dchg_lt_warn, QColor(Qt.red))
- elif ((data[1] & 0x30) >> 4) == 2:
- set_edt_bg(self.bms_main_ctl._view.center_widget.dchg_lt_warn, QColor(Qt.magenta))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.dchg_lt_warn, QColor(Qt.yellow))
- # 放电高温告警
- if ((data[1] & 0xC0) >> 6) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.dchg_ht_warn, QColor(Qt.gray))
- elif ((data[1] & 0xC0) >> 6) == 1:
- set_edt_bg(self.bms_main_ctl._view.center_widget.dchg_ht_warn, QColor(Qt.red))
- elif ((data[1] & 0xC0) >> 6) == 2:
- set_edt_bg(self.bms_main_ctl._view.center_widget.dchg_ht_warn, QColor(Qt.magenta))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.dchg_ht_warn, QColor(Qt.yellow))
- # =====================================================================================
- # 充电过流告警
- if data[2] & 0x03 == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.chg_hcur_warn, QColor(Qt.gray))
- elif data[2] & 0x03 == 1:
- set_edt_bg(self.bms_main_ctl._view.center_widget.chg_hcur_warn, QColor(Qt.red))
- elif data[2] & 0x03 == 2:
- set_edt_bg(self.bms_main_ctl._view.center_widget.chg_hcur_warn, QColor(Qt.magenta))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.chg_hcur_warn, QColor(Qt.yellow))
- # 放电过流告警
- if ((data[2] & 0x0C) >> 2) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.dchg_hcur_warn, QColor(Qt.gray))
- elif ((data[2] & 0x0C) >> 2) == 1:
- set_edt_bg(self.bms_main_ctl._view.center_widget.dchg_hcur_warn, QColor(Qt.red))
- elif ((data[2] & 0x0C) >> 2) == 2:
- set_edt_bg(self.bms_main_ctl._view.center_widget.dchg_hcur_warn, QColor(Qt.magenta))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.dchg_hcur_warn, QColor(Qt.yellow))
- # 单体压差告警
- if ((data[2] & 0x30) >> 4) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.diff_cell_vol_warn, QColor(Qt.gray))
- elif ((data[2] & 0x30) >> 4) == 1:
- set_edt_bg(self.bms_main_ctl._view.center_widget.diff_cell_vol_warn, QColor(Qt.red))
- elif ((data[2] & 0x30) >> 4) == 2:
- set_edt_bg(self.bms_main_ctl._view.center_widget.diff_cell_vol_warn, QColor(Qt.magenta))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.diff_cell_vol_warn, QColor(Qt.yellow))
- # 单体温差告警
- if ((data[2] & 0xC0) >> 6) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.diff_cell_temp_warn, QColor(Qt.gray))
- elif ((data[2] & 0xC0) >> 6) == 1:
- set_edt_bg(self.bms_main_ctl._view.center_widget.diff_cell_temp_warn, QColor(Qt.red))
- elif ((data[2] & 0xC0) >> 6) == 2:
- set_edt_bg(self.bms_main_ctl._view.center_widget.diff_cell_temp_warn, QColor(Qt.magenta))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.diff_cell_temp_warn, QColor(Qt.yellow))
- # =====================================================================================
- # 绝缘过低报警
- if data[3] & 0x03 == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.against_warn, QColor(Qt.gray))
- elif data[3] & 0x03 == 1:
- set_edt_bg(self.bms_main_ctl._view.center_widget.against_warn, QColor(Qt.red))
- elif data[3] & 0x03 == 2:
- set_edt_bg(self.bms_main_ctl._view.center_widget.against_warn, QColor(Qt.magenta))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.against_warn, QColor(Qt.yellow))
- # 正极绝缘过低报警
- if a_bit(data[3], 3) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.p_against_warn, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.p_against_warn, QColor(Qt.red))
- # 负极绝缘过低报警
- if a_bit(data[3], 4) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.p_against_warn, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.p_against_warn, QColor(Qt.red))
- # AFE温度过高
- if ((data[3] & 0x30) >> 4) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.afe_high_temp_fault, QColor(Qt.gray))
- elif ((data[3] & 0x30) >> 4) == 1:
- set_edt_bg(self.bms_main_ctl._view.center_widget.afe_high_temp_fault, QColor(Qt.red))
- elif ((data[3] & 0x30) >> 4) == 2:
- set_edt_bg(self.bms_main_ctl._view.center_widget.afe_high_temp_fault, QColor(Qt.magenta))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.afe_high_temp_fault, QColor(Qt.yellow))
- # 极柱温度过高
- if ((data[3] & 0xC0) >> 6) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.jz_ht_warn, QColor(Qt.gray))
- elif ((data[3] & 0xC0) >> 6) == 1:
- set_edt_bg(self.bms_main_ctl._view.center_widget.jz_ht_warn, QColor(Qt.red))
- elif ((data[3] & 0xC0) >> 6) == 2:
- set_edt_bg(self.bms_main_ctl._view.center_widget.jz_ht_warn, QColor(Qt.magenta))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.jz_ht_warn, QColor(Qt.yellow))
- # =====================================================================================
- # 总压检测故障
- if a_bit(data[4], 1) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.vol_fault, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.vol_fault, QColor(Qt.red))
-
- # 电流检测故障
- if a_bit(data[4], 2) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.cur_fault, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.cur_fault, QColor(Qt.red))
- # 总控通讯故障
- if a_bit(data[4], 3) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.ccu_control_fault, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.ccu_control_fault, QColor(Qt.red))
- # BMU通讯故障
- if a_bit(data[4], 4) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.bmu_fault, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.bmu_fault, QColor(Qt.red))
- # 急停
- if a_bit(data[4], 5) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.stop_fault, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.stop_fault, QColor(Qt.red))
- # NTC故障
- if a_bit(data[4], 6) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.ntc_fault, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.ntc_fault, QColor(Qt.red))
- # AFE失效
- if a_bit(data[4], 7) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.afe_fault, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.afe_fault, QColor(Qt.red))
- # 主正接触器故障
- if a_bit(data[4], 8) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.p_fault, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.p_fault, QColor(Qt.red))
- # =====================================================================================
- # 主负接触器故障
- if a_bit(data[5], 1) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.n_fault, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.n_fault, QColor(Qt.red))
-
- # 预充故障
- if a_bit(data[5], 2) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.pre_chg_fault, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.pre_chg_fault, QColor(Qt.red))
- # 绝缘检测故障
- if a_bit(data[5], 3) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.against_fault, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.against_fault, QColor(Qt.red))
- # 从控硬件故障
- if a_bit(data[5], 4) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.bcu_hard_fault, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.bcu_hard_fault, QColor(Qt.red))
- # # 充电MOS故障
- # if a_bit(data[5], 3) == 0:
- # set_edt_bg(self.bms_main_ctl._view.center_widget.chg_mos_fault, QColor(Qt.gray))
- # else:
- # set_edt_bg(self.bms_main_ctl._view.center_widget.chg_mos_fault, QColor(Qt.red))
- # # 放电MOS故障
- # if a_bit(data[5], 4) == 0:
- # set_edt_bg(self.bms_main_ctl._view.center_widget.dchg_mos_fault, QColor(Qt.gray))
- # else:
- # set_edt_bg(self.bms_main_ctl._view.center_widget.dchg_mos_fault, QColor(Qt.red))
- # 风扇控制失效
- if a_bit(data[5], 5) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.fan_fault, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.fan_fault, QColor(Qt.red))
- # 热失控故障
- if a_bit(data[5], 6) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.temp_fault, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.temp_fault, QColor(Qt.red))
- # 温升过高故障
- if a_bit(data[5], 7) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.temp_up_fault, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.temp_up_fault, QColor(Qt.red))
- # 中间接触器故障
- if a_bit(data[5], 8) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.center_fault, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.center_fault, QColor(Qt.red))
- # =====================================================================================
- # 单体断线故障
- if a_bit(data[6], 1) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.cell_single_fault, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.cell_single_fault, QColor(Qt.red))
-
- # 主控硬件故障
- if a_bit(data[6], 2) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.ccu_hard_fault, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.ccu_hard_fault, QColor(Qt.red))
- # 主控初始化故障
- if a_bit(data[6], 3) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.ccu_start_fault, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.ccu_start_fault, QColor(Qt.red))
- # EEPROM故障
- if a_bit(data[6], 4) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.eeprom_fault, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.eeprom_fault, QColor(Qt.red))
- # 熔断器故障
- if a_bit(data[6], 5) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.rdq_fault, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.rdq_fault, QColor(Qt.red))
- # 断路器反馈故障
- if a_bit(data[6], 6) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.dlq_fault, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.dlq_fault, QColor(Qt.red))
- # 簇间压差故障
- if a_bit(data[6], 7) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.ccu_diff_vol_fault, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.ccu_diff_vol_fault, QColor(Qt.red))
- # PCS通讯故障
- if a_bit(data[6], 8) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.pcs_fault, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.pcs_fault, QColor(Qt.red))
- # =====================================================================================
- # 跳机故障
- if a_bit(data[7], 1) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.jump_fault, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.jump_fault, QColor(Qt.red))
- # 隔离开关故障
- if a_bit(data[7], 2) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.glkg_fault, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.glkg_fault, QColor(Qt.red))
- # 主控检测温度过高故障
- if a_bit(data[7], 3) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.ccu_ht_warn, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.ccu_ht_warn, QColor(Qt.red))
- # MOS温度过高故障
- if ((data[7] & 0x18) >> 3) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.mos_ht_warn, QColor(Qt.gray))
- elif ((data[7] & 0x18) >> 3) == 1:
- set_edt_bg(self.bms_main_ctl._view.center_widget.mos_ht_warn, QColor(Qt.red))
- elif ((data[2] & 0x18) >> 3) == 2:
- set_edt_bg(self.bms_main_ctl._view.center_widget.mos_ht_warn, QColor(Qt.magenta))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.mos_ht_warn, QColor(Qt.yellow))
- # 电芯故障
- if a_bit(data[7], 6) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.cell_fault, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.cell_fault, QColor(Qt.red))
- # SOC过低故障
- if a_bit(data[7], 7) == 0:
- set_edt_bg(self.bms_main_ctl._view.center_widget.soc_fault, QColor(Qt.gray))
- else:
- set_edt_bg(self.bms_main_ctl._view.center_widget.soc_fault, QColor(Qt.red))
- def _inf_0003_signal(self, data, id):
- if id == SD.BCU_ID:
- # 最高单体电压值
- self.bms_main_ctl._view.top_widget.lb_tcellhv_value.setText(str(data[1] << 8 | data[0]))
- self._model.max_cell_volt = data[1] << 8 | data[0]
- # 最高单体电压所在编号
- self.bms_main_ctl._view.top_widget.lb_tcellhv_index_value.setText(str(data[3] << 8 | data[2]))
- self._model.max_cell_volt_id = data[3] << 8 | data[2]
- # 最低单体电压值
- self.bms_main_ctl._view.top_widget.lb_tcelllv_value.setText(str(data[5] << 8 | data[4]))
- self._model.min_cell_volt = data[5] << 8 | data[4]
- # 最低单体电压所在编号
- self.bms_main_ctl._view.top_widget.lb_tcelllv_index_value.setText(str(data[7] << 8 | data[6]))
- self._model.min_cell_volt_id = data[7] << 8 | data[6]
- # 最高单体电压值
- item = QtWidgets.QTableWidgetItem(str(data[1] << 8 | data[0]))
- item.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
- self.bms_double_ccu_ctl._view.on_line_ccu_table.setItem(id - 1, 8, item)
- # 最高单体电压所在编号
- item = QtWidgets.QTableWidgetItem(str(data[3] << 8 | data[2]))
- item.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
- self.bms_double_ccu_ctl._view.on_line_ccu_table.setItem(id - 1, 9, item)
- # 最低单体电压值
- item = QtWidgets.QTableWidgetItem(str(data[5] << 8 | data[4]))
- item.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
- self.bms_double_ccu_ctl._view.on_line_ccu_table.setItem(id - 1, 10, item)
- # 最低单体电压所在编号
- item = QtWidgets.QTableWidgetItem(str(data[7] << 8 | data[6]))
- item.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
- self.bms_double_ccu_ctl._view.on_line_ccu_table.setItem(id - 1, 11, item)
- def _inf_0004_signal(self, data, id):
- if id == SD.BCU_ID:
- # 最大压差
- self.bms_main_ctl._view.top_widget.lb_diff_vol_value.setText(str(data[1] << 8 | data[0]))
- # 平均电压
- self.bms_main_ctl._view.top_widget.lb_avg_vol_value.setText(str(data[3] << 8 | data[2]))
- self._model.avg_cell_volt = data[3] << 8 | data[2]
- # 最大温差
- self.bms_main_ctl._view.top_widget.lb_diff_temp_value.setText(str(round((data[5] << 8 | data[4]) * 0.1 - 40, 1)))
- # 平均温度
- self.bms_main_ctl._view.top_widget.lb_avg_temp_value.setText(str(round((data[7] << 8 | data[6]) * 0.1 - 40, 1)))
- self._model.avg_cell_temp = round((data[7] << 8 | data[6]) * 0.1 - 40, 1)
- def _inf_0005_signal(self, data, id):
- if id == SD.BCU_ID:
- # 最高单体温度值
- self.bms_main_ctl._view.top_widget.lb_h_temp_value.setText(str(round((data[1] << 8 | data[0]) * 0.1 - 40, 1)))
- self._model.max_cell_temp = round((data[1] << 8 | data[0]) * 0.1 - 40, 1)
- # 最高单体温度所在编号
- self.bms_main_ctl._view.top_widget.lb_h_temp_index_value.setText(str(data[3] << 8 | data[2]))
- self._model.max_cell_temp_id = data[3] << 8 | data[2]
- # 最低单体温度值
- self.bms_main_ctl._view.top_widget.lb_l_temp_value.setText(str(round((data[5] << 8 | data[4]) * 0.1 - 40, 1)))
- self._model.min_cell_temp = round((data[5] << 8 | data[4]) * 0.1 - 40, 1)
- # 最低单体温度所在编号
- self.bms_main_ctl._view.top_widget.lb_l_temp_index_value.setText(str(data[7] << 8 | data[6]))
- self._model.min_cell_temp_id = data[7] << 8 | data[6]
- # 最高单体温度值
- item = QtWidgets.QTableWidgetItem(str(round((data[1] << 8 | data[0]) * 0.1 - 40, 1)))
- item.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
- self.bms_double_ccu_ctl._view.on_line_ccu_table.setItem(id - 1, 12, item)
- # 最高单体温度所在编号
- item = QtWidgets.QTableWidgetItem(str(data[3] << 8 | data[2]))
- item.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
- self.bms_double_ccu_ctl._view.on_line_ccu_table.setItem(id - 1, 13, item)
- # 最低单体温度值
- item = QtWidgets.QTableWidgetItem(str(round((data[5] << 8 | data[4]) * 0.1 - 40, 1)))
- item.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
- self.bms_double_ccu_ctl._view.on_line_ccu_table.setItem(id - 1, 14, item)
- # # 最低单体温度所在编号
- # item = QtWidgets.QTableWidgetItem(str(data[7] << 8 | data[6]))
- # item.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
- # self.bms_double_ccu_ctl._view.on_line_ccu_table.setItem(id - 1, 15, item)
- def _inf_0006_signal(self, data, id):
- if id == SD.BCU_ID:
- # 当前允许最大放电功率
- self.bms_main_ctl._view.top_widget.lb_dchg_kw_value.setText(str(round((data[1] << 8 | data[0]) * 0.1, 1)))
- # 当前允许最大充电功率
- self.bms_main_ctl._view.top_widget.lb_chg_kw_value.setText(str(round((data[3] << 8 | data[2]) * 0.1, 1)))
- # # 当前可放电量
- # self.bms_main_ctl._view.top_widget.lb_.setText(str((data[5] << 8 | data[4]) * 0.1 - 40))
- # # 当前可充电量
- # self.bms_main_ctl._view.top_widget.lb_avg_temp_value.setText(str((data[7] << 8 | data[6]) * 0.1 - 40))
- def _inf_0007_signal(self, data, id):
- if id == SD.BCU_ID:
- # 当前允许最大充电电压
- self.bms_main_ctl._view.top_widget.lb_max_chg_vol_value.setText(str(round((data[1] << 8 | data[0]) * 0.1, 1)))
- # 当前允许最大充电电流
- self.bms_main_ctl._view.top_widget.lb_max_chg_cur_value.setText(str(round((data[3] << 8 | data[2]) * 0.1 - 3200, 1)))
- # 当前允许最大放电电流
- self.bms_main_ctl._view.top_widget.lb_max_dchg_cur_value.setText(str(round((data[5] << 8 | data[4]) * 0.1 - 3200, 1)))
- # 当前允许放电限制电压
- self.bms_main_ctl._view.top_widget.lb_max_dchg_vol_value.setText(str(round((data[7] << 8 | data[6]) * 0.1, 1)))
- def _inf_0008_signal(self, data, id):
- if id == SD.BCU_ID:
- # 电池组单体电压累加和
- self.bms_main_ctl._view.top_widget.lb_sum_vol_value.setText(str(round((data[1] << 8 | data[0]) * 0.1, 1)))
- # 总压一检测
- self.bms_main_ctl._view.top_widget.lb_tv_value.setText(str(round((data[3] << 8 | data[2]) * 0.1, 1)))
- # 总压二检测
- self.bms_main_ctl._view.top_widget.lb_tv_2_value.setText(str(round((data[5] << 8 | data[4]) * 0.1, 1)))
- # 总压三检测
- self.bms_main_ctl._view.top_widget.lb_tv_3_value.setText(str(round((data[7] << 8 | data[6]) * 0.1, 1)))
-
- def _inf_0009_signal(self, data, id):
- if id == SD.BCU_ID:
- # 电池组标称容量
- self.bms_main_ctl._view.top_widget.lb_nom_cap_value.setText(str(round((data[1] << 8 | data[0]) * 0.1, 1)))
- # 电池组总容量
- self.bms_main_ctl._view.top_widget.lb_all_cap_value.setText(str(round((data[3] << 8 | data[2]) * 0.1, 1)))
- # 电池组剩余容量
- self.bms_main_ctl._view.top_widget.lb_left_cap_value.setText(str(round((data[5] << 8 | data[4]) * 0.1, 1)))
- # SOE
- self.bms_main_ctl._view.top_widget.lb_tsoe_value.setText(str(round(data[6] * 0.4, 1)))
- # SOE
- item = QtWidgets.QTableWidgetItem(str(round(data[6] * 0.4, 1)))
- item.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
- self.bms_double_ccu_ctl._view.on_line_ccu_table.setItem(id - 1, 6, item)
- def _inf_000A_signal(self, data, id):
- if id == SD.BCU_ID:
- # 最高单体SOC
- self.bms_main_ctl._view.top_widget.lb_soc_high_value.setText(str(round((data[1] << 8 | data[0]) * 0.4, 1)))
- self._model.max_soc = round((data[1] << 8 | data[0]) * 0.4, 1)
- # 最低单体SOC
- self.bms_main_ctl._view.top_widget.lb_soc_low_value.setText(str(round((data[3] << 8 | data[2]) * 0.4, 1)))
- self._model.min_soc = round((data[3] << 8 | data[2]) * 0.4, 1)
- # 平均单体SOC
- self.bms_main_ctl._view.top_widget.lb_soc_avg_value.setText(str(round((data[5] << 8 | data[4]) * 0.4, 1)))
- self._model.avg_soc = round((data[5] << 8 | data[4]) * 0.4, 1)
- # 循环次数
- self.bms_main_ctl._view.top_widget.lb_circle_num_value.setText(str(data[7] << 8 | data[6]))
- def _inf_000B_signal(self, data, id):
- if id == SD.BCU_ID:
- # 电池组标称能量
- self.bms_main_ctl._view.top_widget.lb_nom_energy_value.setText(str(round((data[1] << 8 | data[0]) * 0.1, 1)))
- # 电池组总能量
- self.bms_main_ctl._view.top_widget.lb_all_energy_value.setText(str(round((data[3] << 8 | data[2]) * 0.1, 1)))
- # 电池组剩余能量
- self.bms_main_ctl._view.top_widget.lb_left_energy_value.setText(str(round((data[5] << 8 | data[4]) * 0.1, 1)))
- # 供电采样电压
- self.bms_main_ctl._view.top_widget.lb_gdcy_vol_value.setText(str(round((data[7] << 8 | data[6]) * 0.1, 1)))
- def _inf_000C_signal(self, data, id):
- if id == SD.BCU_ID:
- # 累计放电电量
- self.bms_main_ctl._view.top_widget.lb_chg_kwh_value.setText(str(round((data[3] << 24 | data[2] << 16 | data[1] << 8 | data[0]) * 0.01, 2)))
- # 累计充电电量
- self.bms_main_ctl._view.top_widget.lb_dchg_kwh_value.setText(str(round((data[7] << 24 | data[6] << 16 | data[5] << 8 | data[4]) * 0.01, 2)))
-
- def _inf_000D_signal(self, data, id):
- if id == SD.BCU_ID:
- # 当天累计放电电量
- self.bms_main_ctl._view.top_widget.lb_nowday_chg_energy_value.setText(str(round((data[3] << 24 | data[2] << 16 | data[1] << 8 | data[0]) * 0.01, 2)))
- # 当天累计充电电量
- self.bms_main_ctl._view.top_widget.lb_nowday_dchg_energy_value.setText(str(round((data[7] << 24 | data[6] << 16 | data[5] << 8 | data[4]) * 0.01, 2)))
-
- def _inf_000E_signal(self, data, id):
- if id == SD.BCU_ID:
- # 系统对地绝缘阻值
- self.bms_main_ctl._view.top_widget.lb_sys_against_value.setText(str(data[1] << 8 | data[0]))
- # 正母线对地绝缘阻值
- self.bms_main_ctl._view.top_widget.lb_sys_p_against_value.setText(str(data[3] << 8 | data[2]))
- # 负母线对地绝缘阻值
- self.bms_main_ctl._view.top_widget.lb_sys_n_against_value.setText(str(data[5] << 8 | data[4]))
-
- # 地绝缘阻值
- item = QtWidgets.QTableWidgetItem(str(data[1] << 8 | data[0]))
- item.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
- self.bms_double_ccu_ctl._view.on_line_ccu_table.setItem(id - 1, 7, item)
- def _inf_000F_signal(self, data, id):
- if id == SD.BCU_ID:
- # 单体电压
- # if data[1] == 0:
- # self.bms_cell_ctl._view.home_cell_table.cellWidget(0, 1).setText(str(data[3] << 8 | data[2]) + " mV")
- # self.bms_cell_ctl._view.home_cell_table.cellWidget(1, 1).setText(str(data[5] << 8 | data[4]) + " mV")
- # self.bms_cell_ctl._view.home_cell_table.cellWidget(2, 1).setText(str(data[7] << 8 | data[6]) + " mV")
- # if data[1] == 1:
- # self.bms_cell_ctl._view.home_cell_table.cellWidget(3, 1).setText(str(data[3] << 8 | data[2]) + " mV")
- # self.bms_cell_ctl._view.home_cell_table.cellWidget(0, 4).setText(str(data[5] << 8 | data[4]) + " mV")
- # self.bms_cell_ctl._view.home_cell_table.cellWidget(1, 4).setText(str(data[7] << 8 | data[6]) + " mV")
- # if data[1] == 2:
- # self.bms_cell_ctl._view.home_cell_table.cellWidget(2, 4).setText(str(data[3] << 8 | data[2]) + " mV")
- # self.bms_cell_ctl._view.home_cell_table.cellWidget(3, 4).setText(str(data[5] << 8 | data[4]) + " mV")
- # self.bms_cell_ctl._view.home_cell_table.cellWidget(0, 7).setText(str(data[7] << 8 | data[6]) + " mV")
- # if data[1] == 3:
- # self.bms_cell_ctl._view.home_cell_table.cellWidget(1, 7).setText(str(data[3] << 8 | data[2]) + " mV")
- # self.bms_cell_ctl._view.home_cell_table.cellWidget(2, 7).setText(str(data[5] << 8 | data[4]) + " mV")
- # self.bms_cell_ctl._view.home_cell_table.cellWidget(3, 7).setText(str(data[7] << 8 | data[6]) + " mV")
- # if data[1] == 4:
- # self.bms_cell_ctl._view.home_cell_table.cellWidget(0, 10).setText(str(data[3] << 8 | data[2]) + " mV")
- # self.bms_cell_ctl._view.home_cell_table.cellWidget(1, 10).setText(str(data[5] << 8 | data[4]) + " mV")
- # self.bms_cell_ctl._view.home_cell_table.cellWidget(2, 10).setText(str(data[7] << 8 | data[6]) + " mV")
- # if data[1] == 5:
- # self.bms_cell_ctl._view.home_cell_table.cellWidget(3, 10).setText(str(data[3] << 8 | data[2]) + " mV")
- if data[0] < 25:
- # 单体信息页面
- self.bms_cell_ctl._view.cell_vol_table.cellWidget(3 * data[1], data[0] + 1).setText(str(data[3] << 8 | data[2]) + " mV")
- self.bms_cell_ctl._view.cell_vol_table.cellWidget(3 * data[1] + 1, data[0] + 1).setText(str(data[5] << 8 | data[4]) + " mV")
- self.bms_cell_ctl._view.cell_vol_table.cellWidget(3 * data[1] + 2, data[0] + 1).setText(str(data[7] << 8 | data[6]) + " mV")
-
- self.cell_single_volt[3 * data[1]] = data[3] << 8 | data[2]
- self.cell_single_volt[3 * data[1] + 1] = data[5] << 8 | data[4]
- self.cell_single_volt[3 * data[1] + 2] = data[7] << 8 | data[6]
- self._model.cell_volt = self.cell_single_volt
- # 硬件校准页面
- if (self.bms_hard_ctl._view.cb_bmu_index.currentIndex() == data[0]):
- self.bms_hard_ctl._view.hard_table.item(3 * data[1], 3).setText(str(data[3] << 8 | data[2]))
- self.bms_hard_ctl._view.hard_table.item(3 * data[1] + 1, 3).setText(str(data[5] << 8 | data[4]))
- self.bms_hard_ctl._view.hard_table.item(3 * data[1] + 2, 3).setText(str(data[7] << 8 | data[6]))
- def _inf_0010_signal(self, data, id):
- if id == SD.BCU_ID:
- # 单体温度
- # if data[1] == 0:
- # self.bms_cell_ctl._view.home_cell_table.cellWidget(0, 2).setText(str(round((data[3] << 8 | data[2]) * 0.1 - 40, 1)) + " ℃")
- # self.bms_cell_ctl._view.home_cell_table.cellWidget(1, 2).setText(str(round((data[5] << 8 | data[4]) * 0.1 - 40, 1)) + " ℃")
- # self.bms_cell_ctl._view.home_cell_table.cellWidget(2, 2).setText(str(round((data[7] << 8 | data[6]) * 0.1 - 40, 1)) + " ℃")
- # if data[1] == 1:
- # self.bms_cell_ctl._view.home_cell_table.cellWidget(3, 2).setText(str(round((data[3] << 8 | data[2]) * 0.1 - 40, 1)) + " ℃")
- # self.bms_cell_ctl._view.home_cell_table.cellWidget(0, 5).setText(str(round((data[5] << 8 | data[4]) * 0.1 - 40, 1)) + " ℃")
- # self.bms_cell_ctl._view.home_cell_table.cellWidget(1, 5).setText(str(round((data[7] << 8 | data[6]) * 0.1 - 40, 1)) + " ℃")
- # if data[1] == 2:
- # self.bms_cell_ctl._view.home_cell_table.cellWidget(2, 5).setText(str(round((data[3] << 8 | data[2]) * 0.1 - 40, 1)) + " ℃")
- # self.bms_cell_ctl._view.home_cell_table.cellWidget(3, 5).setText(str(round((data[5] << 8 | data[4]) * 0.1 - 40, 1)) + " ℃")
- # self.bms_cell_ctl._view.home_cell_table.cellWidget(0, 8).setText(str(round((data[7] << 8 | data[6]) * 0.1 - 40, 1)) + " ℃")
- # if data[1] == 3:
- # self.bms_cell_ctl._view.home_cell_table.cellWidget(1, 8).setText(str(round((data[3] << 8 | data[2]) * 0.1 - 40, 1)) + " ℃")
- # self.bms_cell_ctl._view.home_cell_table.cellWidget(2, 8).setText(str(round((data[5] << 8 | data[4]) * 0.1 - 40, 1)) + " ℃")
- # self.bms_cell_ctl._view.home_cell_table.cellWidget(3, 8).setText(str(round((data[7] << 8 | data[6]) * 0.1 - 40, 1)) + " ℃")
- # if data[1] == 4:
- # self.bms_cell_ctl._view.home_cell_table.cellWidget(0, 11).setText(str(round((data[3] << 8 | data[2]) * 0.1 - 40, 1)) + " ℃")
- # self.bms_cell_ctl._view.home_cell_table.cellWidget(1, 11).setText(str(round((data[5] << 8 | data[4]) * 0.1 - 40, 1)) + " ℃")
- # self.bms_cell_ctl._view.home_cell_table.cellWidget(2, 11).setText(str(round((data[7] << 8 | data[6]) * 0.1 - 40, 1)) + " ℃")
- # if data[1] == 5:
- # self.bms_cell_ctl._view.home_cell_table.cellWidget(3, 11).setText(str(round((data[3] << 8 | data[2]) * 0.1 - 40, 1)) + " ℃")
- if data[0] < 25:
- self.bms_cell_ctl._view.cell_temp_table.cellWidget(3 * data[1], data[0] + 1).setText(str(round((data[3] << 8 | data[2]) * 0.1 - 40, 1)) + " ℃")
- self.bms_cell_ctl._view.cell_temp_table.cellWidget(3 * data[1] + 1, data[0] + 1).setText(str(round((data[5] << 8 | data[4]) * 0.1 - 40, 1)) + " ℃")
- self.bms_cell_ctl._view.cell_temp_table.cellWidget(3 * data[1] + 2, data[0] + 1).setText(str(round((data[7] << 8 | data[6]) * 0.1 - 40, 1)) + " ℃")
- self.cell_single_temp[3 * data[1]] = round((data[3] << 8 | data[2]) * 0.1 - 40, 1)
- self.cell_single_temp[3 * data[1] + 1] = round((data[5] << 8 | data[4]) * 0.1 - 40, 1)
- self.cell_single_temp[3 * data[1] + 2] = round((data[7] << 8 | data[6]) * 0.1 - 40, 1)
- self._model.cell_temp = self.cell_single_temp
- def _inf_0011_signal(self, data, id):
- if id == SD.BCU_ID:
- # 最高单体电压所在从控编号
- self.bms_main_ctl._view.top_widget.lb_tcellhv_slave_index_value.setText(str(data[0]))
- # 最高单体电压所在从控内编号
- self.bms_main_ctl._view.top_widget.lb_tcellhv_in_index_value.setText(str(data[1]))
- # 最高单体温度所在从控编号
- self.bms_main_ctl._view.top_widget.lb_h_temp_slave_index_value.setText(str(data[2]))
- # 最高单体温度所在从控内编号
- self.bms_main_ctl._view.top_widget.lb_h_temp_in_index_value.setText(str(data[3]))
- # 最低单体电压所在从控编号
- self.bms_main_ctl._view.top_widget.lb_tcelllv_slave_index_value.setText(str(data[4]))
- # 最低单体电压所在从控内编号
- self.bms_main_ctl._view.top_widget.lb_tcelllv_in_index_value.setText(str(data[5]))
- # 最低单体温度所在从控编号
- self.bms_main_ctl._view.top_widget.lb_l_temp_slave_index_value.setText(str(data[6]))
- # 最低单体温度所在从控内编号
- self.bms_main_ctl._view.top_widget.lb_l_temp_in_index_value.setText(str(data[7]))
- def _inf_0012_signal(self, data, id):
- if id == SD.BCU_ID:
- # 最高AFE温度值
- self.bms_main_ctl._view.top_widget.lb_afe_temp_high_value.setText(str(round((data[1] << 8 | data[0]) * 0.1 - 40, 1)))
- # 最高AFE温度所在从控编号
- self.bms_main_ctl._view.top_widget.lb_afe_temp_high_slave_value.setText(str(data[2]))
- # 最高AFE温度所在从控内编号
- self.bms_main_ctl._view.top_widget.lb_afe_temp_high_slave_in_value.setText(str(data[3]))
- # 最低AFE温度值
- self.bms_main_ctl._view.top_widget.lb_afe_temp_low_value.setText(str(round((data[5] << 8 | data[4]) * 0.1 - 40, 1)))
- # 最低AFE温度所在从控编号
- self.bms_main_ctl._view.top_widget.lb_afe_temp_low_slave_value.setText(str(data[6]))
- # 最低AFE温度所在从控内编号
- self.bms_main_ctl._view.top_widget.lb_afe_temp_low_slave_in_value.setText(str(data[7]))
- def _inf_0013_signal(self, data, id):
- if id == SD.BCU_ID:
- # BMS 硬件版本号
- self.bms_hard_version = ["" for i in range(8)]
- self.bms_hard_version[0] = chr(data[0])
- self.bms_hard_version[1] = chr(data[1])
- self.bms_hard_version[2] = chr(data[2])
- self.bms_hard_version[3] = chr(data[3])
- self.bms_hard_version[4] = chr(data[4])
- self.bms_hard_version[5] = chr(data[5])
- self.bms_hard_version[6] = chr(data[6])
- self.bms_hard_version[7] = chr(data[7])
- bms_hard_version = ''.join(self.bms_hard_version)
- self.bms_download_ctl._view.message_table.item(3, 2).setText(bms_hard_version)
-
- def _inf_0014_signal(self, data, id):
- if id == SD.BCU_ID:
- # BMS Boot版本号
- self.bms_boot_version = ["" for i in range(8)]
- self.bms_boot_version[0] = chr(data[0])
- self.bms_boot_version[1] = chr(data[1])
- self.bms_boot_version[2] = chr(data[2])
- self.bms_boot_version[3] = chr(data[3])
- self.bms_boot_version[4] = chr(data[4])
- self.bms_boot_version[5] = chr(data[5])
- self.bms_boot_version[6] = chr(data[6])
- self.bms_boot_version[7] = chr(data[7])
- bms_boot_version = ''.join(self.bms_boot_version)
- self.bms_download_ctl._view.message_table.item(0, 2).setText(bms_boot_version)
- def _inf_0016_signal(self, data, id):
- if id == SD.BCU_ID:
- # BMS 软件版本号
- self.bms_soft_version = ["" for i in range(8)]
- self.bms_soft_version[0] = chr(data[0])
- self.bms_soft_version[1] = chr(data[1])
- self.bms_soft_version[2] = chr(data[2])
- self.bms_soft_version[3] = chr(data[3])
- self.bms_soft_version[4] = chr(data[4])
- self.bms_soft_version[5] = chr(data[5])
- self.bms_soft_version[6] = chr(data[6])
- self.bms_soft_version[7] = chr(data[7])
- bms_soft_version = ''.join(self.bms_soft_version)
- self.bms_download_ctl._view.message_table.item(1, 2).setText(bms_soft_version)
- def _inf_0015_signal(self, data, id):
- if id == SD.BCU_ID:
- # BMS 算法版本号
- self.bms_sf_version = ["" for i in range(8)]
- self.bms_sf_version[0] = chr(data[0])
- self.bms_sf_version[1] = chr(data[1])
- self.bms_sf_version[2] = chr(data[2])
- self.bms_sf_version[3] = chr(data[3])
- self.bms_sf_version[4] = chr(data[4])
- self.bms_sf_version[5] = chr(data[5])
- self.bms_sf_version[6] = chr(data[6])
- self.bms_sf_version[7] = chr(data[7])
- bms_sf_version = ''.join(self.bms_sf_version)
- self.bms_download_ctl._view.message_table.item(2, 2).setText(bms_sf_version)
- def _inf_0017_signal(self, data, id):
- if id == SD.BCU_ID:
- # RTC时钟
- self.bms_hard_ctl._view.qline_rtc.setText(str(data[0] + 2000)+ "-" + str(data[1]) + "-" + str(data[2])+ " " + str(data[3]) + ":" + str(data[4]) + ":" + str(data[5]))
- def _inf_0018_signal(self, data, id):
- if id == SD.BCU_ID:
- # 电池均衡状态
- for i in range(8):
- if a_bit(data[1], i + 1) == 1:
- set_edt_bg(self.bms_balance_ctl._view.on_off_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 1).widget(), QtGui.QColor(Qt.green))
- else:
- set_edt_bg(self.bms_balance_ctl._view.on_off_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 1).widget(), QtGui.QColor(Qt.white))
- if a_bit(data[2], i + 1) == 1:
- set_edt_bg(self.bms_balance_ctl._view.on_off_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 9).widget(), QtGui.QColor(Qt.green))
- else:
- set_edt_bg(self.bms_balance_ctl._view.on_off_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 9).widget(), QtGui.QColor(Qt.white))
- if a_bit(data[3], i + 1) == 1:
- set_edt_bg(self.bms_balance_ctl._view.on_off_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 17).widget(), QtGui.QColor(Qt.green))
- else:
- set_edt_bg(self.bms_balance_ctl._view.on_off_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 17).widget(), QtGui.QColor(Qt.white))
- if a_bit(data[4], i + 1) == 1:
- set_edt_bg(self.bms_balance_ctl._view.on_off_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 25).widget(), QtGui.QColor(Qt.green))
- else:
- set_edt_bg(self.bms_balance_ctl._view.on_off_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 25).widget(), QtGui.QColor(Qt.white))
- def _inf_0019_signal(self, data, id):
- if id == SD.BCU_ID:
- # 电池均衡状态
- for i in range(8):
- if a_bit(data[1], i + 1) == 1:
- set_edt_bg(self.bms_balance_ctl._view.on_off_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 33).widget(), QtGui.QColor(Qt.green))
- else:
- set_edt_bg(self.bms_balance_ctl._view.on_off_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 33).widget(), QtGui.QColor(Qt.white))
- if a_bit(data[2], i + 1) == 1:
- set_edt_bg(self.bms_balance_ctl._view.on_off_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 41).widget(), QtGui.QColor(Qt.green))
- else:
- set_edt_bg(self.bms_balance_ctl._view.on_off_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 41).widget(), QtGui.QColor(Qt.white))
- if a_bit(data[3], i + 1) == 1:
- set_edt_bg(self.bms_balance_ctl._view.on_off_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 49).widget(), QtGui.QColor(Qt.green))
- else:
- set_edt_bg(self.bms_balance_ctl._view.on_off_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 49).widget(), QtGui.QColor(Qt.white))
- if a_bit(data[4], i + 1) == 1:
- set_edt_bg(self.bms_balance_ctl._view.on_off_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 57).widget(), QtGui.QColor(Qt.green))
- else:
- set_edt_bg(self.bms_balance_ctl._view.on_off_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 57).widget(), QtGui.QColor(Qt.white))
- if a_bit(data[5], i + 1) == 1:
- set_edt_bg(self.bms_balance_ctl._view.on_off_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 65).widget(), QtGui.QColor(Qt.green))
- else:
- set_edt_bg(self.bms_balance_ctl._view.on_off_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 65).widget(), QtGui.QColor(Qt.white))
- def _inf_001A_signal(self, data, id):
- if id == SD.BCU_ID:
- # 电池均衡故障
- for i in range(8):
- if a_bit(data[1], i + 1) == 1:
- set_edt_bg(self.bms_balance_ctl._view.balance_fault_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 1).widget(), QtGui.QColor(Qt.red))
- else:
- set_edt_bg(self.bms_balance_ctl._view.balance_fault_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 1).widget(), QtGui.QColor(Qt.white))
- if a_bit(data[2], i + 1) == 1:
- set_edt_bg(self.bms_balance_ctl._view.balance_fault_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 9).widget(), QtGui.QColor(Qt.red))
- else:
- set_edt_bg(self.bms_balance_ctl._view.balance_fault_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 9).widget(), QtGui.QColor(Qt.white))
- if a_bit(data[3], i + 1) == 1:
- set_edt_bg(self.bms_balance_ctl._view.balance_fault_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 17).widget(), QtGui.QColor(Qt.red))
- else:
- set_edt_bg(self.bms_balance_ctl._view.balance_fault_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 17).widget(), QtGui.QColor(Qt.white))
- if a_bit(data[4], i + 1) == 1:
- set_edt_bg(self.bms_balance_ctl._view.balance_fault_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 25).widget(), QtGui.QColor(Qt.red))
- else:
- set_edt_bg(self.bms_balance_ctl._view.balance_fault_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 25).widget(), QtGui.QColor(Qt.white))
- def _inf_001B_signal(self, data, id):
- if id == SD.BCU_ID:
- # 电池均衡故障
- for i in range(8):
- if a_bit(data[1], i + 1) == 1:
- set_edt_bg(self.bms_balance_ctl._view.balance_fault_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 33).widget(), QtGui.QColor(Qt.red))
- else:
- set_edt_bg(self.bms_balance_ctl._view.balance_fault_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 33).widget(), QtGui.QColor(Qt.white))
- if a_bit(data[2], i + 1) == 1:
- set_edt_bg(self.bms_balance_ctl._view.balance_fault_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 41).widget(), QtGui.QColor(Qt.red))
- else:
- set_edt_bg(self.bms_balance_ctl._view.balance_fault_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 41).widget(), QtGui.QColor(Qt.white))
- if a_bit(data[3], i + 1) == 1:
- set_edt_bg(self.bms_balance_ctl._view.balance_fault_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 49).widget(), QtGui.QColor(Qt.red))
- else:
- set_edt_bg(self.bms_balance_ctl._view.balance_fault_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 49).widget(), QtGui.QColor(Qt.white))
- if a_bit(data[4], i + 1) == 1:
- set_edt_bg(self.bms_balance_ctl._view.balance_fault_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 57).widget(), QtGui.QColor(Qt.red))
- else:
- set_edt_bg(self.bms_balance_ctl._view.balance_fault_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 57).widget(), QtGui.QColor(Qt.white))
- if a_bit(data[5], i + 1) == 1:
- set_edt_bg(self.bms_balance_ctl._view.balance_fault_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 65).widget(), QtGui.QColor(Qt.red))
- else:
- set_edt_bg(self.bms_balance_ctl._view.balance_fault_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 65).widget(), QtGui.QColor(Qt.white))
- def _inf_001C_signal(self, data, id):
- if id == SD.BCU_ID:
- # 电池连接线状态
- for i in range(8):
- if a_bit(data[1], i + 1) == 1:
- set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 1).widget(), QtGui.QColor(Qt.red))
- else:
- set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 1).widget(), QtGui.QColor(Qt.white))
- if a_bit(data[2], i + 1) == 1:
- set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 9).widget(), QtGui.QColor(Qt.red))
- else:
- set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 9).widget(), QtGui.QColor(Qt.white))
- if a_bit(data[3], i + 1) == 1:
- set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 17).widget(), QtGui.QColor(Qt.red))
- else:
- set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 17).widget(), QtGui.QColor(Qt.white))
- if a_bit(data[4], i + 1) == 1:
- set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 25).widget(), QtGui.QColor(Qt.red))
- else:
- set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 25).widget(), QtGui.QColor(Qt.white))
- # for i in range(8):
- # if a_bit(data[1], i + 1) == 1:
- # set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(i + 1, data[0] + 1).widget(), QtGui.QColor(Qt.red))
- # else:
- # set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(i + 1, data[0] + 1).widget(), QtGui.QColor(Qt.white))
- # if a_bit(data[2], i + 1) == 1:
- # set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(i + 9, data[0] + 1).widget(), QtGui.QColor(Qt.red))
- # else:
- # set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(i + 9, data[0] + 1).widget(), QtGui.QColor(Qt.white))
- # if a_bit(data[3], i + 1) == 1:
- # set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(i + 17, data[0] + 1).widget(), QtGui.QColor(Qt.red))
- # else:
- # set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(i + 17, data[0] + 1).widget(), QtGui.QColor(Qt.white))
- # if a_bit(data[4], i + 1) == 1:
- # set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(i + 25, data[0] + 1).widget(), QtGui.QColor(Qt.red))
- # else:
- # set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(i + 25, data[0] + 1).widget(), QtGui.QColor(Qt.white))
- def _inf_001D_signal(self, data, id):
- if id == SD.BCU_ID:
- # 电池连接线状态
- for i in range(8):
- if a_bit(data[1], i + 1) == 1:
- set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 33).widget(), QtGui.QColor(Qt.red))
- else:
- set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 33).widget(), QtGui.QColor(Qt.white))
- if a_bit(data[2], i + 1) == 1:
- set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 41).widget(), QtGui.QColor(Qt.red))
- else:
- set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 41).widget(), QtGui.QColor(Qt.white))
- if a_bit(data[3], i + 1) == 1:
- set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 49).widget(), QtGui.QColor(Qt.red))
- else:
- set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 49).widget(), QtGui.QColor(Qt.white))
- if a_bit(data[4], i + 1) == 1:
- set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 57).widget(), QtGui.QColor(Qt.red))
- else:
- set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 57).widget(), QtGui.QColor(Qt.white))
- if a_bit(data[5], i + 1) == 1:
- set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 65).widget(), QtGui.QColor(Qt.red))
- else:
- set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(data[0] - 1, i + 65).widget(), QtGui.QColor(Qt.white))
- # for i in range(8):
- # if a_bit(data[1], i + 1) == 1:
- # set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(i + 33, data[0] + 1).widget(), QtGui.QColor(Qt.red))
- # else:
- # set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(i + 33, data[0] + 1).widget(), QtGui.QColor(Qt.white))
- # if a_bit(data[2], i + 1) == 1:
- # set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(i + 41, data[0] + 1).widget(), QtGui.QColor(Qt.red))
- # else:
- # set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(i + 41, data[0] + 1).widget(), QtGui.QColor(Qt.white))
- # if a_bit(data[3], i + 1) == 1:
- # set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(i + 49, data[0] + 1).widget(), QtGui.QColor(Qt.red))
- # else:
- # set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(i + 49, data[0] + 1).widget(), QtGui.QColor(Qt.white))
- # if a_bit(data[4], i + 1) == 1:
- # set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(i + 57, data[0] + 1).widget(), QtGui.QColor(Qt.red))
- # else:
- # set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(i + 57, data[0] + 1).widget(), QtGui.QColor(Qt.white))
- # if a_bit(data[5], i + 1) == 1:
- # set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(i + 65, data[0] + 1).widget(), QtGui.QColor(Qt.red))
- # else:
- # set_edt_bg(self.bms_balance_ctl._view.line_qscrollarea_layout.itemAtPosition(i + 65, data[0] + 1).widget(), QtGui.QColor(Qt.white))
- def _inf_001E_signal(self, data, id):
- return
- def _inf_001F_signal(self, data, id):
- return
- def _inf_0020_signal(self, data, id):
- if id == SD.BCU_ID:
- # BMS 电池编码
- self.bms_sn_version[0] = chr(data[0])
- self.bms_sn_version[1] = chr(data[1])
- self.bms_sn_version[2] = chr(data[2])
- self.bms_sn_version[3] = chr(data[3])
- self.bms_sn_version[4] = chr(data[4])
- self.bms_sn_version[5] = chr(data[5])
- self.bms_sn_version[6] = chr(data[6])
- self.bms_sn_version[7] = chr(data[7])
- def _inf_0021_signal(self, data, id):
- if id == SD.BCU_ID:
- self.bms_sn_version[8] = chr(data[0])
- self.bms_sn_version[9] = chr(data[1])
- self.bms_sn_version[10] = chr(data[2])
- self.bms_sn_version[11] = chr(data[3])
- self.bms_sn_version[12] = chr(data[4])
- self.bms_sn_version[13] = chr(data[5])
- self.bms_sn_version[14] = chr(data[6])
- self.bms_sn_version[15] = chr(data[7])
- bms_sn_version = ''.join(self.bms_sn_version)
- self.bms_download_ctl._view.message_table.item(4, 2).setText(bms_sn_version)
- def _inf_0022_signal(self, data, id):
- if id == SD.BCU_ID:
- # BMS 电池编码
- self.battery_sn_version[0] = chr(data[0])
- self.battery_sn_version[1] = chr(data[1])
- self.battery_sn_version[2] = chr(data[2])
- self.battery_sn_version[3] = chr(data[3])
- self.battery_sn_version[4] = chr(data[4])
- self.battery_sn_version[5] = chr(data[5])
- self.battery_sn_version[6] = chr(data[6])
- self.battery_sn_version[7] = chr(data[7])
- def _inf_0023_signal(self, data, id):
- if id == SD.BCU_ID:
- self.battery_sn_version[8] = chr(data[0])
- self.battery_sn_version[9] = chr(data[1])
- self.battery_sn_version[10] = chr(data[2])
- self.battery_sn_version[11] = chr(data[3])
- self.battery_sn_version[12] = chr(data[4])
- self.battery_sn_version[13] = chr(data[5])
- self.battery_sn_version[14] = chr(data[6])
- self.battery_sn_version[15] = chr(data[7])
- battery_sn_version = ''.join(self.battery_sn_version)
- self.bms_download_ctl._view.message_table.item(5, 2).setText(battery_sn_version)
- self.bms_status._view.lb_bms_sn.setText("BATSN:" + battery_sn_version)
- self._model.now_time = QDateTime.currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")
- if SD.RECORD_SAVE:
- record_data = []
- record_data.append(self._model.now_time)
- record_data.append(self._model.ccu_id)
- record_data.append(self._model.fault_level)
- record_data.append(self._model.volt)
- record_data.append(self._model.cur)
- record_data.append(self._model.soc)
- record_data.append(self._model.soh)
- record_data.append(self._model.avg_cell_volt)
- record_data.append(self._model.max_cell_volt_id)
- record_data.append(self._model.max_cell_volt)
- record_data.append(self._model.min_cell_volt_id)
- record_data.append(self._model.min_cell_volt)
- record_data.append(self._model.avg_cell_temp)
- record_data.append(self._model.max_cell_temp_id)
- record_data.append(self._model.max_cell_temp)
- record_data.append(self._model.min_cell_temp_id)
- record_data.append(self._model.min_cell_temp)
- record_data.append(self._model.p)
- record_data.append(self._model.n)
- record_data.append(self._model.pre)
- record_data.append(self._model.dlq)
- record_data.append(self._model.gjd_first)
- record_data.append(self._model.gjd_second)
- record_data.append(self._model.max_soc)
- record_data.append(self._model.min_soc)
- record_data.append(self._model.avg_soc)
- if SD.CCU_TYPE == 0:
- record_data.extend(self._model.cell_volt[0:16])
- record_data.extend(self._model.cell_temp[0:16])
- else:
- record_data.extend(self._model.cell_volt)
- record_data.extend(self._model.cell_temp)
- with open(SD.RECORD_NAME, 'a') as csvfile:
- writer = csv.writer(csvfile, dialect='excel', lineterminator='\n')
- writer.writerow(record_data)
-
- def run(self):
- self._view.show()
|