Whenever I run into a trouble, I research about it and finally used to document what worked for me. I did this for a long time even before I started working on ITIL and ITSM at work. Knowledge is the key. But it has to be specific and just sufficient. These days I have been sloppy on documenting the distilled knowledge I keep gaining. But I wanted to write this down as I know I will keep coming back to this.
I was trying to do a complex 3d print today that in total would take about 5 hrs to give it as a gift to someone. After about 3 hrs of printing, the filament broke. I was frantic. I tried to manually squeeze through the broken filament but most times it doesn’t work on my printer. So, I had to halt the print. It’s been in my todo list to do multi-color 3d printing using my single head printer which is possible by pausing, changing filament and starting. But never got to it so far. Felt that it’s too much of a hassle and who knows what all challenges it could have. But today, I was desperate. The cost of filament is not as much that I am worried but it’s the time it takes to print. So, after stopping the printer, I kept my cool and didn’t remove the 3hrs worth of the print that happened thus far.
I use Octoprint, so I also noted down the layer it was printing. I use Simplify3d which has a feature to generate GCode from a certain height. Note that generating GCode from a certain height of the model is different from telling the printer to start printing at a certain height. I almost would have messed up had I not realized this in the last minute.
The gcode contains the following at the beginning.
G28 X0 Y0; home X and Y axes
G1 X140 Y0 F9000; move to dump position
G28 Z0; home Z
They tell the printer to first go to x0 and y0, then go to the dump area (where the heated filament is primed and dumps the initial string of plastic) and finally to home the z-axis to 0. Printers usually don’t have a precise 0. They just have a controller on the 3 axis which tells what should be treated as 0. So, as soon as the print head moves and touches any of the 3 sensors, it immediately sets it to mean 0. This is actually good because, the print bed can then be relative where it needs to be based on the thickness of the bed, any additional layer of adhesives and the springs holding the bed. As long as the printer knows what the 0 z-axis is without using the print bed itself, it’s then a matter of adjusting the print bed to match this 0.
I first commented out
; G28 Z0; home Z
above because after I reaching the dump area, if I home Z, the part is going to crush.
Now, in my case, I knew the printer was doing layer 305 and at 0.2mm resolution that is 61 mm. I used caliper to confirm. I also homed z to 0 carefully without crushing the large part and then raising the bed to 61 mm and confirming that is the correct height.
So, in Simplify3d, I set the “start printing the height” set to 60.8mm. The 0.2 mm gap is the layer height. That is, when the print head is at 61mm, it’s actually filling up the layer that occupies 60.8 to 61mm. This setting resulted in the following gcode.
G1 Z61 F180
This tells the printer to move 61mm. And initially I started the print by just commenting the homing command. While the filament was heating up back to 185 degrees C, I realized what the printer will do seeing this command. It is already at 61mm. But it doesn’t know that since I commented out the Z homing command. That’s when I searched online and figured out that while G1 is a “move” command, G92 is a “set” command. That is, you are telling the printer to take whatever is the current z location and set it to the value you specify. Viola, that’s what I wanted.
So, I changed the command to
G92 Z61 F180
and everything worked as expected. As I finish up this post, my print is almost getting ready and it’s an awesome Stereographic projection from Thingiverse scaled to 150%. I am quite amazed how the whole thing bonded together as if there was no interruption.