Blame view

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