Преглед на файлове

🚑️ Fix thermal conditionals, structure

Scott Lahteine преди 2 години
родител
ревизия
b07887687e
променени са 3 файла, в които са добавени 25 реда и са изтрити 27 реда
  1. 4
    4
      Marlin/src/inc/Conditionals_post.h
  2. 16
    18
      Marlin/src/module/temperature.cpp
  3. 5
    5
      Marlin/src/module/temperature.h

+ 4
- 4
Marlin/src/inc/Conditionals_post.h Целия файл

@@ -2549,13 +2549,13 @@
2549 2549
 #endif
2550 2550
 
2551 2551
 // Thermal protection
2552
-#if BOTH(HAS_HEATED_BED, THERMAL_PROTECTION_BED)
2553
-  #define HAS_THERMALLY_PROTECTED_BED 1
2552
+#if !HAS_HEATED_BED
2553
+  #undef THERMAL_PROTECTION_BED
2554 2554
 #endif
2555 2555
 #if ENABLED(THERMAL_PROTECTION_HOTENDS) && WATCH_TEMP_PERIOD > 0
2556 2556
   #define WATCH_HOTENDS 1
2557 2557
 #endif
2558
-#if HAS_THERMALLY_PROTECTED_BED && WATCH_BED_TEMP_PERIOD > 0
2558
+#if ENABLED(THERMAL_PROTECTION_BED) && WATCH_BED_TEMP_PERIOD > 0
2559 2559
   #define WATCH_BED 1
2560 2560
 #endif
2561 2561
 #if BOTH(HAS_HEATED_CHAMBER, THERMAL_PROTECTION_CHAMBER) && WATCH_CHAMBER_TEMP_PERIOD > 0
@@ -2567,7 +2567,7 @@
2567 2567
 #if  (ENABLED(THERMAL_PROTECTION_HOTENDS) || !EXTRUDERS) \
2568 2568
   && (ENABLED(THERMAL_PROTECTION_BED)     || !HAS_HEATED_BED) \
2569 2569
   && (ENABLED(THERMAL_PROTECTION_CHAMBER) || !HAS_HEATED_CHAMBER) \
2570
-  && (ENABLED(THERMAL_PROTECTION_COOLER) || !HAS_COOLER)
2570
+  && (ENABLED(THERMAL_PROTECTION_COOLER)  || !HAS_COOLER)
2571 2571
   #define THERMALLY_SAFE 1
2572 2572
 #endif
2573 2573
 

+ 16
- 18
Marlin/src/module/temperature.cpp Целия файл

@@ -1444,7 +1444,7 @@ void Temperature::manage_heater() {
1444 1444
 
1445 1445
       TERN_(HEATER_IDLE_HANDLER, heater_idle[IDLE_INDEX_BED].update(ms));
1446 1446
 
1447
-      #if HAS_THERMALLY_PROTECTED_BED
1447
+      #if ENABLED(THERMAL_PROTECTION_BED)
1448 1448
         tr_state_machine[RUNAWAY_IND_BED].run(temp_bed.celsius, temp_bed.target, H_BED, THERMAL_PROTECTION_BED_PERIOD, THERMAL_PROTECTION_BED_HYSTERESIS);
1449 1449
       #endif
1450 1450
 
@@ -2570,20 +2570,14 @@ void Temperature::init() {
2570 2570
       );
2571 2571
     */
2572 2572
 
2573
-    #if HEATER_IDLE_HANDLER
2574
-      // If the heater idle timeout expires, restart
2575
-      if (heater_idle[idle_index].timed_out) {
2576
-        state = TRInactive;
2577
-        running_temp = 0;
2578
-      }
2579
-      else
2580
-    #endif
2581
-    {
2582
-      // If the target temperature changes, restart
2583
-      if (running_temp != target) {
2584
-        running_temp = target;
2585
-        state = target > 0 ? TRFirstHeating : TRInactive;
2586
-      }
2573
+    // If the heater idle timeout expires, restart
2574
+    if (TERN0(HEATER_IDLE_HANDLER, heater_idle[idle_index].timed_out)) {
2575
+      state = TRInactive;
2576
+      running_temp = 0;
2577
+    }
2578
+    else if (running_temp != target) { // If the target temperature changes, restart
2579
+      running_temp = target;
2580
+      state = target > 0 ? TRFirstHeating : TRInactive;
2587 2581
     }
2588 2582
 
2589 2583
     switch (state) {
@@ -2596,7 +2590,7 @@ void Temperature::init() {
2596 2590
         state = TRStable;
2597 2591
 
2598 2592
       // While the temperature is stable watch for a bad temperature
2599
-      case TRStable:
2593
+      case TRStable: {
2600 2594
 
2601 2595
         #if ENABLED(ADAPTIVE_FAN_SLOWING)
2602 2596
           if (adaptive_fan_slowing && heater_id >= 0) {
@@ -2614,13 +2608,17 @@ void Temperature::init() {
2614 2608
           }
2615 2609
         #endif
2616 2610
 
2611
+        const millis_t now = millis();
2612
+
2617 2613
         if (current >= running_temp - hysteresis_degc) {
2618
-          timer = millis() + SEC_TO_MS(period_seconds);
2614
+          timer = now + SEC_TO_MS(period_seconds);
2619 2615
           break;
2620 2616
         }
2621
-        else if (PENDING(millis(), timer)) break;
2617
+        else if (PENDING(now, timer)) break;
2622 2618
         state = TRRunaway;
2623 2619
 
2620
+      } // fall through
2621
+
2624 2622
       case TRRunaway:
2625 2623
         TERN_(HAS_DWIN_E3V2_BASIC, DWIN_Popup_Temperature(0));
2626 2624
         _temp_error(heater_id, FPSTR(str_t_thermal_runaway), GET_TEXT_F(MSG_THERMAL_RUNAWAY));

+ 5
- 5
Marlin/src/module/temperature.h Целия файл

@@ -1009,7 +1009,7 @@ class Temperature {
1009 1009
     static void min_temp_error(const heater_id_t e);
1010 1010
     static void max_temp_error(const heater_id_t e);
1011 1011
 
1012
-    #define HAS_THERMAL_PROTECTION ANY(THERMAL_PROTECTION_HOTENDS, THERMAL_PROTECTION_CHAMBER, HAS_THERMALLY_PROTECTED_BED, THERMAL_PROTECTION_COOLER)
1012
+    #define HAS_THERMAL_PROTECTION ANY(THERMAL_PROTECTION_HOTENDS, THERMAL_PROTECTION_CHAMBER, THERMAL_PROTECTION_BED, THERMAL_PROTECTION_COOLER)
1013 1013
 
1014 1014
     #if HAS_THERMAL_PROTECTION
1015 1015
 
@@ -1021,7 +1021,7 @@ class Temperature {
1021 1021
           REPEAT(HOTENDS, _RUNAWAY_IND_E)
1022 1022
           #undef _RUNAWAY_IND_E
1023 1023
         #endif
1024
-        OPTARG(HAS_THERMALLY_PROTECTED_BED, RUNAWAY_IND_BED)
1024
+        OPTARG(THERMAL_PROTECTION_BED, RUNAWAY_IND_BED)
1025 1025
         OPTARG(THERMAL_PROTECTION_CHAMBER, RUNAWAY_IND_CHAMBER)
1026 1026
         OPTARG(THERMAL_PROTECTION_COOLER, RUNAWAY_IND_COOLER)
1027 1027
         , NR_HEATER_RUNAWAY
@@ -1029,9 +1029,9 @@ class Temperature {
1029 1029
 
1030 1030
       // Convert the given heater_id_t to runaway state array index
1031 1031
       static RunawayIndex runaway_index_for_id(const int8_t heater_id) {
1032
-        TERN_(HAS_THERMALLY_PROTECTED_CHAMBER, if (heater_id == H_CHAMBER) return RUNAWAY_IND_CHAMBER);
1033
-        TERN_(HAS_THERMALLY_PROTECTED_CHAMBER, if (heater_id == H_COOLER)  return RUNAWAY_IND_COOLER);
1034
-        TERN_(HAS_THERMALLY_PROTECTED_BED,     if (heater_id == H_BED)     return RUNAWAY_IND_BED);
1032
+        TERN_(THERMAL_PROTECTION_CHAMBER, if (heater_id == H_CHAMBER) return RUNAWAY_IND_CHAMBER);
1033
+        TERN_(THERMAL_PROTECTION_COOLER,  if (heater_id == H_COOLER)  return RUNAWAY_IND_COOLER);
1034
+        TERN_(THERMAL_PROTECTION_BED,     if (heater_id == H_BED)     return RUNAWAY_IND_BED);
1035 1035
         return (RunawayIndex)_MAX(heater_id, 0);
1036 1036
       }
1037 1037
 

Loading…
Отказ
Запис