#include "work_page.h" #include "ui_work_page.h" #include #include "CustomClass/mymessagebox.h" Work_Page::Work_Page(QWidget *parent, Work_Thread *wt) : custom_dialog(parent), ui(new Ui::Work_Page) { ui->setupUi(this); workThread = wt; packInfoPage = new packinfo_page(this,workThread); packInfoPage->hide(); cellInfoPage = new CellInfo_page(this,workThread); cellInfoPage->hide(); errInfoPage = new ErrorInfo_Page(this,workThread); errInfoPage->hide(); paramPage = new Param_Page(this,workThread); paramPage->hide(); set_btn_beep(ui->pushButton_packinfo,SIGNAL(pressed())); set_btn_beep(ui->pushButton_cellinfo,SIGNAL(pressed())); set_btn_beep(ui->pushButton_errorinfo,SIGNAL(pressed())); set_btn_beep(ui->pushButton_param,SIGNAL(pressed())); set_btn_beep(ui->pushButton_ctrl,SIGNAL(pressed())); set_btn_beep(ui->pushButton_Exit,SIGNAL(pressed())); connect(ui->pushButton_packinfo,SIGNAL(released()),this,SLOT(WorkBtnAction())); connect(ui->pushButton_cellinfo,SIGNAL(released()),this,SLOT(WorkBtnAction())); connect(ui->pushButton_errorinfo,SIGNAL(released()),this,SLOT(WorkBtnAction())); connect(ui->pushButton_param,SIGNAL(released()),this,SLOT(WorkBtnAction())); connect(ui->pushButton_ctrl,SIGNAL(released()),this,SLOT(WorkBtnAction())); connect(ui->pushButton_Exit,SIGNAL(released()),this,SLOT(WorkBtnAction())); timer_500ms = new QTimer(this); connect(timer_500ms,SIGNAL(timeout()),this,SLOT(DSP_UpdateSlot())); } Work_Page::~Work_Page() { delete ui; delete timer_500ms; //qDebug("~Work_Page"); } void Work_Page::showWorkPage() { remote_state = workThread->remoteState; if(1 == remote_state.to_workpage){ remote_state.to_workpage = 0; workThread->setRemoteState(remote_state); } workThread->setPageIndex(7); cmdExecState = 0; workPageAlarmEn = false; DSP_UpdateSlot(); connect(workThread,SIGNAL(sendCMD_Result(int)),this,SLOT(recvCMD_Result(int))); timer_500ms->start(500); this->exec(); } void Work_Page::closeWorkPage() { timer_500ms->stop(); disconnect(workThread,SIGNAL(sendCMD_Result(int)),this,SLOT(recvCMD_Result(int))); this->close(); } void Work_Page::SystemTime(void) { QDateTime time = QDateTime::currentDateTime();//获取系统现在的时间 QString str = time.toString("yyyy-MM-dd hh:mm:ss"); //设置显示格式 ui->label_Time->setText(str); } void Work_Page::checkIcon() { if(workThread->iconState.usbState) ui->label_USB->setPixmap(QPixmap(":new/prefix1/usb.png")); else ui->label_USB->setPixmap(QPixmap("")); } void Work_Page::dspValue() { QString title; if(workThread->testParam.test_type == TestTypeDischarge){ title = tr("放电测试--"); } else{ title = tr("充电测试--"); } if(workThread->packParam.pack_type == PACK_TYPE_Halo){ title += tr("哈啰"); } else{ title += tr("其它"); } ui->label_Title->setText(title); ui->label_packcode1->setText(""); } void Work_Page::updateValue() { QString alarmtext = alarmStateText.at(workThread->testStateData.alarmState); bool ifchg = true; if(workThread->testStateData.workState == WORK_STATE_DISCHG){ ifchg = false; } else if(workThread->testStateData.workState == WORK_STATE_CHARGE){ ifchg = true; } else{ if(workThread->testParam.test_type == TestTypeDischarge){ ifchg = false; } } ui->label_workstate1->setText(alarmtext); QString time = QString("%1:%2:%3") .arg(workThread->testStateData.testTime.hour,2,10,QChar('0')) .arg(workThread->testStateData.testTime.minute,2,10,QChar('0')) .arg(workThread->testStateData.testTime.second,2,10,QChar('0')); ui->label_testtime1->setText(time); ui->label_vol1->setText(QString::number(((float)workThread->modTestData.ADCVdc/100),'f',2)+"V"); quint16 val = workThread->testParam.disParam.sum_vol_low; if(ifchg){ val = workThread->testParam.chgParam.sum_vol_high; } ui->label_vol2->setText("("+QString::number(((float)val/100),'f',2)+")"); ui->label_curr1->setText(QString::number(((float)workThread->modTestData.ADCIdc/100),'f',2)+"A"); val = workThread->testParam.disParam.dis_curr; if(ifchg){ val = workThread->testParam.chgParam.chg_curr; } ui->label_curr2->setText("("+QString::number(((float)val/100),'f',2)+")"); ui->label_cap1->setText(QString::number(((float)workThread->testStateData.testCap/100),'f',2)+"AH"); val = workThread->testParam.disParam.dis_cap; if(ifchg){ val = workThread->testParam.chgParam.chg_cap; } ui->label_cap2->setText("("+QString::number(((float)val/100),'f',2)+")"); ui->label_soc1->setText(QString::number(((float)workThread->packData.soc/10),'f',1)+"%"); val = workThread->testParam.disParam.dis_soc; if(ifchg){ val = workThread->testParam.chgParam.chg_soc; } ui->label_soc2->setText("("+QString::number(((float)val/10),'f',1)+"%)"); ui->label_voldiff1->setText(QString::number(workThread->packData.cell_diff_vol_max)+"mV"); ui->label_voldiff2->setText("("+QString::number(workThread->testParam.cell_vol_diff)+")"); ui->label_temp1->setText(QString::number(workThread->packData.cell_tempe_min) + "~" +QString::number(workThread->packData.cell_tempe_max) + "℃"); ui->label_temp2->setText("("+QString::number(((float)workThread->testParam.temp_high/10),'f',1)+")"); ui->label_cellvol1->setText(QString::number(((float)workThread->packData.cell_vol_min/1000),'f',3) + "~" +QString::number(((float)workThread->packData.cell_vol_max/1000),'f',3) + "V"); val = workThread->testParam.disParam.cell_vol_low; if(ifchg){ val = workThread->testParam.chgParam.cell_vol_high; } ui->label_cellvol2->setText("("+QString::number(((float)val/1000),'f',3)+")"); if(workThread->testStateData.workState == WORK_STATE_STOPPED){ if(1 == cmdExecState){ ui->pushButton_ctrl->setText(tr("启动中...")); ui->pushButton_ctrl->setEnabled(false); } else{ ui->pushButton_ctrl->setText(tr("启 动")); ui->pushButton_ctrl->setEnabled(true); } } else{ if(2 == cmdExecState){ ui->pushButton_ctrl->setText(tr("停止中...")); ui->pushButton_ctrl->setEnabled(false); } else{ ui->pushButton_ctrl->setText(tr("停 止")); ui->pushButton_ctrl->setEnabled(true); } } } void Work_Page::workPageAlarm() { if(workThread->testStateData.alarmState > 2){ if(workPageAlarmEn){ QString alarmtext = alarmStateText.at(workThread->testStateData.alarmState); remote_state = workThread->remoteState; if(0 == remote_state.enter_slave){ remote_state.to_workpage = 0; workThread->setRemoteState(remote_state); popBox(alarmtext); } workPageAlarmEn = false; } } else{ workPageAlarmEn = true; } } void Work_Page::DSP_UpdateSlot() { dspValue(); updateValue(); workPageAlarm(); SystemTime(); checkIcon(); } void Work_Page::WorkBtnAction() { QPushButton *pb = dynamic_cast(sender()); remote_state = workThread->remoteState; if(1 == remote_state.to_workpage){ remote_state.to_workpage = 0; workThread->setRemoteState(remote_state); } if(ui->pushButton_Exit == pb) { if(cmdExecState > 0){ popBox(tr("操作中,请稍候...")); return; } if(workThread->testStateData.workState != WORK_STATE_STOPPED) { MessageBox box(this,tr("正在测试,确定要退出?"),MessageBox::Yes|MessageBox::No,workThread); if(box.exec()==MessageBox::Yes){ workThread->setWorkThreadCMD(workThread->CMD_StopTest); closeWorkPage(); } return; } closeWorkPage(); } else if(ui->pushButton_packinfo == pb) { packInfoPage->showPackinfoPage(); } else if(ui->pushButton_cellinfo == pb) { cellInfoPage->showCellinfoPage(); } else if(ui->pushButton_errorinfo == pb) { errInfoPage->showErrorinfoPage(); } else if(ui->pushButton_param == pb) { paramPage->showParamPage(); } else if(ui->pushButton_ctrl == pb) { if(workThread->testStateData.workState == WORK_STATE_STOPPED){ if(1 == workThread->passthroughState.passing){ popBox(tr("透传中,请稍候!")); return; } if(workThread->startErrorCheck() == START_VOL_HIGH){ popBox(tr("输入电压过高!")); return; } else if(workThread->startErrorCheck() == START_VOL_LOW){ popBox(tr("输入电压过低!")); return; } else if(workThread->startErrorCheck() == START_POWER_OVER){ popBox(tr("参数设置超功率!")); return; } else if(workThread->startErrorCheck() == START_MEM_ERROR){ popBox(tr("存储已满,请删除数据!")); return; } else if(workThread->startErrorCheck() == START_DISVOL_ERROR){ popBox(tr("组端下限设置错误!")); return; } else if(workThread->startErrorCheck() == START_CHGVOL_ERROR){ popBox(tr("组端上限设置错误!")); return; } cmdExecState = 1; workThread->setWorkThreadCMD(workThread->CMD_StartTest); } else{ cmdExecState = 2; workThread->setWorkThreadCMD(workThread->CMD_StopTest); } } remote_state = workThread->remoteState; if(1 == remote_state.to_workpage){ remote_state.to_workpage = 0; workThread->setRemoteState(remote_state); } } void Work_Page::recvCMD_Result(int res) { int exeres = res; if(EXE_MOS_CTRL_FAIL == exeres){ popBox(tr("MOS管操作失败!")); } else if(EXE_MOS_STATE_ERR == exeres){ popBox(tr("MOS管状态异常!")); } else if(EXE_SET_PARAM_FAIL == exeres){ popBox(tr("设置参数失败!")); } else if(EXE_START_FAIL == exeres){ popBox(tr("启动操作失败!")); } else if(EXE_STOP_FAIL == exeres){ popBox(tr("停止操作失败!")); } cmdExecState = 0; } void Work_Page::popBox(QString msg) { MessageBox box(this,msg,MessageBox::Ok,workThread); box.exec(); }