Blame view

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