Blame view

app/gui/oven_control/ovenstatics.cpp 22.1 KB
652e9cd54   고영탁   Merge
1
2
  #include "ovenstatics.h"
  #include <QtDebug>
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
3
4
  #include <QApplication>
  #include <QTimer>
652e9cd54   고영탁   Merge
5
6
7
  #include "mainwindow.h"
  #include "ovencontroller.h"
  #include "popupwindow.h"
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
8
9
  #include "engineermenuwindow.h"
  #include "errorpopupdlg.h"
6a965b9f1   고영탁   엔지니어 모드 2차 구현
10
  #include "historylistwindow.h"
652e9cd54   고영탁   Merge
11
42410a75c   김태훈   오타 수정
12
  OvenStatistics* OvenStatistics::p_singletonInstance=NULL;
652e9cd54   고영탁   Merge
13
538041ab9   김태훈   소스 코드 구조 개선
14
  OvenStatistics* OvenStatistics::getInstance(QObject *parent){
42410a75c   김태훈   오타 수정
15
      if(!p_singletonInstance){
42410a75c   김태훈   오타 수정
16
          p_singletonInstance = new OvenStatistics(parent);
538041ab9   김태훈   소스 코드 구조 개선
17
18
          p_singletonInstance->udp = UdpHandler::getInstance();
          p_singletonInstance->oven = Oven::getInstance();
652e9cd54   고영탁   Merge
19
          //for singletone event debug
6a965b9f1   고영탁   엔지니어 모드 2차 구현
20
21
  //        MainWindow* mw = (MainWindow*)parent;
  //        connect(mw->pcombiButton, SIGNAL(clicked()),p_singtonInstance, SLOT(onDataChanged()));
42410a75c   김태훈   오타 수정
22
23
24
          connect(p_singletonInstance->udp , SIGNAL(changed()), p_singletonInstance, SLOT(onDataChanged()));
          QTimer *timer = new QTimer(p_singletonInstance);
          connect(timer, SIGNAL(timeout()),p_singletonInstance,SLOT(oneSecTimerFired()));
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
25
          timer->start(1000); //1000ms fired
652e9cd54   고영탁   Merge
26
      }
42410a75c   김태훈   오타 수정
27
      return p_singletonInstance;
652e9cd54   고영탁   Merge
28
  }
42410a75c   김태훈   오타 수정
29
30
31
  void OvenStatistics::destroy(){
      if(!p_singletonInstance)
          delete p_singletonInstance;
652e9cd54   고영탁   Merge
32
  }
42410a75c   김태훈   오타 수정
33
  OvenStatistics::OvenStatistics(QObject* parent) :QObject(parent)
652e9cd54   고영탁   Merge
34
  {
6a965b9f1   고영탁   엔지니어 모드 2차 구현
35
      int i = 0;
652e9cd54   고영탁   Merge
36
37
      curdoorstate = false;
      curSysErrorState = 0;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
38
39
40
      curCommErrorState = 0;
      curSensorErrorState = 0;
      bDataRefreshed = false;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
41
42
43
44
45
46
47
      realdata.d32 = 0;
  
      for(i=0;i<MAX_LOG_SENSOR;i++){
          curSensorValue[i].utemp = 0;
      }
  
      curSensorValue[12].itemp = 100;
652e9cd54   고영탁   Merge
48
49
50
      srvdatas = new servicedatas();
      srvdatas->loadServiceDatas();
  }
42410a75c   김태훈   오타 수정
51
  OvenStatistics::~OvenStatistics(){
652e9cd54   고영탁   Merge
52
53
      delete srvdatas;
  }
42410a75c   김태훈   오타 수정
54
  void OvenStatistics::onDataChanged()
652e9cd54   고영탁   Merge
55
56
57
  {
      error_item *item;
      time_t ltime=0;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
58
      uint16_t errstatetemp;
652e9cd54   고영탁   Merge
59
      qDebug() << "statics event fired";
652e9cd54   고영탁   Merge
60
61
      udp->fillControl(control);
      udp->fillData(state);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
62
      bDataRefreshed = true;
652e9cd54   고영탁   Merge
63
      time(&ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
64
652e9cd54   고영탁   Merge
65
66
67
68
69
70
71
72
73
      if(oven->cooking() && control.system){
          if(state.door_state ==1 && curdoorstate==0){
              //door error
              item = &(srvdatas->err_log.items.door);
              item->fired_cnt+=1;
              if(item->first_fired==0)item->first_fired = ltime;
              item->last_fried = ltime;
          }
          curdoorstate = state.door_state;
652e9cd54   고영탁   Merge
74
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
75
76
77
78
      if(state.system_error!=0 &&  state.system_error != curSysErrorState){
          processSystemError( state.system_error,ltime);
      }
      curSysErrorState = state.system_error;
fb200c9f1   고영탁   머지 후 컴파일 오류 수정
79
      errstatetemp = state.communication_error;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
80
81
82
83
      if(errstatetemp!=0 && errstatetemp != curCommErrorState ){
          processCommError( errstatetemp,ltime );
      }
      curCommErrorState = errstatetemp;
fb200c9f1   고영탁   머지 후 컴파일 오류 수정
84
      errstatetemp = state.sensor_error;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
85
      if(errstatetemp!=0 && errstatetemp != curSensorErrorState ){
f8661a150   고영탁   엔지니어 모드 디버깅
86
          processSensorError(errstatetemp,ltime );
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
87
88
89
90
91
      }
      curSensorErrorState = errstatetemp;
  
  
  }
42410a75c   김태훈   오타 수정
92
  void OvenStatistics::processSensorError(uint16_t errflag, time_t ltime){
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
93
      error_item *item;
f8661a150   고영탁   엔지니어 모드 디버깅
94
      QString strMsg = "",strTitle="";
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
95
96
97
98
99
100
101
102
      uint8_t state;
      if( control.system==0 && !oven->cooking()) state = SYS_OFF_COOK_OFF;
      else if(control.system != 0 && !oven->cooking()) state = SYS_ON_COOK_OFF;
      else if(control.system !=0 && oven->cooking()) state = SYS_ON_COOK_ON;
      else state = SYS_ON_COOK_OFF;
  
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_1)){
          item = &(srvdatas->err_log.items.inner_temp_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
103
104
105
          strTitle = tr("내부 온도 이상 발생");
          strMsg  = tr("내부 온도 센서에 이상이 발생하였습니다.");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_1],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
106
107
108
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_2)){
          item = &(srvdatas->err_log.items.qunching_temp_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
109
110
111
          strTitle  = tr("퀀칭 온도 이상 발생");
          strMsg  = tr("퀀칭 온도에 이상이 발생하였습니다.");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_2],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
112
113
114
115
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_3)){
          //Reserved allerrornoe 설정
          item = &(srvdatas->err_log.items.qunching_temp_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
116
117
118
          strTitle  = tr("퀀칭 온도 이상 발생");
          strMsg  = tr("퀀칭 온도  센서에 이상이 발생하였습니다.");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_3],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
119
120
121
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_4)){
          item = &(srvdatas->err_log.items.wall_temp1_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
122
123
124
          strTitle  = tr("벽면 온도 이상 발생");
          strMsg  = tr("벽면 온도 센서에 이상이 발생하였습니다.");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_4],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
125
126
127
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_5)){
          item = &(srvdatas->err_log.items.steam_gen_temp_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
128
129
130
          strTitle  = tr("스팀제네레이터 온도 이상 발생");
          strMsg  = tr("스팀제네레이터 온도 센서에 이상이 발생하였습니다.");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_5],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
131
132
133
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_6)){
          item = &(srvdatas->err_log.items.meatprove_temp1_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
134
135
136
          strTitle  = tr("미트프로브 온도 이상 발생");
          strMsg  = tr("미트프로브 온도 센서에 이상이 발생하였습니다.");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_6],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
137
138
139
140
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_7)){
         //Reseved
          item = &(srvdatas->err_log.items.meatprove_temp2_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
141
142
143
          strTitle  = tr("미트프로브2 온도 이상 발생");
          strMsg  = tr("미트프로브2 온도 센서에 이상이 발생하였습니다.");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_7],strMsg , strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
144
145
146
147
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_8)){
          //Reserved
          item = &(srvdatas->err_log.items.meatprove_temp3_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
148
149
150
          strMsg  = tr("미트프로브3 온도 센서에 이상이 발생하였습니다.");
          strTitle  = tr("미트프로브3 온도 이상 발생");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_8],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
151
152
153
154
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_9)){
          //Reserved
          item = &(srvdatas->err_log.items.meatprove_temp4_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
155
156
157
          strMsg  = tr("미트프로브4 온도 센서에 이상이 발생하였습니다.");
          strTitle  = tr("미트프로브4 온도 이상 발생");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_9],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
158
159
160
      }
      if(errflag & MAKE_MASK(SENSOR_ERR_SENSOR_10)){
          item = &(srvdatas->err_log.items.pcb_temp_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
161
162
163
          strMsg  = tr("PCB 온도 센서에 이상이 발생하였습니다.");
          strTitle  = tr("PCB 온도 이상 발생");
          processErrorItems(item,sensor_err_type_def[state][SENSOR_ERR_SENSOR_10],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
164
165
      }
  }
42410a75c   김태훈   오타 수정
166
  void OvenStatistics::processCommError(uint16_t errflag, time_t ltime){
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
167
      error_item *item;
f8661a150   고영탁   엔지니어 모드 디버깅
168
      QString strMsg = "",strTitle="";
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
169
170
171
172
173
174
175
176
177
      uint8_t state;
      if( control.system==0 && !oven->cooking()) state = SYS_OFF_COOK_OFF;
      else if(control.system != 0 && !oven->cooking()) state = SYS_ON_COOK_OFF;
      else if(control.system !=0 && oven->cooking()) state = SYS_ON_COOK_ON;
      else state = SYS_ON_COOK_OFF;
  
      if(errflag & MAKE_MASK(COMM_ERR_BUNNER1)){
          item = &(srvdatas->err_log.items.upper_pan_fail);
          strMsg  = tr("상부 송풍기 이상 발생");
f8661a150   고영탁   엔지니어 모드 디버깅
178
179
          strTitle  = tr("상부 송풍기 이상 발생");
          processErrorItems(item,comm_err_type_def[state][COMM_ERR_BUNNER1],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
180
181
182
183
      }
      if(errflag & MAKE_MASK(COMM_ERR_BUNNER2)){
          item = &(srvdatas->err_log.items.lower_pan_fail);
          strMsg  = tr("하부 송풍기 이상 발생");
f8661a150   고영탁   엔지니어 모드 디버깅
184
185
          strTitle  = tr("하부 송풍기 이상 발생");
          processErrorItems(item,comm_err_type_def[state][COMM_ERR_BUNNER2],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
186
187
188
189
      }
      if(errflag & MAKE_MASK(COMM_ERR_BUNNER3)){
          item = &(srvdatas->err_log.items.steam_pan_fail);
          strMsg  = tr("스팀 송풍기 이상 발생");
f8661a150   고영탁   엔지니어 모드 디버깅
190
191
          strTitle  = tr("스팀 송풍기 이상 발생");
          processErrorItems(item,comm_err_type_def[state][COMM_ERR_BUNNER3],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
192
      }
f8661a150   고영탁   엔지니어 모드 디버깅
193
      if(errflag & MAKE_MASK(COMM_ERR_LOWERFAN)){
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
194
          item = &(srvdatas->err_log.items.lower_motor_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
195
196
197
          strMsg  = tr("하부 모터 컨트롤러 이상 발생");
          strTitle  = tr("하부 모터 컨트롤러 이상 발생");
          processErrorItems(item,comm_err_type_def[state][COMM_ERR_BUNNER2],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
198
199
200
201
      }
      if(errflag & MAKE_MASK(COMM_ERR_UPPERFAN)){
          item = &(srvdatas->err_log.items.upper_motor_fail);
          strMsg  = tr("상부 모터 컨트롤러 이상 발생");
f8661a150   고영탁   엔지니어 모드 디버깅
202
203
          strTitle  = tr("상부 모터 컨트롤러 이상 발생");
          processErrorItems(item,comm_err_type_def[state][COMM_ERR_BUNNER2],strMsg,strTitle, ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
204
      }
652e9cd54   고영탁   Merge
205
  }
42410a75c   김태훈   오타 수정
206
  void OvenStatistics::processSystemError(uint16_t errflag,time_t ltime){
652e9cd54   고영탁   Merge
207
     error_item *item;
f8661a150   고영탁   엔지니어 모드 디버깅
208
     QString strMsg = "",strTitle = "";
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
209
210
211
212
213
214
215
     uint8_t state;
     if( control.system==0 && !oven->cooking()) state = SYS_OFF_COOK_OFF;
     else if(control.system != 0 && !oven->cooking()) state = SYS_ON_COOK_OFF;
     else if(control.system !=0 && oven->cooking()) state = SYS_ON_COOK_ON;
     else state = SYS_ON_COOK_OFF;
  
      if( errflag & MAKE_MASK(SYS_ERR_FIRE_TRIGGER1)){
652e9cd54   고영탁   Merge
216
217
          //버너 컨트롤러 1 착화 이상
          item = &(srvdatas->err_log.items.upper_fire_fail);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
218
          strMsg  = tr("상부 버너 착하가 되지 않습니다.");
f8661a150   고영탁   엔지니어 모드 디버깅
219
220
          strTitle = tr("상부 버너 착하 이상 발생");
          processErrorItems(item, sys_err_type_def[state][SYS_ERR_FIRE_TRIGGER1],strMsg,strTitle,ltime);
652e9cd54   고영탁   Merge
221
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
222
      if(errflag & MAKE_MASK(SYS_ERR_FIRE_TRIGGER2)){
652e9cd54   고영탁   Merge
223
224
          //버너 컨트롤러 2 착화 이상
          item = &(srvdatas->err_log.items.lower_fire_fail);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
225
          strMsg  = tr("하부 버너 착하가 되지 않습니다.");
f8661a150   고영탁   엔지니어 모드 디버깅
226
227
          strTitle  = tr("하부 버너 착하 이상 발생");
          processErrorItems(item, sys_err_type_def[state][SYS_ERR_FIRE_TRIGGER2],strMsg,strTitle,ltime);
652e9cd54   고영탁   Merge
228
      }
f8661a150   고영탁   엔지니어 모드 디버깅
229
      if(errflag & MAKE_MASK(SYS_ERR_FIRE_TRIGGER3)){
652e9cd54   고영탁   Merge
230
          item = &(srvdatas->err_log.items.steam_fire_fail);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
231
          strMsg  = tr("스팀 버너 착하가 되지 않습니다.");
f8661a150   고영탁   엔지니어 모드 디버깅
232
233
          strMsg  = tr("스팀 버너 착하 이상 발생");
           processErrorItems(item, sys_err_type_def[state][SYS_ERR_FIRE_TRIGGER3],strMsg,strTitle,ltime);
652e9cd54   고영탁   Merge
234
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
235
      if(errflag & MAKE_MASK(SYS_ERR_OVNE_TEMP_ALARM)){
652e9cd54   고영탁   Merge
236
          item = &(srvdatas->err_log.items.inner_temp_high_alarm);
f8661a150   고영탁   엔지니어 모드 디버깅
237
238
239
          strMsg  = tr("내부 온도가 과열되었습니다.");
          strTitle  = tr("내부 온도 과열 발생");
           processErrorItems(item, sys_err_type_def[state][SYS_ERR_OVNE_TEMP_ALARM],strMsg,strTitle,ltime);
652e9cd54   고영탁   Merge
240
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
241
242
243
      if(errflag & MAKE_MASK(SYS_ERR_QUN_TEMP_ALARM)){
          //퀀칭 온도 센서 과열
          item = &(srvdatas->err_log.items.qunching_temp_high_alarm);
f8661a150   고영탁   엔지니어 모드 디버깅
244
245
246
          strTitle  = tr("퀀칭 온도 센서 이상 발생");
          strMsg  = tr("퀀칭 온도 센서가 과열되었습니다");
           processErrorItems(item, sys_err_type_def[state][SYS_ERR_QUN_TEMP_ALARM],strMsg,strTitle,ltime);
652e9cd54   고영탁   Merge
247
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
248
249
250
      if(errflag & MAKE_MASK(SYS_ERR_CENTER_TEMP_ALARM)){
          //중심 온도 과열
          item = &(srvdatas->err_log.items.meatprove_temp1_high_alarm);
f8661a150   고영탁   엔지니어 모드 디버깅
251
252
253
          strTitle  = tr("미트프로브 온도 센서 이상 발생.");
          strMsg  = tr("미트프로브 온도 센서 과열되었습니다.");
           processErrorItems(item, sys_err_type_def[state][SYS_ERR_CENTER_TEMP_ALARM],strMsg,strTitle,ltime);
652e9cd54   고영탁   Merge
254
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
255
256
      if(errflag & MAKE_MASK(SYS_ERR_WALL_TEMP_ALARM)){
          item = &(srvdatas->err_log.items.wall_temp1_high_alarm);
f8661a150   고영탁   엔지니어 모드 디버깅
257
258
259
260
261
262
263
264
265
266
          strTitle  = tr("벽면 온도 센서 이상 발생.");
          strMsg  = tr("벽면 온도 센서가 과열 되었습니다.");
           processErrorItems(item, sys_err_type_def[state][SYS_ERR_WALL_TEMP_ALARM],strMsg,strTitle,ltime);
      }
     if(errflag & MAKE_MASK(SYS_ERR_STAM_TEMP_ALARM)){
         item = &(srvdatas->err_log.items.steam_gen_temp_high_alram);
         strTitle  = tr("스팀제네레이터 온도 과열 발생.");
         strMsg  = tr("스팀제네레이터 온도 센서 과열이 발생되었습니다.");
          processErrorItems(item, sys_err_type_def[state][SYS_ERR_STAM_TEMP_ALARM],strMsg,strTitle,ltime);
     }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
267
268
269
      if(errflag & MAKE_MASK(SYS_ERR_WATER_SPLY_FAIL)){
          //급수 이상 -> 유량 센서 이상
          item = &(srvdatas->err_log.items.water_level_sensor_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
270
          strTitle  = tr("급수 이상 발생");
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
271
          strMsg  = tr("급수가 되지 않습니다.");
f8661a150   고영탁   엔지니어 모드 디버깅
272
           processErrorItems(item, sys_err_type_def[state][SYS_ERR_WATER_SPLY_FAIL],strMsg,strTitle,ltime);
652e9cd54   고영탁   Merge
273
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
274
275
      if(errflag & MAKE_MASK(SYS_ERR_WATER_LEVEL_FAIL)){
          //급수 이상 -> 수위 센서 이상
652e9cd54   고영탁   Merge
276
          item = &(srvdatas->err_log.items.water_level_sensor_fail);
f8661a150   고영탁   엔지니어 모드 디버깅
277
          strTitle = tr("급수 이상 발생");
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
278
          strMsg  = tr("급수가 되지 않습니다.");
f8661a150   고영탁   엔지니어 모드 디버깅
279
           processErrorItems(item, sys_err_type_def[state][SYS_ERR_WATER_LEVEL_FAIL],strMsg,strTitle,ltime);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
280
281
      }
  }
42410a75c   김태훈   오타 수정
282
  bool OvenStatistics::getNeedErrorClear(){
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
283
284
      return bNeedErrorClear;
  }
42410a75c   김태훈   오타 수정
285
  void OvenStatistics::clearNeedErrorClear(){
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
286
287
288
      //에러클리어 송신 후 flag clear
      bNeedErrorClear = false;
  }
42410a75c   김태훈   오타 수정
289
  void OvenStatistics::oneSecTimerFired(void){
6a965b9f1   고영탁   엔지니어 모드 2차 구현
290
291
292
293
294
295
296
297
298
299
      static int nOneSecCnt=1;
      time_t ltime;
  
      ltime = time(NULL);
  
      nOneSecCnt++;
      if( (nOneSecCnt % 10) ==0 ) {
          srvdatas->saveServiceDatas();
          qDebug()<<"statics data saved";
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
      if(bDataRefreshed) bDataRefreshed= false;
      else{
          udp->fillControl(control);
          udp->fillData(state);
      }
      //가열부 시간 측정
      if( (state.onoff_state1 & LOAD_STATE1_STEAM_BUNNER) !=0){
          srvdatas->use_log.items.steam_heat +=1;
      }
      if( (state.onoff_state1 & (LOAD_STATE1_UPPER_BUNNER | LOAD_STATE1_LOWER_FAN))!=0){
          srvdatas->use_log.items.dry_heat+=1;
          if(state.onoff_state1 & (LOAD_STATE1_UPPER_BUNNER)){
              srvdatas->use_log.items.upper_heat +=1;
          }
          if((state.onoff_state2 & LOAD_STATE1_LOWER_BUNNER)!=0){
              srvdatas->use_log.items.lower_heat +=1;
          }
      }
      //모드 시간 계산
      if(state.cooking_mode !=0){
          if(state.cooking_humidity==0){
              //건열 모드
              srvdatas->use_log.items.cook_dry_mode+=1;
          }
          else if(state.cooking_humidity ==100){
              //스팀모드
              srvdatas->use_log.items.cook_steam_mode+=1;
          }
          else srvdatas->use_log.items.cook_combi_mode+=1;
      }
f8661a150   고영탁   엔지니어 모드 디버깅
330
      if(state.cleaning_mode !=0 && state.cleaning_sate !=0){
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
          switch (state.cleaning_mode) {
          case (uint16_t)wash_mode_nocleanser:
              srvdatas->use_log.items.wash_mode_nocleanser+=1;
              break;
          case (uint16_t)wash_mode_simple:
              srvdatas->use_log.items.wash_mode_simple+=1;
              break;
          case (uint16_t)wash_mode_standard:
              srvdatas->use_log.items.wash_mode_standard+=1;
              break;
          case (uint16_t)wash_mode_strong:
              srvdatas->use_log.items.wash_mode_strong+=1;
              break;
          case (uint16_t)wash_mode_highspeed:
              srvdatas->use_log.items.wash_mode_speed+=1;
              break;
          default:
              break;
          }
      }
      if(control.cooldown ==1){
          srvdatas->use_log.items.cooldown_mode+=1;
      }
      //부품
6a965b9f1   고영탁   엔지니어 모드 2차 구현
355
      if(state.door_state !=0){
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
356
          srvdatas->use_log.items.door_open+=1;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
357
          realdata.b.door_open = 1;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
      }
      if(state.onoff_state2 !=0){
             if( (state.onoff_state2 & LOAD_STATE2_DV)!=0){
                 srvdatas->use_log.items.dv_open+=1;
             }
             if((state.onoff_state2 & LOAD_STATE2_SSV)!=0){
                 srvdatas->use_log.items.ssv_open+=1;
             }
             if((state.onoff_state2 & LOAD_STATE2_QNV)!=0){
                 srvdatas->use_log.items.qnv_open+=1;
             }
             if((state.onoff_state2 & LOAD_STATE2_SNV)!=0){
                 srvdatas->use_log.items.snv_open+=1;
             }
             if((state.onoff_state2 & LOAD_STATE2_SSP)!=0){
                 srvdatas->use_log.items.ssp_open+=1;
             }
             if((state.onoff_state2 & LOAD_STATE2_HDM)!=0){
                 srvdatas->use_log.items.hdm_open+=1;
             }
             if((state.onoff_state2 & LOAD_STATE2_DP)!=0){
                 srvdatas->use_log.items.dp_open+=1;
             }
             if((state.onoff_state2 & LOAD_STATE2_UNP) !=0){
                 srvdatas->use_log.items.unp_open+=1;
             }
      }
6a965b9f1   고영탁   엔지니어 모드 2차 구현
385
386
387
388
389
390
391
392
  
      //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   고영탁   엔지니어 모드 디버깅
393
      realdata.b.wsv_open = (state.onoff_state2&LOAD_STATE2_WSV)==0?0:1;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
      realdata.b.ssv_open = (state.onoff_state2&LOAD_STATE2_SSV)==0?0:1;
      realdata.b.water_level = 0;
  
      if(srvdatas->sensor_log.items.B1.high_temp.itemp < state.sensor1 ){
          srvdatas->sensor_log.items.B1.high_temp.itemp = state.sensor1;
          srvdatas->sensor_log.items.B1.last_high_time = ltime;
      }
      curSensorValue[0].itemp = state.sensor1;
  
      if(srvdatas->sensor_log.items.B2.high_temp.itemp < state.sensor2 ){
          srvdatas->sensor_log.items.B2.high_temp.itemp = state.sensor2;
          srvdatas->sensor_log.items.B2.last_high_time = ltime;
      }
      curSensorValue[1].itemp = state.sensor2;
  
      if(srvdatas->sensor_log.items.B3_1.high_temp.itemp < state.sensor6 ){
          srvdatas->sensor_log.items.B3_1.high_temp.itemp = state.sensor6;
          srvdatas->sensor_log.items.B3_1.last_high_time = ltime;
      }
      curSensorValue[5].itemp = state.sensor6;
  
      if(srvdatas->sensor_log.items.B4.high_temp.itemp < state.sensor4 ){
          srvdatas->sensor_log.items.B4.high_temp.itemp = state.sensor4;
          srvdatas->sensor_log.items.B4.last_high_time = ltime;
      }
       curSensorValue[3].itemp = state.sensor4;
  
      if(srvdatas->sensor_log.items.B5.high_temp.itemp < state.sensor5 ){
          srvdatas->sensor_log.items.B5.high_temp.itemp = state.sensor5;
          srvdatas->sensor_log.items.B5.last_high_time = ltime;
      }
      curSensorValue[4].itemp = state.sensor5;
  
      if(srvdatas->sensor_log.items.B3_2.high_temp.itemp < state.sensor7 ){
          srvdatas->sensor_log.items.B3_2.high_temp.itemp = state.sensor7;
          srvdatas->sensor_log.items.B3_2.last_high_time = ltime;
      }
      curSensorValue[6].itemp = state.sensor7;
  
      if(srvdatas->sensor_log.items.B3_3.high_temp.itemp < state.sensor8 ){
          srvdatas->sensor_log.items.B3_3.high_temp.itemp = state.sensor8;
          srvdatas->sensor_log.items.B3_3.last_high_time = ltime;
      }
      curSensorValue[7].itemp = state.sensor8;
  
      if(srvdatas->sensor_log.items.B3_4.high_temp.itemp < state.sensor9 ){
          srvdatas->sensor_log.items.B3_4.high_temp.itemp = state.sensor9;
          srvdatas->sensor_log.items.B3_4.last_high_time = ltime;
      }
      curSensorValue[8].itemp = state.sensor9;
  
      if(srvdatas->sensor_log.items.mbar1.high_temp.utemp < state.sensor11 ){
          srvdatas->sensor_log.items.mbar1.high_temp.utemp = state.sensor11;
          srvdatas->sensor_log.items.mbar1.last_high_time = ltime;
      }
      curSensorValue[10].utemp = state.sensor11;
      if(srvdatas->sensor_log.items.mbar2.high_temp.utemp < state.sensor12 ){
          srvdatas->sensor_log.items.mbar2.high_temp.utemp = state.sensor12;
          srvdatas->sensor_log.items.mbar2.last_high_time = ltime;
      }
      curSensorValue[11].utemp = state.sensor12;
  
      if(srvdatas->sensor_log.items.pcb.high_temp.itemp < state.sensor13 ){
          srvdatas->sensor_log.items.pcb.high_temp.itemp = state.sensor13;
          srvdatas->sensor_log.items.pcb.last_high_time = ltime;
      }
      curSensorValue[12].itemp = state.sensor13;
  
      if(srvdatas->sensor_log.items.adc.high_temp.itemp < state.sensor14 ){
          srvdatas->sensor_log.items.adc.high_temp.itemp = state.sensor14;
          srvdatas->sensor_log.items.adc.last_high_time = ltime;
      }
      curSensorValue[13].itemp = state.sensor14;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
467
  }
42410a75c   김태훈   오타 수정
468
  void OvenStatistics::processErrorItems(error_item *item, error_exe_type errtype, const QString &MsgDesc, const QString &MsgTitle, time_t ltime){
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
469
f8661a150   고영탁   엔지니어 모드 디버깅
470
      qDebug() << (int) (item - &(srvdatas->err_log.values[0]))  <<   "ERROR Fired!";
6a965b9f1   고영탁   엔지니어 모드 2차 구현
471
472
473
474
475
476
     if(m_pLastErrItem == item ){
          srvdatas->err_log.items.repeat_error.fired_cnt =item->fired_cnt;
          srvdatas->err_log.items.repeat_error.first_fired = item->first_fired;
          srvdatas->err_log.items.repeat_error.last_fried = item->last_fried;
     }
     m_pLastErrItem = item;
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
477
      if(errtype >= error_type_onlychk){
652e9cd54   고영탁   Merge
478
479
480
481
          item->fired_cnt+=1;
          if(item->first_fired == 0) item->first_fired = ltime;
          item->last_fried = ltime;
      }
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
482
483
484
485
486
      switch(errtype){
          case error_type_onlypop:
          case error_type_popclr:
          case error_type_popnonclr:
              {
f8661a150   고영탁   엔지니어 모드 디버깅
487
                  errorPopupDlg *dlg = new errorPopupDlg(QApplication::activeWindow(),MsgDesc,MsgTitle);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
488
489
490
                  dlg->exec();
                  break;
              }
f8661a150   고영탁   엔지니어 모드 디버깅
491
      case error_type_engclr:
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
          case error_type_engnonclr:
          case error_type_onlyeng:
              {
                  engineermenuwindow *w = new engineermenuwindow(QApplication::activeWindow());
                  w->showFullScreen();
                  break;
              }
          default:
              break;
      }
      if(errtype > error_type_clrsplit){
          //에러 클리어 명령 송신
          qDebug() << "send error clear command";
          if(errtype == error_type_engclr){
              //확인 후 송신
              bNeedErrorClear = true;
          }
          else{
              //에러클리어 메시지 즉시 송신
7cf3f7f9d   고영탁   에러 처리 기능 누락 수정
511
              udp->set(TG_ERROR_CLEAR,0xCECE);
c50beef02   고영탁   에러 처리 루틴 및 에러 처리 ...
512
513
          }
      }
652e9cd54   고영탁   Merge
514
  }
6a965b9f1   고영탁   엔지니어 모드 2차 구현
515
42410a75c   김태훈   오타 수정
516
  realtime_data OvenStatistics::getPartsRealtimeData(void){
6a965b9f1   고영탁   엔지니어 모드 2차 구현
517
518
      return realdata;
  }
42410a75c   김태훈   오타 수정
519
  uint8_t OvenStatistics::getSensorTypeByIdx(uint16_t idx){
6a965b9f1   고영탁   엔지니어 모드 2차 구현
520
521
522
      if(idx > MAX_LOG_SENSOR)  return 0;
      return sensorTypeInfo[idx];
  }
42410a75c   김태훈   오타 수정
523
  type_temp OvenStatistics::getCurSensorValueByIdx(uint16_t idx){
6a965b9f1   고영탁   엔지니어 모드 2차 구현
524
525
      return curSensorValue[idx];
  }