Blame view

app/gui/oven_control/ovenstatics.cpp 36.3 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
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_7)){
97cb5d841   김태훈   들여쓰기 정리
177
          //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){
97cb5d841   김태훈   들여쓰기 정리
306
307
308
309
310
311
312
313
314
      error_item *item;
      QString strMsg = "",strTitle = "";
      uint8_t state;
      bool bCookingState = (control.cooking || oven->cooking() || oven->preheating() || oven->cooldown());
      if( control.system==0 && !bCookingState  ) state = SYS_OFF_COOK_OFF;
      else if(control.system != 0 && !bCookingState) state = SYS_ON_COOK_OFF;
      else if(control.system !=0 && bCookingState) state = SYS_ON_COOK_ON;
      else if(control.system !=0 && this->state.cleaning_sate  !=0 ) state = SYS_ON_WASH;
      else state = SYS_ON_COOK_OFF;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
315
316
  
      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
          strTitle = tr("스팀 버너 착화 이상");
          strMsg  = tr("스팀발생기 버너 착화 이상 안전장치가 작동하였습니다.
  제품의 전원을 OFF한 후 가스 밸브가 잠겨있는지 확인 해 주십시오.
  가스 밸브가 열려 있는데도 에러 발생 시, 즉시 서비스센터에 연락하여 주십시오.");
97cb5d841   김태훈   들여쓰기 정리
340
          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
          strTitle  = tr("내부 온도 과열 이상");
          strMsg  = tr("조리실 내부 과열 안전장치가 작동하였습니다.
  제품의 전원을 OFF한 뒤, 즉시 서비스센터에 연락하여 주십시오.");
97cb5d841   김태훈   들여쓰기 정리
347
          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
          strTitle  = tr("배수 탱크 온도 과열 이상");
          strMsg  = tr("배수 탱크 과열 안전장치가 작동하였습니다.
  제품의 전원을 OFF한 뒤, 즉시 서비스센터에 연락하여 주십시오.");
97cb5d841   김태훈   들여쓰기 정리
355
          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
          strTitle  = tr("중심 온도 과열 이상");
          strMsg  = tr("중심온도계 과열 안전장치가 작동하였습니다.
  제품의 전원을 OFF한 뒤, 즉시 서비스센터에 연락하여 주십시오.");
97cb5d841   김태훈   들여쓰기 정리
363
          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
          strTitle  = tr("벽면 온도 과열 이상");
          strMsg  = tr("조리실 벽면 과열 안전장치가 작동하였습니다.
  제품의 전원을 OFF한 뒤, 즉시 서비스센터에 연락하여 주십시오.");
97cb5d841   김태훈   들여쓰기 정리
370
          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
      }
97cb5d841   김태훈   들여쓰기 정리
372
373
374
375
376
      if(errflag & MAKE_MASK(SYS_ERR_STAM_TEMP_ALARM)){
          item = &(srvdata->err_log.items.steam_gen_temp_high_alram);
          strTitle  = tr("스팀 온도 과열 이상");
          strMsg  = tr("스팀통 내부 과열 안전장치가 작동하였습니다.
  제품의 전원을 OFF한 뒤, 즉시 서비스센터에 연락하여 주십시오.");
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
377
          processErrorItems(item, sys_err_type_def[state][SYS_ERR_STAM_TEMP_ALARM],strMsg,strTitle,ltime, sys_err_sound_def[SYS_ERR_STAM_TEMP_ALARM]);
97cb5d841   김태훈   들여쓰기 정리
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
          strTitle  = tr("급수 이상");
          strMsg  = tr("제품 급수이상 안전장치가 작동하였습니다.
  제품에 들어가는 물 공급을 확인하십시오.
  물 공급이 정상적으로 들어갈 시 즉시 서비스센터에 연락하여 주십시오.
  단수 유무는 샤워건을 사용하십시오.");
97cb5d841   김태훈   들여쓰기 정리
387
          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
          strMsg  = tr("스팀통 수위 감지 안전장치가 작동하였습니다.
  제품에 들어가는 물 공급을 확인하십시오.
  물 공급이 정상적으로 들어갈 시 즉시 서비스센터에 연락하여 주십시오.
  단수 유무는 샤워건을 사용하십시오.");
97cb5d841   김태훈   들여쓰기 정리
397
          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
      if(state.onoff_state2 !=0){
97cb5d841   김태훈   들여쓰기 정리
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
          if( (state.onoff_state2 & LOAD_STATE2_DV)!=0){
              srvdata->use_log.items.dv_open+=1;
          }
          if((state.onoff_state2 & LOAD_STATE2_SSV)!=0){
              srvdata->use_log.items.ssv_open+=1;
          }
          if((state.onoff_state2 & LOAD_STATE2_QNV)!=0){
              srvdata->use_log.items.qnv_open+=1;
          }
          if((state.onoff_state2 & LOAD_STATE2_SNV)!=0){
              srvdata->use_log.items.snv_open+=1;
          }
          if((state.onoff_state2 & LOAD_STATE2_SSP)!=0){
              srvdata->use_log.items.ssp_open+=1;
          }
          if((state.onoff_state2 & LOAD_STATE2_HDM)!=0){
              srvdata->use_log.items.hdm_open+=1;
          }
          if((state.onoff_state2 & LOAD_STATE2_DP)!=0){
              srvdata->use_log.items.dp_open+=1;
          }
          if((state.onoff_state2 & LOAD_STATE2_UNP) !=0){
              srvdata->use_log.items.unp_open+=1;
          }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
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
      }
97cb5d841   김태훈   들여쓰기 정리
589
      curSensorValue[3].itemp = state.sensor4;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
590
14a73498f   김태훈   소스 코드 정리
591
592
593
      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차 구현
594
595
      }
      curSensorValue[4].itemp = state.sensor5;
14a73498f   김태훈   소스 코드 정리
596
597
598
      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차 구현
599
600
      }
      curSensorValue[6].itemp = state.sensor7;
14a73498f   김태훈   소스 코드 정리
601
602
603
      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차 구현
604
605
      }
      curSensorValue[7].itemp = state.sensor8;
14a73498f   김태훈   소스 코드 정리
606
607
608
      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차 구현
609
610
      }
      curSensorValue[8].itemp = state.sensor9;
14a73498f   김태훈   소스 코드 정리
611
612
613
      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차 구현
614
615
      }
      curSensorValue[10].utemp = state.sensor11;
14a73498f   김태훈   소스 코드 정리
616
617
618
      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차 구현
619
620
      }
      curSensorValue[11].utemp = state.sensor12;
14a73498f   김태훈   소스 코드 정리
621
622
623
      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차 구현
624
625
      }
      curSensorValue[12].itemp = state.sensor13;
14a73498f   김태훈   소스 코드 정리
626
627
628
      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차 구현
629
630
      }
      curSensorValue[13].itemp = state.sensor14;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
631
  }
15e45c49c   고영탁   세척 에러 유형 추가 및 에러 ...
632
  void OvenStatistics::processErrorItems(error_item *item, error_exe_type errtype, const QString &MsgDesc, const QString &MsgTitle, time_t ltime, error_sound_type sndtype){
a7e8cc0aa   고영탁   버그 및 동작 개선
633
634
      QWidget* pParent;
      uint32_t erridx = (uint32_t) (item - &(srvdata->err_log.values[0]));
cefd483e4   고영탁   에러 수정
635
      qDebug() << (uint32_t) (item - &(srvdata->err_log.values[0]))  <<   "ERROR Fired!";
97cb5d841   김태훈   들여쓰기 정리
636
      if(m_pLastErrItem == item ){
14a73498f   김태훈   소스 코드 정리
637
638
639
          srvdata->err_log.items.repeat_error.fired_cnt =item->fired_cnt;
          srvdata->err_log.items.repeat_error.first_fired = item->first_fired;
          srvdata->err_log.items.repeat_error.last_fried = item->last_fried;
97cb5d841   김태훈   들여쓰기 정리
640
641
      }
      m_pLastErrItem = item;
a7e8cc0aa   고영탁   버그 및 동작 개선
642
      qDebug() << "error type" << errtype;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
643
      if(errtype >= error_type_onlychk){
652e9cd54   고영탁   Merge
644
645
646
647
          item->fired_cnt+=1;
          if(item->first_fired == 0) item->first_fired = ltime;
          item->last_fried = ltime;
      }
cefd483e4   고영탁   에러 수정
648
d1d566994   고영탁   에러 발생 시그널 추가
649
      emit onErrorFired(erridx);
0f8248de6   고영탁   HACCP 에러 발생 기능 보완
650
      HACCP::error(MsgTitle);
d1d566994   고영탁   에러 발생 시그널 추가
651
a7e8cc0aa   고영탁   버그 및 동작 개선
652
653
      if(errtype>=error_type_chkclrstopcmd){
          qDebug() << "exec killchild";
703618ec3   고영탁   세척 상황에서 에러 발생시 이벤...
654
655
656
657
658
          if(state.cleaning_sate != 0){
              emit stopClean();
              pParent = QApplication::activeWindow();
          }
          else if(MainWindow::killChildCook()){
a7e8cc0aa   고영탁   버그 및 동작 개선
659
660
661
662
663
664
665
666
667
              pParent = MainWindow::getInstance();
          }
          else{
              pParent = QApplication::activeWindow();
          }
      }
      else{
          pParent = QApplication::activeWindow();
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
668
      switch(errtype){
97cb5d841   김태훈   들여쓰기 정리
669
670
671
672
      case error_type_onlypop:
      case error_type_popclr:
      case error_type_popnonclr:
      case error_type_popclrstopcmd:
703618ec3   고영탁   세척 상황에서 에러 발생시 이벤...
673
      {
97cb5d841   김태훈   들여쓰기 정리
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
          if(m_mapPopupList.find(erridx) == m_mapPopupList.end()){
              ErrorPopupDlg *dlg = new ErrorPopupDlg(pParent,MsgDesc,MsgTitle , (errtype > error_type_clrsplit), erridx, sndtype);
              connect(dlg,SIGNAL(closedErrorPopup(int)), this, SLOT(onErrorPopupClosed(int)));
              m_mapPopupList.insert(erridx,dlg);
              qApp->setActiveWindow(dlg);
              dlg->showFullScreen();
          }
          break;
      }
      case error_type_engclr:
      case error_type_engnonclr:
      case error_type_onlyeng:
      case error_type_engclrstopcmd:
      {
          //EngineerMenuWindow *w = new EngineerMenuWindow(0);
          //w->showFullScreen();
          if(m_mapPopupList.find(erridx)==m_mapPopupList.end()){
              ErrorPopupDlg *dlg = new ErrorPopupDlg(pParent,MsgDesc,MsgTitle, false,erridx,sndtype);
              connect(dlg,SIGNAL(closedErrorPopup(int)),this,SLOT(onErrorPopupClosed(int)));
              m_mapPopupList.insert(erridx,dlg);
              dlg->showFullScreen();
  
              if(m_wndSrvpassdlg == NULL){
                  m_wndSrvpassdlg = new ServicePassInputDlg(pParent, NORMAL_SERVICE_PASS_MODE, (errtype > error_type_clrsplit));
                  connect(dlg, SIGNAL(destroyed(QObject*)), m_wndSrvpassdlg, SLOT(showFullScreen()));
                  connect(m_wndSrvpassdlg, SIGNAL(destroyed(QObject*)), SLOT(setWndPassInputNull()));
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
700
              }
97cb5d841   김태훈   들여쓰기 정리
701
702
703
704
705
          }
          break;
      }
      default:
          break;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
706
      }
cefd483e4   고영탁   에러 수정
707
a7e8cc0aa   고영탁   버그 및 동작 개선
708
709
710
711
712
713
714
715
716
717
718
  //    if(errtype > error_type_clrsplit){
  //        //에러 클리어 명령 송신
  ////       if(errtype == error_type_engclr){
  ////            //확인 후 송신
  ////            bNeedErrorClear = true;
  ////        }
  ////        else{
  ////            //에러클리어 메시지 즉시 송신
  //           qDebug() << "send error clr";
  //            udp->set(TG_ERROR_CLEAR,0xCECE);
  ////        }
97cb5d841   김태훈   들여쓰기 정리
719
  //    }
3fd8255a1   고영탁   팝업 관련 동작 정의 수정
720
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
721
652e9cd54   고영탁   Merge
722
  }
6a965b9f1   고영탁   엔지니어 모드 2차 구현
723
42410a75c   김태훈   오타 수정
724
  realtime_data OvenStatistics::getPartsRealtimeData(void){
6a965b9f1   고영탁   엔지니어 모드 2차 구현
725
726
      return realdata;
  }
42410a75c   김태훈   오타 수정
727
  uint8_t OvenStatistics::getSensorTypeByIdx(uint16_t idx){
6a965b9f1   고영탁   엔지니어 모드 2차 구현
728
729
730
      if(idx > MAX_LOG_SENSOR)  return 0;
      return sensorTypeInfo[idx];
  }
42410a75c   김태훈   오타 수정
731
  type_temp OvenStatistics::getCurSensorValueByIdx(uint16_t idx){
6a965b9f1   고영탁   엔지니어 모드 2차 구현
732
733
      return curSensorValue[idx];
  }
cefd483e4   고영탁   에러 수정
734
91480de3c   고영탁   센서 실시간 데이터 리셋 기능 추가
735
736
737
738
  void OvenStatistics::resetSensorHistory()
  {
      srvdata->resetSensorlogData();
  }
a7e8cc0aa   고영탁   버그 및 동작 개선
739
740
741
742
  void OvenStatistics::onErrorPopupClosed(int erridx){
      qDebug() << "error idx" << erridx;
      if(m_mapPopupList.find(erridx)!= m_mapPopupList.end()){
          m_mapPopupList.remove(erridx);
cefd483e4   고영탁   에러 수정
743
744
      }
  }
703618ec3   고영탁   세척 상황에서 에러 발생시 이벤...
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
  
  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();
      }
  }