whyclwt
2022-05-18 ab72c6e114d7c4e83564194367ba623ca23bf09d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
#include "errorinfo_page.h"
#include "ui_errorinfo_page.h"
#include <QDateTime>
 
ErrorInfo_Page::ErrorInfo_Page(QWidget *parent, Work_Thread *wt) :
    custom_dialog(parent),
    ui(new Ui::ErrorInfo_Page)
{
    ui->setupUi(this);
 
    workThread = wt;
 
    set_btn_beep(ui->pushButton_Exit,SIGNAL(pressed()));
    set_btn_beep(ui->pushButton_pre,SIGNAL(pressed()));
    set_btn_beep(ui->pushButton_next,SIGNAL(pressed()));
 
    connect(ui->pushButton_Exit,SIGNAL(released()),this,SLOT(buttonReleasedAction()));
    connect(ui->pushButton_pre,SIGNAL(released()),this,SLOT(buttonReleasedAction()));
    connect(ui->pushButton_next,SIGNAL(released()),this,SLOT(buttonReleasedAction()));
 
    timer_500ms = new QTimer(this);
    connect(timer_500ms,SIGNAL(timeout()),this,SLOT(update_slot()));
 
    allErrList<<tr("BMS重启")<<tr("PACK外壳破坏故障")<<tr("NFC IIC通信故障")<<tr("BMS采样芯片通信故障")<<tr("底座连接信号异常") \
            <<tr("压差过大")<<tr("485通信故障")<<tr("认证非法")<<tr("单体严重过压报警")<<tr("充电电流严重超限报警") \
            <<tr("充电电芯严重高温报警")<<tr("充电电芯严重低温报警")<<tr("单体严重欠压报警")<<tr("放电电流超限报警")<<tr("放电电芯严重高温报警") \
            <<tr("放电电芯严重低温报警")<<tr("采样芯片判定短路故障")<<tr("电芯过放故障")<<tr("预充短路故障")<<tr("总电压严重过压报警") \
            <<tr("总电压严重欠压报警")<<tr("温度采样故障")<<tr("电流采样故障")<<tr("NTC温度差过大")<<tr("采样芯片硬件故障") \
            <<tr("电压采样故障")<<tr("采样芯片判定过流故障")<<tr("采样芯片判定过压故障")<<tr("采样芯片判定欠压故障");
}
 
ErrorInfo_Page::~ErrorInfo_Page()
{
    delete ui;
    delete timer_500ms;
    //qDebug("~ErrorInfo_Page");
}
 
void ErrorInfo_Page::showErrorinfoPage()
{
    dspValue();
 
    timer_500ms->start(500);
 
    this->exec();
}
 
void ErrorInfo_Page::closeErrorinfoPage()
{
    timer_500ms->stop();
 
    this->close();
}
 
void ErrorInfo_Page::SystemTime(void)
{
    QDateTime time = QDateTime::currentDateTime();//获取系统现在的时间
    QString str = time.toString("yyyy-MM-dd hh:mm:ss"); //设置显示格式
    ui->label_Time->setText(str);
}
 
void ErrorInfo_Page::checkIcon()
{
    /*
    if(workThread->iconState.usbState)
        ui->label_USB->setPixmap(QPixmap(":new/prefix1/usb.png"));
    else
        ui->label_USB->setPixmap(QPixmap(""));
    */
}
 
void ErrorInfo_Page::dspValue()
{
    QString title = tr("故障信息--");
 
    if(workThread->packParam.pack_type == PACK_TYPE_Halo){
        title += tr("哈啰");
    }
    else{
        title += tr("其它");
    }
 
    ui->label_Title->setText(title);
 
    QString str;
    str.sprintf("%d-0x%X-0x%X",workThread->packData.bms_error_state,workThread->packData.error[0],workThread->packData.error[1]);
    ui->label_errorcode->setText(str);
 
    quint32 errorCode = workThread->packData.error[1];
    errorCode = (errorCode<<16) + workThread->packData.error[0];
 
    errorCount = 0;
    currentErrList.clear();
    for(quint8 n=0;n<29;n++){
        if(errorCode & ((quint32)1<<n)){
            currentErrList.append(allErrList.at(n));
            errorCount++;
        }
    }
 
    pageSum = errorCount/8;
    if(errorCount%8 > 0){
        pageSum += 1;
    }
    if(pageSum<1){
        pageSum = 1;
    }
 
    pageIndex = 0;
 
    QTableWidgetItem *item;
 
    for(int i=0;i<8;i++)
    {
        item = new QTableWidgetItem("");
        item->setTextAlignment(0x0084);
        ui->tableWidget->setItem(i,0,item);
    }
 
    setTable();
 
    updateValue();
}
 
void ErrorInfo_Page::setTable()
{
    ui->label_pagecnt->setText(QString::number(pageIndex+1) + "/" +QString::number(pageSum));//+tr(" 页"));
 
    if(pageSum < 2){
        ui->pushButton_pre->setEnabled(false);
        ui->pushButton_next->setEnabled(false);
    }
    else{
        if(pageIndex == 0){
            ui->pushButton_pre->setEnabled(false);
            ui->pushButton_next->setEnabled(true);
        }
        else if(pageIndex+1 == pageSum){
            ui->pushButton_pre->setEnabled(true);
            ui->pushButton_next->setEnabled(false);
        }
    }
}
 
void ErrorInfo_Page::updateValue()
{
    quint16 errorindexstart = pageIndex*8;
    quint16 errorindex = 0;
 
    QTableWidgetItem *item;
 
    for(quint8 n=0;n<8;n++){
        errorindex = errorindexstart+n;
 
        if(errorindex < errorCount){
            item = ui->tableWidget->item(n, 0);
            item->setText(currentErrList.at(errorindex));
        }
        else{
            item = ui->tableWidget->item(n, 0);
            item->setText("");
        }
    }
}
 
void ErrorInfo_Page::update_slot()
{
    SystemTime();
 
    checkIcon();
 
    //updateValue();
 
    if(1 == workThread->remoteState.to_workpage){
        closeErrorinfoPage();
    }
}
 
 
void ErrorInfo_Page::buttonReleasedAction()
{
    QPushButton *pb = dynamic_cast<QPushButton*>(sender());
 
    if(ui->pushButton_Exit == pb)
    {
        closeErrorinfoPage();
    }
    else if(ui->pushButton_pre == pb)
    {
        if(pageIndex > 0){
            pageIndex--;
        }
 
        setTable();
        updateValue();
    }
    else if(ui->pushButton_next == pb)
    {
        if(pageIndex+1 < pageSum){
            pageIndex++;
        }
 
        setTable();
        updateValue();
    }
}