Blame view

app/gui/oven_control/ovenstatics.cpp 25.7 KB
652e9cd54   고영탁   Merge
1
2
  #include "ovenstatics.h"
  #include <QtDebug>
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
3
4
  #include <QApplication>
  #include <QTimer>
652e9cd54   고영탁   Merge
5
6
  #include "mainwindow.h"
  #include "ovencontroller.h"
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
7
8
  #include "engineermenuwindow.h"
  #include "errorpopupdlg.h"
6a965b9f1   고영탁   엔지니어 모드 2차 구현
9
  #include "historylistwindow.h"
d66410abd   고영탁   에러 팝업 형태 변경
10
  #include "servicepassinputdlg.h"
652e9cd54   고영탁   Merge
11
42410a75c   김태훈   오타 수정
12
  OvenStatistics* OvenStatistics::p_singletonInstance=NULL;
652e9cd54   고영탁   Merge
13
538041ab9   김태훈   소스 코드 구조 개선
14
  OvenStatistics* OvenStatistics::getInstance(QObject *parent){
42410a75c   김태훈   오타 수정
15
      if(!p_singletonInstance){
42410a75c   김태훈   오타 수정
16
          p_singletonInstance = new OvenStatistics(parent);
538041ab9   김태훈   소스 코드 구조 개선
17
18
          p_singletonInstance->udp = UdpHandler::getInstance();
          p_singletonInstance->oven = Oven::getInstance();
652e9cd54   고영탁   Merge
19
          //for singletone event debug
6a965b9f1   고영탁   엔지니어 모드 2차 구현
20
21
  //        MainWindow* mw = (MainWindow*)parent;
  //        connect(mw->pcombiButton, SIGNAL(clicked()),p_singtonInstance, SLOT(onDataChanged()));
42410a75c   김태훈   오타 수정
22
23
24
          connect(p_singletonInstance->udp , SIGNAL(changed()), p_singletonInstance, SLOT(onDataChanged()));
          QTimer *timer = new QTimer(p_singletonInstance);
          connect(timer, SIGNAL(timeout()),p_singletonInstance,SLOT(oneSecTimerFired()));
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
25
          timer->start(1000); //1000ms fired
652e9cd54   고영탁   Merge
26
      }
42410a75c   김태훈   오타 수정
27
      return p_singletonInstance;
652e9cd54   고영탁   Merge
28
  }
42410a75c   김태훈   오타 수정
29
30
31
  void OvenStatistics::destroy(){
      if(!p_singletonInstance)
          delete p_singletonInstance;
652e9cd54   고영탁   Merge
32
  }
42410a75c   김태훈   오타 수정
33
  OvenStatistics::OvenStatistics(QObject* parent) :QObject(parent)
652e9cd54   고영탁   Merge
34
  {
6a965b9f1   고영탁   엔지니어 모드 2차 구현
35
      int i = 0;
652e9cd54   고영탁   Merge
36
37
      curdoorstate = false;
      curSysErrorState = 0;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
38
39
40
      curCommErrorState = 0;
      curSensorErrorState = 0;
      bDataRefreshed = false;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
41
      realdata.d32 = 0;
cefd483e4   고영탁   에러 수정
42
43
      m_bPopupShow = false;
      m_nLastPopupidx = MAX_ERROR_TYPE_CNT;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
44
45
46
47
48
      for(i=0;i<MAX_LOG_SENSOR;i++){
          curSensorValue[i].utemp = 0;
      }
  
      curSensorValue[12].itemp = 100;
14a73498f   김태훈   소스 코드 정리
49
      srvdata = new ServiceData();
a21bb5f67   고영탁   버그 수정
50
652e9cd54   고영탁   Merge
51
  }
42410a75c   김태훈   오타 수정
52
  OvenStatistics::~OvenStatistics(){
14a73498f   김태훈   소스 코드 정리
53
      delete srvdata;
652e9cd54   고영탁   Merge
54
  }
42410a75c   김태훈   오타 수정
55
  void OvenStatistics::onDataChanged()
652e9cd54   고영탁   Merge
56
57
58
  {
      error_item *item;
      time_t ltime=0;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
59
      uint16_t errstatetemp;
652e9cd54   고영탁   Merge
60
61
      udp->fillControl(control);
      udp->fillData(state);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
62
      bDataRefreshed = true;
652e9cd54   고영탁   Merge
63
      time(&ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
64
652e9cd54   고영탁   Merge
65
66
67
      if(oven->cooking() && control.system){
          if(state.door_state ==1 && curdoorstate==0){
              //door error
14a73498f   김태훈   소스 코드 정리
68
              item = &(srvdata->err_log.items.door);
652e9cd54   고영탁   Merge
69
70
71
72
73
              item->fired_cnt+=1;
              if(item->first_fired==0)item->first_fired = ltime;
              item->last_fried = ltime;
          }
          curdoorstate = state.door_state;
652e9cd54   고영탁   Merge
74
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
75
76
77
78
      if(state.system_error!=0 &&  state.system_error != curSysErrorState){
          processSystemError( state.system_error,ltime);
      }
      curSysErrorState = state.system_error;
fb200c9f1   고영탁   머지 후 컴파일 오류 수정
79
      errstatetemp = state.communication_error;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
80
81
82
83
      if(errstatetemp!=0 && errstatetemp != curCommErrorState ){
          processCommError( errstatetemp,ltime );
      }
      curCommErrorState = errstatetemp;
fb200c9f1   고영탁   머지 후 컴파일 오류 수정
84
      errstatetemp = state.sensor_error;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
85
      if(errstatetemp!=0 && errstatetemp != curSensorErrorState ){
f8661a150   고영탁   엔지니어 모드 디버깅
86
          processSensorError(errstatetemp,ltime );
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
87
88
      }
      curSensorErrorState = errstatetemp;
d66410abd   고영탁   에러 팝업 형태 변경
89
90
      errstatetemp = state.controller_error;
      if(errstatetemp != 0 && errstatetemp != curControlErrorState){
7ae804762   고영탁   에러 상황 추가
91
          processStateError(errstatetemp,ltime);
d66410abd   고영탁   에러 팝업 형태 변경
92
93
      }
      curControlErrorState = errstatetemp;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
94
95
  
  }
42410a75c   김태훈   오타 수정
96
  void OvenStatistics::processSensorError(uint16_t errflag, time_t ltime){
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
97
      error_item *item;
f8661a150   고영탁   엔지니어 모드 디버깅
98
      QString strMsg = "",strTitle="";
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
99
100
101
102
103
104
105
      uint8_t state;
      if( control.system==0 && !oven->cooking()) state = SYS_OFF_COOK_OFF;
      else if(control.system != 0 && !oven->cooking()) state = SYS_ON_COOK_OFF;
      else if(control.system !=0 && oven->cooking()) state = SYS_ON_COOK_ON;
      else state = SYS_ON_COOK_OFF;
  
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_1)){
14a73498f   김태훈   소스 코드 정리
106
          item = &(srvdata->err_log.items.inner_temp_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
107
108
109
          strTitle = tr("내부 온도 이상 발생");
          strMsg  = tr("내부 온도 센서에 이상이 발생하였습니다.");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_1],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
110
111
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_2)){
14a73498f   김태훈   소스 코드 정리
112
          item = &(srvdata->err_log.items.qunching_temp_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
113
114
115
          strTitle  = tr("퀀칭 온도 이상 발생");
          strMsg  = tr("퀀칭 온도에 이상이 발생하였습니다.");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_2],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
116
117
118
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_3)){
          //Reserved allerrornoe 설정
14a73498f   김태훈   소스 코드 정리
119
          item = &(srvdata->err_log.items.qunching_temp_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
120
121
122
          strTitle  = tr("퀀칭 온도 이상 발생");
          strMsg  = tr("퀀칭 온도  센서에 이상이 발생하였습니다.");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_3],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
123
124
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_4)){
14a73498f   김태훈   소스 코드 정리
125
          item = &(srvdata->err_log.items.wall_temp1_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
126
127
128
          strTitle  = tr("벽면 온도 이상 발생");
          strMsg  = tr("벽면 온도 센서에 이상이 발생하였습니다.");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_4],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
129
130
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_5)){
14a73498f   김태훈   소스 코드 정리
131
          item = &(srvdata->err_log.items.steam_gen_temp_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
132
133
134
          strTitle  = tr("스팀제네레이터 온도 이상 발생");
          strMsg  = tr("스팀제네레이터 온도 센서에 이상이 발생하였습니다.");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_5],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
135
136
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_6)){
14a73498f   김태훈   소스 코드 정리
137
          item = &(srvdata->err_log.items.meatprove_temp1_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
138
139
140
          strTitle  = tr("미트프로브 온도 이상 발생");
          strMsg  = tr("미트프로브 온도 센서에 이상이 발생하였습니다.");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_6],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
141
142
143
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_7)){
         //Reseved
14a73498f   김태훈   소스 코드 정리
144
          item = &(srvdata->err_log.items.meatprove_temp2_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
145
146
147
          strTitle  = tr("미트프로브2 온도 이상 발생");
          strMsg  = tr("미트프로브2 온도 센서에 이상이 발생하였습니다.");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_7],strMsg , strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
148
149
150
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_8)){
          //Reserved
14a73498f   김태훈   소스 코드 정리
151
          item = &(srvdata->err_log.items.meatprove_temp3_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
152
153
154
          strMsg  = tr("미트프로브3 온도 센서에 이상이 발생하였습니다.");
          strTitle  = tr("미트프로브3 온도 이상 발생");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_8],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
155
156
157
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_9)){
          //Reserved
14a73498f   김태훈   소스 코드 정리
158
          item = &(srvdata->err_log.items.meatprove_temp4_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
159
160
161
          strMsg  = tr("미트프로브4 온도 센서에 이상이 발생하였습니다.");
          strTitle  = tr("미트프로브4 온도 이상 발생");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_9],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
162
163
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_10)){
14a73498f   김태훈   소스 코드 정리
164
          item = &(srvdata->err_log.items.pcb_temp_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
165
166
167
          strMsg  = tr("PCB 온도 센서에 이상이 발생하였습니다.");
          strTitle  = tr("PCB 온도 이상 발생");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_10],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
168
169
      }
  }
42410a75c   김태훈   오타 수정
170
  void OvenStatistics::processCommError(uint16_t errflag, time_t ltime){
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
171
      error_item *item;
f8661a150   고영탁   엔지니어 모드 디버깅
172
      QString strMsg = "",strTitle="";
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
173
174
175
176
177
178
179
      uint8_t state;
      if( control.system==0 && !oven->cooking()) state = SYS_OFF_COOK_OFF;
      else if(control.system != 0 && !oven->cooking()) state = SYS_ON_COOK_OFF;
      else if(control.system !=0 && oven->cooking()) state = SYS_ON_COOK_ON;
      else state = SYS_ON_COOK_OFF;
  
      if(errflag & MAKE_MASK(COMM_ERR_BUNNER1)){
14a73498f   김태훈   소스 코드 정리
180
          item = &(srvdata->err_log.items.upper_pan_fail);
d66410abd   고영탁   에러 팝업 형태 변경
181
          strMsg  = tr("상부 송풍기 통신 이상 발생");
f8661a150   고영탁   엔지니어 모드 디버깅
182
183
          strTitle  = tr("상부 송풍기 이상 발생");
          processErrorItems(item,comm_err_type_def[state][COMM_ERR_BUNNER1],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
184
185
      }
      if(errflag & MAKE_MASK(COMM_ERR_BUNNER2)){
14a73498f   김태훈   소스 코드 정리
186
          item = &(srvdata->err_log.items.lower_pan_fail);
d66410abd   고영탁   에러 팝업 형태 변경
187
          strMsg  = tr("하부 송풍기 통신 이상 발생");
f8661a150   고영탁   엔지니어 모드 디버깅
188
189
          strTitle  = tr("하부 송풍기 이상 발생");
          processErrorItems(item,comm_err_type_def[state][COMM_ERR_BUNNER2],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
190
191
      }
      if(errflag & MAKE_MASK(COMM_ERR_BUNNER3)){
14a73498f   김태훈   소스 코드 정리
192
          item = &(srvdata->err_log.items.steam_pan_fail);
d66410abd   고영탁   에러 팝업 형태 변경
193
          strMsg  = tr("스팀 송풍기 통신 이상 발생");
f8661a150   고영탁   엔지니어 모드 디버깅
194
195
          strTitle  = tr("스팀 송풍기 이상 발생");
          processErrorItems(item,comm_err_type_def[state][COMM_ERR_BUNNER3],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
196
      }
f8661a150   고영탁   엔지니어 모드 디버깅
197
      if(errflag & MAKE_MASK(COMM_ERR_LOWERFAN)){
14a73498f   김태훈   소스 코드 정리
198
          item = &(srvdata->err_log.items.lower_motor_fail);
d66410abd   고영탁   에러 팝업 형태 변경
199
200
          strMsg  = tr("하부 FAN 컨트롤러 통신 이상 발생");
          strTitle  = tr("하부 FAN 컨트롤러 이상 발생");
f8661a150   고영탁   엔지니어 모드 디버깅
201
          processErrorItems(item,comm_err_type_def[state][COMM_ERR_BUNNER2],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
202
203
      }
      if(errflag & MAKE_MASK(COMM_ERR_UPPERFAN)){
14a73498f   김태훈   소스 코드 정리
204
          item = &(srvdata->err_log.items.upper_motor_fail);
d66410abd   고영탁   에러 팝업 형태 변경
205
206
          strMsg  = tr("상부 FAN 컨트롤러 통신 이상 발생");
          strTitle  = tr("상부 FAN 컨트롤러 이상 발생");
f8661a150   고영탁   엔지니어 모드 디버깅
207
          processErrorItems(item,comm_err_type_def[state][COMM_ERR_BUNNER2],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
208
      }
652e9cd54   고영탁   Merge
209
  }
7ae804762   고영탁   에러 상황 추가
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
  void OvenStatistics::processStateError(uint16_t errflag, time_t ltime){
      error_item *item;
      QString strMsg = "",strTitle="";
      uint8_t state;
      if( control.system==0 && !oven->cooking()) state = SYS_OFF_COOK_OFF;
      else if(control.system != 0 && !oven->cooking()) state = SYS_ON_COOK_OFF;
      else if(control.system !=0 && oven->cooking()) state = SYS_ON_COOK_ON;
      else state = SYS_ON_COOK_OFF;
  
      if(errflag & MAKE_MASK(STATE_ERR_BUNNER1)){
          item = &(srvdata->err_log.items.upper_pan_fail);
          strMsg  = tr("버너컨트롤러 1 이상 발생하였습니다.");
          strTitle  = tr("버너컨트롤러 1 이상 발생");
          processErrorItems(item,state_err_type_def[state][STATE_ERR_BUNNER1],strMsg,strTitle, ltime);
      }
      if(errflag & MAKE_MASK(STATE_ERR_BUNNER2)){
          item = &(srvdata->err_log.items.lower_pan_fail);
          strMsg  = tr("버너컨트롤러 2 이상  발생하였습니다.");
          strTitle  = tr("버너컨트롤러 2 이상 발생");
          processErrorItems(item,state_err_type_def[state][STATE_ERR_BUNNER2],strMsg,strTitle, ltime);
      }
      if(errflag & MAKE_MASK(STATE_ERR_BUNNER3)){
          item = &(srvdata->err_log.items.steam_pan_fail);
          strMsg  = tr("버너컨트롤러 3 이상 발생하였습니다.");
          strTitle  = tr("버너컨트로러 3 이상 발생");
          processErrorItems(item,state_err_type_def[state][STATE_ERR_BUNNER3],strMsg,strTitle, ltime);
      }
      if(errflag & MAKE_MASK(STATE_ERR_LOWERFAN)){
          item = &(srvdata->err_log.items.lower_motor_fail);
          strMsg  = tr("하부 FAN 컨트롤러 이상 발생하였습니다.");
          strTitle  = tr("하부 FAN 컨트롤러 이상 발생");
          processErrorItems(item,state_err_type_def[state][STATE_ERR_BUNNER2],strMsg,strTitle, ltime);
      }
      if(errflag & MAKE_MASK(STATE_ERR_UPPERFAN)){
          item = &(srvdata->err_log.items.upper_motor_fail);
          strMsg  = tr("상부 FAN 컨트롤러 이상 발생하였습니다.");
          strTitle  = tr("상부 FAN 컨트롤러 이상 발생");
          processErrorItems(item,state_err_type_def[state][STATE_ERR_BUNNER2],strMsg,strTitle, ltime);
      }
  }
42410a75c   김태훈   오타 수정
250
  void OvenStatistics::processSystemError(uint16_t errflag,time_t ltime){
652e9cd54   고영탁   Merge
251
     error_item *item;
f8661a150   고영탁   엔지니어 모드 디버깅
252
     QString strMsg = "",strTitle = "";
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
253
254
255
256
257
258
259
     uint8_t state;
     if( control.system==0 && !oven->cooking()) state = SYS_OFF_COOK_OFF;
     else if(control.system != 0 && !oven->cooking()) state = SYS_ON_COOK_OFF;
     else if(control.system !=0 && oven->cooking()) state = SYS_ON_COOK_ON;
     else state = SYS_ON_COOK_OFF;
  
      if( errflag & MAKE_MASK(SYS_ERR_FIRE_TRIGGER1)){
652e9cd54   고영탁   Merge
260
          //버너 컨트롤러 1 착화 이상
14a73498f   김태훈   소스 코드 정리
261
          item = &(srvdata->err_log.items.upper_fire_fail);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
262
          strMsg  = tr("상부 버너 착하가 되지 않습니다.");
f8661a150   고영탁   엔지니어 모드 디버깅
263
264
          strTitle = tr("상부 버너 착하 이상 발생");
          processErrorItems(item, sys_err_type_def[state][SYS_ERR_FIRE_TRIGGER1],strMsg,strTitle,ltime);
652e9cd54   고영탁   Merge
265
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
266
      if(errflag & MAKE_MASK(SYS_ERR_FIRE_TRIGGER2)){
652e9cd54   고영탁   Merge
267
          //버너 컨트롤러 2 착화 이상
14a73498f   김태훈   소스 코드 정리
268
          item = &(srvdata->err_log.items.lower_fire_fail);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
269
          strMsg  = tr("하부 버너 착하가 되지 않습니다.");
f8661a150   고영탁   엔지니어 모드 디버깅
270
271
          strTitle  = tr("하부 버너 착하 이상 발생");
          processErrorItems(item, sys_err_type_def[state][SYS_ERR_FIRE_TRIGGER2],strMsg,strTitle,ltime);
652e9cd54   고영탁   Merge
272
      }
f8661a150   고영탁   엔지니어 모드 디버깅
273
      if(errflag & MAKE_MASK(SYS_ERR_FIRE_TRIGGER3)){
14a73498f   김태훈   소스 코드 정리
274
          item = &(srvdata->err_log.items.steam_fire_fail);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
275
          strMsg  = tr("스팀 버너 착하가 되지 않습니다.");
cefd483e4   고영탁   에러 수정
276
          strTitle  = tr("스팀 버너 착하 이상 발생");
f8661a150   고영탁   엔지니어 모드 디버깅
277
           processErrorItems(item, sys_err_type_def[state][SYS_ERR_FIRE_TRIGGER3],strMsg,strTitle,ltime);
652e9cd54   고영탁   Merge
278
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
279
      if(errflag & MAKE_MASK(SYS_ERR_OVNE_TEMP_ALARM)){
14a73498f   김태훈   소스 코드 정리
280
          item = &(srvdata->err_log.items.inner_temp_high_alarm);
f8661a150   고영탁   엔지니어 모드 디버깅
281
282
283
          strMsg  = tr("내부 온도가 과열되었습니다.");
          strTitle  = tr("내부 온도 과열 발생");
           processErrorItems(item, sys_err_type_def[state][SYS_ERR_OVNE_TEMP_ALARM],strMsg,strTitle,ltime);
652e9cd54   고영탁   Merge
284
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
285
286
      if(errflag & MAKE_MASK(SYS_ERR_QUN_TEMP_ALARM)){
          //퀀칭 온도 센서 과열
14a73498f   김태훈   소스 코드 정리
287
          item = &(srvdata->err_log.items.qunching_temp_high_alarm);
f8661a150   고영탁   엔지니어 모드 디버깅
288
289
290
          strTitle  = tr("퀀칭 온도 센서 이상 발생");
          strMsg  = tr("퀀칭 온도 센서가 과열되었습니다");
           processErrorItems(item, sys_err_type_def[state][SYS_ERR_QUN_TEMP_ALARM],strMsg,strTitle,ltime);
652e9cd54   고영탁   Merge
291
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
292
293
      if(errflag & MAKE_MASK(SYS_ERR_CENTER_TEMP_ALARM)){
          //중심 온도 과열
14a73498f   김태훈   소스 코드 정리
294
          item = &(srvdata->err_log.items.meatprove_temp1_high_alarm);
f8661a150   고영탁   엔지니어 모드 디버깅
295
296
297
          strTitle  = tr("미트프로브 온도 센서 이상 발생.");
          strMsg  = tr("미트프로브 온도 센서 과열되었습니다.");
           processErrorItems(item, sys_err_type_def[state][SYS_ERR_CENTER_TEMP_ALARM],strMsg,strTitle,ltime);
652e9cd54   고영탁   Merge
298
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
299
      if(errflag & MAKE_MASK(SYS_ERR_WALL_TEMP_ALARM)){
14a73498f   김태훈   소스 코드 정리
300
          item = &(srvdata->err_log.items.wall_temp1_high_alarm);
f8661a150   고영탁   엔지니어 모드 디버깅
301
302
303
304
305
          strTitle  = tr("벽면 온도 센서 이상 발생.");
          strMsg  = tr("벽면 온도 센서가 과열 되었습니다.");
           processErrorItems(item, sys_err_type_def[state][SYS_ERR_WALL_TEMP_ALARM],strMsg,strTitle,ltime);
      }
     if(errflag & MAKE_MASK(SYS_ERR_STAM_TEMP_ALARM)){
14a73498f   김태훈   소스 코드 정리
306
         item = &(srvdata->err_log.items.steam_gen_temp_high_alram);
d66410abd   고영탁   에러 팝업 형태 변경
307
308
         strTitle  = tr("스팀제네레이터 온도 이상 발생.");
         strMsg  = tr("스팀제네레이터 온도 센서가 과열 되었습니다.");
f8661a150   고영탁   엔지니어 모드 디버깅
309
310
          processErrorItems(item, sys_err_type_def[state][SYS_ERR_STAM_TEMP_ALARM],strMsg,strTitle,ltime);
     }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
311
312
      if(errflag & MAKE_MASK(SYS_ERR_WATER_SPLY_FAIL)){
          //급수 이상 -> 유량 센서 이상
14a73498f   김태훈   소스 코드 정리
313
          item = &(srvdata->err_log.items.water_level_sensor_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
314
          strTitle  = tr("급수 이상 발생");
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
315
          strMsg  = tr("급수가 되지 않습니다.");
f8661a150   고영탁   엔지니어 모드 디버깅
316
           processErrorItems(item, sys_err_type_def[state][SYS_ERR_WATER_SPLY_FAIL],strMsg,strTitle,ltime);
652e9cd54   고영탁   Merge
317
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
318
319
      if(errflag & MAKE_MASK(SYS_ERR_WATER_LEVEL_FAIL)){
          //급수 이상 -> 수위 센서 이상
14a73498f   김태훈   소스 코드 정리
320
          item = &(srvdata->err_log.items.water_level_sensor_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
321
          strTitle = tr("급수 이상 발생");
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
322
          strMsg  = tr("급수가 되지 않습니다.");
f8661a150   고영탁   엔지니어 모드 디버깅
323
           processErrorItems(item, sys_err_type_def[state][SYS_ERR_WATER_LEVEL_FAIL],strMsg,strTitle,ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
324
325
      }
  }
42410a75c   김태훈   오타 수정
326
  bool OvenStatistics::getNeedErrorClear(){
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
327
328
      return bNeedErrorClear;
  }
42410a75c   김태훈   오타 수정
329
  void OvenStatistics::clearNeedErrorClear(){
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
330
331
332
      //에러클리어 송신 후 flag clear
      bNeedErrorClear = false;
  }
42410a75c   김태훈   오타 수정
333
  void OvenStatistics::oneSecTimerFired(void){
6a965b9f1   고영탁   엔지니어 모드 2차 구현
334
335
336
337
338
339
340
      static int nOneSecCnt=1;
      time_t ltime;
  
      ltime = time(NULL);
  
      nOneSecCnt++;
      if( (nOneSecCnt % 10) ==0 ) {
14a73498f   김태훈   소스 코드 정리
341
          srvdata->saveServiceData();
6a965b9f1   고영탁   엔지니어 모드 2차 구현
342
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
343
344
345
346
347
348
349
      if(bDataRefreshed) bDataRefreshed= false;
      else{
          udp->fillControl(control);
          udp->fillData(state);
      }
      //가열부 시간 측정
      if( (state.onoff_state1 & LOAD_STATE1_STEAM_BUNNER) !=0){
14a73498f   김태훈   소스 코드 정리
350
          srvdata->use_log.items.steam_heat +=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
351
352
      }
      if( (state.onoff_state1 & (LOAD_STATE1_UPPER_BUNNER | LOAD_STATE1_LOWER_FAN))!=0){
14a73498f   김태훈   소스 코드 정리
353
          srvdata->use_log.items.dry_heat+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
354
          if(state.onoff_state1 & (LOAD_STATE1_UPPER_BUNNER)){
14a73498f   김태훈   소스 코드 정리
355
              srvdata->use_log.items.upper_heat +=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
356
357
          }
          if((state.onoff_state2 & LOAD_STATE1_LOWER_BUNNER)!=0){
14a73498f   김태훈   소스 코드 정리
358
              srvdata->use_log.items.lower_heat +=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
359
360
361
362
363
364
          }
      }
      //모드 시간 계산
      if(state.cooking_mode !=0){
          if(state.cooking_humidity==0){
              //건열 모드
14a73498f   김태훈   소스 코드 정리
365
              srvdata->use_log.items.cook_dry_mode+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
366
367
368
          }
          else if(state.cooking_humidity ==100){
              //스팀모드
14a73498f   김태훈   소스 코드 정리
369
              srvdata->use_log.items.cook_steam_mode+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
370
          }
14a73498f   김태훈   소스 코드 정리
371
          else srvdata->use_log.items.cook_combi_mode+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
372
      }
f8661a150   고영탁   엔지니어 모드 디버깅
373
      if(state.cleaning_mode !=0 && state.cleaning_sate !=0){
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
374
375
          switch (state.cleaning_mode) {
          case (uint16_t)wash_mode_nocleanser:
14a73498f   김태훈   소스 코드 정리
376
              srvdata->use_log.items.wash_mode_nocleanser+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
377
378
              break;
          case (uint16_t)wash_mode_simple:
14a73498f   김태훈   소스 코드 정리
379
              srvdata->use_log.items.wash_mode_simple+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
380
381
              break;
          case (uint16_t)wash_mode_standard:
14a73498f   김태훈   소스 코드 정리
382
              srvdata->use_log.items.wash_mode_standard+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
383
384
              break;
          case (uint16_t)wash_mode_strong:
14a73498f   김태훈   소스 코드 정리
385
              srvdata->use_log.items.wash_mode_strong+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
386
387
              break;
          case (uint16_t)wash_mode_highspeed:
14a73498f   김태훈   소스 코드 정리
388
              srvdata->use_log.items.wash_mode_speed+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
389
390
391
392
393
394
              break;
          default:
              break;
          }
      }
      if(control.cooldown ==1){
14a73498f   김태훈   소스 코드 정리
395
          srvdata->use_log.items.cooldown_mode+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
396
397
      }
      //부품
6a965b9f1   고영탁   엔지니어 모드 2차 구현
398
      if(state.door_state !=0){
14a73498f   김태훈   소스 코드 정리
399
          srvdata->use_log.items.door_open+=1;
3f5f5d4ce   고영탁   디버깅 요청 사항 적용
400
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
401
      }
3f5f5d4ce   고영탁   디버깅 요청 사항 적용
402
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
403
404
      if(state.onoff_state2 !=0){
             if( (state.onoff_state2 & LOAD_STATE2_DV)!=0){
14a73498f   김태훈   소스 코드 정리
405
                 srvdata->use_log.items.dv_open+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
406
407
             }
             if((state.onoff_state2 & LOAD_STATE2_SSV)!=0){
14a73498f   김태훈   소스 코드 정리
408
                 srvdata->use_log.items.ssv_open+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
409
410
             }
             if((state.onoff_state2 & LOAD_STATE2_QNV)!=0){
14a73498f   김태훈   소스 코드 정리
411
                 srvdata->use_log.items.qnv_open+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
412
413
             }
             if((state.onoff_state2 & LOAD_STATE2_SNV)!=0){
14a73498f   김태훈   소스 코드 정리
414
                 srvdata->use_log.items.snv_open+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
415
416
             }
             if((state.onoff_state2 & LOAD_STATE2_SSP)!=0){
14a73498f   김태훈   소스 코드 정리
417
                 srvdata->use_log.items.ssp_open+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
418
419
             }
             if((state.onoff_state2 & LOAD_STATE2_HDM)!=0){
14a73498f   김태훈   소스 코드 정리
420
                 srvdata->use_log.items.hdm_open+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
421
422
             }
             if((state.onoff_state2 & LOAD_STATE2_DP)!=0){
14a73498f   김태훈   소스 코드 정리
423
                 srvdata->use_log.items.dp_open+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
424
425
             }
             if((state.onoff_state2 & LOAD_STATE2_UNP) !=0){
14a73498f   김태훈   소스 코드 정리
426
                 srvdata->use_log.items.unp_open+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
427
428
             }
      }
6a965b9f1   고영탁   엔지니어 모드 2차 구현
429
430
431
432
433
434
435
436
  
      //Real time Data Refresh
  
      realdata.b.door_open = state.door_state==0?0:1;
      realdata.b.dv_open = (state.onoff_state2&LOAD_STATE2_DV)==0?0:1;
      realdata.b.qnv_open = (state.onoff_state2&LOAD_STATE2_QNV)==0?0:1;
      realdata.b.sgnv_open = (state.onoff_state2&LOAD_STATE2_SGNV)==0?0:1;
      realdata.b.snv_open = (state.onoff_state2&LOAD_STATE2_SNV)==0?0:1;
f8661a150   고영탁   엔지니어 모드 디버깅
437
      realdata.b.wsv_open = (state.onoff_state2&LOAD_STATE2_WSV)==0?0:1;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
438
      realdata.b.ssv_open = (state.onoff_state2&LOAD_STATE2_SSV)==0?0:1;
3f5f5d4ce   고영탁   디버깅 요청 사항 적용
439
440
441
442
443
444
445
446
447
      if( (state.reserved11 & 0x0018) !=0){
          if( (state.reserved11&0x0008) != 0){
              realdata.b.water_level = water_level_high;
          }
          else if( (state.reserved11 & 0x0010) !=0){
              realdata.b.water_level = water_level_low;
          }
      }
      else realdata.b.water_level = water_level_normal;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
448
14a73498f   김태훈   소스 코드 정리
449
450
451
      if(srvdata->sensor_log.items.B1.high_temp.itemp < state.sensor1 ){
          srvdata->sensor_log.items.B1.high_temp.itemp = state.sensor1;
          srvdata->sensor_log.items.B1.last_high_time = ltime;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
452
453
      }
      curSensorValue[0].itemp = state.sensor1;
14a73498f   김태훈   소스 코드 정리
454
455
456
      if(srvdata->sensor_log.items.B2.high_temp.itemp < state.sensor2 ){
          srvdata->sensor_log.items.B2.high_temp.itemp = state.sensor2;
          srvdata->sensor_log.items.B2.last_high_time = ltime;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
457
458
      }
      curSensorValue[1].itemp = state.sensor2;
14a73498f   김태훈   소스 코드 정리
459
460
461
      if(srvdata->sensor_log.items.B3_1.high_temp.itemp < state.sensor6 ){
          srvdata->sensor_log.items.B3_1.high_temp.itemp = state.sensor6;
          srvdata->sensor_log.items.B3_1.last_high_time = ltime;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
462
463
      }
      curSensorValue[5].itemp = state.sensor6;
14a73498f   김태훈   소스 코드 정리
464
465
466
      if(srvdata->sensor_log.items.B4.high_temp.itemp < state.sensor4 ){
          srvdata->sensor_log.items.B4.high_temp.itemp = state.sensor4;
          srvdata->sensor_log.items.B4.last_high_time = ltime;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
467
468
      }
       curSensorValue[3].itemp = state.sensor4;
14a73498f   김태훈   소스 코드 정리
469
470
471
      if(srvdata->sensor_log.items.B5.high_temp.itemp < state.sensor5 ){
          srvdata->sensor_log.items.B5.high_temp.itemp = state.sensor5;
          srvdata->sensor_log.items.B5.last_high_time = ltime;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
472
473
      }
      curSensorValue[4].itemp = state.sensor5;
14a73498f   김태훈   소스 코드 정리
474
475
476
      if(srvdata->sensor_log.items.B3_2.high_temp.itemp < state.sensor7 ){
          srvdata->sensor_log.items.B3_2.high_temp.itemp = state.sensor7;
          srvdata->sensor_log.items.B3_2.last_high_time = ltime;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
477
478
      }
      curSensorValue[6].itemp = state.sensor7;
14a73498f   김태훈   소스 코드 정리
479
480
481
      if(srvdata->sensor_log.items.B3_3.high_temp.itemp < state.sensor8 ){
          srvdata->sensor_log.items.B3_3.high_temp.itemp = state.sensor8;
          srvdata->sensor_log.items.B3_3.last_high_time = ltime;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
482
483
      }
      curSensorValue[7].itemp = state.sensor8;
14a73498f   김태훈   소스 코드 정리
484
485
486
      if(srvdata->sensor_log.items.B3_4.high_temp.itemp < state.sensor9 ){
          srvdata->sensor_log.items.B3_4.high_temp.itemp = state.sensor9;
          srvdata->sensor_log.items.B3_4.last_high_time = ltime;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
487
488
      }
      curSensorValue[8].itemp = state.sensor9;
14a73498f   김태훈   소스 코드 정리
489
490
491
      if(srvdata->sensor_log.items.mbar1.high_temp.utemp < state.sensor11 ){
          srvdata->sensor_log.items.mbar1.high_temp.utemp = state.sensor11;
          srvdata->sensor_log.items.mbar1.last_high_time = ltime;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
492
493
      }
      curSensorValue[10].utemp = state.sensor11;
14a73498f   김태훈   소스 코드 정리
494
495
496
      if(srvdata->sensor_log.items.mbar2.high_temp.utemp < state.sensor12 ){
          srvdata->sensor_log.items.mbar2.high_temp.utemp = state.sensor12;
          srvdata->sensor_log.items.mbar2.last_high_time = ltime;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
497
498
      }
      curSensorValue[11].utemp = state.sensor12;
14a73498f   김태훈   소스 코드 정리
499
500
501
      if(srvdata->sensor_log.items.pcb.high_temp.itemp < state.sensor13 ){
          srvdata->sensor_log.items.pcb.high_temp.itemp = state.sensor13;
          srvdata->sensor_log.items.pcb.last_high_time = ltime;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
502
503
      }
      curSensorValue[12].itemp = state.sensor13;
14a73498f   김태훈   소스 코드 정리
504
505
506
      if(srvdata->sensor_log.items.adc.high_temp.itemp < state.sensor14 ){
          srvdata->sensor_log.items.adc.high_temp.itemp = state.sensor14;
          srvdata->sensor_log.items.adc.last_high_time = ltime;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
507
508
      }
      curSensorValue[13].itemp = state.sensor14;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
509
  }
42410a75c   김태훈   오타 수정
510
  void OvenStatistics::processErrorItems(error_item *item, error_exe_type errtype, const QString &MsgDesc, const QString &MsgTitle, time_t ltime){
cefd483e4   고영탁   에러 수정
511
512
     uint32_t erridx = (uint32_t) (item - &(srvdata->err_log.values[0]));
      qDebug() << (uint32_t) (item - &(srvdata->err_log.values[0]))  <<   "ERROR Fired!";
6a965b9f1   고영탁   엔지니어 모드 2차 구현
513
     if(m_pLastErrItem == item ){
14a73498f   김태훈   소스 코드 정리
514
515
516
          srvdata->err_log.items.repeat_error.fired_cnt =item->fired_cnt;
          srvdata->err_log.items.repeat_error.first_fired = item->first_fired;
          srvdata->err_log.items.repeat_error.last_fried = item->last_fried;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
517
518
     }
     m_pLastErrItem = item;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
519
      if(errtype >= error_type_onlychk){
652e9cd54   고영탁   Merge
520
521
522
523
          item->fired_cnt+=1;
          if(item->first_fired == 0) item->first_fired = ltime;
          item->last_fried = ltime;
      }
cefd483e4   고영탁   에러 수정
524
525
526
527
528
529
530
531
532
533
534
535
536
  
      if(errtype > error_type_clrsplit){
          //에러 클리어 명령 송신
         if(errtype == error_type_engclr){
              //확인 후 송신
              bNeedErrorClear = true;
          }
          else{
              //에러클리어 메시지 즉시 송신
              //udp->set(TG_ERROR_CLEAR,0xCECE);
              bNeedErrorClear=true;
          }
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
537
538
539
540
541
      switch(errtype){
          case error_type_onlypop:
          case error_type_popclr:
          case error_type_popnonclr:
              {
d66410abd   고영탁   에러 팝업 형태 변경
542
543
                  ErrorPopupDlg *dlg = new ErrorPopupDlg(QApplication::activeWindow(),MsgDesc,MsgTitle);
                  dlg->exec();
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
544
545
                  break;
              }
f8661a150   고영탁   엔지니어 모드 디버깅
546
      case error_type_engclr:
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
547
548
549
          case error_type_engnonclr:
          case error_type_onlyeng:
              {
d66410abd   고영탁   에러 팝업 형태 변경
550
551
552
553
554
555
                  //EngineerMenuWindow *w = new EngineerMenuWindow(0);
                  //w->showFullScreen();
                  ErrorPopupDlg *dlg = new ErrorPopupDlg(QApplication::activeWindow(),MsgDesc,MsgTitle);
                  dlg->exec();
                  ServicePassInputDlg *w = new ServicePassInputDlg(QApplication::activeWindow());
                  w->exec();
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
556
557
558
559
560
                  break;
              }
          default:
              break;
      }
cefd483e4   고영탁   에러 수정
561
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
562
652e9cd54   고영탁   Merge
563
  }
6a965b9f1   고영탁   엔지니어 모드 2차 구현
564
42410a75c   김태훈   오타 수정
565
  realtime_data OvenStatistics::getPartsRealtimeData(void){
6a965b9f1   고영탁   엔지니어 모드 2차 구현
566
567
      return realdata;
  }
42410a75c   김태훈   오타 수정
568
  uint8_t OvenStatistics::getSensorTypeByIdx(uint16_t idx){
6a965b9f1   고영탁   엔지니어 모드 2차 구현
569
570
571
      if(idx > MAX_LOG_SENSOR)  return 0;
      return sensorTypeInfo[idx];
  }
42410a75c   김태훈   오타 수정
572
  type_temp OvenStatistics::getCurSensorValueByIdx(uint16_t idx){
6a965b9f1   고영탁   엔지니어 모드 2차 구현
573
574
      return curSensorValue[idx];
  }
cefd483e4   고영탁   에러 수정
575
774c1995b   고영탁   에러 팝업 투명 효과 재처리
576
  void OvenStatistics::onErrorPopupClosed(QWidget* parent){
cefd483e4   고영탁   에러 수정
577
578
579
580
581
582
583
584
585
586
587
      qDebug() << "Error Popup Closed!";
      if(bNeedErrorClear) {
          qDebug() << "send error clear command";
          bNeedErrorClear = false;
          udp->set(TG_ERROR_CLEAR,0xCECE);
      }
      if(m_mapPopupList.isEmpty()==false){
          popup_list_item item;
          item = m_mapPopupList.first();
          m_nLastPopupidx = m_mapPopupList.firstKey();
          bNeedErrorClear = item.bNeedClear;
774c1995b   고영탁   에러 팝업 투명 효과 재처리
588
          ErrorPopupDlg *dlg = new ErrorPopupDlg(parent,item.strDesc,item.strTitle);
cefd483e4   고영탁   에러 수정
589
          m_mapPopupList.remove(m_nLastPopupidx);
774c1995b   고영탁   에러 팝업 투명 효과 재처리
590
          connect(dlg,SIGNAL(closedPopup(QWidget*)),this, SLOT(onErrorPopupClosed(QWidget*)));
cefd483e4   고영탁   에러 수정
591
592
593
594
595
596
597
          dlg->showFullScreen();
      }
      else{
          m_bPopupShow = false;
          m_nLastPopupidx = MAX_ERROR_TYPE_CNT;
      }
  }