FILAMENT_RUNOUT_DISTANCE_MM or similar at reprap?
-
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.
-