Air Print Recovery - A Success Story

Just thought I’d type type this up briefly. The tl;dr is I was able to recover a failed print due to a clogged nozzle by clearing the clog, and then editing the gcode to start a “new” print exactly where it left off.

I have a pretty good calibration and decent slicer settings, but I printed an object for maximum strength using settings I haven’t tested before. It was going to be a 16 hour print, and I was only able to watch it run for about an hour before I had to go to bed. As I was headed to bed, it looked like it was possibly going to have an overextrusion issue, but I couldn’t tell what, if anything, needed to be changed.

Well, woke up, checked on the print, and it looks like after about 30m of filament were used there was a clog, the extruder gears chowdered the filament, and it started air printing.

The cause of the clog was overextrusion - the print changed geometry and all of the small amount of overextrusion was concentrated into a small area, completely blocking the nozzle, causing the gears to strip. This happened abruptly, so the rest of the model was still in good shape.

So I stopped the print, and did a cold pull. That was able to get all of the bits of ground up filament out of the nozzle, and afterwards I could easily feed filament through manually and it came out nice and round and smooth.

Next I brushed off the print to remove stringing filament as the nozzle was starting to clog. The rest of the print was in good shape and worth salvaging.

The model was sliced using Simplify3D, but Cura has similar features to what I’m about to describe. Measured the height of printed perimeter with a micrometer, and found the corresponding layer in S3D.Then I located the exact line it was printing (at least within a few mm) by replaying that layer in the preview, line by line. The exact line was 93,066, as reported by S3D.

Copied the gcode file and modified it. First, went to the last good printed line, 93,066 and looked up the file. Found the previous G92 E0 command, and changed it to what the previous extrusion was on line 93,065, which was E115.7035, and deleted all of the gcode in between, so when the print starts it won’t extrude 115mm of filament.

Then I scrolled up the the previous Z definition, and feedrate definition and modified the file so the print would go to the correct Z and set the correct feedrate.

Ultimately, I just kept the initial gcode where it sets temps, and homes. Then the file sets the XYZ position, feedrate, sets the extruder position with G92, and then continues.

Even though I restarted the print on the touchscreen after uploading the modified gcode, I kept the computer connected to the USB port with the S3D machine control panel open.

For the next 30 minutes I watched the layers get printed, while I made small adjustments to the flow rate. Since the touchscreen does not allow you to set the flow percentage during a print (using M221), I used the S3D control interface, but I have also done it just with a terminal and sending M221 commands.

If the print started becoming over extruded I would drop the flow percentage, if it looked underextruded I’d raise it. Eventually, after enough small tweaks the surface levelled out and the final flow percentage for this print turned out to be 95%.

This print is 100% solid infill, which clearly my slicer settings are not perfected for - I suspect S3D’s infill overlap percent that I currently use of 21% is too high for 100% infill. More testing will be required to see if this issue can be permanently fixed without affecting other types of infill densities.

Thanks for attending my TED talk.


i wonder if we could replace the filament runout sensor with a rolling style sensor (like a mouse wheel uses). so that it would auto stop the print if all of a sudden the filament stopped feeding for say 20 seconds?

i do realize that would take a little bit of reprograming the CAN filament runout function as it currently stops the print instantly.

That would actually by quite straightforward - could combine it with a filament wiper on top as the filament enters and goes through a length counter. Just have a small mcu generating a pass/fail binary.

As long as the output is equivalent to the microswitch’s on/off, just unplug the switch connector, plug in the new connector.

that would work too if we put a small MCU in with the sensor, i know by default mouse wheel sensors send an pulse signal, that would not be compatable with the current on/off function of the switch.

I have an accelerometer with an on chip motion processor - that would be perfect. Check the length and if it stops while there’s motion, panic. MPU-6050 chip.

that would be perfect! should be an easy change and i bet it would save a lot of people a alot of failed prints.

I’ll mail it to you, good luck :rofl:

Maybe…a bit down the line, after many other projects I have lined up.

lol, i almost never have clog/grinding issues. i tend to calibrate for high detail so i have more issues with under extrusion, so it would be pretty low on my project list as well. but at least the idea is out there now for all to see :smiley:

Looks like there was a design for one. Interesting.

that is interesting looks like they had two separate designs, one for filament and one for the spool.

Thanks for the great idea. I had a similar problem and figured something like this would be possible

I also found another tutorial which I found to be really helpfull

I think it is really sad that the Luban workbench does not support to run a print from a certain layer…