230 lines
4.7 KiB
C++
230 lines
4.7 KiB
C++
|
|
||
|
void OvenCtl::handle_config_state() {
|
||
|
|
||
|
}
|
||
|
|
||
|
void OvenCtl::check_max_duration() {
|
||
|
if (disable_checks)
|
||
|
return;
|
||
|
if (time > profile.data[PI_TIME_MAX]) {
|
||
|
error_condition |= E_TIME_MAX;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void OvenCtl::check_Ts_duration_min() {
|
||
|
if (disable_checks)
|
||
|
return;
|
||
|
Tl_time_end = time;
|
||
|
if (time - Tl_time_start < profile.data[PI_TL_DURATION_MIN]) {
|
||
|
error_condition |= E_TL_TOO_SHORT;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void OvenCtl::check_Ts_duration_max() {
|
||
|
if (disable_checks)
|
||
|
return;
|
||
|
if (time - Ts_time_start > profile.data[PI_TL_DURATION_MAX]) {
|
||
|
error_condition |= E_TS_TOO_LONG;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
void OvenCtl::check_Tl_duration_min() {
|
||
|
if (disable_checks)
|
||
|
return;
|
||
|
Tl_time_end = time;
|
||
|
if (time - Tl_time_start < profile.data[PI_TL_DURATION_MIN]) {
|
||
|
error_condition |= E_TL_TOO_SHORT;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void OvenCtl::check_Tl_duration_max() {
|
||
|
if (disable_checks)
|
||
|
return;
|
||
|
if (time - Tl_time_start > profile.data[PI_TL_DURATION_MAX]) {
|
||
|
error_condition |= E_TL_TOO_LONG;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void OvenCtl::check_Tp_duration_min() {
|
||
|
Tp_time_end = time;
|
||
|
if (time - Tp_time_start < profile.data[PI_TP_DURATION_MIN]) {
|
||
|
error_condition |= E_TP_TOO_SHORT;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void OvenCtl::check_Tp_duration_max() {
|
||
|
if (disable_checks)
|
||
|
return;
|
||
|
if (time - Tp_time_start > profile.data[PI_TP_DURATION_MAX]) {
|
||
|
error_condition |= E_TP_TOO_LONG;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void OvenCtl::set_config_state() {
|
||
|
profile.print_config_state_0();
|
||
|
}
|
||
|
|
||
|
void OvenCtl::set_start_state() {
|
||
|
error_condition = 0;
|
||
|
profile_state = START_STATE;
|
||
|
get_temp();
|
||
|
last_temperature = temperature;
|
||
|
actual_dt = float(temperature) - last_temperature;
|
||
|
set_temp(profile.data[PI_TS_MAX], profile.data[PI_TS_MAX], 0, profile.data[PI_TS_RAMP_UP_MAX]);
|
||
|
lcd.clear();
|
||
|
}
|
||
|
|
||
|
|
||
|
void OvenCtl::set_preheat_state() {
|
||
|
// Serial.println("Changing profile_state to PREHEAT_STATE");
|
||
|
profile_state = PREHEAT_STATE;
|
||
|
}
|
||
|
|
||
|
|
||
|
void OvenCtl::set_ramp_up_state() {
|
||
|
set_temp(profile.data[PI_TP_MIN], profile.data[PI_TP_DURATION_MAX], profile.data[PI_TP_RAMP_UP_MIN], profile.data[PI_TP_RAMP_UP_MAX]);
|
||
|
profile_state = RAMP_UP_STATE;
|
||
|
}
|
||
|
|
||
|
|
||
|
void OvenCtl::set_tal_first_state() {
|
||
|
profile_state = TAL_FIRST_STATE;
|
||
|
}
|
||
|
|
||
|
|
||
|
void OvenCtl::set_peak_state() {
|
||
|
profile_state = PEAK_STATE;
|
||
|
}
|
||
|
|
||
|
|
||
|
void OvenCtl::set_tal_second_state() {
|
||
|
set_temp(0, 25, -3, -6);
|
||
|
profile_state = TAL_SECOND_STATE;
|
||
|
}
|
||
|
|
||
|
|
||
|
void OvenCtl::set_ramp_down_state() {
|
||
|
profile_state = RAMP_DOWN_STATE;
|
||
|
}
|
||
|
|
||
|
|
||
|
void OvenCtl::set_end_state() {
|
||
|
profile_state = END_STATE;
|
||
|
}
|
||
|
|
||
|
|
||
|
void OvenCtl::set_error_state() {
|
||
|
if (profile_state != ERROR_STATE) {
|
||
|
set_temp(0, 0, 0, 0);
|
||
|
profile_state = ERROR_STATE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
void OvenCtl::handle_start_state() {
|
||
|
check_max_duration();
|
||
|
if (temperature > profile.data[PI_TS_MIN]) {
|
||
|
Ts_time_start = time;
|
||
|
set_preheat_state();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
void OvenCtl::handle_preheat_state() {
|
||
|
check_Ts_duration_max();
|
||
|
check_max_duration();
|
||
|
if (temperature > profile.data[PI_TS_MAX]) {
|
||
|
check_Ts_duration_min();
|
||
|
set_ramp_up_state();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
void OvenCtl::handle_ramp_up_state() {
|
||
|
check_max_duration();
|
||
|
if (temperature > profile.data[PI_TL]) {
|
||
|
Tl_time_start = time;
|
||
|
set_tal_first_state();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
void OvenCtl::handle_tal_first_state() {
|
||
|
check_max_duration();
|
||
|
check_Tl_duration_max();
|
||
|
if (temperature > profile.data[PI_TP_MIN]) {
|
||
|
Tp_time_start = time;
|
||
|
set_peak_state();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
void OvenCtl::handle_peak_state() {
|
||
|
check_Tl_duration_max();
|
||
|
check_Tp_duration_max();
|
||
|
if (time - Tp_time_start > profile.data[PI_TP_DURATION_MAX]) {
|
||
|
check_Tp_duration_min();
|
||
|
set_tal_second_state();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
void OvenCtl::handle_tal_second_state() {
|
||
|
check_Tl_duration_max();
|
||
|
if (temperature < profile.data[PI_TL]) {
|
||
|
check_Tl_duration_min();
|
||
|
set_ramp_down_state();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void OvenCtl::handle_ramp_down_state() {
|
||
|
if (temperature < profile.data[PI_TS_MIN]) {
|
||
|
set_end_state();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
void OvenCtl::handle_end_state() {
|
||
|
}
|
||
|
|
||
|
|
||
|
void OvenCtl::handle_error_state() {
|
||
|
}
|
||
|
|
||
|
void OvenCtl::handle_profile_states() {
|
||
|
// switch (profile_state) {
|
||
|
// case START_STATE:
|
||
|
// handle_start_state();
|
||
|
// break;
|
||
|
// case PREHEAT_STATE:
|
||
|
// handle_preheat_state();
|
||
|
// break;
|
||
|
// case RAMP_UP_STATE:
|
||
|
// handle_ramp_up_state();
|
||
|
// break;
|
||
|
// case TAL_FIRST_STATE:
|
||
|
// handle_tal_first_state();
|
||
|
// break;
|
||
|
// case PEAK_STATE:
|
||
|
// handle_peak_state();
|
||
|
// break;
|
||
|
// case TAL_SECOND_STATE:
|
||
|
// Tl_time_end = time;
|
||
|
// handle_tal_second_state();
|
||
|
// break;
|
||
|
// case RAMP_DOWN_STATE:
|
||
|
// handle_ramp_down_state();
|
||
|
// break;
|
||
|
// case END_STATE:
|
||
|
// handle_end_state();
|
||
|
// break;
|
||
|
// case ERROR_STATE:
|
||
|
// handle_error_state();
|
||
|
// break;
|
||
|
// default:
|
||
|
// break;
|
||
|
// }
|
||
|
}
|
||
|
|