Blame view

app/gui/oven_control/ovenstatics.cpp 37.2 KB
652e9cd54   고영탁   Merge
1
2
  #include "ovenstatics.h"
  #include <QtDebug>
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
3
4
  #include <QApplication>
  #include <QTimer>
0db96666e   고영탁   데모모드 추가
5
  #include "config.h"
652e9cd54   고영탁   Merge
6
7
  #include "mainwindow.h"
  #include "ovencontroller.h"
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
8
9
  #include "engineermenuwindow.h"
  #include "errorpopupdlg.h"
6a965b9f1   고영탁   엔지니어 모드 2차 구현
10
  #include "historylistwindow.h"
d66410abd   고영탁   에러 팝업 형태 변경
11
  #include "servicepassinputdlg.h"
0f8248de6   고영탁   HACCP 에러 발생 기능 보완
12
  #include "haccp.h"
652e9cd54   고영탁   Merge
13
42410a75c   김태훈   오타 수정
14
  OvenStatistics* OvenStatistics::p_singletonInstance=NULL;
652e9cd54   고영탁   Merge
15
538041ab9   김태훈   소스 코드 구조 개선
16
  OvenStatistics* OvenStatistics::getInstance(QObject *parent){
42410a75c   김태훈   오타 수정
17
      if(!p_singletonInstance){
42410a75c   김태훈   오타 수정
18
          p_singletonInstance = new OvenStatistics(parent);
538041ab9   김태훈   소스 코드 구조 개선
19
20
          p_singletonInstance->udp = UdpHandler::getInstance();
          p_singletonInstance->oven = Oven::getInstance();
20fcaaf68   고영탁   에러 마스크 별도 적용
21
          p_singletonInstance->cfg = Config::getInstance();
652e9cd54   고영탁   Merge
22
          //for singletone event debug
6a965b9f1   고영탁   엔지니어 모드 2차 구현
23
24
  //        MainWindow* mw = (MainWindow*)parent;
  //        connect(mw->pcombiButton, SIGNAL(clicked()),p_singtonInstance, SLOT(onDataChanged()));
42410a75c   김태훈   오타 수정
25
          connect(p_singletonInstance->udp , SIGNAL(changed()), p_singletonInstance, SLOT(onDataChanged()));
703618ec3   고영탁   세척 상황에서 에러 발생시 이벤...
26
          connect(p_singletonInstance->udp, SIGNAL(timeout()), p_singletonInstance, SLOT(onCommTimeoutFired()));
42410a75c   김태훈   오타 수정
27
28
          QTimer *timer = new QTimer(p_singletonInstance);
          connect(timer, SIGNAL(timeout()),p_singletonInstance,SLOT(oneSecTimerFired()));
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
29
          timer->start(1000); //1000ms fired
652e9cd54   고영탁   Merge
30
      }
42410a75c   김태훈   오타 수정
31
      return p_singletonInstance;
652e9cd54   고영탁   Merge
32
  }
42410a75c   김태훈   오타 수정
33
34
35
  void OvenStatistics::destroy(){
      if(!p_singletonInstance)
          delete p_singletonInstance;
652e9cd54   고영탁   Merge
36
  }
42410a75c   김태훈   오타 수정
37
  OvenStatistics::OvenStatistics(QObject* parent) :QObject(parent)
652e9cd54   고영탁   Merge
38
  {
6a965b9f1   고영탁   엔지니어 모드 2차 구현
39
      int i = 0;
652e9cd54   고영탁   Merge
40
41
      curdoorstate = false;
      curSysErrorState = 0;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
42
43
      curCommErrorState = 0;
      curSensorErrorState = 0;
a7e8cc0aa   고영탁   버그 및 동작 개선
44
      curControlErrorState = 0;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
45
      bDataRefreshed = false;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
46
      realdata.d32 = 0;
cefd483e4   고영탁   에러 수정
47
48
      m_bPopupShow = false;
      m_nLastPopupidx = MAX_ERROR_TYPE_CNT;
003971acb   고영탁   에러 발생시 패스워드 인풋 윈도...
49
      m_wndSrvpassdlg = NULL;
596b06d69   고영탁   V1.3.01 고객사 요청 사항 반영
50
      state.firmware_version = 150;
27e821e2e   고영탁   version 1.6.8 Rel...
51
      m_bPrevteamTempErr = false;
cefd483e4   고영탁   에러 수정
52
6a965b9f1   고영탁   엔지니어 모드 2차 구현
53
54
55
56
57
      for(i=0;i<MAX_LOG_SENSOR;i++){
          curSensorValue[i].utemp = 0;
      }
  
      curSensorValue[12].itemp = 100;
14a73498f   김태훈   소스 코드 정리
58
      srvdata = new ServiceData();
27e821e2e   고영탁   version 1.6.8 Rel...
59
60
61
62
      m_tmrSvoff = new QTimer(this);
      m_tmrSvoff->setInterval(30000);
      m_tmrSvoff->setSingleShot(true);
      connect(m_tmrSvoff, SIGNAL(timeout()), this, SLOT(onSvOffTimeoutFired()));
652e9cd54   고영탁   Merge
63
  }
42410a75c   김태훈   오타 수정
64
  OvenStatistics::~OvenStatistics(){
14a73498f   김태훈   소스 코드 정리
65
      delete srvdata;
652e9cd54   고영탁   Merge
66
  }
42410a75c   김태훈   오타 수정
67
  void OvenStatistics::onDataChanged()
652e9cd54   고영탁   Merge
68
69
70
  {
      error_item *item;
      time_t ltime=0;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
71
      uint16_t errstatetemp;
b915c1b54   고영탁   팝업 처리 수정
72
      uint8_t cookingstate=0;
27e821e2e   고영탁   version 1.6.8 Rel...
73
      bool curSteamTempErr = false;
652e9cd54   고영탁   Merge
74
75
      udp->fillControl(control);
      udp->fillData(state);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
76
      bDataRefreshed = true;
652e9cd54   고영탁   Merge
77
      time(&ltime);
94c1b260b   고영탁   고객사 요청 사항 반영 V1.3.00
78
79
80
81
82
83
84
      if(state.burner1_current_rpm != m_nUpperRpm || state.burner2_current_rpm != m_nLowerRpm  || state.burner3_current_rpm != m_nSteamRpm){
          m_nUpperRpm = state.burner1_current_rpm;
          m_nLowerRpm = state.burner2_current_rpm;
          m_nSteamRpm = state.burner3_current_rpm;
  
          qDebug() << " Upper RPM : " << m_nUpperRpm << ", Lower Rpm : " << m_nLowerRpm << ", Steam Rpm : " << m_nSteamRpm;
      }
27e821e2e   고영탁   version 1.6.8 Rel...
85
86
87
88
89
90
91
92
      curSteamTempErr = (state.system_error & MAKE_MASK(SYS_ERR_STAM_TEMP_ALARM)) != 0;
      if(curSteamTempErr != m_bPrevteamTempErr){
          m_bPrevteamTempErr = curSteamTempErr;
          if(m_bPrevteamTempErr){
              udp->set_steam_high_sv_onoff(true);
              if(!m_tmrSvoff->isActive()) m_tmrSvoff->start();
          }
      }
b915c1b54   고영탁   팝업 처리 수정
93
      if((control.cooking || oven->cooking() || oven->preheating() || oven->cooldown())) cookingstate = 1;
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
94
      else if(state.cleaning_sate != 0 ) cookingstate = 2;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
95
652e9cd54   고영탁   Merge
96
97
98
      if(oven->cooking() && control.system){
          if(state.door_state ==1 && curdoorstate==0){
              //door error
14a73498f   김태훈   소스 코드 정리
99
              item = &(srvdata->err_log.items.door);
652e9cd54   고영탁   Merge
100
101
102
103
104
              item->fired_cnt+=1;
              if(item->first_fired==0)item->first_fired = ltime;
              item->last_fried = ltime;
          }
          curdoorstate = state.door_state;
652e9cd54   고영탁   Merge
105
      }
0db96666e   고영탁   데모모드 추가
106
      if(cfg->getConfigValue(Define::config_demo_mode).d32 !=0 ) return;
652e9cd54   고영탁   Merge
107
b915c1b54   고영탁   팝업 처리 수정
108
109
      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   고영탁   에러 처리 루틴 및 에러 처리 ...
110
      if(state.system_error!=0 &&  state.system_error != curSysErrorState){
b915c1b54   고영탁   팝업 처리 수정
111
          processSystemError( (state.system_error & sys_err_mask[cookingstate][cfg->getConfigValue(Define::config_model).d32]) ,ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
112
113
      }
      curSysErrorState = state.system_error;
2189b57d9   고영탁   GUI V0.3.15
114
115
116
117
118
  //    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   고영탁   에러 처리 루틴 및 에러 처리 ...
119
fb200c9f1   고영탁   머지 후 컴파일 오류 수정
120
      errstatetemp = state.sensor_error;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
121
      if(errstatetemp!=0 && errstatetemp != curSensorErrorState ){
b915c1b54   고영탁   팝업 처리 수정
122
          processSensorError( (errstatetemp& sensor_err_mask[cookingstate][cfg->getConfigValue(Define::config_model).d32]),ltime );
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
123
124
      }
      curSensorErrorState = errstatetemp;
2189b57d9   고영탁   GUI V0.3.15
125
126
127
128
129
  //    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   고영탁   에러 처리 루틴 및 에러 처리 ...
130
131
  
  }
42410a75c   김태훈   오타 수정
132
  void OvenStatistics::processSensorError(uint16_t errflag, time_t ltime){
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
133
      error_item *item;
f8661a150   고영탁   엔지니어 모드 디버깅
134
      QString strMsg = "",strTitle="";
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
135
      uint8_t state;
a7e8cc0aa   고영탁   버그 및 동작 개선
136
137
      bool bCookingState = (control.cooking || oven->cooking() || oven->preheating() || oven->cooldown());
      if( control.system==0 && !bCookingState  ) state = SYS_OFF_COOK_OFF;
5105f2572   고영탁   버전 1.6.06 세척 오류 수...
138
      else if(control.system !=0 && this->state.cleaning_sate  !=0 ) state = SYS_ON_WASH;
a7e8cc0aa   고영탁   버그 및 동작 개선
139
      else if(control.system != 0 && !bCookingState) state = SYS_ON_COOK_OFF;
27e821e2e   고영탁   version 1.6.8 Rel...
140
      else if(control.system !=0 && bCookingState) state = SYS_ON_COOK_ON;    
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
141
142
143
      else state = SYS_ON_COOK_OFF;
  
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_1)){
14a73498f   김태훈   소스 코드 정리
144
          item = &(srvdata->err_log.items.inner_temp_fail);
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
145
146
147
148
149
          strTitle = tr("내부 온도 센서 이상");
          strMsg  = tr("조리실 내부 온도센서 오류가 발생하였습니다.
  제품의 전원을 OFF한 후 다시 ON해 주십시오.
  이 후에도 문제가 해결되지 않을 경우, 서비스센터로 연락하여 주십시오.");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_1],strMsg,strTitle, ltime, sensor_err_sound_def[SENSOR_ERR_SENSOR_1]);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
150
151
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_2)){
14a73498f   김태훈   소스 코드 정리
152
          item = &(srvdata->err_log.items.qunching_temp_fail);
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
153
154
155
156
157
          strTitle  = tr("배수 탱크 온도 센서 이상");
          strMsg  = tr("배수 탱크 온도센서 오류가 발생하였습니다.
  제품의 전원을 OFF한 후 다시 ON해 주십시오.
  이 후에도 문제가 해결되지 않을 경우, 서비스센터로 연락하여 주십시오.");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_2],strMsg,strTitle, ltime,sensor_err_sound_def[SENSOR_ERR_SENSOR_2]);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
158
159
160
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_3)){
          //Reserved allerrornoe 설정
14a73498f   김태훈   소스 코드 정리
161
          item = &(srvdata->err_log.items.qunching_temp_fail);
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
162
163
164
165
166
          strTitle  = tr("퀀칭 온도 센서 발생");
          strMsg  = tr("퀀칭 온도센서 오류가 발생하였습니다.
  제품의 전원을 OFF한 후 다시 ON해 주십시오.
  이 후에도 문제가 해결되지 않을 경우, 서비스센터로 연락하여 주십시오.");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_3],strMsg,strTitle, ltime,sensor_err_sound_def[SENSOR_ERR_SENSOR_3]);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
167
168
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_4)){
14a73498f   김태훈   소스 코드 정리
169
          item = &(srvdata->err_log.items.wall_temp1_fail);
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
170
171
172
173
174
          strTitle  = tr("벽면 온도 센서 이상");
          strMsg  = tr("조리실 벽면 센서 오류가 발생하였습니다.
  제품의 전원을 OFF한 후 다시 ON해 주십시오.
  이 후에도 문제가 해결되지 않을 경우, 서비스센터로 연락하여 주십시오.");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_4],strMsg,strTitle, ltime,sensor_err_sound_def[SENSOR_ERR_SENSOR_4]);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
175
176
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_5)){
14a73498f   김태훈   소스 코드 정리
177
          item = &(srvdata->err_log.items.steam_gen_temp_fail);
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
178
179
180
181
182
          strTitle  = tr("스팀발생기 온도 센서 이상");
          strMsg  = tr("스팀발생기 내부 센서 오류가 발생하였습니다.
  제품의 전원을 OFF한 후 다시 ON해 주십시오.
  이 후에도 문제가 해결되지 않을 경우, 서비스센터로 연락하여 주십시오.");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_5],strMsg,strTitle, ltime,sensor_err_sound_def[SENSOR_ERR_SENSOR_5]);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
183
184
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_6)){
14a73498f   김태훈   소스 코드 정리
185
          item = &(srvdata->err_log.items.meatprove_temp1_fail);
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
186
187
188
189
190
          strTitle  = tr("중심온도 센서 이상");
          strMsg  = tr("중심온도계 센서 오류가 발생하였습니다.
  제품의 전원을 OFF한 후 다시 ON해 주십시오.
  이 후에도 문제가 해결되지 않을 경우, 서비스센터로 연락하여 주십시오.");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_6],strMsg,strTitle, ltime,sensor_err_sound_def[SENSOR_ERR_SENSOR_6]);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
191
192
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_7)){
97cb5d841   김태훈   들여쓰기 정리
193
          //Reseved
14a73498f   김태훈   소스 코드 정리
194
          item = &(srvdata->err_log.items.meatprove_temp2_fail);
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
195
196
197
198
199
          strTitle  = tr("중심온도 센서 이상");
          strMsg  = tr("중심온도계 센서 오류가 발생하였습니다.
  제품의 전원을 OFF한 후 다시 ON해 주십시오.
  이 후에도 문제가 해결되지 않을 경우, 서비스센터로 연락하여 주십시오.");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_7],strMsg , strTitle, ltime,sensor_err_sound_def[SENSOR_ERR_SENSOR_7]);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
200
201
202
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_8)){
          //Reserved
14a73498f   김태훈   소스 코드 정리
203
          item = &(srvdata->err_log.items.meatprove_temp3_fail);
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
204
205
206
207
208
          strTitle  = tr("중심온도 센서 이상");
          strMsg  = tr("중심온도계 센서 오류가 발생하였습니다.
  제품의 전원을 OFF한 후 다시 ON해 주십시오.
  이 후에도 문제가 해결되지 않을 경우, 서비스센터로 연락하여 주십시오.");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_8],strMsg,strTitle, ltime,sensor_err_sound_def[SENSOR_ERR_SENSOR_8]);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
209
210
211
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_9)){
          //Reserved
14a73498f   김태훈   소스 코드 정리
212
          item = &(srvdata->err_log.items.meatprove_temp4_fail);
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
213
214
215
216
217
          strTitle  = tr("중심온도 센서 이상");
          strMsg  = tr("중심온도계 센서 오류가 발생하였습니다.
  제품의 전원을 OFF한 후 다시 ON해 주십시오.
  이 후에도 문제가 해결되지 않을 경우, 서비스센터로 연락하여 주십시오.");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_9],strMsg,strTitle, ltime,sensor_err_sound_def[SENSOR_ERR_SENSOR_9]);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
218
219
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_10)){
14a73498f   김태훈   소스 코드 정리
220
          item = &(srvdata->err_log.items.pcb_temp_fail);
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
221
222
223
224
          strTitle  = tr("PCB온도 과열 이상");
          strMsg  = tr("PCB 과열  안전장치가 작동하였습니다.
  제품의 전원을 OFF한 뒤, 즉시 서비스센터에 연락하여 주십시오.");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_10],strMsg,strTitle, ltime,sensor_err_sound_def[SENSOR_ERR_SENSOR_10]);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
225
226
      }
  }
42410a75c   김태훈   오타 수정
227
  void OvenStatistics::processCommError(uint16_t errflag, time_t ltime){
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
228
      error_item *item;
f8661a150   고영탁   엔지니어 모드 디버깅
229
      QString strMsg = "",strTitle="";
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
230
      uint8_t state;
a7e8cc0aa   고영탁   버그 및 동작 개선
231
232
      bool bCookingState = (control.cooking || oven->cooking() || oven->preheating() || oven->cooldown());
      if( control.system==0 && !bCookingState  ) state = SYS_OFF_COOK_OFF;
5105f2572   고영탁   버전 1.6.06 세척 오류 수...
233
      else if(control.system !=0 && this->state.cleaning_sate  !=0 ) state = SYS_ON_WASH;
a7e8cc0aa   고영탁   버그 및 동작 개선
234
      else if(control.system != 0 && !bCookingState) state = SYS_ON_COOK_OFF;
27e821e2e   고영탁   version 1.6.8 Rel...
235
      else if(control.system !=0 && bCookingState) state = SYS_ON_COOK_ON;    
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
236
237
238
      else state = SYS_ON_COOK_OFF;
  
      if(errflag & MAKE_MASK(COMM_ERR_BUNNER1)){
14a73498f   김태훈   소스 코드 정리
239
          item = &(srvdata->err_log.items.upper_pan_fail);
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
240
241
242
243
244
          strTitle  = tr("상부 버너 컨트롤러 통신 이상");
          strMsg  = tr("상부 버너 컨트롤러 PCB 통신 불량이 발생하였습니다.
  제품의 전원을 OFF한 후 다시 ON해 주십시오.
  이 후에도 문제가 해결되지 않을 경우, 서비스센터로 연락하여 주십시오.");
          processErrorItems(item,comm_err_type_def[state][COMM_ERR_BUNNER1],strMsg,strTitle, ltime, comm_err_sound_def[COMM_ERR_BUNNER1]);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
245
246
      }
      if(errflag & MAKE_MASK(COMM_ERR_BUNNER2)){
14a73498f   김태훈   소스 코드 정리
247
          item = &(srvdata->err_log.items.lower_pan_fail);
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
248
249
250
251
252
          strTitle  = tr("하부 버너 컨트롤러 통신 이상");
          strMsg  = tr("하 버너 컨트롤러 PCB 통신 불량이 발생하였습니다.
  제품의 전원을 OFF한 후 다시 ON해 주십시오.
  이 후에도 문제가 해결되지 않을 경우, 서비스센터로 연락하여 주십시오.");
          processErrorItems(item,comm_err_type_def[state][COMM_ERR_BUNNER2],strMsg,strTitle, ltime, comm_err_sound_def[COMM_ERR_BUNNER2]);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
253
254
      }
      if(errflag & MAKE_MASK(COMM_ERR_BUNNER3)){
14a73498f   김태훈   소스 코드 정리
255
          item = &(srvdata->err_log.items.steam_pan_fail);
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
256
257
258
259
260
          strTitle  = tr("스팀 버너 컨트롤러 통신 이상");
          strMsg  = tr("스팀발생기 버너 컨트롤러 PCB 통신 불량이 발생하였습니다.
  제품의 전원을 OFF한 후 다시 ON해 주십시오.
  이 후에도 문제가 해결되지 않을 경우, 서비스센터로 연락하여 주십시오.");
          processErrorItems(item,comm_err_type_def[state][COMM_ERR_BUNNER3],strMsg,strTitle, ltime, comm_err_sound_def[COMM_ERR_BUNNER3]);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
261
      }
f8661a150   고영탁   엔지니어 모드 디버깅
262
      if(errflag & MAKE_MASK(COMM_ERR_LOWERFAN)){
14a73498f   김태훈   소스 코드 정리
263
          item = &(srvdata->err_log.items.lower_motor_fail);
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
264
265
266
267
268
          strTitle  = tr("하부 FAN 모터 컨트롤러 이상");
          strMsg  = tr("하부 Fan 모터 컨트롤러 이상 상황이 발생하였습니다.
  제품의 전원을 OFF한 후 다시 ON해 주십시오.
  이 후에도 문제가 해결되지 않을 경우, 서비스센터로 연락하여 주십시오.");
          processErrorItems(item,comm_err_type_def[state][COMM_ERR_BUNNER2],strMsg,strTitle, ltime, comm_err_sound_def[COMM_ERR_LOWERFAN]);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
269
270
      }
      if(errflag & MAKE_MASK(COMM_ERR_UPPERFAN)){
14a73498f   김태훈   소스 코드 정리
271
          item = &(srvdata->err_log.items.upper_motor_fail);
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
272
273
274
275
276
          strTitle  = tr("상부 FAN 모터 컨트롤러 이상");
          strMsg  = tr("상부 Fan 모터 컨트롤러 이상 상황이 발생하였습니다.
  제품의 전원을 OFF한 후 다시 ON해 주십시오.
  이 후에도 문제가 해결되지 않을 경우, 서비스센터로 연락하여 주십시오.");
          processErrorItems(item,comm_err_type_def[state][COMM_ERR_BUNNER2],strMsg,strTitle, ltime, comm_err_sound_def[COMM_ERR_UPPERFAN]);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
277
      }
652e9cd54   고영탁   Merge
278
  }
7ae804762   고영탁   에러 상황 추가
279
280
281
282
  void OvenStatistics::processStateError(uint16_t errflag, time_t ltime){
      error_item *item;
      QString strMsg = "",strTitle="";
      uint8_t state;
a7e8cc0aa   고영탁   버그 및 동작 개선
283
284
      bool bCookingState = (control.cooking || oven->cooking() || oven->preheating() || oven->cooldown());
      if( control.system==0 && !bCookingState  ) state = SYS_OFF_COOK_OFF;
5105f2572   고영탁   버전 1.6.06 세척 오류 수...
285
      else if(control.system !=0 && this->state.cleaning_sate  !=0 ) state = SYS_ON_WASH;
a7e8cc0aa   고영탁   버그 및 동작 개선
286
287
      else if(control.system != 0 && !bCookingState) state = SYS_ON_COOK_OFF;
      else if(control.system !=0 && bCookingState) state = SYS_ON_COOK_ON;
7ae804762   고영탁   에러 상황 추가
288
289
290
291
292
293
      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 이상 발생");
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
294
          processErrorItems(item,state_err_type_def[state][STATE_ERR_BUNNER1],strMsg,strTitle, ltime, state_err_sound_def[STATE_ERR_BUNNER1]);
7ae804762   고영탁   에러 상황 추가
295
296
297
298
299
      }
      if(errflag & MAKE_MASK(STATE_ERR_BUNNER2)){
          item = &(srvdata->err_log.items.lower_pan_fail);
          strMsg  = tr("버너컨트롤러 2 이상  발생하였습니다.");
          strTitle  = tr("버너컨트롤러 2 이상 발생");
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
300
          processErrorItems(item,state_err_type_def[state][STATE_ERR_BUNNER2],strMsg,strTitle, ltime, state_err_sound_def[STATE_ERR_BUNNER2]);
7ae804762   고영탁   에러 상황 추가
301
302
303
304
      }
      if(errflag & MAKE_MASK(STATE_ERR_BUNNER3)){
          item = &(srvdata->err_log.items.steam_pan_fail);
          strMsg  = tr("버너컨트롤러 3 이상 발생하였습니다.");
3fd8255a1   고영탁   팝업 관련 동작 정의 수정
305
          strTitle  = tr("버너컨트롤러 3 이상 발생");
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
306
          processErrorItems(item,state_err_type_def[state][STATE_ERR_BUNNER3],strMsg,strTitle, ltime, state_err_sound_def[STATE_ERR_BUNNER3]);
7ae804762   고영탁   에러 상황 추가
307
308
309
310
311
      }
      if(errflag & MAKE_MASK(STATE_ERR_LOWERFAN)){
          item = &(srvdata->err_log.items.lower_motor_fail);
          strMsg  = tr("하부 FAN 컨트롤러 이상 발생하였습니다.");
          strTitle  = tr("하부 FAN 컨트롤러 이상 발생");
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
312
          processErrorItems(item,state_err_type_def[state][STATE_ERR_BUNNER2],strMsg,strTitle, ltime, state_err_sound_def[STATE_ERR_LOWERFAN]);
7ae804762   고영탁   에러 상황 추가
313
314
315
316
317
      }
      if(errflag & MAKE_MASK(STATE_ERR_UPPERFAN)){
          item = &(srvdata->err_log.items.upper_motor_fail);
          strMsg  = tr("상부 FAN 컨트롤러 이상 발생하였습니다.");
          strTitle  = tr("상부 FAN 컨트롤러 이상 발생");
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
318
          processErrorItems(item,state_err_type_def[state][STATE_ERR_BUNNER2],strMsg,strTitle, ltime, state_err_sound_def[STATE_ERR_UPPERFAN]);
7ae804762   고영탁   에러 상황 추가
319
320
      }
  }
42410a75c   김태훈   오타 수정
321
  void OvenStatistics::processSystemError(uint16_t errflag,time_t ltime){
97cb5d841   김태훈   들여쓰기 정리
322
323
324
325
326
      error_item *item;
      QString strMsg = "",strTitle = "";
      uint8_t state;
      bool bCookingState = (control.cooking || oven->cooking() || oven->preheating() || oven->cooldown());
      if( control.system==0 && !bCookingState  ) state = SYS_OFF_COOK_OFF;
5105f2572   고영탁   버전 1.6.06 세척 오류 수...
327
      else if(control.system !=0 && this->state.cleaning_sate  !=0 ) state = SYS_ON_WASH;
97cb5d841   김태훈   들여쓰기 정리
328
      else if(control.system != 0 && !bCookingState) state = SYS_ON_COOK_OFF;
27e821e2e   고영탁   version 1.6.8 Rel...
329
      else if(control.system !=0 && bCookingState) state = SYS_ON_COOK_ON;    
97cb5d841   김태훈   들여쓰기 정리
330
      else state = SYS_ON_COOK_OFF;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
331
332
  
      if( errflag & MAKE_MASK(SYS_ERR_FIRE_TRIGGER1)){
652e9cd54   고영탁   Merge
333
          //버너 컨트롤러 1 착화 이상
14a73498f   김태훈   소스 코드 정리
334
          item = &(srvdata->err_log.items.upper_fire_fail);
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
335
336
337
338
339
          strTitle = tr("상부 버너 착화 이상");
          strMsg  = tr("상부 버너 착화 이상 안전장치가 작동하였습니다.
  제품의 전원을 OFF한 후 가스 밸브가 잠겨있는지 확인 해 주십시오.
  가스 밸브가 열려 있는데도 에러 발생 시, 즉시 서비스센터에 연락하여 주십시오.");
          processErrorItems(item, sys_err_type_def[state][SYS_ERR_FIRE_TRIGGER1],strMsg,strTitle,ltime, sys_err_sound_def[SYS_ERR_FIRE_TRIGGER1]);
652e9cd54   고영탁   Merge
340
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
341
      if(errflag & MAKE_MASK(SYS_ERR_FIRE_TRIGGER2)){
652e9cd54   고영탁   Merge
342
          //버너 컨트롤러 2 착화 이상
14a73498f   김태훈   소스 코드 정리
343
          item = &(srvdata->err_log.items.lower_fire_fail);
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
344
345
346
347
348
          strTitle = tr("하부 버너 착화 이상");
          strMsg  = tr("하부 버너 착화 이상 안전장치가 작동하였습니다.
  제품의 전원을 OFF한 후 가스 밸브가 잠겨있는지 확인 해 주십시오.
  가스 밸브가 열려 있는데도 에러 발생 시, 즉시 서비스센터에 연락하여 주십시오.");
          processErrorItems(item, sys_err_type_def[state][SYS_ERR_FIRE_TRIGGER2],strMsg,strTitle,ltime, sys_err_sound_def[SYS_ERR_FIRE_TRIGGER1]);
652e9cd54   고영탁   Merge
349
      }
f8661a150   고영탁   엔지니어 모드 디버깅
350
      if(errflag & MAKE_MASK(SYS_ERR_FIRE_TRIGGER3)){
14a73498f   김태훈   소스 코드 정리
351
          item = &(srvdata->err_log.items.steam_fire_fail);
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
352
353
354
355
          strTitle = tr("스팀 버너 착화 이상");
          strMsg  = tr("스팀발생기 버너 착화 이상 안전장치가 작동하였습니다.
  제품의 전원을 OFF한 후 가스 밸브가 잠겨있는지 확인 해 주십시오.
  가스 밸브가 열려 있는데도 에러 발생 시, 즉시 서비스센터에 연락하여 주십시오.");
97cb5d841   김태훈   들여쓰기 정리
356
          processErrorItems(item, sys_err_type_def[state][SYS_ERR_FIRE_TRIGGER3],strMsg,strTitle,ltime, sys_err_sound_def[SYS_ERR_FIRE_TRIGGER3]);
652e9cd54   고영탁   Merge
357
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
358
      if(errflag & MAKE_MASK(SYS_ERR_OVNE_TEMP_ALARM)){
14a73498f   김태훈   소스 코드 정리
359
          item = &(srvdata->err_log.items.inner_temp_high_alarm);
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
360
361
362
          strTitle  = tr("내부 온도 과열 이상");
          strMsg  = tr("조리실 내부 과열 안전장치가 작동하였습니다.
  제품의 전원을 OFF한 뒤, 즉시 서비스센터에 연락하여 주십시오.");
97cb5d841   김태훈   들여쓰기 정리
363
          processErrorItems(item, sys_err_type_def[state][SYS_ERR_OVNE_TEMP_ALARM],strMsg,strTitle,ltime,sys_err_sound_def[SYS_ERR_OVNE_TEMP_ALARM]);
652e9cd54   고영탁   Merge
364
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
365
366
      if(errflag & MAKE_MASK(SYS_ERR_QUN_TEMP_ALARM)){
          //퀀칭 온도 센서 과열
14a73498f   김태훈   소스 코드 정리
367
          item = &(srvdata->err_log.items.qunching_temp_high_alarm);
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
368
369
370
          strTitle  = tr("배수 탱크 온도 과열 이상");
          strMsg  = tr("배수 탱크 과열 안전장치가 작동하였습니다.
  제품의 전원을 OFF한 뒤, 즉시 서비스센터에 연락하여 주십시오.");
97cb5d841   김태훈   들여쓰기 정리
371
          processErrorItems(item, sys_err_type_def[state][SYS_ERR_QUN_TEMP_ALARM],strMsg,strTitle,ltime,sys_err_sound_def[SYS_ERR_QUN_TEMP_ALARM]);
652e9cd54   고영탁   Merge
372
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
373
374
      if(errflag & MAKE_MASK(SYS_ERR_CENTER_TEMP_ALARM)){
          //중심 온도 과열
14a73498f   김태훈   소스 코드 정리
375
          item = &(srvdata->err_log.items.meatprove_temp1_high_alarm);
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
376
377
378
          strTitle  = tr("중심 온도 과열 이상");
          strMsg  = tr("중심온도계 과열 안전장치가 작동하였습니다.
  제품의 전원을 OFF한 뒤, 즉시 서비스센터에 연락하여 주십시오.");
97cb5d841   김태훈   들여쓰기 정리
379
          processErrorItems(item, sys_err_type_def[state][SYS_ERR_CENTER_TEMP_ALARM],strMsg,strTitle,ltime, sys_err_sound_def[SYS_ERR_CENTER_TEMP_ALARM]);
652e9cd54   고영탁   Merge
380
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
381
      if(errflag & MAKE_MASK(SYS_ERR_WALL_TEMP_ALARM)){
14a73498f   김태훈   소스 코드 정리
382
          item = &(srvdata->err_log.items.wall_temp1_high_alarm);
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
383
384
385
          strTitle  = tr("벽면 온도 과열 이상");
          strMsg  = tr("조리실 벽면 과열 안전장치가 작동하였습니다.
  제품의 전원을 OFF한 뒤, 즉시 서비스센터에 연락하여 주십시오.");
97cb5d841   김태훈   들여쓰기 정리
386
          processErrorItems(item, sys_err_type_def[state][SYS_ERR_WALL_TEMP_ALARM],strMsg,strTitle,ltime, sys_err_sound_def[SYS_ERR_WALL_TEMP_ALARM]);
f8661a150   고영탁   엔지니어 모드 디버깅
387
      }
97cb5d841   김태훈   들여쓰기 정리
388
389
390
391
392
      if(errflag & MAKE_MASK(SYS_ERR_STAM_TEMP_ALARM)){
          item = &(srvdata->err_log.items.steam_gen_temp_high_alram);
          strTitle  = tr("스팀 온도 과열 이상");
          strMsg  = tr("스팀통 내부 과열 안전장치가 작동하였습니다.
  제품의 전원을 OFF한 뒤, 즉시 서비스센터에 연락하여 주십시오.");
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
393
          processErrorItems(item, sys_err_type_def[state][SYS_ERR_STAM_TEMP_ALARM],strMsg,strTitle,ltime, sys_err_sound_def[SYS_ERR_STAM_TEMP_ALARM]);
97cb5d841   김태훈   들여쓰기 정리
394
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
395
396
      if(errflag & MAKE_MASK(SYS_ERR_WATER_SPLY_FAIL)){
          //급수 이상 -> 유량 센서 이상
14a73498f   김태훈   소스 코드 정리
397
          item = &(srvdata->err_log.items.water_level_sensor_fail);
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
398
399
400
401
402
          strTitle  = tr("급수 이상");
          strMsg  = tr("제품 급수이상 안전장치가 작동하였습니다.
  제품에 들어가는 물 공급을 확인하십시오.
  물 공급이 정상적으로 들어갈 시 즉시 서비스센터에 연락하여 주십시오.
  단수 유무는 샤워건을 사용하십시오.");
97cb5d841   김태훈   들여쓰기 정리
403
          processErrorItems(item, sys_err_type_def[state][SYS_ERR_WATER_SPLY_FAIL],strMsg,strTitle,ltime, sys_err_sound_def[SYS_ERR_WATER_SPLY_FAIL]);
652e9cd54   고영탁   Merge
404
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
405
      if(errflag & MAKE_MASK(SYS_ERR_WATER_LEVEL_FAIL)){
703618ec3   고영탁   세척 상황에서 에러 발생시 이벤...
406
          //급수 이상 -> 수위 상태 확인
14a73498f   김태훈   소스 코드 정리
407
          item = &(srvdata->err_log.items.water_level_sensor_fail);
703618ec3   고영탁   세척 상황에서 에러 발생시 이벤...
408
          strTitle  = tr("수위 상태 확인");
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
409
410
411
412
          strMsg  = tr("스팀통 수위 감지 안전장치가 작동하였습니다.
  제품에 들어가는 물 공급을 확인하십시오.
  물 공급이 정상적으로 들어갈 시 즉시 서비스센터에 연락하여 주십시오.
  단수 유무는 샤워건을 사용하십시오.");
97cb5d841   김태훈   들여쓰기 정리
413
          processErrorItems(item, sys_err_type_def[state][SYS_ERR_WATER_LEVEL_FAIL],strMsg,strTitle,ltime, sys_err_sound_def[SYS_ERR_WATER_LEVEL_FAIL]);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
414
415
      }
  }
42410a75c   김태훈   오타 수정
416
  bool OvenStatistics::getNeedErrorClear(){
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
417
418
      return bNeedErrorClear;
  }
42410a75c   김태훈   오타 수정
419
  void OvenStatistics::clearNeedErrorClear(){
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
420
421
422
      //에러클리어 송신 후 flag clear
      bNeedErrorClear = false;
  }
42410a75c   김태훈   오타 수정
423
  void OvenStatistics::oneSecTimerFired(void){
0db96666e   고영탁   데모모드 추가
424
      if(cfg->getConfigValue(Define::config_demo_mode).d32 !=0 ) return;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
425
426
      static int nOneSecCnt=1;
      time_t ltime;
2189b57d9   고영탁   GUI V0.3.15
427
428
429
430
431
432
433
      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;
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
434
      else if(state.cleaning_sate !=0) cookingstate = 2;
2189b57d9   고영탁   GUI V0.3.15
435
6a965b9f1   고영탁   엔지니어 모드 2차 구현
436
437
438
439
      ltime = time(NULL);
  
      nOneSecCnt++;
      if( (nOneSecCnt % 10) ==0 ) {
14a73498f   김태훈   소스 코드 정리
440
          srvdata->saveServiceData();
6a965b9f1   고영탁   엔지니어 모드 2차 구현
441
      }
2189b57d9   고영탁   GUI V0.3.15
442
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
443
444
445
446
447
      if(bDataRefreshed) bDataRefreshed= false;
      else{
          udp->fillControl(control);
          udp->fillData(state);
      }
2189b57d9   고영탁   GUI V0.3.15
448
449
450
451
452
  
      if(nCommErrVal !=  state.communication_error){
          nCommErrVal = state.communication_error;
          if(nCommErrVal ==0) {
              curCommErrorState = nCommErrVal;
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
453
              nCommErrValStableCnt = DELAY_ERROR_TIME;
2189b57d9   고영탁   GUI V0.3.15
454
455
456
457
458
459
          }
          else {
              nCommErrValStableCnt=0;
          }
      }
      else{
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
460
          if(nCommErrValStableCnt >=DELAY_ERROR_TIME){
2189b57d9   고영탁   GUI V0.3.15
461
462
463
464
465
466
467
468
469
470
471
472
473
              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;
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
474
              nStateErrValStableCnt=DELAY_ERROR_TIME;
2189b57d9   고영탁   GUI V0.3.15
475
476
477
478
479
480
          }
          else{
              nStateErrValStableCnt=0;
          }
      }
      else{
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
481
          if(nStateErrValStableCnt>=DELAY_ERROR_TIME){
2189b57d9   고영탁   GUI V0.3.15
482
483
              errstatetemp = state.controller_error;
              if(errstatetemp != 0 && errstatetemp != curControlErrorState){
a27cda0a6   고영탁   GUI V 1.2.01
484
                  qDebug() << "__func__" << "state error";
2189b57d9   고영탁   GUI V0.3.15
485
486
487
488
489
490
                  processStateError((errstatetemp&state_err_mask[cookingstate][cfg->getConfigValue(Define::config_model).d32]),ltime);
              }
              curControlErrorState = errstatetemp;
          }
          else nStateErrValStableCnt++;
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
491
492
      //가열부 시간 측정
      if( (state.onoff_state1 & LOAD_STATE1_STEAM_BUNNER) !=0){
14a73498f   김태훈   소스 코드 정리
493
          srvdata->use_log.items.steam_heat +=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
494
495
      }
      if( (state.onoff_state1 & (LOAD_STATE1_UPPER_BUNNER | LOAD_STATE1_LOWER_FAN))!=0){
14a73498f   김태훈   소스 코드 정리
496
          srvdata->use_log.items.dry_heat+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
497
          if(state.onoff_state1 & (LOAD_STATE1_UPPER_BUNNER)){
14a73498f   김태훈   소스 코드 정리
498
              srvdata->use_log.items.upper_heat +=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
499
500
          }
          if((state.onoff_state2 & LOAD_STATE1_LOWER_BUNNER)!=0){
14a73498f   김태훈   소스 코드 정리
501
              srvdata->use_log.items.lower_heat +=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
502
503
504
505
506
507
          }
      }
      //모드 시간 계산
      if(state.cooking_mode !=0){
          if(state.cooking_humidity==0){
              //건열 모드
14a73498f   김태훈   소스 코드 정리
508
              srvdata->use_log.items.cook_dry_mode+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
509
510
511
          }
          else if(state.cooking_humidity ==100){
              //스팀모드
14a73498f   김태훈   소스 코드 정리
512
              srvdata->use_log.items.cook_steam_mode+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
513
          }
14a73498f   김태훈   소스 코드 정리
514
          else srvdata->use_log.items.cook_combi_mode+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
515
      }
f8661a150   고영탁   엔지니어 모드 디버깅
516
      if(state.cleaning_mode !=0 && state.cleaning_sate !=0){
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
517
518
          switch (state.cleaning_mode) {
          case (uint16_t)wash_mode_nocleanser:
14a73498f   김태훈   소스 코드 정리
519
              srvdata->use_log.items.wash_mode_nocleanser+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
520
521
              break;
          case (uint16_t)wash_mode_simple:
14a73498f   김태훈   소스 코드 정리
522
              srvdata->use_log.items.wash_mode_simple+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
523
524
              break;
          case (uint16_t)wash_mode_standard:
14a73498f   김태훈   소스 코드 정리
525
              srvdata->use_log.items.wash_mode_standard+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
526
527
              break;
          case (uint16_t)wash_mode_strong:
14a73498f   김태훈   소스 코드 정리
528
              srvdata->use_log.items.wash_mode_strong+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
529
530
              break;
          case (uint16_t)wash_mode_highspeed:
14a73498f   김태훈   소스 코드 정리
531
              srvdata->use_log.items.wash_mode_speed+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
532
533
534
535
536
537
              break;
          default:
              break;
          }
      }
      if(control.cooldown ==1){
14a73498f   김태훈   소스 코드 정리
538
          srvdata->use_log.items.cooldown_mode+=1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
539
540
      }
      //부품
6a965b9f1   고영탁   엔지니어 모드 2차 구현
541
      if(state.door_state !=0){
14a73498f   김태훈   소스 코드 정리
542
          srvdata->use_log.items.door_open+=1;
3f5f5d4ce   고영탁   디버깅 요청 사항 적용
543
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
544
      }
3f5f5d4ce   고영탁   디버깅 요청 사항 적용
545
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
546
      if(state.onoff_state2 !=0){
97cb5d841   김태훈   들여쓰기 정리
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
          if( (state.onoff_state2 & LOAD_STATE2_DV)!=0){
              srvdata->use_log.items.dv_open+=1;
          }
          if((state.onoff_state2 & LOAD_STATE2_SSV)!=0){
              srvdata->use_log.items.ssv_open+=1;
          }
          if((state.onoff_state2 & LOAD_STATE2_QNV)!=0){
              srvdata->use_log.items.qnv_open+=1;
          }
          if((state.onoff_state2 & LOAD_STATE2_SNV)!=0){
              srvdata->use_log.items.snv_open+=1;
          }
          if((state.onoff_state2 & LOAD_STATE2_SSP)!=0){
              srvdata->use_log.items.ssp_open+=1;
          }
          if((state.onoff_state2 & LOAD_STATE2_HDM)!=0){
              srvdata->use_log.items.hdm_open+=1;
          }
          if((state.onoff_state2 & LOAD_STATE2_DP)!=0){
              srvdata->use_log.items.dp_open+=1;
          }
          if((state.onoff_state2 & LOAD_STATE2_UNP) !=0){
              srvdata->use_log.items.unp_open+=1;
          }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
571
      }
6a965b9f1   고영탁   엔지니어 모드 2차 구현
572
573
574
575
576
577
578
579
  
      //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   고영탁   엔지니어 모드 디버깅
580
      realdata.b.wsv_open = (state.onoff_state2&LOAD_STATE2_WSV)==0?0:1;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
581
      realdata.b.ssv_open = (state.onoff_state2&LOAD_STATE2_SSV)==0?0:1;
a7e8cc0aa   고영탁   버그 및 동작 개선
582
39fec1254   김태훈   요청 사항 반영
583
584
      if( (state.water_level&0x0018)  ==  0x0018)  realdata.b.water_level = water_level_high;
      else if( (state.water_level&0x0018)  == 0x0000) realdata.b.water_level = water_level_low;
3f5f5d4ce   고영탁   디버깅 요청 사항 적용
585
      else realdata.b.water_level = water_level_normal;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
586
14a73498f   김태훈   소스 코드 정리
587
588
589
      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차 구현
590
591
      }
      curSensorValue[0].itemp = state.sensor1;
14a73498f   김태훈   소스 코드 정리
592
593
594
      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차 구현
595
596
      }
      curSensorValue[1].itemp = state.sensor2;
14a73498f   김태훈   소스 코드 정리
597
598
599
      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차 구현
600
601
      }
      curSensorValue[5].itemp = state.sensor6;
14a73498f   김태훈   소스 코드 정리
602
603
604
      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차 구현
605
      }
97cb5d841   김태훈   들여쓰기 정리
606
      curSensorValue[3].itemp = state.sensor4;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
607
14a73498f   김태훈   소스 코드 정리
608
609
610
      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차 구현
611
612
      }
      curSensorValue[4].itemp = state.sensor5;
14a73498f   김태훈   소스 코드 정리
613
614
615
      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차 구현
616
617
      }
      curSensorValue[6].itemp = state.sensor7;
14a73498f   김태훈   소스 코드 정리
618
619
620
      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차 구현
621
622
      }
      curSensorValue[7].itemp = state.sensor8;
14a73498f   김태훈   소스 코드 정리
623
624
625
      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차 구현
626
627
      }
      curSensorValue[8].itemp = state.sensor9;
14a73498f   김태훈   소스 코드 정리
628
629
630
      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차 구현
631
632
      }
      curSensorValue[10].utemp = state.sensor11;
14a73498f   김태훈   소스 코드 정리
633
634
635
      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차 구현
636
637
      }
      curSensorValue[11].utemp = state.sensor12;
14a73498f   김태훈   소스 코드 정리
638
639
640
      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차 구현
641
642
      }
      curSensorValue[12].itemp = state.sensor13;
14a73498f   김태훈   소스 코드 정리
643
644
645
      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차 구현
646
647
      }
      curSensorValue[13].itemp = state.sensor14;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
648
  }
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
649
  void OvenStatistics::processErrorItems(error_item *item, error_exe_type errtype, const QString &MsgDesc, const QString &MsgTitle, time_t ltime, error_sound_type sndtype){
a7e8cc0aa   고영탁   버그 및 동작 개선
650
651
      QWidget* pParent;
      uint32_t erridx = (uint32_t) (item - &(srvdata->err_log.values[0]));
cefd483e4   고영탁   에러 수정
652
      qDebug() << (uint32_t) (item - &(srvdata->err_log.values[0]))  <<   "ERROR Fired!";
97cb5d841   김태훈   들여쓰기 정리
653
      if(m_pLastErrItem == item ){
14a73498f   김태훈   소스 코드 정리
654
655
656
          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;
97cb5d841   김태훈   들여쓰기 정리
657
658
      }
      m_pLastErrItem = item;
a7e8cc0aa   고영탁   버그 및 동작 개선
659
      qDebug() << "error type" << errtype;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
660
      if(errtype >= error_type_onlychk){
652e9cd54   고영탁   Merge
661
662
663
664
          item->fired_cnt+=1;
          if(item->first_fired == 0) item->first_fired = ltime;
          item->last_fried = ltime;
      }
cefd483e4   고영탁   에러 수정
665
d1d566994   고영탁   에러 발생 시그널 추가
666
      emit onErrorFired(erridx);
0f8248de6   고영탁   HACCP 에러 발생 기능 보완
667
      HACCP::error(MsgTitle);
d1d566994   고영탁   에러 발생 시그널 추가
668
a7e8cc0aa   고영탁   버그 및 동작 개선
669
670
      if(errtype>=error_type_chkclrstopcmd){
          qDebug() << "exec killchild";
703618ec3   고영탁   세척 상황에서 에러 발생시 이벤...
671
672
673
674
675
          if(state.cleaning_sate != 0){
              emit stopClean();
              pParent = QApplication::activeWindow();
          }
          else if(MainWindow::killChildCook()){
a7e8cc0aa   고영탁   버그 및 동작 개선
676
677
678
679
680
681
682
683
684
              pParent = MainWindow::getInstance();
          }
          else{
              pParent = QApplication::activeWindow();
          }
      }
      else{
          pParent = QApplication::activeWindow();
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
685
      switch(errtype){
97cb5d841   김태훈   들여쓰기 정리
686
687
688
689
      case error_type_onlypop:
      case error_type_popclr:
      case error_type_popnonclr:
      case error_type_popclrstopcmd:
703618ec3   고영탁   세척 상황에서 에러 발생시 이벤...
690
      {
97cb5d841   김태훈   들여쓰기 정리
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
          if(m_mapPopupList.find(erridx) == m_mapPopupList.end()){
              ErrorPopupDlg *dlg = new ErrorPopupDlg(pParent,MsgDesc,MsgTitle , (errtype > error_type_clrsplit), erridx, sndtype);
              connect(dlg,SIGNAL(closedErrorPopup(int)), this, SLOT(onErrorPopupClosed(int)));
              m_mapPopupList.insert(erridx,dlg);
              qApp->setActiveWindow(dlg);
              dlg->showFullScreen();
          }
          break;
      }
      case error_type_engclr:
      case error_type_engnonclr:
      case error_type_onlyeng:
      case error_type_engclrstopcmd:
      {
          //EngineerMenuWindow *w = new EngineerMenuWindow(0);
          //w->showFullScreen();
          if(m_mapPopupList.find(erridx)==m_mapPopupList.end()){
              ErrorPopupDlg *dlg = new ErrorPopupDlg(pParent,MsgDesc,MsgTitle, false,erridx,sndtype);
              connect(dlg,SIGNAL(closedErrorPopup(int)),this,SLOT(onErrorPopupClosed(int)));
              m_mapPopupList.insert(erridx,dlg);
              dlg->showFullScreen();
  
              if(m_wndSrvpassdlg == NULL){
                  m_wndSrvpassdlg = new ServicePassInputDlg(pParent, NORMAL_SERVICE_PASS_MODE, (errtype > error_type_clrsplit));
                  connect(dlg, SIGNAL(destroyed(QObject*)), m_wndSrvpassdlg, SLOT(showFullScreen()));
                  connect(m_wndSrvpassdlg, SIGNAL(destroyed(QObject*)), SLOT(setWndPassInputNull()));
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
717
              }
97cb5d841   김태훈   들여쓰기 정리
718
719
720
721
722
          }
          break;
      }
      default:
          break;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
723
      }
cefd483e4   고영탁   에러 수정
724
a7e8cc0aa   고영탁   버그 및 동작 개선
725
726
727
728
729
730
731
732
733
734
735
  //    if(errtype > error_type_clrsplit){
  //        //에러 클리어 명령 송신
  ////       if(errtype == error_type_engclr){
  ////            //확인 후 송신
  ////            bNeedErrorClear = true;
  ////        }
  ////        else{
  ////            //에러클리어 메시지 즉시 송신
  //           qDebug() << "send error clr";
  //            udp->set(TG_ERROR_CLEAR,0xCECE);
  ////        }
97cb5d841   김태훈   들여쓰기 정리
736
  //    }
3fd8255a1   고영탁   팝업 관련 동작 정의 수정
737
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
738
652e9cd54   고영탁   Merge
739
  }
6a965b9f1   고영탁   엔지니어 모드 2차 구현
740
42410a75c   김태훈   오타 수정
741
  realtime_data OvenStatistics::getPartsRealtimeData(void){
6a965b9f1   고영탁   엔지니어 모드 2차 구현
742
743
      return realdata;
  }
42410a75c   김태훈   오타 수정
744
  uint8_t OvenStatistics::getSensorTypeByIdx(uint16_t idx){
6a965b9f1   고영탁   엔지니어 모드 2차 구현
745
746
747
      if(idx > MAX_LOG_SENSOR)  return 0;
      return sensorTypeInfo[idx];
  }
42410a75c   김태훈   오타 수정
748
  type_temp OvenStatistics::getCurSensorValueByIdx(uint16_t idx){
6a965b9f1   고영탁   엔지니어 모드 2차 구현
749
750
      return curSensorValue[idx];
  }
cefd483e4   고영탁   에러 수정
751
91480de3c   고영탁   센서 실시간 데이터 리셋 기능 추가
752
753
754
755
  void OvenStatistics::resetSensorHistory()
  {
      srvdata->resetSensorlogData();
  }
a7e8cc0aa   고영탁   버그 및 동작 개선
756
757
758
759
  void OvenStatistics::onErrorPopupClosed(int erridx){
      qDebug() << "error idx" << erridx;
      if(m_mapPopupList.find(erridx)!= m_mapPopupList.end()){
          m_mapPopupList.remove(erridx);
cefd483e4   고영탁   에러 수정
760
761
      }
  }
703618ec3   고영탁   세척 상황에서 에러 발생시 이벤...
762
763
764
  
  void OvenStatistics::onCommTimeoutFired()
  {
0db96666e   고영탁   데모모드 추가
765
      if(cfg->getConfigValue(Define::config_demo_mode).d32 !=0 ) return;
703618ec3   고영탁   세척 상황에서 에러 발생시 이벤...
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
      QWidget* pParent;
      int erridx = MAX_ERROR_TYPE_CNT;
      HACCP::error(tr("제어보드 통신에러 발생"));
  
      qDebug() << "exec killchild";
      if(MainWindow::killChildCook()){
          pParent = MainWindow::getInstance();
      }
      else{
          pParent = QApplication::activeWindow();
      }
  
      if(m_mapPopupList.find(erridx) == m_mapPopupList.end()){
          ErrorPopupDlg *dlg = new ErrorPopupDlg(pParent,tr("제어보드 통신에러 발생"), tr("제어보드 통신에러 발생하였습니다"),
                                                 0, erridx, 1);
          connect(dlg,SIGNAL(closedErrorPopup(int)), this, SLOT(onErrorPopupClosed(int)));
          m_mapPopupList.insert(erridx,dlg);
          qApp->setActiveWindow(dlg);
          dlg->showFullScreen();
      }
  }
27e821e2e   고영탁   version 1.6.8 Rel...
787
788
789
790
791
  
  void OvenStatistics::onSvOffTimeoutFired()
  {
      udp->set_steam_high_sv_onoff(false);
  }