I am sharing my personal experience on this blog post for 3D printing lovers who ever had frustration to recover partially printed 3D parts.
I am a big fan of 3D printing. So I decided to build my own 3D printer which was based on opensource Prusa i3. When I was building my printer, I found that the LCD controller(RepRapDiscount Full Graphic Smart Controller) can displaying useful additional data on the screen and of course it was considerably large in size. I was excited to use this LCD controller for my 3D printer.
I wanted to 3D print a housing for securing electronics on my LCD controller. So I decided to find out pre designed 3D model on http://www.thingiverse.com/ web site to save my time on designing new CAD model. Actually, I found what I was exactly looking for my project.
Suddenly power went off and my 3D model was almost half printed. I was very disappointed because it took hours to print and also it consumed considerably large amount of ABS filament. If I couldn’t recover this model, I have to throw it away. That’s wasting plastic filament and it’s not worth economically. I was trying to find method to recover partially printed 3D parts from the web. But only solution I found to recover partially printed 3D parts is modifying GCODE file.
Figure 1 – Partially Printed 3D Model
So, I decided to do an experiment to recover my partially printed 3D model. I was thinking, if I knew the Z axis position and it’s coordinates, then I could recover my partially printed 3D model easily. So I decided to find out how to get the last printed GCode position.
These are the steps which I followed on this experiment.
1. Locate last printed gcode position by using Pronterface interface
My 3D printer was connected to the laptop when power went off. Even the 3D printer power went off, I was able to see Pronterface interface because the laptop was powered by its own battery.
After disconnected Pronterface, I scrolled up/down the console and found out where it stopped logging. I found something like this: “SD printing byte 72598523/98258785”
I realised it has printed only 72598523 out of 98258785 total bytes. So that means the printer still needs to print 25660262 remaining bytes.
I decided to recover my model from 72598523 bytes. This was the last printed byte position, where I had to recover from. Then I had to open GCode file by using text editing software and trace back the exact position of the printer where it stopped.
2. Edit GCODE file
I had to back up my original gcode file before editing. If you do this experiment, use existing gcode file and do not generate new gcode file. This may change the coordinates of your 3D object if you select any configurations from slicing program.
Then I had to find last printed position of the GCODE. I used Notepadd++ of my Windows computer. Then go to the last printed byte (in Notepad++ use Ctrl+G, select Character position and enter the correct byte which was manually found from my pronterface interface.)
I managed to find the last Command printed, which was something like this: “G1 X50.640 Y126.421 E196.45191”. I got to know my last X-position which was 50.640, Y-position was 126.421 and the Extruder-position was 196.45191.
Figure 2 – Last printed GCode positions
X – Represent X axis coordinate (Object width)
Y – Represent Y axis coordinate (Object length)
E – Plastic filament extruded length
Z – Represent Z axis coordinate (Object height)
Then I had to find out the last printed Z axis position(which is object height). Easiest way to do this is, Find command (Ctrl+F) and search upwards for a “Z” or just scroll up and find out. I found something like “G1 Z35.600 F7200.00”, which was my last printed Z position (35.600). I measured my object height from heat bed level to last printed level. That gave me exactly 35.6 mm. Then I realised that I found the last printed GCode values correctly.
Figure 3 – Modify GCODE for partially printed 3D model
3. Tracing printer initialization GCodes.
I scrolled up to the top of the GCODE file and found out the initialisation part of my printer. This shouldn’t be too hard to find, because it’s generally well commented if you use Slic3r. In my file it was easily identified. It was a really good readable format. My setting was as follows.
G21; set units to millimetres
M190 S85; wait for bed temperature to be reached
M104 S260; set temperature
M109 S260; wait for temperature to be reached
G90; use absolute coordinates
M82; use absolute distances for extrusion
G1 Z35.600 F7200.00
G1 X50.640 Y126.421 E196.45191
Once you identify your printer initialisation part, you need to remove printed GCodes. So, I had to delete last printed Z position GCode(G1 Z35.600) to just below the printer initialisation part of my GCode file until (“M82; use absolute distances for extrusion”).
4. Manually move to home position of the printer (X0, Y0, Z0)
Figure 4 – Manually move to home position
I moved my printer’s extruder to home position manually. I did not use auto home position command. Because that command may result to move the printed object on the heat bed if nozzle hit it or it could damage your extruder head if it hits the partially printed object. I moved printer axis to home position before resume print task. I used Pronterface (Printrun) software to do this task. Also you can use controlling rotary encoder of your printer if it’s comes with your 3D printer.
After edited my GCode, I saved it to SD card and then I selected modified file using controlling interface as you can find it in following video.
After I sent my GCode to the printer, it took some time to heat the nozzle and print bed. Once it reached to the operating temperatures, It started recovering partially printed 3D object.
Please keep on eye to see if everything running smoothly. If anything goes wrong, press emergency stop switch immediately to abort print job and then try to find if you have done any mistake when you were editing your gcode.
I hope this post might help you if you ever encounter similar situation. If you ever try different methods or if you have any thoughts on this post, please share.
If you are trying to recover ABS plastic printed part, please apply thin layer of Acetone solution. This will help to bind old and new plastic layers strongly.
Partially printed object must not lift off on the heated bed. By doing so, you will lose chance to get recover from it’s last printed position.
Make sure you keep your hand on emergency stop switch on your printer when it’s started to resume. Because, if you do any mistake when you editing your gcode file, printer may behave abnormally. Even it may damage your printer nozzle by hitting the object you are trying to recover.
You are free to follow this experiment, but you must know what you are exactly doing when you editing your GCode.
Do this at your own risk. I do not take any responsibility if it goes wrong.