I have a problem with M108 or M600

I want to change the filament, the first time it comes to the park position, I send m108 when I change the filament, then I want to change the filament again, it comes to the park position but the filament does not insert what is the problem?

14:09:28.796: echo:enqueueing "M600"
14:09:34.943: M117 ETE 00:21:12
14:09:35.316: N1284 G1 F1500 X252.991 Y230.669 E114.93682
14:09:35.332: N1285 G0 F7200 X252.425 Y230.669
14:09:47.182: Warning: Communication timeout - resetting communication buffer.
14:09:47.182: Connection status: Buffered:84, Manual Commands: 1, Job Commands: 5000
14:09:47.182: Buffer used:84 Enforced free byte:45 lines stored:2
14:09:47.183: M117 Layer 4/49
14:09:47.183: N1286 G1 F1500 X241.17 Y241.925 E115.46625
14:09:47.183: N1287 G0 F7200 X241.17 Y241.359
14:10:00.437: echo:Insert filament and press button (or M108)
14:15:00.515: echo:Send M108 to heat nozzle


  • Hit button on printer to continue. Here it looks like it took to long and your printer does not send "busy" messages to tell it will not respond, so you got a timeout and server did send some commands. But nor buffer is full so printer does not see the M108 to react.
  • I have no screen(Which code should I send? If it is m108, I am sending it, but the printer does not continue when the second filament is changed.),
    I control my printer with rasberry pi (repetier server), I can change filament when I do it for the first time, but I have a problem when I want to change filament for the second time (5 minutes later). I am sending M108, the nozzles are getting hot but the printer does not continue waiting.
  • 15:08:20.604: M117 Layer 12/249
    15:08:20.638: N65217 G1 X253.421 Y250.408 E22.14789
    15:08:20.638: N65218 G1 X254.025 Y250.167 E22.16952
    15:08:20.669: N65219 G1 X254.595 Y249.935 E22.18999
    15:08:20.686: N65220 G1 X255.182 Y249.729 E22.21068
    15:08:20.717: N65221 G1 X255.786 Y249.504 E22.23212
    15:08:20.750: N65222 G1 X256.425 Y249.26 E22.25487
    15:08:21.394: echo:enqueueing "M600"
    15:08:21.398: N65223 G1 X256.488 Y249.776 E22.27216
    15:08:32.568: Warning: Communication timeout - resetting communication buffer.
    15:08:32.568: Connection status: Buffered:82, Manual Commands: 1, Job Commands: 5000
    15:08:32.568: Buffer used:82 Enforced free byte:24 lines stored:2
    15:08:32.568: M117 ETA 11:50:36 day 7
    15:08:32.568: N65224 G1 X256.499 Y250.316 E22.29012
    15:08:40.610: M117 ETE 20:42:06
    15:08:45.945: echo:Insert filament and press button (or M108)
    15:08:50.611: M117 Layer 12/249 

    I send M108 , but printer does not continous  also when I hit paused button , printer do not anything

      #define PAUSE_PARK_RETRACT_FEEDRATE         60  // (mm/s) Initial retract feedrate.
      #define PAUSE_PARK_RETRACT_LENGTH            2  // (mm) Initial retract.
                                                      // This short retract is done immediately, before parking the nozzle.
      #define FILAMENT_CHANGE_UNLOAD_FEEDRATE     10  // (mm/s) Unload filament feedrate. This can be pretty fast.
      #define FILAMENT_CHANGE_UNLOAD_ACCEL        25  // (mm/s^2) Lower acceleration may allow a faster feedrate.
      #define FILAMENT_CHANGE_UNLOAD_LENGTH      100  // (mm) The length of filament for a complete unload.
                                                      //   For Bowden, the full length of the tube and nozzle.
                                                      //   For direct drive, the full length of the nozzle.
                                                      //   Set to 0 for manual unloading.
      #define FILAMENT_CHANGE_SLOW_LOAD_FEEDRATE   6  // (mm/s) Slow move when starting load.
      #define FILAMENT_CHANGE_SLOW_LOAD_LENGTH    60 //0  // (mm) Slow length, to allow time to insert material.
                                                      // 0 to disable start loading and skip to fast load only
      #define FILAMENT_CHANGE_FAST_LOAD_FEEDRATE  6  // (mm/s) Load filament feedrate. This can be pretty fast.
      #define FILAMENT_CHANGE_FAST_LOAD_ACCEL     25  // (mm/s^2) Lower acceleration may allow a faster feedrate.
      #define FILAMENT_CHANGE_FAST_LOAD_LENGTH     60 //0  // (mm) Load length of filament, from extruder gear to nozzle.
                                                      //   For Bowden, the full length of the tube and nozzle.
                                                      //   For direct drive, the full length of the nozzle.
      //#define ADVANCED_PAUSE_CONTINUOUS_PURGE       // Purge continuously up to the purge length until interrupted.
      #define ADVANCED_PAUSE_PURGE_FEEDRATE        5//3  // (mm/s) Extrude feedrate (after loading). Should be slower than load feedrate.
      #define ADVANCED_PAUSE_PURGE_LENGTH         50  // (mm) Length to extrude after loading.
                                                      //   Set to 0 for manual extrusion.
                                                      //   Filament can be extruded repeatedly from the Filament Change menu
                                                      //   until extrusion is consistent, and to purge old filament.

                                                      // Filament Unload does a Retract, Delay, and Purge first:
      #define FILAMENT_UNLOAD_RETRACT_LENGTH      13  // (mm) Unload initial retract length.
      #define FILAMENT_UNLOAD_DELAY             5000 // (ms) Delay for the filament to cool after retract.
      #define FILAMENT_UNLOAD_PURGE_LENGTH         8  // (mm) An unretract is done, then this length is purged.

      #define PAUSE_PARK_NOZZLE_TIMEOUT           300 //45  // (seconds) Time limit before the nozzle is turned off for safety.
      #define FILAMENT_CHANGE_ALERT_BEEPS         10  // Number of alert beeps to play when a response is needed.
      #define PAUSE_PARK_NO_STEPPER_TIMEOUT           // Enable for XYZ steppers to stay powered on during filament change.

     // #define PARK_HEAD_ON_PAUSE                    // Park the nozzle during pause and filament change.
      //#define HOME_BEFORE_FILAMENT_CHANGE           // Ensure homing has been completed prior to parking for filament change

     // #define FILAMENT_LOAD_UNLOAD_GCODES           // Add M701/M702 Load/Unload G-codes, plus Load/Unload in the LCD Prepare menu.
      //#define FILAMENT_UNLOAD_ALL_EXTRUDERS         // Allow M702 to unload all extruders above a minimum target temp (as set by M302)
  • I am sending G1 X20 F100 and M104 S200 to printer, it does not react. what I type is not visible on the console.
  • The problem as I already tried to describe is that your filament change solution is meant for a printer controlled lcd display where you can hit a button. Firmware blocks communication until filament is changed. It allows to continue with M108 but that needs to be seen in the input buffer. So as soon as server sends more commands the buffer is full and will not reach the printer. We reserve some byte for emergency commands like M108 so we can always send one. Without knowing communication settings a complete log around the out of filament handling it is hard to say more.

    BTW: Why do you run out of filament after 5 minutes? If you just want the server to pause at special position DO NOT call M600 - add
    ;@pause Change Filament
    instead. That way server keeps control. Put your move commands in the start pause script of server to move to side.
    Also when you have no display, configure marlin to request host for pause than server keeps control and you also have no problem.
  • my goal is that while printing large, 2 or 3 times the filament may run out. I'm testing this. 1-) I pull the filament from the filament sensor while the printer is writing.  The printer goes to the parking nozzle position.

    2-) I see the M600 on the Raspberry console screen(I have Raspberry repetier server). And I install the new filament. Then I send M108 (if the nozzle is cold I send it 2 times)

    3-) The printer continues. (I assume the filament is over and I'm pulling the filament.)

    4-) I see the M600 command on the Raspberry screen. It also says press M108. I am sending M108. But this command is not seen on the raspberry screen.

    baud rate: 115200
    timeout: 3s
    //================================= Buffers =================================

    // @section hidden

    // The number of linear motions that can be in the plan at any give time.
    // THE BLOCK_BUFFER_SIZE NEEDS TO BE A POWER OF 2 (e.g. 8, 16, 32) because shifts and ors are used to do the ring-buffering.
      #define BLOCK_BUFFER_SIZE 16 // SD,LCD,Buttons take more memory, block buffer needs to be smaller
      #define BLOCK_BUFFER_SIZE 16 // maximize block buffer

    // @section serial

    // The ASCII buffer for serial input
    #define MAX_CMD_SIZE 96
    #define BUFSIZE 4

    // Transmission to Host Buffer Size
    // To save 386 bytes of PROGMEM (and TX_BUFFER_SIZE+3 bytes of RAM) set to 0.
    // To buffer a simple "ok" you need 4 bytes.
    // For ADVANCED_OK (M105) you need 32 bytes.
    // For debug-echo: 128 bytes for the optimal speed.
    // Other output doesn't need to be that speedy.
    // :[0, 2, 4, 8, 16, 32, 64, 128, 256]
    #define TX_BUFFER_SIZE 0

    // Host Receive Buffer Size
    // Without XON/XOFF flow control (see SERIAL_XON_XOFF below) 32 bytes should be enough.
    // To use flow control, set this buffer size to at least 1024 bytes.
    // :[0, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048]
    //#define RX_BUFFER_SIZE 1024

    #if RX_BUFFER_SIZE >= 1024
      // Enable to have the controller send XON/XOFF control characters to
      // the host to signal the RX buffer is becoming full.
      #define SERIAL_XON_XOFF

      // Enable this option to collect and display the maximum
      // RX queue usage after transferring a file to SD.

      // Enable this option to collect and display the number
      // of dropped bytes after a file transfer to SD.

    // Enable an emergency-command parser to intercept certain commands as they
    // enter the serial receive buffer, so they cannot be blocked.
    // Currently handles M108, M112, M410
    // Does not work on boards using AT90USB (USBCON) processors!

    // Bad Serial-connections can miss a received command by sending an 'ok'
    // Therefore some clients abort after 30 seconds in a timeout.
    // Some other clients start sending commands while receiving a 'wait'.
    // This "wait" is only sent when the buffer is empty. 1 second is a good value here.
    //#define NO_TIMEOUTS 1000 // Milliseconds

    // Some clients will have this feature soon. This could make the NO_TIMEOUTS unnecessary.
    //#define ADVANCED_OK

    // @section extras

  • I have to say that 

    I changed   like that //#define SERIAL_XON_XOFF 
    and I take  this message 

    2.2-) unknown command "M108" 
  • M112 is working 
  • You should also have HOST_PROMPT_SUPPORT enabled. That should show a dialog on server screen on filament runout. 

    M108 is handled in emergency parser which you have activated, no idea why disabling SERIAL_XON_XOFF causes it to not work. There is no condition to it:
    if (ISEOL(c)) {
    if (enabled) switch (state) {
    case EP_M108: wait_for_user = wait_for_heatup = false; break;

    at least inside the parser which as you see only sets the wait_for_user to false. Later it gets parsed again and should be ignored then.

    I need to think how I can simulate that. My marlin printers have wrong firmware settings and do not report anything:-(
  • I have ----------------------
            if (c == '\n') {
              switch (state) {
                case EP_M108:
                  wait_for_user = wait_for_heatup = false;

    I did not find to HOST_PROMPT_SUPPORT in the marlin ?????

    also I find


       * M108: Stop the waiting for heaters in M109, M190, M303. Does not affect the target temperature.
      inline void gcode_M108() { wait_for_heatup = false; } // wait_for_user = wait_for_heatup = false;

       * M112: Emergency Stop
      inline void gcode_M112() { kill(PSTR(MSG_KILLED)); }
  • M410 is working but M108 is unknown ??????
  • I sent M108 but no response because M108 is unknown command so that, I sent M112

    11:12:11.224: echo:Insert filament and press button (or M108)
    11:12:56.335: echo:Send M108 to heat nozzle
    11:13:34.036: N6484 M112
    11:13:34.993: start
    11:13:34.994: echo:Marlin 1.1.9
    11:13:34.994: echo: Last Updated: 2018-08-01 | Author: (none, default config)
    11:13:34.994: echo:Compiled: Apr 7 2021
    11:13:34.995: echo: Free Memory: 4679 PlannerBufferBytes: 1264
    11:13:34.995: echo:EEPROM version mismatch (EEPROM= Marlin=V55)
    11:13:34.995: echo:Hardcoded Default Settings Loaded
    11:13:34.995: N1 M110
    11:13:34.996: N3 M115
    11:13:34.996: N4 M220 S100
    11:13:34.996: N5 M221 S100
    11:13:34.996: N6 G92 E0
    11:13:34.996: N7 G90
    11:13:34.996: N8 M82
    11:13:36.128: N9 G21
    11:13:36.128: @getip
    11:13:36.177: FIRMWARE_NAME:Marlin 1.1.9 (Github) SOURCE_CODE_URL:https://github.com/MarlinFirmware/Marlin PROTOCOL_VERSION:1.0 MACHINE_TYPE:3D Printer EXTRUDER_COUNT:2 UUID:cede2a2f-41a2-4748-9b12-c55c62f367ff
    11:13:36.177: Cap:SERIAL_XON_XOFF:0
    11:13:36.177: Cap:EEPROM:1
    11:13:36.177: Cap:VOLUMETRIC:1
    11:13:36.178: Cap:AUTOREPORT_TEMP:1
    11:13:36.178: Cap:PROGRESS:0
    11:13:36.178: Cap:PRINT_JOB:1
    11:13:36.178: Cap:AUTOLEVEL:1
    11:13:36.178: Cap:Z_PROBE:1
    11:13:36.179: Cap:LEVELING_DATA:1
    11:13:36.179: Cap:BUILD_PERCENT:0
    11:13:36.179: Cap:SOFTWARE_POWER:0
    11:13:36.179: Cap:TOGGLE_LIGHTS:0
    11:13:36.179: Cap:CASE_LIGHT_BRIGHTNESS:0
    11:13:36.202: Cap:EMERGENCY_PARSER:1
    11:13:36.202: Cap:AUTOREPORT_SD_STATUS:0
    11:13:36.202: Cap:THERMAL_PROTECTION:1
    11:13:36.203: X:0.00 Y:0.00 Z:0.00 E:0.00 Count X:0 Y:0 Z:0
    11:13:36.204: echo:Unknown command: "G21"
    11:13:36.204: M117
    11:13:36.204: N10 M155 S1
    11:13:43.904: M117 Finished

  • this is 2nd filament changing

    How can resume the print  (which code I sent M108 but no response)
    18:14:23.314: echo:busy: paused for user
    18:14:23.342: T:117.26 /200.00 B:49.99 /50.00 T0:117.26 /200.00 T1:99.10 /0.00 @:0 B@:0 @0:0 @1:0
    18:14:24.332: T:116.55 /200.00 B:49.88 /50.00 T0:116.55 /200.00 T1:98.82 /0.00 @:0 B@:0 @0:0 @1:0

    Can you help me ?
  • My examples were from marlin 2.0.x, but you seem to use the old 1.x branch. So that explains why you do not have all options. CAPs show you have emergency parser " Cap:EMERGENCY_PARSER:1" so M108 should be available, but I'm no marlin expert. Maybe you just get the message becaus ethe command parser has it disabled since emergency parser already implements it. Better would of course just to do nothing.
  • I am trying to install marlin 2.0.x, can i install it via arduino ide?
  • Preferred way is now Visual Studio Code with PlatformIO but I think marlin still supports ide as well, but not 100% sure. 
  • 19:25:14.437 : N16 M119*29
    19:25:15.010 : Reporting endstop status
    19:25:15.010 : x_min: open
    19:25:15.010 : y_min: open
    19:25:15.012 : z_min: TRIGGERED
    19:25:15.012 : filament: TRIGGERED
    19:25:15.012 : filament 2: TRIGGERED
     Hi I send m119
    (bl touch and dont touch anywhere) is this mistake ??
    marlin 2.0.x bugfix
  • Is the bl touch blinking? Blinking is error state and indicated by triggered end stop. Otherwise the signal gets disabled after 10ms. If it does not blink you might need to invert end stop. No idea if that is necessary in marlin though.
Sign In or Register to comment.