• Tags
  • Documentation
  • Order
  • Register
  • Login
Duet3D Logo Duet3D
  • Tags
  • Documentation
  • Order
  • Register
  • Login

Successful: Print Queue and Automated Print Cycle

Scheduled Pinned Locked Moved
Duet Web Control wishlist
6
16
2.2k
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • undefined
    cookie
    last edited by cookie 6 Dec 2019, 10:48 13 Apr 2019, 11:17

    Hello,

    I was starting a tread about this before I’ve got the board. I think it should be here because the functionality is there, but without interface. Ideally, it should works similar to normal 2d printer print queue ... choose printer and then drag & drop add, change order, start/pause, remove, save/modify print collections, etc.

    Basically, Automated print cycle works like this:
    1.) Heat the bed and print as usual.
    2.) Wait for the heated bed to cool down.
    3.) Auto eject, scrape the part using gantry or some designed part ( it’s works for small and simple object .. some system might push and replace a new tray or some already go further and use cheap open-source robotic arm successfully)
    4.) Clean nozzle.
    5.) Sending notification/photos to user (using plugin like duet telegram)
    5.) Start the new part in print queue/folder (would be nice if user can choose auto, manual confirmation)

    This would save a lot of sleep time and make most use of 3d printers. Also, it will make Duet really shine and show this powerful capability and become a very good open-source option for business.

    0_1555152611317_c1b3ed77-d7ec-48a9-9312-5b8adaf0277d-image.gif

    Example from AstroPrint Print Queue Feature

    Here is the original tread

    Thanks 🤗

    1 Reply Last reply Reply Quote 0
    • undefined
      dc42 administrators
      last edited by dc42 13 Apr 2019, 12:31

      If a single UI instance with a print queue is controlling multiple printers, that UI needs to reside somewhere. Although I think it could be done in a browser, I think it makes more sense to do it as a program running on a PC or on a RPi or similar. It can use HTTP commands to send files for printing and monitor the status in exactly the same way that Duet Web Control does.

      So the question is, who is going to write that program? I don't have time to write it, because I am too busy developing and supporting hardware and firmware.

      Duet WiFi hardware designer and firmware engineer
      Please do not ask me for Duet support via PM or email, use the forum
      http://www.escher3d.com, https://miscsolutions.wordpress.com

      1 Reply Last reply Reply Quote 1
      • undefined
        MaxGyver
        last edited by 20 Apr 2019, 17:55

        Hey,

        would it be possible to start a print from the SD-Card with a macro/script that ist called at the end of a print?

        We can already uploade/delete Gcode-files on the SD even when a print is already running.
        So basically we need a macro that starts the next G-Code file in the SD-folder until all prints are finished.

        I have build a belt printer and this is a feature that would realy unlock the full potential of this kind of printer.

        Best ragards,
        Max

        undefined 1 Reply Last reply 20 Apr 2019, 18:39 Reply Quote 0
        • undefined
          Phaedrux Moderator @MaxGyver
          last edited by 20 Apr 2019, 18:39

          @maxgyver I think this can already be accomplished through macros and M32

          https://duet3d.dozuki.com/Wiki/Gcode#Section_M32_Select_file_and_start_SD_print

          Z-Bot CoreXY Build | Thingiverse Profile

          1 Reply Last reply Reply Quote 0
          • undefined
            dc42 administrators
            last edited by 24 Apr 2019, 12:19

            A macro that is not called from a SD card print can start a print (that's how resurrect.g works). But if the macro is called from a SD card print, it can't start another one, because a print is already in progress.

            Duet WiFi hardware designer and firmware engineer
            Please do not ask me for Duet support via PM or email, use the forum
            http://www.escher3d.com, https://miscsolutions.wordpress.com

            undefined 1 Reply Last reply 24 Apr 2019, 16:32 Reply Quote 0
            • undefined
              Phaedrux Moderator @dc42
              last edited by 24 Apr 2019, 16:32

              @dc42 What if at the end of the print a macro is called which attempts to start another print?

              Z-Bot CoreXY Build | Thingiverse Profile

              1 Reply Last reply Reply Quote 0
              • undefined
                cookie
                last edited by cookie 29 May 2019, 16:07

                @dc42 I have developed a lift and push technique, which I've tested is possible to eject 4"x 4" footprint for PLA (possible a lot bigger) using any Prusa style machine with glass heated bed. This is a very important step because it could apply to many inexpensive machines. I will post the details after I thoroughly tested it 🙂

                Any idea how could I start other gcode files after I cleared my print bed with my custom end.g macro?

                E.g. I have a set of files to print, 1.gcode, 2.gcode, 3.gcode, ... and so on.

                After finished 1.gcode .. Is there any way I could continue print 2.gcode, then 3.gcode and so on until the end of the list in the folder?

                undefined 1 Reply Last reply 29 May 2019, 16:16 Reply Quote 0
                • undefined
                  Phaedrux Moderator @cookie
                  last edited by 29 May 2019, 16:16

                  @cookie What if instead of printing each gcode separately you combine them into a single gcode file? The ejection macro to clear the bed just gets called between each part. The printer executes all the actions in series during a single print session rather than starting and stopping and trying to start a new print each time.

                  Z-Bot CoreXY Build | Thingiverse Profile

                  undefined 1 Reply Last reply 4 Jun 2019, 02:09 Reply Quote 0
                  • undefined
                    cookie @Phaedrux
                    last edited by 4 Jun 2019, 02:09

                    Just learned that I can't call M32, to select and print another file, at the ending script of a gcode 😿

                    Using multiple M98 or M32 commands in a macro

                    @phaedrux seem like that I have to do that at the moment. It is quite a messy way and error-prone way to do it.

                    I may have up to a hundred of different print queues, 4-5 files for each. Is there any good way to check gcode validity after concanated them before printing?

                    undefined 1 Reply Last reply 4 Jun 2019, 07:57 Reply Quote 0
                    • undefined
                      dc42 administrators @cookie
                      last edited by 4 Jun 2019, 07:57

                      @cookie said in Print Queue and Automated Print Cycle:

                      I may have up to a hundred of different print queues, 4-5 files for each. Is there any good way to check gcode validity after concanated them before printing?

                      Run simulation on them and check the console for error messages.

                      BTW I think there may be an indirect way to have one print file start a different print at the end. Instead of using M32 directly, you would use M581 to set up a dummy trigger and M582 to check and execute it immediately. Then put the M32 command in the trigger file.

                      Duet WiFi hardware designer and firmware engineer
                      Please do not ask me for Duet support via PM or email, use the forum
                      http://www.escher3d.com, https://miscsolutions.wordpress.com

                      undefined 1 Reply Last reply 4 Jun 2019, 11:18 Reply Quote 1
                      • undefined
                        cookie @dc42
                        last edited by cookie 6 Apr 2019, 15:29 4 Jun 2019, 11:18

                        @dc42 said in Print Queue and Automated Print Cycle:

                        BTW I think there may be an indirect way to have one print file start a different print at the end. Instead of using M32 directly, you would use M581 to set up a dummy trigger and M582 to check and execute it immediately. Then put the M32 command in the trigger file.

                        Thanks, seem like it's works! Now, I've tested that I could do recursive call between a.gcode and b.gcode by:

                        1.) Create trigger2.g and trigger3.g in "sys" folder.

                        1.1) Trigger2.g

                        ; Switch off trigger2.g

                        M581 Z S-1 T2 C0

                        ; Print a.gcode

                        M32 "0:/gcodes/a.gcode"

                        M400 ;Wait for current moves to finish

                        G4 S2 ;Wait 2 Seconds

                        ; Call trigger3.g

                        M581 Z S0 T3 C0

                        M582 T3

                        1.2) Trigger3.g

                        ; Switch off Trigger3.g

                        M581 Z S-1 T3 C0

                        ; Print b.gcode

                        M32 "0:/gcodes/b.gcode"

                        M400 ;Wait for current moves to finish

                        G4 S2 ;Wait 2 Seconds

                        ; Call Trigger2.g

                        M581 Z S0 T2 C0

                        M582 T2

                        2.) Create a Recursive.g in "macros" folder which called Trigger2.g

                        M581 Z S0 T2 C0

                        M582 T2

                        3.) Run the macro and the machine go in an infinite loop of a.gcode and b.gcode

                        Now, seem like I can chain many triggers into this loop. I'm testing more to see if it really works with actual printing files or not ☺

                        Updated: It's really working nicely .. by just call a trigger, which there's a M32 command in it, at the end of gcode. The nice thing is you can change the macro or trigger any time without stop printing.

                        Finally, I'm really happy that this project to becomes fruitful. It takes me more than a year in gathering info, research, learning, pick the right products and putting everything together.

                        Of course, Duet is the most important part which realized it! ✌

                        I will wrap up and update the process after finished testing with PETG.

                        1 Reply Last reply Reply Quote 1
                        • undefined
                          cookie
                          last edited by cookie 6 Dec 2019, 13:01 12 Jun 2019, 10:47

                          How-to Print Queue and Automated Print Cycle

                          Machine: Prusa-Style machines with heat bed, using Duet Controller is convenient e.g. Prusa MK3, Cetus MK3, MakerGear M2
                          Bed Surface: Clean Glass using Isopropyl alcohol (I use Ikea LOTS mirror because of the quality and availability)
                          Filament: Tested working with typical PLA, PETG but should works with any materials which can be print on the glass surface and removed easily.
                          Model Size: Base 10x10cm (Width x Length) or bigger, Height: 2-3cm shorter than the maximum height of the machine.

                          The important aspect for the removal process is to lift the model up vertically instead of pushing horizontally. There's some strong force, that I feel like the vacuum, which prevented the model to move if push from the sides even if it was once removed. From my tests, I can only remove small models if push horizontally which also stress the gantry a bit.

                          Instruction:

                          • Leveling the bed Manually level the bed or using manual/auto mesh bed compensation and make sure you get a good first layer adhesion, while it is not too squished or too high.

                          • Add sprue Add 1mm cylinder in the model to an area that can be cleanly cut or easily broken off when the print finished. It can be added within your slicer software without modifying the original model. The sprue height should be 10-20mm higher so the model doesn't touch the heat block when ejecting. The tip of sprue is the area where the nozzle will be stopped.

                          • Test print We will simulate some ejection steps first. The test model should be around the same footprint of your target model, with at least 1-3 mm thick so it is not flexible. e.g. 15cm x 15cm x 3mm rectangular plate. Test printing your model using the right temperature for heat bed, which doesn't warp your model or make it too sticky to the glass, then wait for the model to cool down after finished printing. Try pulling the model up vertically from the sprue, which should take only a little hand force to do if the first layer height is correct. Pay attention to the waiting time and the temperature that the model can be removed successfully because this is the value that you will be used in your ending script of the print. e.g. printing PLA at 60c heated bed, and the model can be successfully removed when the heat bed go down to 32c (which takes 5 minutes from 40c ... Duet's M190 command monitor the bed only when it is over 40c ).

                          • Create End.g Macro This is the end script which will be called at the end of your model gcode, the essential steps are:

                          ; ###Cool down###
                          ; Wait 120 Seconds for nozzle to cool down to under the Glass Temperature of material e.g. My PLA is 60 Celsius
                          G4 S120
                          ; Wait for Heated Bed to Cool down to 40 celsius
                          M190 R40
                          ; Wait 600 Seconds for the heat bed to cool down to 32 celsius e.g. My PLA can be removed easily from the heat bed when it reach 32 celsius
                          G4 S600
                          ;###Lift up###
                          ;Set relative positioning
                          G91
                          ;Move Z up 20mm, the nozzle will pull up the model effortlessly
                          G1 Z+20 F1000
                          ###Drop the model###
                          ;Move X,Y to edge of print bed, choose the suitable X,Y values for your printer
                          G1 Y-999 X999 F1000
                          ;Heat the extruder to 200 celsius, so the PLA at the nozzle tip melts and the model drops from it around the corner of the heat bed. The model should fall to the table by gravity if placed the sprue at the other corner (Adjusted the location to suited your machine)
                          M109 S200
                          ;Extruder heater off
                          M104 S0
                          ###Push the model outside printing area###
                          ; Slowly push the model out of printing area, this should be carefully planned if the model has an irregular shape. It can be easier if you have a mechanical push part on X/Y and set up the printing area to facilitate the ejection process.
                          G1 Y900 F1000
                          ;Home X/Y/Z
                          G28 X999 Y999 Z999

                          • Test End.g Macro Test your macro and refined it before use is a good idea. You will actually see how thing works at this time.

                          • Create trigger2.g Go to System directory using System editor in your Duet Web Control and create trigger2.g (2-9 will do) and add this:

                          ; Switch off trigger2.g
                          M581 Z S-1 T2 C
                          ;Wait for current moves to finish
                          M400
                          ;Wait 10 Seconds (can be omitted or changes)
                          G4 S10
                          ; Print a.gcode, this is your xxx.gcode in your SD card to be printed
                          M32 "0:/gcodes/a.gcode"

                          • Create CallTrigger2.g Macro

                          ; Set up trigger2.g
                          M581 Z S0 T2 C0
                          ; Execute trigger2.g
                          M582 T2

                          • Test CallTrigger2.g Macro Test run your macro, it should start printing a.gcode now.

                          • Putting them together Go to your slicer, loaded your model, add sprue, finish settings and put End.g and CallTrigger2.g in the ending script by adding this 2 lines:

                          ; Run end.g macro
                          M98 P"/macros/End.g"
                          ; Run CallTrigger2.g macro
                          M98 P"/macros/CallTrigger2.g"

                          • Save the file The file name should be the same as one in CallTrigger2.g, in this example is a.gcode

                          • Print them Congratulation! Now your printer should print a.gcode repeatedly without manual removal process .. with glass-like finishing at the bottom side ☺

                          You can continuously print only one or many sets of model by using more triggerX.g files e.g. a.gcode call trigger2.g which print b.gcode, b.gcode call trigger3.g which print c.gcode and so on. Named the folder and copy that trigger set to /sys when you want to print them. This way, you could have many print sets with a limited number of triggerX.g.

                          Also, triggerX.g can be changed, modified without stop printing until the filament run out. You can print set A two times, then set B four times and so on with some planning, a webcam and come back a few times to delete, copy/paste trigger sets in Duet Web Control.

                          Notes:

                          1. The process was simplified, to make it easier to understand.
                          2. Now you get the idea, So, you should customize/modify and test your processes e.g. nozzle priming, heat bed temperature, removal, ejection that suitable for your machine before you begin your production run.
                          3. I think the process is not restricted to Duet only. With some more researches and knowledges, other controllers and firmwares should be able to do it too.
                          4. I'll add more videos, photos and details later on..
                          5. I'm curious what is the biggest footprint area that this method works because I don't have big printer. Please post it, if you tried it succesfully with big prints.

                          Credits:
                          Sanjay Mortimer, RepRap Auto Printing - Ejection of print and starting of new print.
                          P&U, 3d printer: auto removing of printed object

                          1 Reply Last reply Reply Quote 2
                          • undefined
                            dogon1013
                            last edited by 9 Jul 2020, 19:31

                            Awesome. thanks for this. I have also been wrestling with this issue (using a bed swapping mechanism though) and found another work around that might help some folks.

                            Simply upload your Gcode files in the macro folder and call them like a macro, from a master gcode file (one that can call the macro as many times as you like). I also put M99 at the end of the macro gcode file, but that was probably not needed.

                            Only downside of this is the status of the print is not shown like normal (no tracking of what layer you are on, % left, etc), as it thinks you are just running a macro... But the upside is that you can specify easily how many times to print in the master program.

                            I need to see if there is a way to specify the number of reprints using the trigger method. I am sure there is, but have not figured that out yet.

                            Toby

                            1 Reply Last reply Reply Quote 1
                            • undefined
                              dogon1013
                              last edited by 30 Jul 2020, 14:51

                              Just thought of another way to improve on this. Since the program that is next in the cycle is controlled by Trigger2.g (or whatever trigger number you use), This file should be able to be deleted and re-written with the M30, M28, and M29 commands in a macro.

                              That is assuming those commands will allow writing to a system file (I have not tested it yet).

                              This means a macro can be used to set the next program, and also start the first program. so you could have a macro for each production program you want to run....simple 1 click operation, once it is setup.

                              1 Reply Last reply Reply Quote 1
                              • SCMagiundefined
                                SCMagi
                                last edited by 8 Apr 2021, 10:57

                                This post is deleted!
                                SCMagiundefined 1 Reply Last reply 14 Apr 2021, 17:45 Reply Quote 0
                                • SCMagiundefined
                                  SCMagi @SCMagi
                                  last edited by 14 Apr 2021, 17:45

                                  This post is deleted!
                                  1 Reply Last reply Reply Quote 0
                                  • First post
                                    Last post
                                  Unless otherwise noted, all forum content is licensed under CC-BY-SA