Filament Runout fails to resume

I am having an issue with failed heating after a filament runout. The detection works as expected, as the printer parks, retracts the filament and prompts me. However, when I insert new filament and hit “resume,” the hotends do not reheat. They continue to cool despite the displayed target temperatures.

If I then try to set the temperature manually, I get get a “Heating Failed” error with a yellow triangle, prompting a power cycle and some hardware checks. After power cycling, the printer offers to resume, which I tap on, but the interface says “Resuming” at the top with a progress bar at 100% and only a “Finish Print” button available.

This is consistent, even if I respond immediately. In one test, the hotend had only cooled from 245°C to 230°C when I resumed, but it still wouldn’t reheat. The printer seems to enter a state where heating is disabled post-runout, and an unrecoverable print.

I am hoping this is a configuration issue. In case it is relevant, I am running Bjoern’s latest firmware and I print exclusively in “dual mode,” even if I am only using one extruder. Below is my machine start gcode. Please let me know if there is any further information needed.

MY START GCODE:

;Home all axes
G28

;Post-runout extrusion length
M412 D31

;Start with correct extruder.
T{initial_tool}

;SET the CORRECT bed temperature.
{if is_extruder_used[0] && is_extruder_used[1]}
{if first_layer_bed_temperature[1] > first_layer_bed_temperature[0]}
M140 S{first_layer_bed_temperature[1]}
{else}
M140 S{first_layer_bed_temperature[0]}
{endif}
{else}
M140 S{first_layer_bed_temperature[initial_tool]}
{endif}

;Start initial hotend.
M104 S{idle_temperature[initial_tool]}

;Start the second hotend, if both are being used.
{if is_extruder_used[0] && is_extruder_used[1]}
{if initial_tool == 0}
M104 S{idle_temperature[1]} T1
{else}
M104 S{idle_temperature[0]} T0
{endif}
{endif}

;Raise Z, then disable X steppers to gain access to nozzles for wiping.
G1 Z250
G28 X
M84 X

;Wait for initial hotend.
M109 S{idle_temperature[initial_tool]}

;WAIT for the CORRECT bed temperature.
{if is_extruder_used[0] && is_extruder_used[1]}
{if first_layer_bed_temperature[1] > first_layer_bed_temperature[0]}
M190 S{first_layer_bed_temperature[1]}
{else}
M190 S{first_layer_bed_temperature[0]}
{endif}
{else}
M190 S{first_layer_bed_temperature[initial_tool]}
{endif}

;Wait SEVEN MINUTES for thermal soak.
G4 S420

;Avoid two extruder crashes and perform Z Steppers Auto-Alignment.
G28 X
G34
G28 X

;Create and load mesh.
G29
M420 S1 Z7

;Start with correct extruder. Again.
T{initial_tool}

;Wait for first layer temperature.
M109 S[first_layer_temperature]

;Move Z Axis up.
G1 Z4.0 F3000

;Reset Extruder.
G92 E0

;Set E to Relative Positioning.
M83

;Initial priming line.
{if initial_tool==0}
G1 X-1.7 Y10.322 F7200
G1 Z.2 F1200
G1 F1020
G1 X-1.7 Y292.081 E10.11636
G1 X-1.762 Y292.728 E.02334
G1 X-1.923 Y293.286 E.02085
G1 X-2.245 Y293.933 E.02595
G1 X-2.672 Y294.487 E.02511
G1 X-2.867 Y294.891 E.01611
G1 X-2.878 Y295.297 E.01458
G1 X-2.768 Y295.563 E.01033
G1 X-2.563 Y295.768 E.01041
G1 X-2.295 Y295.879 E.01042
G1 X-2.005 Y295.878 E.01041
G1 X-1.737 Y295.768 E.0104
G1 X-1.532 Y295.563 E.01041
G1 X-1.42 Y295.291 E.01056
G1 X-1.4 Y295.145 E.00529
G1 X-1.4 Y10.227 E10.22979
G1 X-1.488 Y9.509 E.02597
G1 X-1.72 Y8.83 E.02576
G1 X-2.09 Y8.215 E.02577
G1 X-2.631 Y7.627 E.02869
G1 X-2.866 Y7.24 E.01626
G1 X-2.87 Y6.812 E.01537
G1 X-2.732 Y6.494 E.01245
G1 X-2.483 Y6.252 E.01247
G1 X-2.16 Y6.124 E.01247
G1 X-1.813 Y6.13 E.01246
G1 X-1.494 Y6.268 E.01248
G1 X-1.252 Y6.517 E.01247
G1 X-1.125 Y6.833 E.01223
G1 X-1.1 Y7.009 E.00638
G1 X-1.1 Y295.9 E10.37243
G1 F5760
G1 X-1.152 Y271.268 E-3.9
{else}
G1 X303.7 Y10.322 F7200
G1 Z.2 F1200
G1 F1020
G1 X303.7 Y292.081 E10.11636
G1 X303.762 Y292.728 E.02334
G1 X303.923 Y293.286 E.02085
G1 X304.245 Y293.933 E.02595
G1 X304.672 Y294.487 E.02511
G1 X304.867 Y294.891 E.01611
G1 X304.878 Y295.297 E.01458
G1 X304.768 Y295.563 E.01033
G1 X304.563 Y295.768 E.01041
G1 X304.295 Y295.879 E.01042
G1 X304.005 Y295.878 E.01041
G1 X303.737 Y295.768 E.0104
G1 X303.532 Y295.563 E.01041
G1 X303.42 Y295.291 E.01056
G1 X303.4 Y295.145 E.00529
G1 X303.4 Y10.227 E10.22979
G1 X303.488 Y9.509 E.02597
G1 X303.72 Y8.83 E.02576
G1 X304.09 Y8.215 E.02577
G1 X304.631 Y7.627 E.02869
G1 X304.866 Y7.24 E.01626
G1 X304.87 Y6.812 E.01537
G1 X304.732 Y6.494 E.01245
G1 X304.483 Y6.252 E.01247
G1 X304.16 Y6.124 E.01247
G1 X303.813 Y6.13 E.01246
G1 X303.494 Y6.268 E.01248
G1 X303.252 Y6.517 E.01247
G1 X303.125 Y6.833 E.01223
G1 X303.1 Y7.009 E.00638
G1 X303.1 Y295.9 E10.37243
G1 F5760
G1 X303.152 Y271.268 E-3.9
{endif}

G92 E0 ;Reset Extruder
G1 Z2.0 F3000 ;Move Z Axis up

… Also, it does not seem to be honoring M412 D31, which supposedly makes it print an additional 31mm of filament once the switch is activated. Perhaps this is not supported by the firmware?

@Bjoern

Is the the start Gcode from a sliced file or is all that in the Slicer..??

all in the slicer. I created my own primer line that exists outside of the print area.

Hi aPpYe,
the problem is known & already on the to-do-list. The cause lies in the combination of filament run-out handling in both Sovol’s display driver class and the native Marlin firmware.
Your observation concerning M412 Dxx concerns the same problem.
Currently I can’t say when I’ll find the time to solve this issue…
/R
Björn

Oh dang. Okay. Are you no longer working on this firmware? Was this broken in some recent version of your firmware or has it always been broken? Do we know if there is any kind of workaround? Perhaps through pronsole/pronterface?

I also noticed that since I installed my sprite extruders the tramming function is messed up unless I reenter firmware defaults for M851 (XYZ Probe Offset). I figured I needed to change the nozzle is in a different position than the firmware expects, though I am guessing this is unrelated to my resume issue.

Thanks for your time.

Hi again,

I’m still using my SV04 and will continue to fix bugs in the firmware. I have had a lot of other things to do lately, so I had to adjust my priorities. I’m currently looking forward to two weeks with low-ops, but I can’t promise that I’ll find time for analysis and bug fixes this year.

Run-out sensor handling and pausing always have been problematic in the SV04 firmware, hence Marlin’s ADVANCED_PAUSE_FEATURE is active in all my firmware versions.

The safest workaround is unplugging the run-out sensors & ensuring to have enough filament loaded.

Correct, this is not related to the other issue - it might help to adjust the nozzle positions mechanically IOT fit it into the default Z probe offset range of +/- 20mm.

/R
Björn