Blame view

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