Marlin: Print Aborted message stuck

Created on 19 Apr 2017  路  11Comments  路  Source: MarlinFirmware/Marlin

If I start a print from the SD (Graphical Display) and then stop the print. The message print aborted gets stuck on the front page. I can start a new print, preheat the hotend. The only way to get it to reset is to power off and back on.

Confirmed ! LCD & Controllers Solved

All 11 comments

Which LCD to you have enabled in configuration.h?

Try RCBugFix... as that works for me.

I'm on the latest as of a few days ago. This one: #define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER

Hmm.

In order to set another message on the LCD, you would use the Gcode M117.

Unless you instruct the firmware to display a different message, it will not update that part of the display.

I suggest adding an M117 with a message to your start gcode.

Example:
M117 Printing...

No it should change to show the Hot end heating message when I start a new print. I'm guessing there is something in the way that message is coded that doesn't allow it to be superseded.

@Tannoo can you check this in M104?

If M104 S parameter > Actual Hotend temperature, then display the heating message.
However, if it's all ready at the target temperature then the last message would stay on screen..
Perhaps an else statement is needed for a heating completed message?
Marlin_Main function gcode_M104
if (code_value_temp_abs() > thermalManager.degHotend(target_extruder)) LCD_MESSAGEPGM(MSG_HEATING);

Yes, I see that. E1 Heating... was displayed until I sent M104 S0.

That is due to this:

      if (code_value_temp_abs() <= (EXTRUDE_MINTEMP)/2) {
        print_job_timer.stop();
        LCD_MESSAGEPGM(WELCOME_MSG);

My MINTEMP is set to 170. So, M104 has to be set lower than 86 for the status message to change.

This is the full section to read the S parameter:

  if (code_seen('S')) {
    thermalManager.setTargetHotend(code_value_temp_abs(), target_extruder);
    #if ENABLED(DUAL_X_CARRIAGE)
      if (dual_x_carriage_mode == DXC_DUPLICATION_MODE && target_extruder == 0)
        thermalManager.setTargetHotend(code_value_temp_abs() == 0.0 ? 0.0 : code_value_temp_abs() + duplicate_extruder_temp_offset, 1);
    #endif

    #if ENABLED(PRINTJOB_TIMER_AUTOSTART)
      /**
       * Stop the timer at the end of print. Start is managed by 'heat and wait' M109.
       * We use half EXTRUDE_MINTEMP here to allow nozzles to be put into hot
       * standby mode, for instance in a dual extruder setup, without affecting
       * the running print timer.
       */
      if (code_value_temp_abs() <= (EXTRUDE_MINTEMP)/2) {
        print_job_timer.stop();
        LCD_MESSAGEPGM(WELCOME_MSG);
      }
    #endif

    if (code_value_temp_abs() > thermalManager.degHotend(target_extruder)) lcd_status_printf_P(0, PSTR("E%i %s"), target_extruder + 1, MSG_HEATING);
  }

I think we have some room for improvement.
We should either show the welcome message, or heating message, but should not keep the last message displayed which was "Aborted" in this case.

How about adding lcd_setstatus(MSG_PRINTING); in this function?

  /**
   * M24: Start or Resume SD Print
   */
  inline void gcode_M24() {
    #if ENABLED(PARK_HEAD_ON_PAUSE)
      move_back_on_resume();
    #endif

    card.startFileprint();
    print_job_timer.start();
    lcd_setstatus(MSG_PRINTING);
  }

I also am trying out this pause message here:

  /**
   * M25: Pause SD Print
   */
  inline void gcode_M25() {
    card.pauseSDPrint();
    print_job_timer.pause();
    lcd_setstatus(MSG_PAUSE_PRINT);

    #if ENABLED(PARK_HEAD_ON_PAUSE)
      enqueue_and_echo_commands_P(PSTR("M125")); // Must be enqueued with pauseSDPrint set to be last in the buffer
    #endif
  }

BTW In the start code is in CURA:

M117 Printing...

but the message is not changing.

Huzzah!

Was this page helpful?
0 / 5 - 0 ratings