From d0c1eee53be3d0b60d133251e22ba51cfc380db1 Mon Sep 17 00:00:00 2001 From: Marcio Teixeira Date: Fri, 19 Apr 2019 20:37:12 -0600 Subject: [PATCH] Add extra max-temp safety checks (#13756) --- Marlin/src/lcd/language/language_en.h | 6 ++++++ Marlin/src/module/temperature.cpp | 19 ++++++++++++------- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index c60f8b8051..d16cd44d47 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -930,6 +930,9 @@ #ifndef MSG_HEATING_FAILED_LCD_BED #define MSG_HEATING_FAILED_LCD_BED _UxGT("Bed heating failed") #endif +#ifndef MSG_HEATING_FAILED_LCD_CHAMBER + #define MSG_HEATING_FAILED_LCD_CHAMBER _UxGT("Chamber heating fail") +#endif #ifndef MSG_ERR_REDUNDANT_TEMP #define MSG_ERR_REDUNDANT_TEMP _UxGT("Err: REDUNDANT TEMP") #endif @@ -939,6 +942,9 @@ #ifndef MSG_THERMAL_RUNAWAY_BED #define MSG_THERMAL_RUNAWAY_BED _UxGT("BED THERMAL RUNAWAY") #endif +#ifndef MSG_THERMAL_RUNAWAY_CHAMBER + #define MSG_THERMAL_RUNAWAY_CHAMBER _UxGT("CHAMBER T. RUNAWAY") +#endif #ifndef MSG_ERR_MAXTEMP #define MSG_ERR_MAXTEMP _UxGT("Err: MAXTEMP") #endif diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 8f3361944d..4da8a377cd 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -86,17 +86,17 @@ Temperature thermalManager; */ #if HAS_HEATED_BED - #define _BED_PSTR(E) (E) == -1 ? PSTR(MSG ## _BED) : + #define _BED_PSTR(M,E) (E) == -1 ? PSTR(M ## _BED) : #else - #define _BED_PSTR(E) + #define _BED_PSTR(M,E) #endif #if HAS_HEATED_CHAMBER - #define _CHAMBER_PSTR(E) (E) == -2 ? PSTR(MSG ## _CHAMBER) : + #define _CHAMBER_PSTR(M,E) (E) == -2 ? PSTR(M ## _CHAMBER) : #else - #define _CHAMBER_PSTR(E) + #define _CHAMBER_PSTR(M,E) #endif -#define _E_PSTR(M,E,N) (HOTENDS >= (N) && (E) == (N)-1) ? PSTR(MSG_E##N " " M) : -#define TEMP_ERR_PSTR(M,E) _BED_PSTR(E) _CHAMBER_PSTR(E) _E_PSTR(M,E,2) _E_PSTR(M,E,3) _E_PSTR(M,E,4) _E_PSTR(M,E,5) _E_PSTR(M,E,6) PSTR(MSG_E1 " " M) +#define _E_PSTR(M,E,N) ((HOTENDS) >= (N) && (E) == (N)-1) ? PSTR(MSG_E##N " " M) : +#define TEMP_ERR_PSTR(M,E) _BED_PSTR(M,E) _CHAMBER_PSTR(M,E) _E_PSTR(M,E,2) _E_PSTR(M,E,3) _E_PSTR(M,E,4) _E_PSTR(M,E,5) _E_PSTR(M,E,6) PSTR(MSG_E1 " " M) // public: @@ -949,6 +949,8 @@ void Temperature::manage_heater() { #endif HOTEND_LOOP() { + if (degHotend(e) > temp_range[e].maxtemp) + temp_error(e, PSTR(MSG_T_THERMAL_RUNAWAY), TEMP_ERR_PSTR(MSG_THERMAL_RUNAWAY, e)); #if HEATER_IDLE_HANDLER hotend_idle[e].update(ms); @@ -1001,6 +1003,9 @@ void Temperature::manage_heater() { #if HAS_HEATED_BED + if (degBed() > BED_MAXTEMP) + temp_error(-1, PSTR(MSG_T_THERMAL_RUNAWAY), TEMP_ERR_PSTR(MSG_THERMAL_RUNAWAY, -1)); + #if WATCH_BED // Make sure temperature is increasing if (watch_bed.elapsed(ms)) { // Time to check the bed? @@ -2647,7 +2652,7 @@ void Temperature::isr() { void Temperature::set_heating_message(const uint8_t e) { const bool heating = isHeatingHotend(e); #if HOTENDS > 1 - ui.status_printf_P(0, heating ? PSTR("E%i " MSG_HEATING) : PSTR("E%i " MSG_COOLING), int(e + 1)); + ui.status_printf_P(0, heating ? PSTR("E%c " MSG_HEATING) : PSTR("E%c " MSG_COOLING), '1' + e); #else ui.set_status_P(heating ? PSTR("E " MSG_HEATING) : PSTR("E " MSG_COOLING)); #endif