Skip to content

Commit

Permalink
fix code structure, say "malfunction"
Browse files Browse the repository at this point in the history
  • Loading branch information
thinkyhead committed Dec 31, 2021
1 parent 1b50f78 commit 66139b6
Show file tree
Hide file tree
Showing 6 changed files with 22 additions and 32 deletions.
5 changes: 1 addition & 4 deletions Marlin/Configuration_adv.h
Original file line number Diff line number Diff line change
Expand Up @@ -350,10 +350,7 @@
#endif

#if ANY(THERMAL_PROTECTION_HOTENDS, THERMAL_PROTECTION_BED, THERMAL_PROTECTION_CHAMBER, THERMAL_PROTECTION_COOLER)
/**
* Detect malfunctions in temperature updating mechanism.
*/
#define THERMAL_PROTECTION_VARIANCE_MONITOR
#define THERMAL_PROTECTION_VARIANCE_MONITOR // Detect a malfunctions preventing temperature updates
#endif

#if ENABLED(PIDTEMP)
Expand Down
2 changes: 1 addition & 1 deletion Marlin/src/core/language.h
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@
#define STR_REDUNDANCY "Heater switched off. Temperature difference between temp sensors is too high !"
#define STR_T_HEATING_FAILED "Heating failed"
#define STR_T_THERMAL_RUNAWAY "Thermal Runaway"
#define STR_T_TEMP_NOT_UPDATING "Temperature not updating"
#define STR_T_MALFUNCTION "Thermal Malfunction"
#define STR_T_MAXTEMP "MAXTEMP triggered"
#define STR_T_MINTEMP "MINTEMP triggered"
#define STR_ERR_PROBING_FAILED "Probing Failed"
Expand Down
2 changes: 1 addition & 1 deletion Marlin/src/lcd/language/language_el.h
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ namespace Language_el {
LSTR MSG_HEATING_FAILED_LCD = _UxGT("Αποτυχία θέρμανσης");
LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("ΠΛΕΟΝΑΖΟΥΣΑ ΘΕΡΜΟΤΗΤΑ");
LSTR MSG_THERMAL_RUNAWAY = _UxGT("ΘΕΡΜΙΚΗ ΔΙΑΦΥΓΗ");
LSTR MSG_TEMP_NOT_UPDATING = _UxGT("ΜΗ ΕΝΗΜΕΡΩΣΗ ΘΕΡΜΟΚΡ.");
LSTR MSG_TEMP_MALFUNCTION = _UxGT("ΘΕΡΜΙΚΗ ΔΥΣΛΕΙΤΟΥΡΓΙΑ");
LSTR MSG_ERR_MAXTEMP = _UxGT("ΠΕΡΙΤΤΗ ΘΕΡΜΟΚΡΑΣΙΑ");
LSTR MSG_ERR_MINTEMP = _UxGT("ΑΝΕΠΑΡΚΗΣ ΘΕΡΜΟΚΡΑΣΙΑ");
LSTR MSG_HALTED = _UxGT("Εκτυπωτής διεκόπη");
Expand Down
2 changes: 1 addition & 1 deletion Marlin/src/lcd/language/language_en.h
Original file line number Diff line number Diff line change
Expand Up @@ -533,7 +533,7 @@ namespace Language_en {
LSTR MSG_HEATING_FAILED_LCD = _UxGT("Heating Failed");
LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Err: REDUNDANT TEMP");
LSTR MSG_THERMAL_RUNAWAY = _UxGT("THERMAL RUNAWAY");
LSTR MSG_TEMP_NOT_UPDATING = _UxGT("TEMP NOT UPDATING");
LSTR MSG_TEMP_MALFUNCTION = _UxGT("TEMP MALFUNCTION");
LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("BED THERMAL RUNAWAY");
LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("CHAMBER T. RUNAWAY");
LSTR MSG_THERMAL_RUNAWAY_COOLER = _UxGT("Cooler Runaway");
Expand Down
36 changes: 15 additions & 21 deletions Marlin/src/module/temperature.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@
Temperature thermalManager;

PGMSTR(str_t_thermal_runaway, STR_T_THERMAL_RUNAWAY);
PGMSTR(str_t_temp_not_updating, STR_T_TEMP_NOT_UPDATING);
PGMSTR(str_t_temp_malfunction, STR_T_MALFUNCTION);
PGMSTR(str_t_heating_failed, STR_T_HEATING_FAILED);

/**
Expand Down Expand Up @@ -2572,7 +2572,7 @@ void Temperature::init() {
*/

#if ENABLED(THERMAL_PROTECTION_VARIANCE_MONITOR)
if (state == TRTempNotUpdating) { // temperature invariance may continue, regardless of heater state
if (state == TRMalfunction) { // temperature invariance may continue, regardless of heater state
variance += ABS(current - last_temp); // no need for detection window now, a single change in variance is enough
last_temp = current;
if (!NEAR_ZERO(variance)) {
Expand All @@ -2581,30 +2581,22 @@ void Temperature::init() {
state = TRStable; // resume from where we detected the problem
}
}

if (state == TRTempNotUpdating) {
} else
#endif
#if HEATER_IDLE_HANDLER

if (TERN1(THERMAL_PROTECTION_VARIANCE_MONITOR, state != TRMalfunction)) {
// If the heater idle timeout expires, restart
if (heater_idle[idle_index].timed_out) {
if (TERN0(HEATER_IDLE_HANDLER, heater_idle[idle_index].timed_out)) {
state = TRInactive;
running_temp = 0;
TERN_(THERMAL_PROTECTION_VARIANCE_MONITOR, variance_timer = 0);
}
else
#endif
{
// If the target temperature changes, restart
if (running_temp != target) {
else if (running_temp != target) { // If the target temperature changes, restart
running_temp = target;
state = target > 0 ? TRFirstHeating : TRInactive;
TERN_(THERMAL_PROTECTION_VARIANCE_MONITOR, variance_timer = 0);
}
}

millis_t now;

switch (state) {
// Inactive state waits for a target temperature to be set
case TRInactive: break;
Expand All @@ -2615,7 +2607,7 @@ void Temperature::init() {
state = TRStable;

// While the temperature is stable watch for a bad temperature
case TRStable:
case TRStable: {

#if ENABLED(ADAPTIVE_FAN_SLOWING)
if (adaptive_fan_slowing && heater_id >= 0) {
Expand All @@ -2632,17 +2624,17 @@ void Temperature::init() {
fan_speed_scaler[fan_index] = 0;
}
#endif
now = millis();

const millis_t now = millis();

#if ENABLED(THERMAL_PROTECTION_VARIANCE_MONITOR)
if (PENDING(now, variance_timer)) {
variance += ABS(current - last_temp);
last_temp = current;
}
else {
if (NEAR_ZERO(variance) && variance_timer > 0) { // valid variance monitoring window
state = TRTempNotUpdating;
if (NEAR_ZERO(variance) && variance_timer) { // valid variance monitoring window
state = TRMalfunction;
break;
}
variance_timer = now + SEC_TO_MS(period_seconds);
Expand All @@ -2658,14 +2650,16 @@ void Temperature::init() {
else if (PENDING(now, timer)) break;
state = TRRunaway;

} // fall through

case TRRunaway:
TERN_(HAS_DWIN_E3V2_BASIC, DWIN_Popup_Temperature(0));
_temp_error(heater_id, FPSTR(str_t_thermal_runaway), GET_TEXT_F(MSG_THERMAL_RUNAWAY));

#if ENABLED(THERMAL_PROTECTION_VARIANCE_MONITOR)
case TRTempNotUpdating:
case TRMalfunction:
TERN_(HAS_DWIN_E3V2_BASIC, DWIN_Popup_Temperature(0));
_temp_error(heater_id, FPSTR(str_t_temp_not_updating), GET_TEXT_F(MSG_TEMP_NOT_UPDATING));
_temp_error(heater_id, FPSTR(str_t_temp_malfunction), GET_TEXT_F(MSG_TEMP_MALFUNCTION));
#endif
}
}
Expand Down
7 changes: 3 additions & 4 deletions Marlin/src/module/temperature.h
Original file line number Diff line number Diff line change
Expand Up @@ -1035,8 +1035,8 @@ class Temperature {
return (RunawayIndex)_MAX(heater_id, 0);
}

enum TRState : char { TRInactive, TRFirstHeating, TRStable, TRRunaway
OPTARG(THERMAL_PROTECTION_VARIANCE_MONITOR, TRTempNotUpdating)
enum TRState : char { TRInactive, TRFirstHeating, TRStable, TRRunaway
OPTARG(THERMAL_PROTECTION_VARIANCE_MONITOR, TRMalfunction)
};

typedef struct {
Expand All @@ -1045,8 +1045,7 @@ class Temperature {
float running_temp;
#if ENABLED(THERMAL_PROTECTION_VARIANCE_MONITOR)
millis_t variance_timer = 0;
celsius_float_t last_temp = 0.0;
celsius_float_t variance = 0.0;
celsius_float_t last_temp = 0.0, variance = 0.0;
#endif
void run(const_celsius_float_t current, const_celsius_float_t target, const heater_id_t heater_id, const uint16_t period_seconds, const celsius_t hysteresis_degc);
} tr_state_machine_t;
Expand Down

0 comments on commit 66139b6

Please sign in to comment.