Blame view

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