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

    Wiping an purging control

    Scheduled Pinned Locked Moved
    Gcode meta commands
    4
    20
    780
    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.
    • Mike 1undefined
      Mike 1
      last edited by

      Hello,
      I use an E3D toolchanger RFF 3.45 and have issues with filament on the nozzle after printing bigger surfaces and of course ozzing and as a result an empty nozzle after toolchanges.

      -A wiping tower is in my eyes the best way to have a perfect start for a new tool. Superslicer requires relative mode for the extruder and does not accept different nozzle diameters.
      -Wiping with a brush triggerd by layer change controled by extruded filament fails du to relative extruder mode
      -Simple retracts and unretracts cause some issus with ozzing (excat timing)

      Has someone a good idea what to do?

      OwenDundefined deckingmanundefined jay_s_ukundefined 3 Replies Last reply Reply Quote 0
      • OwenDundefined
        OwenD @Mike 1
        last edited by OwenD

        @Mike-1
        Put your wipe moves into a macro.
        You can change to and from relative extruder mode within the macro.
        Just call the macro using M98 from superslicer on layer change or as part of your tool change files.

        Mike 1undefined 1 Reply Last reply Reply Quote 0
        • deckingmanundefined
          deckingman @Mike 1
          last edited by

          @Mike-1 Why the aversion to using relative extruder moves? If you think about it, any G1 Enn move must be converted from absolute to relative for it to work in any case.

          Ian
          https://somei3deas.wordpress.com/
          https://www.youtube.com/@deckingman

          Mike 1undefined 1 Reply Last reply Reply Quote 0
          • Mike 1undefined
            Mike 1 @OwenD
            last edited by Mike 1

            @OwenD
            The code is already in a macro. But it should cause issues when printing once relative and once absolut gcode. Is there a command to detect the printers status to return to the same mode after wiping? Then I could use M82 in a condtional case. How can I trigger that x mm filament have been printed in relative mode?

            OwenDundefined 1 Reply Last reply Reply Quote 0
            • Mike 1undefined
              Mike 1 @deckingman
              last edited by

              @deckingman
              I dislike the relative mode because the infomation about the used filament is lost.

              1 Reply Last reply Reply Quote 0
              • jay_s_ukundefined
                jay_s_uk @Mike 1
                last edited by

                @Mike-1 absolute mode for the extruder is pointless as all RRF does is convert it to relative internally anyway. relative should definitely be used for the extruder axis
                See https://forum.duet3d.com/topic/9766/reset-extruder-ignored-in-dwc-and-other-observations/7 and https://forum.duet3d.com/topic/7949/my-experience-with-relative-extrusion-problem-and-solution/14

                Owns various duet boards and is the main wiki maintainer for the Teamgloomy LPC/STM32 port of RRF. Assume I'm running whatever the latest beta/stable build is

                1 Reply Last reply Reply Quote 0
                • OwenDundefined
                  OwenD @Mike 1
                  last edited by

                  @Mike-1 said in Wiping an purging control:

                  @OwenD
                  The code is already in a macro. But it should cause issues when printing once relative and once absolut gcode. Is there a command to detect the printers status to return to the same mode after wiping? Then I could use M82 in a condtional case. How can I trigger that x mm filament have been printed in relative mode?

                  I don't really understand why using relative is an issue, but nevertheless you can get the position from the object model
                  move.extruders[].position or move.extruders[].rawPosition

                  And inputs[2].drivesRelative should give you whether relative or absolute extrusion is in use for the file.

                  Mike 1undefined 1 Reply Last reply Reply Quote 0
                  • Mike 1undefined
                    Mike 1 @OwenD
                    last edited by

                    @OwenD said in Wiping an purging control:

                    I don't really understand why using relative is an issue

                    Maybee I am wrong with my understanding how it works. I want to to make a wipe operation after x mm of processed filament triggerd by layer change. Adding the extruded filament for each line of gcodes does not seam to be possible for me. So I need some kind of absolute value.

                    OwenDundefined deckingmanundefined 2 Replies Last reply Reply Quote 0
                    • OwenDundefined
                      OwenD @Mike 1
                      last edited by

                      @Mike-1
                      My printer is out of action at the moment so I can't test, but if the object model items I listed don't keep a running total, try move.virtualEPos

                      Presumably you want to perform a wipe every X mm or so?
                      So maybe in the layer change something like this
                      Create a global in your start.g

                      if !exists(global.wipesDone)
                         global wipesDone = 1
                      else
                         set global.wipesDone = 1
                      
                      if !exists(global.wipeEveryXmm)
                         global wipeEveryXmm = 1500 ; or whatever 
                      else
                         set global.wipeEveryXmm = 1500
                      

                      In your layer change macro

                      if move.virtualEPos / global.wipesDone > global.wipeEveryXmm
                         M98 P"DoWipeMoves.g"
                         set global.wipesDone = global.wipesDone + 1
                      
                      Mike 1undefined 2 Replies Last reply Reply Quote 0
                      • deckingmanundefined
                        deckingman @Mike 1
                        last edited by

                        @Mike-1 You could also try prevention rather than cure. A silicone sock might help but coating the nozzles might be a better way. One product that I've used with a fair degree of success here in the UK is "Dry Molly". It's by a company called "Molyslip" and contains Molybdenum Disulphide. As the name implies, it's actually a dry lubricant but once coated, filament has a hard time sticking to the nozzle. Unlike PTFE based dry lubes which are only good for up to about 200 Deg C, this one is claimed to be good for up to 450 Deg C.

                        Ian
                        https://somei3deas.wordpress.com/
                        https://www.youtube.com/@deckingman

                        Mike 1undefined 1 Reply Last reply Reply Quote 0
                        • Mike 1undefined
                          Mike 1 @OwenD
                          last edited by

                          @OwenD
                          That looks fine in my eyes. Maybee some issues when changing the extruder. I will test it on Thuesday. Thanx!

                          1 Reply Last reply Reply Quote 0
                          • Mike 1undefined
                            Mike 1 @deckingman
                            last edited by

                            @deckingman
                            A silicone sock is in use. I made some tests with PTFE coated nozzles. I used them up to 240°C. That did not fix all my issues. Did you test PETG?

                            deckingmanundefined 1 Reply Last reply Reply Quote 0
                            • deckingmanundefined
                              deckingman @Mike 1
                              last edited by

                              @Mike-1 said in Wiping an purging control:

                              @deckingman
                              Did you test PETG?

                              Yes.

                              Ian
                              https://somei3deas.wordpress.com/
                              https://www.youtube.com/@deckingman

                              1 Reply Last reply Reply Quote 0
                              • Mike 1undefined
                                Mike 1 @OwenD
                                last edited by

                                @OwenD
                                Now I added two new files in system folder, but it is not working.

                                start.g
                                wipe.g

                                Wipe is executed and I get "wipe.g finished" as a feedback.

                                OwenDundefined 1 Reply Last reply Reply Quote 0
                                • OwenDundefined
                                  OwenD @Mike 1
                                  last edited by OwenD

                                  @Mike-1
                                  What part "isn't working"
                                  Have you monitored move.virtualEPos to check if it is incrementing as you expect?
                                  You can easily add some echo commands in there to make it clear.
                                  You might also want to reduce global.wipeEveryXmm to say 200 while testing so it does it more often

                                  Edit:
                                  As I stated earlier, my printer is down so I caan't print to check anything.
                                  During simulation move.virtualEPos remains at zero, but move.extruders[0].position and move.extruders[0].rawPosition both increment, so you may need to use one of those.

                                  echo "virtualEPos = " ^  move.virtualEPos
                                  echo "Check value = " ^ move.virtualEPos / global.wipesDone
                                  echo "Need to wipe = "  ^ move.virtualEPos / global.wipesDone > global.wipeEveryXmm
                                  
                                  if move.virtualEPos / global.wipesDone > global.wipeEveryXmm
                                     echo "Calling brush.g"
                                     M98 P"brush.g"
                                     set global.wipesDone = global.wipesDone + 1
                                     echo global.wipesDone
                                  echo "wipe.g finished"
                                  
                                  Mike 1undefined 1 Reply Last reply Reply Quote 0
                                  • Mike 1undefined
                                    Mike 1 @OwenD
                                    last edited by

                                    @OwenD

                                    Oh sorry, I was out for a while.

                                    It is working with move.extruders[0].rawPosition. As I do have 4 extruders is there an easy way to replace the 0 by the number of the active extruder?

                                    I am thinking about replacing global.wipesDone by a global.raw position. Then I would give it the current value in the brush.g and check the difference move.extruders[0].rawPosition-global.raw > x and control the process by this.

                                    Brushing works fine 🙂 Thanks!

                                    OwenDundefined 1 Reply Last reply Reply Quote 0
                                    • OwenDundefined
                                      OwenD @Mike 1
                                      last edited by OwenD

                                      @Mike-1
                                      I'm away on business at present so only have my phone
                                      Assuming you have one extruder per tool you could use
                                      tools[state.currentTool].extruders[0]
                                      to return the active extruder
                                      You might want to put it in a variable if the line length is getting too big.

                                      if state.currentTool = -1
                                         echo "no tool selected"
                                         M99
                                      var position = tools[state.currentTool].extruders[0]
                                      echo "position is" , move.extruders[var.position].rawPosition
                                      
                                      Mike 1undefined 1 Reply Last reply Reply Quote 0
                                      • Mike 1undefined
                                        Mike 1 @OwenD
                                        last edited by

                                        @OwenD

                                        Now it working fine.
                                        I have a varible in start.g for the used filament.
                                        tpost.g updates the variable for the used filament for each toolchange
                                        wipe.g is executed by gcode
                                        brush.g starts the cleaning process

                                        start.g
                                        tpost0.g
                                        wipe.g
                                        tbrush0.g

                                        But oozing is an issue now. Can I reduce the amont of filament for M101?

                                        if {heat.heaters[1].current > heat.heaters[1].active - 5} && {heat.heaters[1].current > 150};min temperature to work
                                        M103
                                        M400
                                        ;brush in
                                        G1 X331.3 Y150 F50000
                                        G1 X331.3 Y100 F50000
                                        G1 X331.3 Y170 F50000
                                        G1 X331.3 Y100 F50000
                                        G1 X331.3 Y170 F50000
                                        G1 X331.3 Y100 F50000
                                        M400
                                        M101
                                        else
                                        echo "temperature too low to brush"

                                        OwenDundefined 1 Reply Last reply Reply Quote 0
                                        • OwenDundefined
                                          OwenD @Mike 1
                                          last edited by

                                          @Mike-1 said in Wiping an purging control:

                                          @OwenD

                                          But oozing is an issue now. Can I reduce the amont of filament for M101?

                                          Maybe look at the R parameter of M207?

                                          Mike 1undefined 1 Reply Last reply Reply Quote 0
                                          • Mike 1undefined
                                            Mike 1 @OwenD
                                            last edited by

                                            @OwenD

                                            I am using a 0.6mm steel nozzle and it has some issues with thermal conductivity (small parts are fine, big parts need a higher temperature 265°C + x for PETG with the risk of burend material) so I am thinking about going back to 0.4mm as these have much less issues and slicers have problems with differernt diameters at the same time. The alternative would be a CHT like nozzle. I have to think about it.

                                            M207 might be a good idea.
                                            I am struggeling with ability to use absolute and relative values for the extruder in the gcode.
                                            I don't know how the gcode interferes with M207. Issue is the time from the wiping station to the printig object. So the correct way to do, would be to bring the prinhead back to its position and then unretract. But one part is driven by the printer and one by the gcode.

                                            Unfortunately I will leave my printer behind for a few weeks on Thuesday again.
                                            If you have a good idea to fix it, I would really appreciate it. But I am short in time and will have to make a break 😥 .

                                            Thanks!!!

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