Resuming from a failed print like you describe is possible, but it is difficult. Even after going through the difficult steps of resuming, the resulting print is likely to have low quality. The filament adhesion between old and new layers is likely to suffer notably due to thermal effects resulting from the time gap between those layers.
If one wants to try it (or just wants to understand how it can be done) I can outline the process as I understand it. Note that I’ve never attempted this myself, so I can’t provide in-depth guidance.
As I understand it:
- The first step is to make sure Klipper is back up and running and that Klipper knows the toolhead position. If Klipper never lost power or never went into a shutdown state, then Klipper will already know its position and nothing needs to be done. If Klipper did turn off the steppers, then if rehoming is possible, then homing the printer is likely the best way to make sure Klipper knows its position (rehoming is often only possible on a machine that homes to Z max). If homing is not possible, but one knows the actual toolhead position with great accuracy, then one can manually turn on all the stepper motors using
SET_STEPPER_ENABLE
commands (see the documentation) and then issue aSET_KINEMATIC_POSITION
command with the known toolhead position (see the documentation and be sure[force_move]
is enabled in the printer.cfg file).
Note that if the stepper motors were disabled, then the act of enabling them is likely to cause them to “jump to the nearest full step position”. This means, that in practice, even if one thinks the toolhead hasn’t moved since a “shutdown event”, just enabling the stepper motors will cause the toolhead to change position (typically by about 0.200mm).
Note that usingSET_KINEMATIC_POSITION
on a position that one “guesses” is likely to cause chaos. (For example, the toolhead ramming into the frame, ramming into the print, or on delta-style printers, moving in seemingly completely random directions.) - It’s necessary to identify where in the g-code file that the failure occurred, and remove all the g-code leading up to that point. This is quite difficult, but there are guides online describing how one can attempt this.
- The g-code state needs to be reconstructed at the start of that new g-code file. The “g-code state” is very confusing and arcane - g-code was never designed for “resuming” like this. For example, one needs to determine if the g-code was in absolute or relative mode and set that state (
G90
,G91
,M82
,M83
). One also needs to determine and set any kinematic g-code offsets (G92
, but this is rare) and one needs to determine the extruder offset (common). Many g-code files use “absolute extrusion offsets” and, if so, one must calculate and program a new extruder offset (G92 E???
) so that the following “absolute extrusions” in the reconstructed g-code file match with the current extruder position (as understood by the restarted Klipper). - It’s necessary to re-enable heaters. It’s necessary to move the toolhead to the resume position (
G1
) that corresponds with the reconstructed g-code file (if the toolhead is not already at that position). One can then, ideally, start the print of that reconstructed g-code file.
From your description above, it sounds like you did not correctly “reconstruct the extruder position”. The “max extrude distance” errors was Klipper informing you that the new print commands were non-sensical. Overriding the error check would not have improved things - the appropriate fix would have been to calculate a correct extruder offset and set it via G92 E???
.
Cheers,
-Kevin