Blame view

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