Commit 569d7a56c4ec704a79af00d770d67062dfe00863
1 parent
b53c48f6a7
Exists in
master
and in
2 other branches
기능 구현
- 세척 중 강제로 종료될 경우 다음 실행 때 강제로 세척 진행
Showing
4 changed files
with
214 additions
and
97 deletions
Show diff stats
app/gui/oven_control/mainwindow.cpp
| ... | ... | @@ -11,6 +11,8 @@ |
| 11 | 11 | #include "programmingwindow.h" |
| 12 | 12 | #include "washwindow.h" |
| 13 | 13 | #include "configwindow.h" |
| 14 | +#include "ovenstatics.h" | |
| 15 | +#include "notipopupdlg.h" | |
| 14 | 16 | |
| 15 | 17 | MainWindow *MainWindow::instance = NULL; |
| 16 | 18 | |
| ... | ... | @@ -31,6 +33,8 @@ MainWindow::MainWindow(QWidget *parent) : |
| 31 | 33 | connect(button, &QPushButton::pressed, SoundPlayer::playClick); |
| 32 | 34 | connect(button, SIGNAL(clicked()), SLOT(setFocus())); |
| 33 | 35 | } |
| 36 | + | |
| 37 | + QTimer::singleShot(0, this, SLOT(checkPrevWash())); | |
| 34 | 38 | } |
| 35 | 39 | |
| 36 | 40 | MainWindow::~MainWindow() |
| ... | ... | @@ -117,6 +121,18 @@ void MainWindow::onEncoderClicked(QWidget *clicked) |
| 117 | 121 | b->click(); |
| 118 | 122 | } |
| 119 | 123 | |
| 124 | +void MainWindow::checkPrevWash() | |
| 125 | +{ | |
| 126 | + if (OvenStatistics::getInstance()->loadWashState()) | |
| 127 | + { | |
| 128 | + NotiPopupDlg *d = new NotiPopupDlg(this, tr("세척이 정상적으로 종료되지 않아\n반드시 세척통을 자동 세척해야 합니다.\n내부를 비워주세요")); | |
| 129 | + d->setWindowModality(Qt::WindowModal); | |
| 130 | + d->show(); | |
| 131 | + | |
| 132 | + connect(d, SIGNAL(accepted()), SLOT(on_washButton_clicked())); | |
| 133 | + } | |
| 134 | +} | |
| 135 | + | |
| 120 | 136 | void MainWindow::showManualCookWindow(Define::Mode mode) |
| 121 | 137 | { |
| 122 | 138 | ManualCookWindow *w = new ManualCookWindow(this, mode); | ... | ... |
app/gui/oven_control/mainwindow.h
app/gui/oven_control/washwindow.cpp
| ... | ... | @@ -8,6 +8,7 @@ |
| 8 | 8 | #include "dirtylevel.h" |
| 9 | 9 | #include "configwindow.h" |
| 10 | 10 | #include "mainwindow.h" |
| 11 | +#include "ovenstatics.h" | |
| 11 | 12 | |
| 12 | 13 | WashWindow::WashWindow(QWidget *parent) : |
| 13 | 14 | QMainWindow(parent), |
| ... | ... | @@ -56,6 +57,30 @@ WashWindow::WashWindow(QWidget *parent) : |
| 56 | 57 | updateGauge(); |
| 57 | 58 | |
| 58 | 59 | setFocus(); |
| 60 | + | |
| 61 | + if (OvenStatistics::getInstance()->loadWashState()) | |
| 62 | + { | |
| 63 | + // Start Cleaning Steam Generator | |
| 64 | + state = RequestClean; | |
| 65 | + | |
| 66 | + udp->set(TG_OVEN_MODE, 2); | |
| 67 | + udp->set(TG_CLEAN_TYPE, 6); | |
| 68 | + udp->turnOn(TG_CLEANING); | |
| 69 | + | |
| 70 | + ui->animation->clear(); | |
| 71 | + | |
| 72 | + ui->animation->load(":/images/animation/wash_01.png"); | |
| 73 | + ui->animation->load(":/images/animation/wash_02.png"); | |
| 74 | + ui->animation->load(":/images/animation/wash_03.png"); | |
| 75 | + ui->animation->load(":/images/animation/wash_04.png"); | |
| 76 | + ui->washStepGauge->setValue(0); | |
| 77 | + ui->titleLabel->setText(tr("스팀통헹굼 진행 중입니다.")); | |
| 78 | + ui->descLabel->setText(tr("완료될 때까지 문을 열지 마세요.")); | |
| 79 | + ui->washStepTypeLabel->setText(""); | |
| 80 | + ui->washStepCountLabel->setText(""); | |
| 81 | + | |
| 82 | + ui->upperStack->setCurrentIndex(1); | |
| 83 | + } | |
| 59 | 84 | } |
| 60 | 85 | |
| 61 | 86 | WashWindow::~WashWindow() |
| ... | ... | @@ -100,13 +125,13 @@ void WashWindow::keyReleaseEvent(QKeyEvent *event) |
| 100 | 125 | |
| 101 | 126 | void WashWindow::start(int type) |
| 102 | 127 | { |
| 103 | - if (selected) | |
| 128 | + if (state != Idle) | |
| 104 | 129 | return; |
| 105 | 130 | |
| 106 | 131 | if (type < 1 || type > 5) |
| 107 | 132 | return; |
| 108 | 133 | |
| 109 | - selected = true; | |
| 134 | + state = OpenDoor; | |
| 110 | 135 | |
| 111 | 136 | this->type = type; |
| 112 | 137 | |
| ... | ... | @@ -125,13 +150,11 @@ void WashWindow::start(int type) |
| 125 | 150 | |
| 126 | 151 | void WashWindow::stop() |
| 127 | 152 | { |
| 128 | - if (!started) | |
| 153 | + if (state != Request && state != Running) | |
| 129 | 154 | return; |
| 130 | 155 | |
| 131 | - if (canceled) | |
| 132 | - return; | |
| 156 | + state = Stopping; | |
| 133 | 157 | |
| 134 | - canceled = true; | |
| 135 | 158 | udp->turnOff(TG_CLEANING); |
| 136 | 159 | } |
| 137 | 160 | |
| ... | ... | @@ -146,22 +169,69 @@ void WashWindow::updateGauge() |
| 146 | 169 | ui->stateSlider->setValue(DirtyLevel::state()); |
| 147 | 170 | } |
| 148 | 171 | |
| 172 | +void WashWindow::updateView() | |
| 173 | +{ | |
| 174 | + const oven_control_t &control = udp->getControl(); | |
| 175 | + if (control.clean_total != 0 && control.clean_step != 0 && control.clean_step_type != 0) | |
| 176 | + { | |
| 177 | + ui->washStepGauge->setMaximum(control.clean_total); | |
| 178 | + ui->washStepGauge->setValue(control.clean_step); | |
| 179 | + ui->washStepCountLabel->setText(QString().sprintf("%d/%d", control.clean_step, control.clean_total)); | |
| 180 | + | |
| 181 | + switch (control.clean_step_type) | |
| 182 | + { | |
| 183 | + case 1: | |
| 184 | + ui->washStepTypeLabel->setText(tr("내부 헹굼 진행 중입니다.")); | |
| 185 | + break; | |
| 186 | + case 2: | |
| 187 | + ui->washStepTypeLabel->setText(tr("스팀 급수 진행 중입니다.")); | |
| 188 | + break; | |
| 189 | + case 3: | |
| 190 | + ui->washStepTypeLabel->setText(tr("내부 팬 세척 진행 중입니다.")); | |
| 191 | + break; | |
| 192 | + case 4: | |
| 193 | + ui->washStepTypeLabel->setText(tr("내부 스팀 불림 진행 중입니다.")); | |
| 194 | + break; | |
| 195 | + case 5: | |
| 196 | + ui->washStepTypeLabel->setText(tr("내부 강 세척 진행 중입니다.")); | |
| 197 | + break; | |
| 198 | + case 6: | |
| 199 | + ui->washStepTypeLabel->setText(tr("내부 상부 세척 진행 중입니다.")); | |
| 200 | + break; | |
| 201 | + case 7: | |
| 202 | + ui->washStepTypeLabel->setText(tr("내부 스팀 세척 진행 중입니다.")); | |
| 203 | + break; | |
| 204 | + case 8: | |
| 205 | + ui->washStepTypeLabel->setText(tr("세척 종료 진행 중입니다.")); | |
| 206 | + break; | |
| 207 | + case 9: | |
| 208 | + ui->washStepTypeLabel->setText(tr("세제 세척수 만들기 진행 중입니다.")); | |
| 209 | + break; | |
| 210 | + case 10: | |
| 211 | + ui->washStepTypeLabel->setText(tr("세제 세척수 헹굼 진행 중입니다.")); | |
| 212 | + break; | |
| 213 | + case 11: | |
| 214 | + ui->washStepTypeLabel->setText(tr("하부 탱크 세척수 만들기 진행 중입니다.")); | |
| 215 | + break; | |
| 216 | + } | |
| 217 | + } | |
| 218 | +} | |
| 219 | + | |
| 149 | 220 | void WashWindow::onChanged() |
| 150 | 221 | { |
| 151 | - if (!selected) | |
| 222 | + if (state == Idle) | |
| 152 | 223 | return; |
| 153 | 224 | |
| 154 | - oven_state_t state; | |
| 155 | - udp->fillData(state); | |
| 156 | - | |
| 157 | - if (!opened) | |
| 225 | + switch (state) | |
| 158 | 226 | { |
| 159 | - if (state.door_state) | |
| 227 | + case Idle: | |
| 228 | + return; | |
| 229 | + case OpenDoor: | |
| 230 | + if (udp->getData().door_state) | |
| 160 | 231 | { |
| 161 | - opened = true; | |
| 232 | + state = CloseDoor; | |
| 162 | 233 | |
| 163 | 234 | ui->animation->clear(); |
| 164 | - | |
| 165 | 235 | ui->animation->load(":/images/animation/door_big_09.png"); |
| 166 | 236 | ui->animation->load(":/images/animation/door_big_08.png"); |
| 167 | 237 | ui->animation->load(":/images/animation/door_big_07.png"); |
| ... | ... | @@ -173,12 +243,11 @@ void WashWindow::onChanged() |
| 173 | 243 | ui->animation->load(":/images/animation/door_big_01.png"); |
| 174 | 244 | ui->closeDoorArrow->show(); |
| 175 | 245 | } |
| 176 | - } | |
| 177 | - else if (!started) | |
| 178 | - { | |
| 179 | - if (!state.door_state) | |
| 246 | + break; | |
| 247 | + case CloseDoor: | |
| 248 | + if (!udp->getData().door_state) | |
| 180 | 249 | { |
| 181 | - started = true; | |
| 250 | + state = Request; | |
| 182 | 251 | |
| 183 | 252 | SoundPlayer::playStart(); |
| 184 | 253 | |
| ... | ... | @@ -199,104 +268,118 @@ void WashWindow::onChanged() |
| 199 | 268 | |
| 200 | 269 | udp->set(TG_CLEAN_TYPE, type); |
| 201 | 270 | udp->turnOn(TG_CLEANING); |
| 202 | - } | |
| 203 | - } | |
| 204 | - else if (state.cleaning_sate) | |
| 205 | - { | |
| 206 | - if (!run) | |
| 207 | - run = true; | |
| 208 | 271 | |
| 209 | - oven_control_t control; | |
| 210 | - udp->fillControl(control); | |
| 272 | + OvenStatistics::getInstance()->setWashState(true); | |
| 273 | + } | |
| 274 | + break; | |
| 275 | + case Request: | |
| 276 | + if (udp->getData().cleaning_sate) | |
| 277 | + { | |
| 278 | + state = Running; | |
| 211 | 279 | |
| 212 | - if (control.clean_total != 0 && control.clean_step != 0 && control.clean_step_type != 0) | |
| 280 | + updateView(); | |
| 281 | + } | |
| 282 | + else | |
| 283 | + updateView(); | |
| 284 | + break; | |
| 285 | + case Running: | |
| 286 | + if (udp->getData().cleaning_sate) | |
| 213 | 287 | { |
| 214 | - ui->washStepGauge->setMaximum(control.clean_total); | |
| 215 | - ui->washStepGauge->setValue(control.clean_step); | |
| 216 | - ui->washStepCountLabel->setText(QString().sprintf("%d/%d", control.clean_step, control.clean_total)); | |
| 217 | - | |
| 218 | - switch (control.clean_step_type) | |
| 219 | - { | |
| 220 | - case 1: | |
| 221 | - ui->washStepTypeLabel->setText(tr("내부 헹굼 진행 중입니다.")); | |
| 222 | - break; | |
| 223 | - case 2: | |
| 224 | - ui->washStepTypeLabel->setText(tr("스팀 급수 진행 중입니다.")); | |
| 225 | - break; | |
| 226 | - case 3: | |
| 227 | - ui->washStepTypeLabel->setText(tr("내부 팬 세척 진행 중입니다.")); | |
| 228 | - break; | |
| 229 | - case 4: | |
| 230 | - ui->washStepTypeLabel->setText(tr("내부 스팀 불림 진행 중입니다.")); | |
| 231 | - break; | |
| 232 | - case 5: | |
| 233 | - ui->washStepTypeLabel->setText(tr("내부 강 세척 진행 중입니다.")); | |
| 234 | - break; | |
| 235 | - case 6: | |
| 236 | - ui->washStepTypeLabel->setText(tr("내부 상부 세척 진행 중입니다.")); | |
| 237 | - break; | |
| 238 | - case 7: | |
| 239 | - ui->washStepTypeLabel->setText(tr("내부 스팀 세척 진행 중입니다.")); | |
| 240 | - break; | |
| 241 | - case 8: | |
| 242 | - ui->washStepTypeLabel->setText(tr("세척 종료 진행 중입니다.")); | |
| 243 | - break; | |
| 244 | - case 9: | |
| 245 | - ui->washStepTypeLabel->setText(tr("세제 세척수 만들기 진행 중입니다.")); | |
| 246 | - break; | |
| 247 | - case 10: | |
| 248 | - ui->washStepTypeLabel->setText(tr("세제 세척수 헹굼 진행 중입니다.")); | |
| 249 | - break; | |
| 250 | - case 11: | |
| 251 | - ui->washStepTypeLabel->setText(tr("하부 탱크 세척수 만들기 진행 중입니다.")); | |
| 252 | - break; | |
| 253 | - } | |
| 288 | + updateView(); | |
| 254 | 289 | } |
| 255 | - } | |
| 256 | - else if (canceled) | |
| 257 | - { | |
| 258 | - SoundPlayer::playStop(); | |
| 290 | + else | |
| 291 | + { | |
| 292 | + state = Idle; | |
| 259 | 293 | |
| 260 | - close(); | |
| 261 | - } | |
| 262 | - else if (run) | |
| 263 | - { | |
| 264 | - SoundPlayer::playStop(); | |
| 265 | - DirtyLevel::wash(type); | |
| 294 | + SoundPlayer::playStop(); | |
| 295 | + DirtyLevel::wash(type); | |
| 296 | + OvenStatistics::getInstance()->setWashState(false); | |
| 266 | 297 | |
| 267 | - ui->titleLabel->setText(tr("세척이 종료되었습니다")); | |
| 268 | - ui->descLabel->setText(""); | |
| 269 | - ui->washStepTypeLabel->setText(""); | |
| 270 | - ui->washStepCountLabel->setText(""); | |
| 298 | + ui->titleLabel->setText(tr("세척이 종료되었습니다")); | |
| 299 | + ui->descLabel->setText(""); | |
| 300 | + ui->washStepTypeLabel->setText(""); | |
| 301 | + ui->washStepCountLabel->setText(""); | |
| 271 | 302 | |
| 272 | - ui->animation->stop(); | |
| 273 | - ui->animation->clear(); | |
| 274 | - ui->animation->load(":/images/animation/wash_04.png"); | |
| 303 | + ui->animation->stop(); | |
| 304 | + ui->animation->clear(); | |
| 305 | + ui->animation->load(":/images/animation/wash_04.png"); | |
| 275 | 306 | |
| 276 | - returnToClockTimer.start(); | |
| 307 | + returnToClockTimer.start(); | |
| 277 | 308 | |
| 278 | - selected = false; | |
| 279 | - opened = false; | |
| 280 | - started = false; | |
| 281 | - run = false; | |
| 309 | + updateGauge(); | |
| 310 | + } | |
| 311 | + break; | |
| 312 | + case Stopping: | |
| 313 | + if (!udp->getData().cleaning_sate) | |
| 314 | + { | |
| 315 | + SoundPlayer::playStop(); | |
| 316 | + OvenStatistics::getInstance()->setWashState(false); | |
| 282 | 317 | |
| 283 | - updateGauge(); | |
| 318 | + close(); | |
| 319 | + } | |
| 320 | + else | |
| 321 | + updateView(); | |
| 322 | + break; | |
| 323 | + case RequestClean: | |
| 324 | + if (udp->getData().cleaning_sate) | |
| 325 | + { | |
| 326 | + state = RunningClean; | |
| 327 | + | |
| 328 | + updateView(); | |
| 329 | + } | |
| 330 | + else | |
| 331 | + updateView(); | |
| 332 | + break; | |
| 333 | + case RunningClean: | |
| 334 | + if (udp->getData().cleaning_sate) | |
| 335 | + { | |
| 336 | + updateView(); | |
| 337 | + } | |
| 338 | + else | |
| 339 | + { | |
| 340 | + OvenStatistics::getInstance()->setWashState(false); | |
| 341 | + | |
| 342 | + ui->titleLabel->setText(tr("세척이 종료되었습니다")); | |
| 343 | + ui->descLabel->setText(""); | |
| 344 | + ui->washStepTypeLabel->setText(""); | |
| 345 | + ui->washStepCountLabel->setText(""); | |
| 346 | + | |
| 347 | + ui->animation->stop(); | |
| 348 | + ui->animation->clear(); | |
| 349 | + ui->animation->load(":/images/animation/wash_04.png"); | |
| 350 | + | |
| 351 | + returnToClockTimer.start(); | |
| 352 | + } | |
| 284 | 353 | } |
| 285 | 354 | } |
| 286 | 355 | |
| 287 | 356 | void WashWindow::on_backButton_clicked() |
| 288 | 357 | { |
| 289 | - if (started) | |
| 290 | - stop(); | |
| 291 | - else | |
| 358 | + switch (state) | |
| 359 | + { | |
| 360 | + case Idle: | |
| 361 | + case OpenDoor: | |
| 362 | + case CloseDoor: | |
| 292 | 363 | close(); |
| 364 | + break; | |
| 365 | + case Request: | |
| 366 | + case Running: | |
| 367 | + stop(); | |
| 368 | + break; | |
| 369 | + case Stopping: | |
| 370 | + case RequestClean: | |
| 371 | + case RunningClean: | |
| 372 | + return; | |
| 373 | + } | |
| 293 | 374 | } |
| 294 | 375 | |
| 295 | 376 | void WashWindow::on_configButton_clicked() |
| 296 | 377 | { |
| 297 | - if (started) | |
| 298 | - stop(); | |
| 299 | - else | |
| 378 | + switch (state) | |
| 379 | + { | |
| 380 | + case Idle: | |
| 381 | + case OpenDoor: | |
| 382 | + case CloseDoor: | |
| 300 | 383 | { |
| 301 | 384 | ConfigWindow *w = new ConfigWindow(MainWindow::getInstance()); |
| 302 | 385 | w->setWindowModality(Qt::WindowModal); |
| ... | ... | @@ -304,6 +387,16 @@ void WashWindow::on_configButton_clicked() |
| 304 | 387 | w->raise(); |
| 305 | 388 | |
| 306 | 389 | MainWindow::jump(w); |
| 390 | + break; | |
| 391 | + } | |
| 392 | + case Request: | |
| 393 | + case Running: | |
| 394 | + stop(); | |
| 395 | + break; | |
| 396 | + case Stopping: | |
| 397 | + case RequestClean: | |
| 398 | + case RunningClean: | |
| 399 | + return; | |
| 307 | 400 | } |
| 308 | 401 | } |
| 309 | 402 | ... | ... |
app/gui/oven_control/washwindow.h
| ... | ... | @@ -27,6 +27,7 @@ private slots: |
| 27 | 27 | void stop(); |
| 28 | 28 | void returnToClock(); |
| 29 | 29 | void updateGauge(); |
| 30 | + void updateView(); | |
| 30 | 31 | |
| 31 | 32 | void onChanged(); |
| 32 | 33 | |
| ... | ... | @@ -38,6 +39,11 @@ private: |
| 38 | 39 | Ui::WashWindow *ui; |
| 39 | 40 | UdpHandler *udp; |
| 40 | 41 | |
| 42 | + enum State { | |
| 43 | + Idle, OpenDoor, CloseDoor, Request, Running, Stopping, | |
| 44 | + RequestClean, RunningClean | |
| 45 | + } state = Idle; | |
| 46 | + | |
| 41 | 47 | bool selected; |
| 42 | 48 | bool opened; |
| 43 | 49 | bool started; | ... | ... |