FILAMENT_RUNOUT_DISTANCE_MM or similar at reprap?
-
@owend Looking at how caribou3d duet handles the sensor
https://github.com/Caribou3d/CaribouDuet2Wifi-ConfigurationMacrosmay be, on trigger we could deactivate sensor, continue printing for var runoutDistance, and then trigger pause, reactivate, load an resume
??
-
-
I have recreated this - and moved it to firmware wishlist section as the behaviour will need to be changed to allow the filament out logic to run without a pause.
-
@t3p3tony
Thanks Tony -
@t3p3tony thanks
-
@t3p3tony does this feature have an ETA?
-
@apak no ETA yet.
-
-
-
-
@t3p3tony Tell me if I'm correct:
A workaround should be possible by setting a global variable in filament-error.g if you want to cancel the pause. pause.g checks for the variable, and does an M24 if the variable was set, instead of its usual commands.
Do you think this would work? Or would it skip pause.g if filament-error.g ran, giving you no opportunity to cancel the pause? I'm uncertain whether pause.g gets run or not if filament-error.g exists. I know it's not supposed to.
-
@donstauffer if filament-error.g runs then pause.g does not run AFAIK. The issue is that there is always a pause as part of the process no matter which macro is called.
-
@t3p3tony Confirmed. pause.g doesn't run.
-
Just confirming that this is now possible with 3.4.0b7
Albeit you must be aware that the macro called is now filament_error.g, not filament-error.g
i.e. must have an underscore "_" and not a hyphen "-"
There is also a problem if filament_error.g contains an M291 as described herefilament_error.g
;0:/sys/filament_error.g ;run when a filament sensor error is detected. Print will be paused bt Daemon.g after runout distance. var runoutDistance = 350 ; this is just so you can change easily ; first check that we are not currently in an error state and the switch has been toggled again. if (global.filamentDistance !=0) || !(state.status = "processing") echo "Filament sensor triggered, but already no print in progress. No action taken" M99 ; exit macro echo "filament_error.g run" G4 P10 ; delay 10ms to debounce if sensors.filamentMonitors[0].status="ok" echo "switch bounce detected - error cancelled" M99 ; break out if sensor value is zero again (bouncing) echo {"Filament error type " ^ param.P ^ " detected on extruder " ^ param.D} ;M291 R"Filament Error" P{"Filament error type " ^ param.P ^ " detected on extruder " ^ param.D} S1 T3 var thisExtruderValue = move.extruders[tools[state.currentTool].filamentExtruder].position set global.filamentDistance = var.thisExtruderValue + var.runoutDistance echo "filament_error.g run - print will be paused after " ^ var.runoutDistance ^ "mm"
In daemon.g
(Note this is run in a while loop so it's called at intervals less than 10 seconds)while true ; I have a bunch of other stuff in here ;check the filament runout if state.currentTool != -1 if (move.extruders[tools[state.currentTool].filamentExtruder].position > global.filamentDistance) && (global.filamentDistance !=0) && (state.status = "processing") echo "paused called from daemon - filament runout" M25 ; pause print if filament has run out G4 S2 ; add a delay for these checks
In resume.g we reset the distance
if sensors.filamentMonitors[0].status="ok" set global.filamentDistance = 0 ; reset filament sensor extrusion distance ;do all the other stuff needed for resuming
You also need to set the distance to zero in start.g
if sensors.filamentMonitors[0].status="ok" set global.filamentDistance = 0 ; reset filament sensor extrusion distance else abort "Filament sensor shows no filament loaded. Print aborted"
and of course define the global in config.g
if !exists(global.filamentDistance) global filamentDistance = 0 ; global for use to allow filament to feed for set distance after sensor trips else set global.filamentDistance = 0
-
thanks, will try
-
This post is deleted! -
@apak any word on whether or not this is functioning correctly? I would like to set this up for a reverse Bowden setup also.
-