Commit cefd483e4066e4ba94dbaede9080b21ed5161e1b
1 parent
c12e09d9ad
Exists in
master
and in
2 other branches
에러 수정
- 시간 오표시 에러 수정(로컬 타임 적용) - 팝업 표시 알고리즘 수정(Modal -> Modaless)
Showing
4 changed files
with
76 additions
and
20 deletions
Show diff stats
app/gui/oven_control/historylistwindow.cpp
... | ... | @@ -97,10 +97,10 @@ void HistoryListWindow::reloadDataset(void){ |
97 | 97 | item = err_items[m_nCurDpStartPos+i]; |
98 | 98 | m_ctrlErrBtns[i]->setText(strTemp); |
99 | 99 | m_ctrlCountLabels[i] ->setText(strTemp.sprintf("%d",item->fired_cnt)); |
100 | - timeptr = gmtime(&(item->first_fired)); | |
100 | + timeptr = localtime(&(item->first_fired)); | |
101 | 101 | strftime(strTime,64,"%y-%m-%d %H:%M:%S",timeptr); |
102 | 102 | m_ctrlFirstTimeLabels[i]->setText(strTime); |
103 | - timeptr = gmtime(&(item->last_fried)); | |
103 | + timeptr = localtime(&(item->last_fried)); | |
104 | 104 | strftime(strTime,64,"%y-%m-%d %H:%M:%S",timeptr); |
105 | 105 | m_ctrlLastTimeLabels[i]->setText(strTime); |
106 | 106 | } | ... | ... |
app/gui/oven_control/ovenstatics.cpp
... | ... | @@ -41,6 +41,9 @@ OvenStatistics::OvenStatistics(QObject* parent) :QObject(parent) |
41 | 41 | curSensorErrorState = 0; |
42 | 42 | bDataRefreshed = false; |
43 | 43 | realdata.d32 = 0; |
44 | + m_bPopupShow = false; | |
45 | + m_nLastPopupidx = MAX_ERROR_TYPE_CNT; | |
46 | + | |
44 | 47 | |
45 | 48 | for(i=0;i<MAX_LOG_SENSOR;i++){ |
46 | 49 | curSensorValue[i].utemp = 0; |
... | ... | @@ -242,7 +245,7 @@ void OvenStatistics::processSystemError(uint16_t errflag,time_t ltime){ |
242 | 245 | if(errflag & MAKE_MASK(SYS_ERR_FIRE_TRIGGER3)){ |
243 | 246 | item = &(srvdata->err_log.items.steam_fire_fail); |
244 | 247 | strMsg = tr("스팀 버너 착하가 되지 않습니다."); |
245 | - strMsg = tr("스팀 버너 착하 이상 발생"); | |
248 | + strTitle = tr("스팀 버너 착하 이상 발생"); | |
246 | 249 | processErrorItems(item, sys_err_type_def[state][SYS_ERR_FIRE_TRIGGER3],strMsg,strTitle,ltime); |
247 | 250 | } |
248 | 251 | if(errflag & MAKE_MASK(SYS_ERR_OVNE_TEMP_ALARM)){ |
... | ... | @@ -491,8 +494,8 @@ void OvenStatistics::oneSecTimerFired(void){ |
491 | 494 | } |
492 | 495 | |
493 | 496 | void OvenStatistics::processErrorItems(error_item *item, error_exe_type errtype, const QString &MsgDesc, const QString &MsgTitle, time_t ltime){ |
494 | - | |
495 | - qDebug() << (int) (item - &(srvdata->err_log.values[0])) << "ERROR Fired!"; | |
497 | + uint32_t erridx = (uint32_t) (item - &(srvdata->err_log.values[0])); | |
498 | + qDebug() << (uint32_t) (item - &(srvdata->err_log.values[0])) << "ERROR Fired!"; | |
496 | 499 | if(m_pLastErrItem == item ){ |
497 | 500 | srvdata->err_log.items.repeat_error.fired_cnt =item->fired_cnt; |
498 | 501 | srvdata->err_log.items.repeat_error.first_fired = item->first_fired; |
... | ... | @@ -505,13 +508,41 @@ void OvenStatistics::processErrorItems(error_item *item, error_exe_type errtype, |
505 | 508 | if(item->first_fired == 0) item->first_fired = ltime; |
506 | 509 | item->last_fried = ltime; |
507 | 510 | } |
511 | + | |
512 | + if(errtype > error_type_clrsplit){ | |
513 | + //에러 클리어 명령 송신 | |
514 | + if(errtype == error_type_engclr){ | |
515 | + //확인 후 송신 | |
516 | + bNeedErrorClear = true; | |
517 | + } | |
518 | + else{ | |
519 | + //에러클리어 메시지 즉시 송신 | |
520 | + //udp->set(TG_ERROR_CLEAR,0xCECE); | |
521 | + bNeedErrorClear=true; | |
522 | + } | |
523 | + } | |
524 | + | |
508 | 525 | switch(errtype){ |
509 | 526 | case error_type_onlypop: |
510 | 527 | case error_type_popclr: |
511 | 528 | case error_type_popnonclr: |
512 | 529 | { |
513 | - ErrorPopupDlg *dlg = new ErrorPopupDlg(QApplication::activeWindow(),MsgDesc,MsgTitle); | |
514 | - dlg->exec(); | |
530 | + if(m_bPopupShow==false){ | |
531 | + m_bPopupShow = true; | |
532 | + ErrorPopupDlg *dlg = new ErrorPopupDlg(QApplication::activeWindow(),MsgDesc,MsgTitle); | |
533 | + connect(dlg,SIGNAL(destroyed(QObject*)),this, SLOT(onErrorPopupClosed())); | |
534 | + dlg->showFullScreen(); | |
535 | + m_nLastPopupidx = erridx; | |
536 | + } | |
537 | + else{ | |
538 | + if(erridx != m_nLastPopupidx && m_mapPopupList.contains(erridx) ==false){ | |
539 | + popup_list_item popitem; | |
540 | + popitem.bNeedClear = bNeedErrorClear; | |
541 | + popitem.strDesc = MsgDesc; | |
542 | + popitem.strTitle = MsgTitle; | |
543 | + m_mapPopupList.insert(erridx,popitem); | |
544 | + } | |
545 | + } | |
515 | 546 | break; |
516 | 547 | } |
517 | 548 | case error_type_engclr: |
... | ... | @@ -525,18 +556,7 @@ void OvenStatistics::processErrorItems(error_item *item, error_exe_type errtype, |
525 | 556 | default: |
526 | 557 | break; |
527 | 558 | } |
528 | - if(errtype > error_type_clrsplit){ | |
529 | - //에러 클리어 명령 송신 | |
530 | - qDebug() << "send error clear command"; | |
531 | - if(errtype == error_type_engclr){ | |
532 | - //확인 후 송신 | |
533 | - bNeedErrorClear = true; | |
534 | - } | |
535 | - else{ | |
536 | - //에러클리어 메시지 즉시 송신 | |
537 | - udp->set(TG_ERROR_CLEAR,0xCECE); | |
538 | - } | |
539 | - } | |
559 | + | |
540 | 560 | |
541 | 561 | } |
542 | 562 | |
... | ... | @@ -552,3 +572,26 @@ uint8_t OvenStatistics::getSensorTypeByIdx(uint16_t idx){ |
552 | 572 | type_temp OvenStatistics::getCurSensorValueByIdx(uint16_t idx){ |
553 | 573 | return curSensorValue[idx]; |
554 | 574 | } |
575 | + | |
576 | +void OvenStatistics::onErrorPopupClosed(void){ | |
577 | + qDebug() << "Error Popup Closed!"; | |
578 | + if(bNeedErrorClear) { | |
579 | + qDebug() << "send error clear command"; | |
580 | + bNeedErrorClear = false; | |
581 | + udp->set(TG_ERROR_CLEAR,0xCECE); | |
582 | + } | |
583 | + if(m_mapPopupList.isEmpty()==false){ | |
584 | + popup_list_item item; | |
585 | + item = m_mapPopupList.first(); | |
586 | + m_nLastPopupidx = m_mapPopupList.firstKey(); | |
587 | + bNeedErrorClear = item.bNeedClear; | |
588 | + ErrorPopupDlg *dlg = new ErrorPopupDlg(QApplication::activeWindow(),item.strDesc,item.strTitle); | |
589 | + m_mapPopupList.remove(m_nLastPopupidx); | |
590 | + connect(dlg,SIGNAL(destroyed(QObject*)),this, SLOT(onErrorPopupClosed())); | |
591 | + dlg->showFullScreen(); | |
592 | + } | |
593 | + else{ | |
594 | + m_bPopupShow = false; | |
595 | + m_nLastPopupidx = MAX_ERROR_TYPE_CNT; | |
596 | + } | |
597 | +} | ... | ... |
app/gui/oven_control/ovenstatics.h
... | ... | @@ -3,6 +3,7 @@ |
3 | 3 | |
4 | 4 | #include <QObject> |
5 | 5 | #include <time.h> |
6 | +#include <qmap.h> | |
6 | 7 | #include "../../app-prime-modbus/include/all_share.h" |
7 | 8 | #include "udphandler.h" |
8 | 9 | #include "oven.h" |
... | ... | @@ -160,6 +161,12 @@ typedef union |
160 | 161 | }b; |
161 | 162 | }realtime_data; |
162 | 163 | |
164 | +typedef struct _popup_list_item{ | |
165 | + QString strTitle; | |
166 | + QString strDesc; | |
167 | + bool bNeedClear; | |
168 | +}popup_list_item; | |
169 | + | |
163 | 170 | class OvenStatistics : public QObject |
164 | 171 | { |
165 | 172 | Q_OBJECT |
... | ... | @@ -219,6 +226,10 @@ private: |
219 | 226 | oven_control_t control; |
220 | 227 | oven_state_t state; |
221 | 228 | error_item* m_pLastErrItem; |
229 | + QMap<uint32_t, popup_list_item> m_mapPopupList; | |
230 | + uint32_t m_nLastPopupidx; | |
231 | + bool m_bPopupShow; | |
232 | + | |
222 | 233 | |
223 | 234 | |
224 | 235 | |
... | ... | @@ -229,6 +240,7 @@ private: |
229 | 240 | bool bNeedErrorClear; |
230 | 241 | bool bDataRefreshed; |
231 | 242 | realtime_data realdata; |
243 | + | |
232 | 244 | explicit OvenStatistics(QObject* parent); |
233 | 245 | ~OvenStatistics(); |
234 | 246 | void processSystemError(uint16_t errflag,time_t ltime); |
... | ... | @@ -240,6 +252,7 @@ private: |
240 | 252 | public slots: |
241 | 253 | void onDataChanged(); |
242 | 254 | void oneSecTimerFired(void); |
255 | + void onErrorPopupClosed(void); | |
243 | 256 | }; |
244 | 257 | |
245 | 258 | #endif // OVENSTATICS_H | ... | ... |
app/gui/oven_control/realtimesensorwindow.cpp
... | ... | @@ -106,7 +106,7 @@ void RealtimeSensorWindow::reloadUi(void){ |
106 | 106 | |
107 | 107 | for(i=0;i<REALSENSOR_CONTROL_LIST_ITEM_MAX;i++){ |
108 | 108 | if(m_arrSensorItems[i]->last_high_time !=0){ |
109 | - timeptr = gmtime(&(m_arrSensorItems[i]->last_high_time)); | |
109 | + timeptr = localtime(&(m_arrSensorItems[i]->last_high_time)); | |
110 | 110 | strftime(strTime,64,"%y-%m-%d\n%H:%M:%S",timeptr); |
111 | 111 | m_arrLbState[3][i]->setText(strTime); |
112 | 112 | } | ... | ... |