Repository navigation
Conversation
Upstream absorbed the bowden-path calibration feature in cf4e538 and extended it (FEED_JOG, i18n, generic sensor discovery), so main's versions are taken for every conflicted file. Re-applied on top of main's ace.py, since upstream's copy lacks them while its web UI still sends them: - ACE_UNLOAD_HEAD CALIBRATION_PREPARE=1 ACE= SLOT= handling (route validation, unknown-source recovery, cancellable preparation unload) - cancel checkpoints in _run_tipform - calibration abort on print start and klippy disconnect
Upstream ships the tab hidden behind CALIBRATION_TAB = false.
…gins Verification no longer stops dead at the saved toolhead distance. It runs one long move to 150 mm short of it, then 50 mm steps up to 200 mm past it until the toolhead sensor trips. A sensor position more than 10 mm from the saved distance replaces it for the rest of the round trip and for the proposed config values; manual jogging remains only as the fallback after the automatic search. Default margins on the saved values go from 20/20 mm to 150 mm (load) and 100 mm (swap retract), the swap retract is capped below the full retract, and a session primed from saved values no longer adds the swap margin a second time on apply.
The measuring feed and the verification feed booked distance as commanded speed x elapsed time, counted from when the command was queued. The ACE starts late, so the estimate ran ahead and was capped at the chunk length: results landed on the 100 mm (measure) / 50 mm (verify) grid, rounded up, and the return then over-retracted by the same amount. On V2 the per-command lane encoder is now the position source in the feed direction, with one more reading after the lane has stopped at the sensor. A reading requested right behind a motion command can still hold the previous command's value; those are ignored, which also fixes the inflated return encoder span. With a working encoder the verification feed is one continuous move again. V1 keeps the time estimate. Also: a standstill-guard failure is no longer overwritten by the state that follows it, reset is refused during a forward jog, each move logs commanded vs encoder distance, and the UI marks a time-estimated tip as such and holds it back instead of showing the splitter as passed early.
Printer side - ACE_CALIBRATION_STOP halts any calibration move and books the distance it covered; ACE_CALIBRATION_RESUME carries on a stopped feed, return or verification. - ACE_CALIBRATION_HOME pulls the filament back to the ACE from wherever a stopped, cancelled or failed run left it. A new run is refused while calibration filament is still in the tube, and so is ACE_LOAD_HEAD. - RETRACT accepts long pulls (hold-to-pull-back), MARK=undo removes the hub mark, the return is one move. - Verification no longer stops at the toolhead; at the hub stop the user can pull back further (ACTION=hub_jog) and that distance is added to the hub clearance. - The measuring feed is one move once the lane encoder has reported, and its limit no longer hangs on the configured load length (+1000 mm). Web UI - Setup only picks the route; where the result is saved is chosen in Results, next to the save button. - One click starts a measurement; reinserting the filament is a hint. - Hub step: hold-to-pull-back, labelled steps in both directions, one button that marks and returns, undo during the return. - A recovery bar offers carry on / return filament to the ACE whenever a run is stopped. - Results: one table (saved, measured, margin, will save), a note when the hub clearance is capped or slots keep their own values, a restart button after saving, and no save button when nothing changed. - Route diagram drawn to scale, one vocabulary, all strings in the en/de catalogs.
The calibration tab was painted with style.css's fixed dark colours and rounded cards in every design. style-new.css now gives it the square, line-drawn look of the other tabs under html[data-theme="new"], using only the design tokens, so the light shade follows without rules of its own. The classic design is unchanged. Also: while the hub position has not been measured yet, the diagram treats the two tubes as the two halves of the route and marks the hub as not measured, instead of drawing the tip before a hub it may have passed.
Below 560 px the route runs top to bottom; the new design's 2 px tube rule had collapsed the tubes there. Tubes get a fixed height again with their lengths beside them, the step chips stay in one row, and the results table drops the "saved now" column and the sub-lines so it fits without scrolling sideways. Applies to the classic and the new design.
Owner
|
Direction looks right, thanks. I have pulled the branch onto my dev tree for hardware tests (ACE Pro, multi mode, stop/resume/home); results in a few days. The missing CALIBRATION_PREPARE handling is a real gap on my side, good catch. Tab on is fine. Ping me when it is out of draft. |
decay71
reviewed
Oct 17, 2026
decay71
left a comment
Owner
There was a problem hiding this comment.
Thanks, the encoder rework does what it should, the measurement on the ACE 2 is spot on. Here is what came up on the rest of our rig (2x ACE 2 Pro, 2x ACE Pro, head mode, build 256eaa1b):
- ACE 2: measurement works. Encoder distance 1749 mm, verify found the toolhead sensor at exactly 1749, 100 mm retract steps count 97 to 98. The 100 mm grid problem is gone.
- ACE Pro: the hold button unloaded the spool. Pressing it sent
unwind_filament len=2297, the release 0.7 s later sentstop_feed_filament(answered success), but the ACE Pro kept unwinding the full length: on V1 that command stops a feed, not an unwind. The calibration assumed ~21 mm, so "Return filament to the ACE" unwound another 2276 mm and the filament left the unit (gate went empty). Please stop unwinds on V1 withstop_unwind_filament(not used anywhere in multiACE yet, so verify it on hardware), or drop the hold button on V1 and keep the bounded steps. - After that the session was stuck. Starting the next calibration (ACE 2) ended in
splitter checkpoint must be before the ACE preload reference: the old session still held the inflated retract count. A failed or abandoned run should reset cleanly. Also, the web showed the raw Moonraker JSON with the traceback instead of just the message. - The "Coarse" row is not understandable. Nothing says it is a hold button until it is pressed; it reads like a step size next to the 5/10/25/100 buttons. Please label it as what it is. Or make it a start / stop, i can't press my mouse and check the printers cabling, they are not next to each other. Suggestion: one line for the path from the ACE to the head with a handle at the current tip position. Drag it left or right to the target and on release move exactly that difference as one bounded command. Easier to read, and it also removes the unbounded V1 unwind from point 2.
- Verify checks the raw measurement, not what gets saved. It feeds
load_lengthand retractsswap_retract_lengthwithout the margins. It should run the values that will be written (load +150, swap retract +100), the swap retract is the one used on every swap. - Saving forces a restart flow that does not fit. After saving you confirm a restart twice, but no restart happens, and until one does you cannot get back into the calibration. A restart is not needed right away anyway. Please just save, show a note that the new values apply to loads and swaps after the next restart, and let the user go on with the next ACE or slot. Then everything gets calibrated and the printer restarts once at the end.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Work in progress. This runs on my U1 (one ACE 2 Pro, head mode), but it still needs more testing before it should be merged. See "Testing" at the bottom. Opening it as a draft so you can look at the direction.
It builds on my previous bowden-path calibration work that was ported into
main, is merged up to 1.27b, and does three things: it answers the feedback on the first version, it fixes a few problems that turned up while doing so, and it aligns the calibration tab with the new design.The feedback this started from
The length measurement worked well. These were the issues, each with what this PR does about it:
main. Added: a hold-to-pull-back button for the long stretch, labelled steps in both directions, a Stop that keeps the distance covered, and undo for the hub mark.What else turned up
ACE_CALIBRATION_STOP/RESUME/HOME, a recovery bar in the UI ("Carry on" / "Return filament to the ACE"), and a new run or anACE_LOAD_HEADis refused while calibration filament is still in the tube.ACE_UNLOAD_HEAD CALIBRATION_PREPARE=1was not wired up inmain. The web UI sends it and the helpers exist, butcmd_ACE_UNLOAD_HEADnever read it, so the preparation unload could not be cancelled. Restored, together with the cancel checkpoints in_run_tipformand the abort on print start and Klippy disconnect.load_length(+300 mm), the very value being measured. It is now +1000 mm.Theme alignment
The calibration tab was painted with
style.css's fixed dark colours and rounded cards in every design.style-new.cssnow has a calibration section underhtml[data-theme="new"]:The classic design is unchanged apart from the phone-width rules. All calibration strings are in the
enanddecatalogs;zhhas no calibration section and falls back to English.Open questions
CALIBRATION_TAB? It is set totruenow.Testing
Run on one U1 with one ACE 2 Pro in head mode. Not tested yet:
Screenshots
From the web UI on the printer. The setup and "check this route" screens are live; the mid-run screens were captured with a test state injected into the page, no filament was moved for them.
Setup: only the route

Measure, step 2: clear the hub

Verify: ready

Verify: the one stop, at the hub, with "pull back more"

Results: saved, measured, margin, will save

Stopped mid-run, light shade of the new design
