Stop using bdwidth while printing, work without it
bdwidth's motion reading stays at 0, its per-reading width compensation made the flow jump between 77 and 119%, and a USB dropout shut down Klipper. PRINT_START no longer enables it. _PRINT_CLEANUP, BLOBIFIER_CHECKED and PURGE_UNTIL_EMPTY only send bdwidth commands when [bdwidth fila_width_0] exists, and bdwidth_status reports present: False with neutral values when it is not configured, so the section can be removed from printer.cfg. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
76172fbc4f
commit
93f00c87a7
6 files changed
+28
-14
No files matched your search
@@ -11,10 +11,10 @@ Voron 2.4 350, Klipper + Moonraker + Mainsail on a Raspberry Pi 4
|
|||||||
5 lanes, Blobifier purge bucket, Beacon (Z homing and probing), Nitehawk-SB
|
5 lanes, Blobifier purge bucket, Beacon (Z homing and probing), Nitehawk-SB
|
||||||
toolboard (USB), Leviathan mainboard as USB-CAN bridge, bd_pressure
|
toolboard (USB), Leviathan mainboard as USB-CAN bridge, bd_pressure
|
||||||
(load-check firmware, branch `load-check-extension` in
|
(load-check firmware, branch `load-check-extension` in
|
||||||
`D:\Claude\bd_pressure-load-check\bd_pressure`), bdwidth (measures width and
|
`D:\Claude\bd_pressure-load-check\bd_pressure`), bdwidth (CCD width/motion sensor on USB; switched off: its motion reading
|
||||||
motion optically with a CCD; its motion reading stays at 0, so it runs width
|
stays at 0, its width compensation made the flow jump 77-119% and a USB
|
||||||
only (`ENABLE_WIDTH` in PRINT_START) and the purge check runs with
|
dropout once shut down Klipper. The macros work with or without
|
||||||
`motion_check: False`; clogs and breaks are caught by AFC's buffer fault
|
`[bdwidth fila_width_0]`; clogs and breaks are caught by AFC's buffer fault
|
||||||
detection, `filament_error_sensitivity`), iHeater chamber heater.
|
detection, `filament_error_sensitivity`), iHeater chamber heater.
|
||||||
|
|
||||||
## Working with the printer
|
## Working with the printer
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ everything below, grouped by topic. Comment out what you do not use there.
|
|||||||
| `blobifier.cfg` | `BLOBIFIER`, `BLOBIFIER_CLEAN`, `BLOBIFIER_PARK`, `BLOBIFIER_SHAKE_BUCKET`, ...: purge bucket and nozzle brush for AFC (Turtleblobifier, heavily modified) | Blobifier hardware, AFC |
|
| `blobifier.cfg` | `BLOBIFIER`, `BLOBIFIER_CLEAN`, `BLOBIFIER_PARK`, `BLOBIFIER_SHAKE_BUCKET`, ...: purge bucket and nozzle brush for AFC (Turtleblobifier, heavily modified) | Blobifier hardware, AFC |
|
||||||
| `blobifier_hw.cfg` | servo and bucket switch pins | — |
|
| `blobifier_hw.cfg` | servo and bucket switch pins | — |
|
||||||
| **print/** | | |
|
| **print/** | | |
|
||||||
| `print_start_end.cfg` | `PRINT_WARMUP`, `PRINT_START`, `PRINT_END` | Beacon, AFC, Blobifier, `HEAT_SOAK`, iHeater, bdwidth, bd_pressure PA macros |
|
| `print_start_end.cfg` | `PRINT_WARMUP`, `PRINT_START`, `PRINT_END` | Beacon, AFC, Blobifier, `HEAT_SOAK`, iHeater, bd_pressure PA macros (bdwidth is no longer enabled while printing) |
|
||||||
| `pause_resume.cfg` | `PAUSE`, `RESUME`, `CANCEL_PRINT`, `M600` (RESUME also handles a running `HEAT_SOAK`, and after a PAUSE purges 40 mm with `BLOBIFIER_CHECKED` first: a failed check keeps the print paused, `RESUME PURGE=0` skips the purge; CANCEL_PRINT runs the same cleanup as `PRINT_END`) | `heating/heat_soak.cfg`, `leds/`, `blobifier/`, `afc/purge_check.cfg` |
|
| `pause_resume.cfg` | `PAUSE`, `RESUME`, `CANCEL_PRINT`, `M600` (RESUME also handles a running `HEAT_SOAK`, and after a PAUSE purges 40 mm with `BLOBIFIER_CHECKED` first: a failed check keeps the print paused, `RESUME PURGE=0` skips the purge; CANCEL_PRINT runs the same cleanup as `PRINT_END`) | `heating/heat_soak.cfg`, `leds/`, `blobifier/`, `afc/purge_check.cfg` |
|
||||||
| `filament.cfg` | `LOAD_FILAMENT`, `UNLOAD_FILAMENT` | — |
|
| `filament.cfg` | `LOAD_FILAMENT`, `UNLOAD_FILAMENT` | — |
|
||||||
| `homing.cfg` | `HOME` | — |
|
| `homing.cfg` | `HOME` | — |
|
||||||
@@ -50,7 +50,7 @@ everything below, grouped by topic. Comment out what you do not use there.
|
|||||||
| File | For |
|
| File | For |
|
||||||
|---|---|
|
|---|---|
|
||||||
| `xy_drift.py` | `AFC_XY_SAFETY_CHECK`: measures lost XY steps from the stepper step counts at the endstop triggers (CoreXY). The toolhead position after homing cannot show lost steps. |
|
| `xy_drift.py` | `AFC_XY_SAFETY_CHECK`: measures lost XY steps from the stepper step counts at the endstop triggers (CoreXY). The toolhead position after homing cannot show lost steps. |
|
||||||
| `bdwidth_status.py` | exposes bdwidth's motion counter and width to macros, and keeps a USB dropout of bdwidth (port: usb) from shutting down Klipper: the read is retried every 10 s and the port reopened |
|
| `bdwidth_status.py` | exposes bdwidth's motion counter and width to macros (`present: False` with neutral values when no bdwidth is configured, so the macros also work without it), and keeps a USB dropout of bdwidth (port: usb) from shutting down Klipper: the read is retried every 10 s and the port reopened |
|
||||||
| `bdpressure_check.py` | bd_pressure load check (`BDP_CHECK_START/STOP/QUERY`). Needs the load-check firmware from the bd_pressure `load-check-extension` branch; on stock firmware it reports "not available" and does nothing. |
|
| `bdpressure_check.py` | bd_pressure load check (`BDP_CHECK_START/STOP/QUERY`). Needs the load-check firmware from the bd_pressure `load-check-extension` branch; on stock firmware it reports "not available" and does nothing. |
|
||||||
|
|
||||||
### Scripts (`scripts/`)
|
### Scripts (`scripts/`)
|
||||||
|
|||||||
@@ -26,6 +26,9 @@
|
|||||||
# only starts reading on the first SET_BDWIDTH ... ENABLE
|
# only starts reading on the first SET_BDWIDTH ... ENABLE
|
||||||
# linear_motion - counts per mm (motion_linear_coefficient)
|
# linear_motion - counts per mm (motion_linear_coefficient)
|
||||||
# sample_time - seconds between sensor reads
|
# sample_time - seconds between sensor reads
|
||||||
|
# present - False when no [bdwidth <sensor>] is configured; the
|
||||||
|
# other fields then hold neutral defaults, so macros keep
|
||||||
|
# working with bdwidth removed from the config
|
||||||
# usb_ok - False while the USB connection is down (port: usb)
|
# usb_ok - False while the USB connection is down (port: usb)
|
||||||
# usb_errors - USB read errors since Klipper start
|
# usb_errors - USB read errors since Klipper start
|
||||||
#
|
#
|
||||||
@@ -54,7 +57,10 @@ class BDWidthStatus:
|
|||||||
self._handle_connect)
|
self._handle_connect)
|
||||||
|
|
||||||
def _handle_connect(self):
|
def _handle_connect(self):
|
||||||
self.sensor = self.printer.lookup_object(self.sensor_name)
|
self.sensor = self.printer.lookup_object(self.sensor_name, None)
|
||||||
|
if self.sensor is None:
|
||||||
|
logging.info("bdwidth_status: no [%s] configured", self.sensor_name)
|
||||||
|
return
|
||||||
if (getattr(self.sensor, 'port', None) == 'usb'
|
if (getattr(self.sensor, 'port', None) == 'usb'
|
||||||
and callable(getattr(self.sensor, 'Read_bdwidth', None))
|
and callable(getattr(self.sensor, 'Read_bdwidth', None))
|
||||||
and getattr(self.sensor, 'usb', None) is not None):
|
and getattr(self.sensor, 'usb', None) is not None):
|
||||||
@@ -96,6 +102,11 @@ class BDWidthStatus:
|
|||||||
|
|
||||||
def get_status(self, eventtime):
|
def get_status(self, eventtime):
|
||||||
s = self.sensor
|
s = self.sensor
|
||||||
|
if s is None:
|
||||||
|
return {'name': self.name, 'present': False, 'reading': False,
|
||||||
|
'enabled': False, 'total_move': 0, 'last_motion': 0,
|
||||||
|
'diameter': 0., 'active': 'disable', 'linear_motion': 42.8,
|
||||||
|
'sample_time': 1., 'usb_ok': True, 'usb_errors': 0}
|
||||||
# bdwidth's own get_status() is the runout helper's, which carries
|
# bdwidth's own get_status() is the runout helper's, which carries
|
||||||
# the SET_FILAMENT_SENSOR enable flag
|
# the SET_FILAMENT_SENSOR enable flag
|
||||||
try:
|
try:
|
||||||
@@ -110,6 +121,7 @@ class BDWidthStatus:
|
|||||||
and 'disable' not in str(getattr(s, 'is_active', 'disable')))
|
and 'disable' not in str(getattr(s, 'is_active', 'disable')))
|
||||||
return {
|
return {
|
||||||
'name': self.name,
|
'name': self.name,
|
||||||
|
'present': True,
|
||||||
'reading': reading,
|
'reading': reading,
|
||||||
'enabled': enabled,
|
'enabled': enabled,
|
||||||
'total_move': getattr(s, 'actual_total_move', 0),
|
'total_move': getattr(s, 'actual_total_move', 0),
|
||||||
|
|||||||
@@ -65,13 +65,14 @@ gcode:
|
|||||||
# pause the printer (the check reports it instead). Afterwards the
|
# pause the printer (the check reports it instead). Afterwards the
|
||||||
# runout response is restored; bdwidth itself is only switched off
|
# runout response is restored; bdwidth itself is only switched off
|
||||||
# again outside a print, so a print never loses it.
|
# again outside a print, so a print never loses it.
|
||||||
{% set bdw_on = cfg.motion_check and not printer.bdwidth_status.reading|default(false) %}
|
{% set has_bdw = printer.bdwidth_status.present|default(true) %}
|
||||||
|
{% set bdw_on = has_bdw and cfg.motion_check and not printer.bdwidth_status.reading|default(false) %}
|
||||||
{% set bdw_off = bdw_on and printer.print_stats.state not in ["printing", "paused"] %}
|
{% set bdw_off = bdw_on and printer.print_stats.state not in ["printing", "paused"] %}
|
||||||
{% set runout_was = 1 if printer.bdwidth_status.enabled else 0 %}
|
{% set runout_was = 1 if printer.bdwidth_status.enabled else 0 %}
|
||||||
# Without the motion check, bdwidth's own runout response is off during
|
# Without the motion check, bdwidth's own runout response is off during
|
||||||
# the purge too, so a bdwidth that does not see the movement cannot
|
# the purge too, so a bdwidth that does not see the movement cannot
|
||||||
# pause the printer here; the pressure check judges the purge.
|
# pause the printer here; the pressure check judges the purge.
|
||||||
{% set runout_off = bdw_on or not cfg.motion_check %}
|
{% set runout_off = has_bdw and (bdw_on or not cfg.motion_check) %}
|
||||||
{% if cfg.mode == "off" %}
|
{% if cfg.mode == "off" %}
|
||||||
BLOBIFIER {rawparams}
|
BLOBIFIER {rawparams}
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ gcode:
|
|||||||
RESPOND MSG="PURGE_UNTIL_EMPTY: unsyncing {printer.AFC.current_load} from the extruder (UNSET_LANE_LOADED)"
|
RESPOND MSG="PURGE_UNTIL_EMPTY: unsyncing {printer.AFC.current_load} from the extruder (UNSET_LANE_LOADED)"
|
||||||
UNSET_LANE_LOADED
|
UNSET_LANE_LOADED
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% set bdw = printer.bdwidth_status.name if 'bdwidth_status' in printer else '' %}
|
{% set bdw = printer.bdwidth_status.name if 'bdwidth_status' in printer and printer.bdwidth_status.present|default(true) else '' %}
|
||||||
{% set runout_was = 1 if bdw and printer.bdwidth_status.enabled else 0 %}
|
{% set runout_was = 1 if bdw and printer.bdwidth_status.enabled else 0 %}
|
||||||
{% if runout_was %}
|
{% if runout_was %}
|
||||||
RESPOND MSG="PURGE_UNTIL_EMPTY: bdwidth runout response off during the purges"
|
RESPOND MSG="PURGE_UNTIL_EMPTY: bdwidth runout response off during the purges"
|
||||||
|
|||||||
@@ -203,10 +203,9 @@ gcode:
|
|||||||
|
|
||||||
_AFC_STORE_HOME_REFERENCE
|
_AFC_STORE_HOME_REFERENCE
|
||||||
|
|
||||||
# Width only (flow compensation and runout when no filament is measured).
|
# bdwidth is not used while printing: its motion reading stays at 0 and its
|
||||||
# The CCD motion reading stays at 0 (actual_total_move:0), so motion mode
|
# per-reading width compensation made the flow jump between 77 and 119%.
|
||||||
# (ENABLE_MOTION / ENABLE_ALL) only gives false "Rounout" messages.
|
# To use it again: SET_BDWIDTH NAME=fila_width_0 COMMAND=ENABLE_WIDTH
|
||||||
SET_BDWIDTH NAME=fila_width_0 COMMAND=ENABLE_WIDTH
|
|
||||||
|
|
||||||
_status_printing
|
_status_printing
|
||||||
|
|
||||||
@@ -252,7 +251,9 @@ gcode:
|
|||||||
TURN_OFF_HEATERS
|
TURN_OFF_HEATERS
|
||||||
iHEATER_OFF ; stops the chamber heater control loop too
|
iHEATER_OFF ; stops the chamber heater control loop too
|
||||||
M107
|
M107
|
||||||
|
{% if 'bdwidth fila_width_0' in printer %}
|
||||||
SET_BDWIDTH NAME=fila_width_0 COMMAND=DISABLE ; also sets M221 S100
|
SET_BDWIDTH NAME=fila_width_0 COMMAND=DISABLE ; also sets M221 S100
|
||||||
|
{% endif %}
|
||||||
M221 S100
|
M221 S100
|
||||||
BED_MESH_CLEAR
|
BED_MESH_CLEAR
|
||||||
SET_SKEW CLEAR=1
|
SET_SKEW CLEAR=1
|
||||||
|
|||||||
Reference in new issue
Block a user