How I continued 3D Printing after a power cut?
November 14, 2016 04:54AM
Hi!

I found some 3D Printers that could continue to print when power on. However, could you tell me how to achieve this function use smoothieboard for my cartesian printer?

I think if smoothieboard could remember the gcode and it's print line before power off, we can do it?

I found this page and this page when I googled it.
Re: How I continued 3D Printing after a power cut?
November 20, 2016 02:10AM
cagtag,

I really like your idea of having the printer remember it's position, and resume.

I've also had to resume a big print manually, using similar methods described in the links you provided. It is very difficult to do well, with many manual steps - so it's a disaster recovery mode more than anything. To my knowledge there is no facility to do this with Smoothie. (Or any other open source firmware, please correct me if I'm wrong).

I think there are good ways of tackling this problem, and a lot of value in doing so. A guided "Resume" feature in firmware could help eliminate many of the manual steps and problems. The ability to more easily resume would be useful for other failures in addition to a power failure (filament jam, shifted layers, controller frozen, or... "like wow - I'm totally out of filament", etc.). Of course a UPS is a good idea...

If "Resume" was built-in then you could stop a print and start it later for any other reason. The results might not be perfection, but the process would be much much easier, and with a much better chance of success.

It is also possible to have several different Resume features that would work without a progress log, as I will detail.


Disclaimer: I am a software developer though not a Smoothie/firmware developer, and I will outline ways I think this can be done from that perspective. For these features to be actually created I recommend that you make a feature request directly to the developers/community/Github/forum for the firmware you are using, in this case: here. Hopefully this post will be helpful in communicating what could be done. Their interest and (not free) time will determine if it does get done.


The manual resume process has a lot of steps with many potential problems.
I am restating this because these are the processes and difficulties to eliminate if possible, or make easier:
  1. Home the printer (if you can). This is problematic for many printers, as the nozzle could hit the partial print while homing. If you can't home the printer then there is no reliable way to start printing in the right place.
  2. Did the part pop off the bed? That's a real problem in any case. If you can secure it then possibly you can continue. If the part is re-secured but slightly shifted X or Y, then you're sunk. If it's rotated that's fatal. But maybe you are fortunate and it's still attached.
  3. Measure the Z position where it stopped. Likely you didn't see the Z position readout just as the power failed... You can measure the height with calipers, but that can be difficult to do accurately, especially if the print is odd shaped, or taller than your calipers.
    This measurement needs to be very accurate, or one of several things will happen: there will be a gap and bad adhesion, not enough gap and the nozzle crashes the model or strips the filament, and/or the print starts with the wrong layer from the gcode. If your printer can home the Z axis with a partially printed part on the bed (as Delta printer can) then you can home, and then jog the print-head down to the part and read the Z readout. The accuracy of this measurement depends on how much the print has cooled in the meantime, and if the printer is up to temp, etc. You may not identify the exact layer where it failed, but it should be close.
  4. Manually edit the gcode and remove the gcode up to the last Z position printed, but keep any required setup gcode, and set the extruder position properly if using Absolute extrusion (not a problem with Relative extrusion - so just use that setting in your slicer).
  5. Then you need to be able to adjust the printer's Z so when you resume printing it is just the right distance from the previous layer - the print has probably shrunk a bit in the mean time, right?
  6. Set the hot end/bed to the right temperatures if not there already. Prime the hot end (easy enough in theory, but it may not be properly pressurized by the time you wipe it's nose and start the print).
  7. Start printing the edited file - and hope that the X, Y, and Z positions are close enough, and that the extrusion starts well.



So here is how a "Resume" option could work (printing from SD card):

At the beginning of a print a "Progress Log" would be created with the base name of the gcode file being printed from the SD card, and as each layer is started: store the Z position there. If it's not feasible to update this file on the SD between layers (and have it fully written), then perhaps this info could be written to flash. Whatever method is used, the Progress Log must not be corrupted if the power is lost during the update process. The Progress log file would be deleted after the completion of a print.

Defaults for some of the options should be set in the firmware's Config file.
There is one critical option. A setting like: “CAN_HOME_When_Resuming = 0” should be used if you know you do not ever want to home your cartesian printer when Resuming because the nozzle could crash the partial print. In that case different paths must be taken to resume the print as I will detail below.
I will refer to this setting below as "CAN_HOME".

Here are some of the high level items that could be displayed on the LCD (or web interface) for guided Resume:

After selecting a gcode file you might have these five options:
  1. Start Printing Just prints the file normally.
  2. Resume from last layer printed
    This option would only be available if there was a Progress Log for that gcode file.
    This is the best option as the exact starting layer is identified - using the last Z position recorded in a Progress Log. The firmware would then spin through the gcode file on the SD card and find that layer (to confirm it's valid, and get the coordinates) and prompt: "Resume printing at Z999.99 / Cancel" (showing the Z position of the last layer that was started).
    If the printer CAN_HOME, then it is homed now, and the nozzle moved to a couple of MM above the model, and then set temp and proceed to step 3 below.
    If not CAN_HOME then nothing is moved automatically, proceed to step 1 below, then gross adjustment.
  3. Measure Last Z height and Resume printing
    This option would only be shown for printers that CAN_HOME, as only a homed printer can be used as a measuring device.
    This would home the printer, and move down to a few mm above the highest point of the finished part. Now in "MEASUREMENT_MODE". Proceed to step 1 below, then begin gross Z adjustment.
  4. Resume printing at custom Z height
    This is the only Resume option shown if no Progress Log exists and not CAN_HOME.
    So either you already know the Z height you want to start with, or you must measure the height of the partially printed object manually to get that Z height.
    If the printer CAN_HOME then this will go ahead and home it.
    This prompts the user to enter the Z height value to resume printing at. The firmware then spins through the gcode and finds that layer, as above.
    Proceed to step 1 below, then begin gross Z adjustment.
  5. Cut model at custom Z, and print on bed
    This would also allow entry of the Z height to cut/resume at, and would print the model directly on the bed (using a Z offset). You could use this option if you just wanted to glue the parts together. One issue here would be proper bed adhesion for the first layer (perhaps it could ask for a first layer Z height adjustment, speed, and first layer extrusion rate adjustment). I won't go into this fairly straightforward option.




  1. Heat Now? / Heat Later
    This would heat the nozzle/bed to the temperatures found in the gcode file. This option would not be shown if the the temps were already up.
  2. Set Coarse Z Position
    This would prompt them to jog the nozzle a few mm above the print (options for coarse X/Y/Z jogging).
  3. Fine Tune Z
    This would take the user through jogging the nozzle down to set the correct Z height (options for fine X/Y/Z jogging). They could slip a piece of paper between the nozzle and the print to measure this. The Jog X and Jog Y moves would be used to move the nozzle to a more convenient spot to set the Z height. When the user selects "Done Adjusting Z" the firmware would set its Z position, and hop up a couple mm.
    If in MEASUREMENT_MODE, then the firmware then spins through the gcode and finds that starting layer in the gcode file, as above.
  4. Set Coarse X Position
    This would only be done if the printer was not homed above.
    The user would be prompted to jog the nozzle above the left most (X) position. This would use a medium travel speed.
  5. Set Coarse Y Position
    This would also only be done if the printer was not homed above.
    The user would be prompted to jog the nozzle above the front most (Y) position of the model. This would use a medium travel speed.
  6. Fine Adjust X Position
    This would correct for small X position errors. The nozzle would be moved between the left and right edges of the object (while staying perhaps 2mm above) and the user would adjust the X position of the nozzle until they are satisfied. This could be useful also if the part had popped of the bed, and you re-secured it... The firmware would use the positions to set its X coordinate offset.
  7. Fine Adjust Y Position
    This would correct for small Y position errors. The nozzle would be moved between the front and back edges of the object and the user would adjust the Y position. The firmware would use the positions to adjust its Y coordinate offset.
  8. At this point the printer would move up about 20mm. The hot end would heat now if it was not already up to temp.
  9. The next prompts would be "Extrude x mm to Prime / Start Printing / Cancel". This would extrude the amount defined in the config file, and return to the same menu (you could extrude as many times as needed.) An option in the config file to retract after priming would be helpful to control ooze and so to ensure better starting pressure. You would have the opportunity to wipe the nozzle at this point, and then choose “Start Printing”
  10. Printing would then start (and new Progress Log would be generated at that point).

Well I think that covers it, but i'm sure I've left something out.
I hope this was helpful.


My printer: Raptosaur - Large Format Delta - [www.paulwanamaker.wordpress.com]
Can you answer questions about Calibration, Printing issues, Mechanics? Write it up and improve the Wiki!
Sorry, only registered users may post in this forum.

Click here to login