ソースを参照

gcode: set safety timer period

PavelSindler 6 年 前
コミット
c1425aece3
2 ファイル変更13 行追加2 行削除
  1. 12 1
      Firmware/Marlin_main.cpp
  2. 1 1
      Firmware/Timer.cpp

+ 12 - 1
Firmware/Marlin_main.cpp

@@ -194,6 +194,7 @@
 // M84  - Disable steppers until next move,
 //        or use S<seconds> to specify an inactivity timeout, after which the steppers will be disabled.  S0 to disable the timeout.
 // M85  - Set inactivity shutdown timer with parameter S<seconds>. To disable set zero (default)
+// M86  - Set safety timer expiration time with parameter S<seconds>; M86 S0 will disable safety timer
 // M92  - Set axis_steps_per_unit - same syntax as G92
 // M104 - Set extruder target temp
 // M105 - Read current temp
@@ -492,6 +493,7 @@ const int sensitive_pins[] = SENSITIVE_PINS; // Sensitive pin list for M42
 static unsigned long previous_millis_cmd = 0;
 unsigned long max_inactive_time = 0;
 static unsigned long stepper_inactive_time = DEFAULT_STEPPER_DEACTIVE_TIME*1000l;
+static unsigned long safetytimer_inactive_time = DEFAULT_SAFETYTIMER_TIME_MINS*60*1000ul;
 
 unsigned long starttime=0;
 unsigned long stoptime=0;
@@ -5434,6 +5436,15 @@ Sigma_Exit:
         max_inactive_time = code_value() * 1000;
       }
       break;
+#ifdef SAFETYTIMER
+	case 86: // M86 - set safety timer expiration time in seconds; M86 S0 will disable safety timer
+	  //when safety timer expires heatbed and nozzle target temperatures are set to zero
+	  if (code_seen('S')) {
+	    safetytimer_inactive_time = code_value() * 1000;
+		safetyTimer.start();
+	  }
+	  break;
+#endif
     case 92: // M92
       for(int8_t i=0; i < NUM_AXIS; i++)
       {
@@ -7436,7 +7447,7 @@ static void handleSafetyTimer()
     {
         safetyTimer.start();
     }
-    else if (safetyTimer.expired(1800000ul)) //30 min
+    else if (safetyTimer.expired(safetytimer_inactive_time)) //30 min
     {
         setTargetBed(0);
         setTargetHotend(0, 0);

+ 1 - 1
Firmware/Timer.cpp

@@ -43,7 +43,7 @@ void Timer<T>::start()
 template<typename T>
 bool Timer<T>::expired(T msPeriod)
 {
-    if (!m_isRunning) return false;
+    if ((!m_isRunning) || (!msPeriod)) return false;
     bool expired = false;
     const T now = millis();
     if (m_started <=  m_started + msPeriod)