Wiping an purging control
-
@deckingman
I dislike the relative mode because the infomation about the used filament is lost. -
@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 -
@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
ormove.extruders[].rawPosition
And
inputs[2].drivesRelative
should give you whether relative or absolute extrusion is in use for the file. -
@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.
-
@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.virtualEPosPresumably 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.gif !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-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.
-
@OwenD
That looks fine in my eyes. Maybee some issues when changing the extruder. I will test it on Thuesday. Thanx! -
@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? -
-
-
@Mike-1
What part "isn't working"
Have you monitoredmove.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 reduceglobal.wipeEveryXmm
to say 200 while testing so it does it more oftenEdit:
As I stated earlier, my printer is down so I caan't print to check anything.
During simulationmove.virtualEPos
remains at zero, butmove.extruders[0].position
andmove.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"
-
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!
-
@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
-
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 processstart.g
tpost0.g
wipe.g
tbrush0.gBut 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" -
@Mike-1 said in Wiping an purging control:
But oozing is an issue now. Can I reduce the amont of filament for M101?
Maybe look at the R parameter of M207?
-
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!!!