浏览代码

PFW-1386 Implement 'L' parameter for M701

It is only used when the MMU is disabled. With the MMU we use a defined ramming sequence.

When the MMU is disabled I borrowed the usages from Marlin 2.
The L parameter only defines the length for the "fast" load length.
Default value is 70mm, same as M600
Guðni Már Gilbert 2 年之前
父节点
当前提交
7e9166976f
共有 3 个文件被更改,包括 11 次插入7 次删除
  1. 1 1
      Firmware/Marlin.h
  2. 9 5
      Firmware/Marlin_main.cpp
  3. 1 1
      Firmware/ultralcd.cpp

+ 1 - 1
Firmware/Marlin.h

@@ -464,7 +464,7 @@ void gcode_M114();
 #if (defined(FANCHECK) && (((defined(TACH_0) && (TACH_0 >-1)) || (defined(TACH_1) && (TACH_1 > -1)))))
 void gcode_M123();
 #endif //FANCHECK and TACH_0 and TACH_1
-void gcode_M701(uint8_t mmuSlotIndex);
+void gcode_M701(float fastLoadLength, uint8_t mmuSlotIndex);
 
 #define UVLO !(PINE & (1<<4))
 

+ 9 - 5
Firmware/Marlin_main.cpp

@@ -3668,7 +3668,7 @@ static void gcode_M600(bool automatic, float x_position, float y_position, float
     custom_message_type = CustomMsg::Status;
 }
 
-void gcode_M701(uint8_t mmuSlotIndex){
+void gcode_M701(float fastLoadLength, uint8_t mmuSlotIndex){
     printf_P(PSTR("gcode_M701 begin\n"));
     
     FSensorBlockRunout fsBlockRunout;
@@ -3684,10 +3684,10 @@ void gcode_M701(uint8_t mmuSlotIndex){
         const int feed_mm_before_raising = 30;
         static_assert(feed_mm_before_raising <= FILAMENTCHANGE_FIRSTFEED);
 
-		lcd_setstatuspgm(_T(MSG_LOADING_FILAMENT));
+        lcd_setstatuspgm(_T(MSG_LOADING_FILAMENT));
 		current_position[E_AXIS] += FILAMENTCHANGE_FIRSTFEED - feed_mm_before_raising;
 		plan_buffer_line_curposXYZE(FILAMENTCHANGE_EFEED_FIRST); //fast sequence
-		st_synchronize();
+        st_synchronize();
 
 		raise_z_above(MIN_Z_FOR_LOAD, false);
 		current_position[E_AXIS] += feed_mm_before_raising;
@@ -8586,6 +8586,7 @@ Sigma_Exit:
     case 701:
     {
         uint8_t mmuSlotIndex = 0xffU;
+        float fastLoadLength = FILAMENTCHANGE_FIRSTFEED; // Only used without MMU
         if( MMU2::mmu2.Enabled() )
         {
             if( code_seen('P') || code_seen('T') ) {
@@ -8593,7 +8594,10 @@ Sigma_Exit:
             }
         }
 
-        // TODO: Implement L parameter
+        if (code_seen('L'))
+        {
+            fastLoadLength = code_value();
+        }
 
         enable_z();
         if (code_seen('Z'))
@@ -8605,7 +8609,7 @@ Sigma_Exit:
         }
         disable_z();
 
-        gcode_M701(mmuSlotIndex);
+        gcode_M701(fastLoadLength, mmuSlotIndex);
     }
     break;
 

+ 1 - 1
Firmware/ultralcd.cpp

@@ -3958,7 +3958,7 @@ static void lcd_wizard_load() {
     lcd_clear();
     lcd_puts_at_P(0, 2, _T(MSG_LOADING_FILAMENT));
     loading_flag = true;
-    gcode_M701(0);
+    gcode_M701(FILAMENTCHANGE_FIRSTFEED, 0);
 }
 
 bool lcd_autoDepleteEnabled()