As I understand it klipper cannot resume a failed 3D print because it doesn’t know precisely what the printer is doing, due to the separation between the MCU, and whatever computer is connected to it.
I think I may have an idea how to solve this - we record where the printer could currently be, then we could present the data to operator where they can determine exactly it stopped printing.
It may go something like this:
- During printing we would record the minimum and maximum position in the gcode that the printer could be.
After power loss:
- Bed will immediately heat up to previous tempature
- The printer will move up a preset z value.
- It will record if it started and if it finished the movement
- If it didn’t finish it will tell the operator that the z value is corrupted.
- It will increment the attempted start count.
- If it has tried moving up enough times it where it is possible to hit the upper limit of the machine, it will throw an error, and any restart will only heat the bed, then do nothing.
- It will record if it started and if it finished the movement
- It will home X and Y, then put the extruder in a position to present the print.
- Record if the movement was started/completed.
- Record the original position from homing
- Maybe don’t do this automatically, as the only thing to gain is the possibility of the extruder not falling into the print, while if it was possible it likely already happened, and you risk loosing your original X Y position information.
- If the power is lost at any point during this process, it will restart the process.
When the operator intervenes he will put the range of where the printer could be into a modified gcode viewer, where it would be animated with a timeline to show the last possible path of the printer. He then will look at the print to judge where it stopped and go to that point in the timeline. At that point he could export the position and put it back into klipper, where it will resume. Granted the modified gcode viewer is not in the domain of klipper.
Also people sometime just print over a partially existing layer so the precision of knowing where exactly where it is may not be necessary, just take the minimum position.
Homing the Z axis may present some problems, but It has been discussed.
- If the Z axis didn’t fall, or was in the middle of a movement we can continue as left off.
- Manually set the height of the extruder to where it should be.
- Operator can put the printer in a position were it won’t collide with print while homing the Z axis
- Account for bed mesh if using a bed probe
- Not always possible