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
      }
9e48a5d01   고영탁   에러 체크 해제
75
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
76
      if(state.system_error!=0 &&  state.system_error != curSysErrorState){
9e48a5d01   고영탁   에러 체크 해제
77
          processSystemError( state.system_error & SYS_ERROR_MASK,ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
78
79
      }
      curSysErrorState = state.system_error;
fb200c9f1   고영탁   머지 후 컴파일 오류 수정
80
      errstatetemp = state.communication_error;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
81
      if(errstatetemp!=0 && errstatetemp != curCommErrorState ){
9e48a5d01   고영탁   에러 체크 해제
82
          processCommError( errstatetemp&COMM_ERROR_MASK,ltime );
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
83
84
      }
      curCommErrorState = errstatetemp;
fb200c9f1   고영탁   머지 후 컴파일 오류 수정
85
      errstatetemp = state.sensor_error;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
86
      if(errstatetemp!=0 && errstatetemp != curSensorErrorState ){
9e48a5d01   고영탁   에러 체크 해제
87
          processSensorError(errstatetemp&SENSOR_ERROR_MASK,ltime );
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
88
89
      }
      curSensorErrorState = errstatetemp;
d66410abd   고영탁   에러 팝업 형태 변경
90
91
      errstatetemp = state.controller_error;
      if(errstatetemp != 0 && errstatetemp != curControlErrorState){
9e48a5d01   고영탁   에러 체크 해제
92
          processStateError(errstatetemp&STATE_ERROR_MASK,ltime);
d66410abd   고영탁   에러 팝업 형태 변경
93
94
      }
      curControlErrorState = errstatetemp;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
95
96
  
  }
42410a75c   김태훈   오타 수정
97
  void OvenStatistics::processSensorError(uint16_t errflag, time_t ltime){
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
98
      error_item *item;
f8661a150   고영탁   엔지니어 모드 디버깅
99
      QString strMsg = "",strTitle="";
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
100
101
102
103
104
105
106
      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   김태훈   소스 코드 정리
107
          item = &(srvdata->err_log.items.inner_temp_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
108
109
110
          strTitle = tr("내부 온도 이상 발생");
          strMsg  = tr("내부 온도 센서에 이상이 발생하였습니다.");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_1],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
111
112
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_2)){
14a73498f   김태훈   소스 코드 정리
113
          item = &(srvdata->err_log.items.qunching_temp_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
114
115
116
          strTitle  = tr("퀀칭 온도 이상 발생");
          strMsg  = tr("퀀칭 온도에 이상이 발생하였습니다.");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_2],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
117
118
119
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_3)){
          //Reserved allerrornoe 설정
14a73498f   김태훈   소스 코드 정리
120
          item = &(srvdata->err_log.items.qunching_temp_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
121
122
123
          strTitle  = tr("퀀칭 온도 이상 발생");
          strMsg  = tr("퀀칭 온도  센서에 이상이 발생하였습니다.");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_3],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
124
125
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_4)){
14a73498f   김태훈   소스 코드 정리
126
          item = &(srvdata->err_log.items.wall_temp1_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
127
128
129
          strTitle  = tr("벽면 온도 이상 발생");
          strMsg  = tr("벽면 온도 센서에 이상이 발생하였습니다.");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_4],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
130
131
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_5)){
14a73498f   김태훈   소스 코드 정리
132
          item = &(srvdata->err_log.items.steam_gen_temp_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
133
134
135
          strTitle  = tr("스팀제네레이터 온도 이상 발생");
          strMsg  = tr("스팀제네레이터 온도 센서에 이상이 발생하였습니다.");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_5],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
136
137
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_6)){
14a73498f   김태훈   소스 코드 정리
138
          item = &(srvdata->err_log.items.meatprove_temp1_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
139
140
141
          strTitle  = tr("미트프로브 온도 이상 발생");
          strMsg  = tr("미트프로브 온도 센서에 이상이 발생하였습니다.");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_6],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
142
143
144
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_7)){
         //Reseved
14a73498f   김태훈   소스 코드 정리
145
          item = &(srvdata->err_log.items.meatprove_temp2_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
146
147
148
          strTitle  = tr("미트프로브2 온도 이상 발생");
          strMsg  = tr("미트프로브2 온도 센서에 이상이 발생하였습니다.");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_7],strMsg , strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
149
150
151
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_8)){
          //Reserved
14a73498f   김태훈   소스 코드 정리
152
          item = &(srvdata->err_log.items.meatprove_temp3_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
153
154
155
          strMsg  = tr("미트프로브3 온도 센서에 이상이 발생하였습니다.");
          strTitle  = tr("미트프로브3 온도 이상 발생");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_8],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
156
157
158
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_9)){
          //Reserved
14a73498f   김태훈   소스 코드 정리
159
          item = &(srvdata->err_log.items.meatprove_temp4_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
160
161
162
          strMsg  = tr("미트프로브4 온도 센서에 이상이 발생하였습니다.");
          strTitle  = tr("미트프로브4 온도 이상 발생");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_9],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
163
164
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_10)){
14a73498f   김태훈   소스 코드 정리
165
          item = &(srvdata->err_log.items.pcb_temp_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
166
167
168
          strMsg  = tr("PCB 온도 센서에 이상이 발생하였습니다.");
          strTitle  = tr("PCB 온도 이상 발생");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_10],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
169
170
      }
  }
42410a75c   김태훈   오타 수정
171
  void OvenStatistics::processCommError(uint16_t errflag, time_t ltime){
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
172
      error_item *item;
f8661a150   고영탁   엔지니어 모드 디버깅
173
      QString strMsg = "",strTitle="";
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
174
175
176
177
178
179
180
      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   김태훈   소스 코드 정리
181
          item = &(srvdata->err_log.items.upper_pan_fail);
d66410abd   고영탁   에러 팝업 형태 변경
182
          strMsg  = tr("상부 송풍기 통신 이상 발생");
f8661a150   고영탁   엔지니어 모드 디버깅
183
184
          strTitle  = tr("상부 송풍기 이상 발생");
          processErrorItems(item,comm_err_type_def[state][COMM_ERR_BUNNER1],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
185
186
      }
      if(errflag & MAKE_MASK(COMM_ERR_BUNNER2)){
14a73498f   김태훈   소스 코드 정리
187
          item = &(srvdata->err_log.items.lower_pan_fail);
d66410abd   고영탁   에러 팝업 형태 변경
188
          strMsg  = tr("하부 송풍기 통신 이상 발생");
f8661a150   고영탁   엔지니어 모드 디버깅
189
190
          strTitle  = tr("하부 송풍기 이상 발생");
          processErrorItems(item,comm_err_type_def[state][COMM_ERR_BUNNER2],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
191
192
      }
      if(errflag & MAKE_MASK(COMM_ERR_BUNNER3)){
14a73498f   김태훈   소스 코드 정리
193
          item = &(srvdata->err_log.items.steam_pan_fail);
d66410abd   고영탁   에러 팝업 형태 변경
194
          strMsg  = tr("스팀 송풍기 통신 이상 발생");
f8661a150   고영탁   엔지니어 모드 디버깅
195
196
          strTitle  = tr("스팀 송풍기 이상 발생");
          processErrorItems(item,comm_err_type_def[state][COMM_ERR_BUNNER3],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
197
      }
f8661a150   고영탁   엔지니어 모드 디버깅
198
      if(errflag & MAKE_MASK(COMM_ERR_LOWERFAN)){
14a73498f   김태훈   소스 코드 정리
199
          item = &(srvdata->err_log.items.lower_motor_fail);
d66410abd   고영탁   에러 팝업 형태 변경
200
201
          strMsg  = tr("하부 FAN 컨트롤러 통신 이상 발생");
          strTitle  = tr("하부 FAN 컨트롤러 이상 발생");
f8661a150   고영탁   엔지니어 모드 디버깅
202
          processErrorItems(item,comm_err_type_def[state][COMM_ERR_BUNNER2],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
203
204
      }
      if(errflag & MAKE_MASK(COMM_ERR_UPPERFAN)){
14a73498f   김태훈   소스 코드 정리
205
          item = &(srvdata->err_log.items.upper_motor_fail);
d66410abd   고영탁   에러 팝업 형태 변경
206
207
          strMsg  = tr("상부 FAN 컨트롤러 통신 이상 발생");
          strTitle  = tr("상부 FAN 컨트롤러 이상 발생");
f8661a150   고영탁   엔지니어 모드 디버깅
208
          processErrorItems(item,comm_err_type_def[state][COMM_ERR_BUNNER2],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
209
      }
652e9cd54   고영탁   Merge
210
  }
7ae804762   고영탁   에러 상황 추가
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
  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 이상 발생하였습니다.");
3fd8255a1   고영탁   팝업 관련 동작 정의 수정
235
          strTitle  = tr("버너컨트롤러 3 이상 발생");
7ae804762   고영탁   에러 상황 추가
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
          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   김태훈   오타 수정
251
  void OvenStatistics::processSystemError(uint16_t errflag,time_t ltime){
652e9cd54   고영탁   Merge
252
     error_item *item;
f8661a150   고영탁   엔지니어 모드 디버깅
253
     QString strMsg = "",strTitle = "";
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
254
255
256
257
258
259
260
     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
261
          //버너 컨트롤러 1 착화 이상
14a73498f   김태훈   소스 코드 정리
262
          item = &(srvdata->err_log.items.upper_fire_fail);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
263
          strMsg  = tr("상부 버너 착하가 되지 않습니다.");
f8661a150   고영탁   엔지니어 모드 디버깅
264
265
          strTitle = tr("상부 버너 착하 이상 발생");
          processErrorItems(item, sys_err_type_def[state][SYS_ERR_FIRE_TRIGGER1],strMsg,strTitle,ltime);
652e9cd54   고영탁   Merge
266
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
267
      if(errflag & MAKE_MASK(SYS_ERR_FIRE_TRIGGER2)){
652e9cd54   고영탁   Merge
268
          //버너 컨트롤러 2 착화 이상
14a73498f   김태훈   소스 코드 정리
269
          item = &(srvdata->err_log.items.lower_fire_fail);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
270
          strMsg  = tr("하부 버너 착하가 되지 않습니다.");
f8661a150   고영탁   엔지니어 모드 디버깅
271
272
          strTitle  = tr("하부 버너 착하 이상 발생");
          processErrorItems(item, sys_err_type_def[state][SYS_ERR_FIRE_TRIGGER2],strMsg,strTitle,ltime);
652e9cd54   고영탁   Merge
273
      }
f8661a150   고영탁   엔지니어 모드 디버깅
274
      if(errflag & MAKE_MASK(SYS_ERR_FIRE_TRIGGER3)){
14a73498f   김태훈   소스 코드 정리
275
          item = &(srvdata->err_log.items.steam_fire_fail);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
276
          strMsg  = tr("스팀 버너 착하가 되지 않습니다.");
cefd483e4   고영탁   에러 수정
277
          strTitle  = tr("스팀 버너 착하 이상 발생");
f8661a150   고영탁   엔지니어 모드 디버깅
278
           processErrorItems(item, sys_err_type_def[state][SYS_ERR_FIRE_TRIGGER3],strMsg,strTitle,ltime);
652e9cd54   고영탁   Merge
279
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
280
      if(errflag & MAKE_MASK(SYS_ERR_OVNE_TEMP_ALARM)){
14a73498f   김태훈   소스 코드 정리
281
          item = &(srvdata->err_log.items.inner_temp_high_alarm);
f8661a150   고영탁   엔지니어 모드 디버깅
282
283
284
          strMsg  = tr("내부 온도가 과열되었습니다.");
          strTitle  = tr("내부 온도 과열 발생");
           processErrorItems(item, sys_err_type_def[state][SYS_ERR_OVNE_TEMP_ALARM],strMsg,strTitle,ltime);
652e9cd54   고영탁   Merge
285
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
286
287
      if(errflag & MAKE_MASK(SYS_ERR_QUN_TEMP_ALARM)){
          //퀀칭 온도 센서 과열
14a73498f   김태훈   소스 코드 정리
288
          item = &(srvdata->err_log.items.qunching_temp_high_alarm);
f8661a150   고영탁   엔지니어 모드 디버깅
289
290
291
          strTitle  = tr("퀀칭 온도 센서 이상 발생");
          strMsg  = tr("퀀칭 온도 센서가 과열되었습니다");
           processErrorItems(item, sys_err_type_def[state][SYS_ERR_QUN_TEMP_ALARM],strMsg,strTitle,ltime);
652e9cd54   고영탁   Merge
292
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
293
294
      if(errflag & MAKE_MASK(SYS_ERR_CENTER_TEMP_ALARM)){
          //중심 온도 과열
14a73498f   김태훈   소스 코드 정리
295
          item = &(srvdata->err_log.items.meatprove_temp1_high_alarm);
f8661a150   고영탁   엔지니어 모드 디버깅
296
297
298
          strTitle  = tr("미트프로브 온도 센서 이상 발생.");
          strMsg  = tr("미트프로브 온도 센서 과열되었습니다.");
           processErrorItems(item, sys_err_type_def[state][SYS_ERR_CENTER_TEMP_ALARM],strMsg,strTitle,ltime);
652e9cd54   고영탁   Merge
299
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
300
      if(errflag & MAKE_MASK(SYS_ERR_WALL_TEMP_ALARM)){
14a73498f   김태훈   소스 코드 정리
301
          item = &(srvdata->err_log.items.wall_temp1_high_alarm);
f8661a150   고영탁   엔지니어 모드 디버깅
302
303
304
305
306
          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   김태훈   소스 코드 정리
307
         item = &(srvdata->err_log.items.steam_gen_temp_high_alram);
d66410abd   고영탁   에러 팝업 형태 변경
308
309
         strTitle  = tr("스팀제네레이터 온도 이상 발생.");
         strMsg  = tr("스팀제네레이터 온도 센서가 과열 되었습니다.");
f8661a150   고영탁   엔지니어 모드 디버깅
310
311
          processErrorItems(item, sys_err_type_def[state][SYS_ERR_STAM_TEMP_ALARM],strMsg,strTitle,ltime);
     }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
312
313
      if(errflag & MAKE_MASK(SYS_ERR_WATER_SPLY_FAIL)){
          //급수 이상 -> 유량 센서 이상
14a73498f   김태훈   소스 코드 정리
314
          item = &(srvdata->err_log.items.water_level_sensor_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
315
          strTitle  = tr("급수 이상 발생");
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
316
          strMsg  = tr("급수가 되지 않습니다.");
f8661a150   고영탁   엔지니어 모드 디버깅
317
           processErrorItems(item, sys_err_type_def[state][SYS_ERR_WATER_SPLY_FAIL],strMsg,strTitle,ltime);
652e9cd54   고영탁   Merge
318
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
319
320
      if(errflag & MAKE_MASK(SYS_ERR_WATER_LEVEL_FAIL)){
          //급수 이상 -> 수위 센서 이상
14a73498f   김태훈   소스 코드 정리
321
          item = &(srvdata->err_log.items.water_level_sensor_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
322
          strTitle = tr("급수 이상 발생");
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
323
          strMsg  = tr("급수가 되지 않습니다.");
f8661a150   고영탁   엔지니어 모드 디버깅
324
           processErrorItems(item, sys_err_type_def[state][SYS_ERR_WATER_LEVEL_FAIL],strMsg,strTitle,ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
325
326
      }
  }
42410a75c   김태훈   오타 수정
327
  bool OvenStatistics::getNeedErrorClear(){
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
328
329
      return bNeedErrorClear;
  }
42410a75c   김태훈   오타 수정
330
  void OvenStatistics::clearNeedErrorClear(){
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
331
332
333
      //에러클리어 송신 후 flag clear
      bNeedErrorClear = false;
  }
42410a75c   김태훈   오타 수정
334
  void OvenStatistics::oneSecTimerFired(void){
6a965b9f1   고영탁   엔지니어 모드 2차 구현
335
336
337
338
339
340
341
      static int nOneSecCnt=1;
      time_t ltime;
  
      ltime = time(NULL);
  
      nOneSecCnt++;
      if( (nOneSecCnt % 10) ==0 ) {
14a73498f   김태훈   소스 코드 정리
342
          srvdata->saveServiceData();
6a965b9f1   고영탁   엔지니어 모드 2차 구현
343
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
344
345
346
347
348
349
350
      if(bDataRefreshed) bDataRefreshed= false;
      else{
          udp->fillControl(control);
          udp->fillData(state);
      }
      //가열부 시간 측정
      if( (state.onoff_state1 & LOAD_STATE1_STEAM_BUNNER) !=0){
14a73498f   김태훈   소스 코드 정리
351
          srvdata->use_log.items.steam_heat +=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
352
353
      }
      if( (state.onoff_state1 & (LOAD_STATE1_UPPER_BUNNER | LOAD_STATE1_LOWER_FAN))!=0){
14a73498f   김태훈   소스 코드 정리
354
          srvdata->use_log.items.dry_heat+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
355
          if(state.onoff_state1 & (LOAD_STATE1_UPPER_BUNNER)){
14a73498f   김태훈   소스 코드 정리
356
              srvdata->use_log.items.upper_heat +=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
357
358
          }
          if((state.onoff_state2 & LOAD_STATE1_LOWER_BUNNER)!=0){
14a73498f   김태훈   소스 코드 정리
359
              srvdata->use_log.items.lower_heat +=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
360
361
362
363
364
365
          }
      }
      //모드 시간 계산
      if(state.cooking_mode !=0){
          if(state.cooking_humidity==0){
              //건열 모드
14a73498f   김태훈   소스 코드 정리
366
              srvdata->use_log.items.cook_dry_mode+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
367
368
369
          }
          else if(state.cooking_humidity ==100){
              //스팀모드
14a73498f   김태훈   소스 코드 정리
370
              srvdata->use_log.items.cook_steam_mode+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
371
          }
14a73498f   김태훈   소스 코드 정리
372
          else srvdata->use_log.items.cook_combi_mode+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
373
      }
f8661a150   고영탁   엔지니어 모드 디버깅
374
      if(state.cleaning_mode !=0 && state.cleaning_sate !=0){
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
375
376
          switch (state.cleaning_mode) {
          case (uint16_t)wash_mode_nocleanser:
14a73498f   김태훈   소스 코드 정리
377
              srvdata->use_log.items.wash_mode_nocleanser+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
378
379
              break;
          case (uint16_t)wash_mode_simple:
14a73498f   김태훈   소스 코드 정리
380
              srvdata->use_log.items.wash_mode_simple+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
381
382
              break;
          case (uint16_t)wash_mode_standard:
14a73498f   김태훈   소스 코드 정리
383
              srvdata->use_log.items.wash_mode_standard+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
384
385
              break;
          case (uint16_t)wash_mode_strong:
14a73498f   김태훈   소스 코드 정리
386
              srvdata->use_log.items.wash_mode_strong+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
387
388
              break;
          case (uint16_t)wash_mode_highspeed:
14a73498f   김태훈   소스 코드 정리
389
              srvdata->use_log.items.wash_mode_speed+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
390
391
392
393
394
395
              break;
          default:
              break;
          }
      }
      if(control.cooldown ==1){
14a73498f   김태훈   소스 코드 정리
396
          srvdata->use_log.items.cooldown_mode+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
397
398
      }
      //부품
6a965b9f1   고영탁   엔지니어 모드 2차 구현
399
      if(state.door_state !=0){
14a73498f   김태훈   소스 코드 정리
400
          srvdata->use_log.items.door_open+=1;
3f5f5d4ce   고영탁   디버깅 요청 사항 적용
401
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
402
      }
3f5f5d4ce   고영탁   디버깅 요청 사항 적용
403
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
404
405
      if(state.onoff_state2 !=0){
             if( (state.onoff_state2 & LOAD_STATE2_DV)!=0){
14a73498f   김태훈   소스 코드 정리
406
                 srvdata->use_log.items.dv_open+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
407
408
             }
             if((state.onoff_state2 & LOAD_STATE2_SSV)!=0){
14a73498f   김태훈   소스 코드 정리
409
                 srvdata->use_log.items.ssv_open+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
410
411
             }
             if((state.onoff_state2 & LOAD_STATE2_QNV)!=0){
14a73498f   김태훈   소스 코드 정리
412
                 srvdata->use_log.items.qnv_open+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
413
414
             }
             if((state.onoff_state2 & LOAD_STATE2_SNV)!=0){
14a73498f   김태훈   소스 코드 정리
415
                 srvdata->use_log.items.snv_open+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
416
417
             }
             if((state.onoff_state2 & LOAD_STATE2_SSP)!=0){
14a73498f   김태훈   소스 코드 정리
418
                 srvdata->use_log.items.ssp_open+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
419
420
             }
             if((state.onoff_state2 & LOAD_STATE2_HDM)!=0){
14a73498f   김태훈   소스 코드 정리
421
                 srvdata->use_log.items.hdm_open+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
422
423
             }
             if((state.onoff_state2 & LOAD_STATE2_DP)!=0){
14a73498f   김태훈   소스 코드 정리
424
                 srvdata->use_log.items.dp_open+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
425
426
             }
             if((state.onoff_state2 & LOAD_STATE2_UNP) !=0){
14a73498f   김태훈   소스 코드 정리
427
                 srvdata->use_log.items.unp_open+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
428
429
             }
      }
6a965b9f1   고영탁   엔지니어 모드 2차 구현
430
431
432
433
434
435
436
437
  
      //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   고영탁   엔지니어 모드 디버깅
438
      realdata.b.wsv_open = (state.onoff_state2&LOAD_STATE2_WSV)==0?0:1;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
439
      realdata.b.ssv_open = (state.onoff_state2&LOAD_STATE2_SSV)==0?0:1;
3f5f5d4ce   고영탁   디버깅 요청 사항 적용
440
441
442
443
444
445
446
447
448
      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차 구현
449
14a73498f   김태훈   소스 코드 정리
450
451
452
      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차 구현
453
454
      }
      curSensorValue[0].itemp = state.sensor1;
14a73498f   김태훈   소스 코드 정리
455
456
457
      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차 구현
458
459
      }
      curSensorValue[1].itemp = state.sensor2;
14a73498f   김태훈   소스 코드 정리
460
461
462
      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차 구현
463
464
      }
      curSensorValue[5].itemp = state.sensor6;
14a73498f   김태훈   소스 코드 정리
465
466
467
      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차 구현
468
469
      }
       curSensorValue[3].itemp = state.sensor4;
14a73498f   김태훈   소스 코드 정리
470
471
472
      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차 구현
473
474
      }
      curSensorValue[4].itemp = state.sensor5;
14a73498f   김태훈   소스 코드 정리
475
476
477
      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차 구현
478
479
      }
      curSensorValue[6].itemp = state.sensor7;
14a73498f   김태훈   소스 코드 정리
480
481
482
      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차 구현
483
484
      }
      curSensorValue[7].itemp = state.sensor8;
14a73498f   김태훈   소스 코드 정리
485
486
487
      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차 구현
488
489
      }
      curSensorValue[8].itemp = state.sensor9;
14a73498f   김태훈   소스 코드 정리
490
491
492
      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차 구현
493
494
      }
      curSensorValue[10].utemp = state.sensor11;
14a73498f   김태훈   소스 코드 정리
495
496
497
      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차 구현
498
499
      }
      curSensorValue[11].utemp = state.sensor12;
14a73498f   김태훈   소스 코드 정리
500
501
502
      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차 구현
503
504
      }
      curSensorValue[12].itemp = state.sensor13;
14a73498f   김태훈   소스 코드 정리
505
506
507
      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차 구현
508
509
      }
      curSensorValue[13].itemp = state.sensor14;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
510
  }
42410a75c   김태훈   오타 수정
511
  void OvenStatistics::processErrorItems(error_item *item, error_exe_type errtype, const QString &MsgDesc, const QString &MsgTitle, time_t ltime){
cefd483e4   고영탁   에러 수정
512
513
     uint32_t erridx = (uint32_t) (item - &(srvdata->err_log.values[0]));
      qDebug() << (uint32_t) (item - &(srvdata->err_log.values[0]))  <<   "ERROR Fired!";
6a965b9f1   고영탁   엔지니어 모드 2차 구현
514
     if(m_pLastErrItem == item ){
14a73498f   김태훈   소스 코드 정리
515
516
517
          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차 구현
518
519
     }
     m_pLastErrItem = item;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
520
      if(errtype >= error_type_onlychk){
652e9cd54   고영탁   Merge
521
522
523
524
          item->fired_cnt+=1;
          if(item->first_fired == 0) item->first_fired = ltime;
          item->last_fried = ltime;
      }
cefd483e4   고영탁   에러 수정
525
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
526
527
528
529
530
      switch(errtype){
          case error_type_onlypop:
          case error_type_popclr:
          case error_type_popnonclr:
              {
d66410abd   고영탁   에러 팝업 형태 변경
531
532
                  ErrorPopupDlg *dlg = new ErrorPopupDlg(QApplication::activeWindow(),MsgDesc,MsgTitle);
                  dlg->exec();
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
533
534
                  break;
              }
f8661a150   고영탁   엔지니어 모드 디버깅
535
      case error_type_engclr:
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
536
537
538
          case error_type_engnonclr:
          case error_type_onlyeng:
              {
d66410abd   고영탁   에러 팝업 형태 변경
539
540
541
542
543
544
                  //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   고영탁   에러 처리 루틴 및 에러 처리 ...
545
546
547
548
549
                  break;
              }
          default:
              break;
      }
cefd483e4   고영탁   에러 수정
550
3fd8255a1   고영탁   팝업 관련 동작 정의 수정
551
552
553
554
555
556
557
558
559
560
561
      if(errtype > error_type_clrsplit){
          //에러 클리어 명령 송신
         if(errtype == error_type_engclr){
              //확인 후 송신
              bNeedErrorClear = true;
          }
          else{
              //에러클리어 메시지 즉시 송신
              udp->set(TG_ERROR_CLEAR,0xCECE);
          }
      }
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;
      }
  }