Skip to content

Improved Jogging, Z-probe funcitionality, move-to fix. - #3

Open
btingle wants to merge 2 commits into
TeaEngineering:mainfrom
btingle:main
Open

btingle wants to merge 2 commits into
TeaEngineering:mainfrom
btingle:main

Conversation

@btingle

@btingle btingle commented Oct 5, 2026

Copy link
Copy Markdown
Contributor

I like this project because the Vpanel download is a bitch and a half to find, and this is a nice open source alternative. But it was missing some crucial features, so I have implemented them here.

The jogging works like vpanel- a single press moves it by the pulse amount (options being 5mm, 1mm, 0.1mm, 0.01mm, like vpanel) with the 5mm pulse amount correspond to max feed when held down, and corresponding decreases in feed with decreasing pulse size. The old mode can be toggled back by pressing "J" in case the new jogging behavior is too spooky.

The "b" key now initiates the Z-probe cycle (with a "y" confirmation dialogue), have confirmed this to be working correctly.
I thought at first the "move-to" feature was only working in the machine coordinate system, but further investigation revealed it just straight up didn't do anything- so I had it fixed. Have tested that it works now.

So, to summarize:

Jogging
z-probing
fixed move-to

Cheers!

btingle and others added 2 commits October 4, 2026 21:27
Implement User/RML-1 Z probing from captured Roland VPanel USB traffic.
Check sensor and machine readiness, poll live motion status, refresh the
User origin after completion, and report unverified outcomes on failure
or cancellation. Block competing commands during the cycle.

Add hold-to-jog for standard terminals using keyboard auto-repeat and a
200 ms release timeout, with native terminal release events when available.
Pair each pulse size with a constant feed: 0.01/6, 0.1/60, 1/600, and
5 mm/3000 mm-min. Default to 5 mm, expose the current pulse/feed, remove
the independent speed selector and application ramp, and clarify the
Z controls as a(up)/z(down).

Resolve Move-To origins and numeric targets in the selected coordinate
system while preserving omitted axes. Keep preview in machine coordinates,
reject failed origin reads, and hold absolute-move operation brackets open
until motion ends. Compose dialog overlays and the background in one
curses update to eliminate flicker.

Document the vendor protocol and add captured-status replay, packet,
coordinate-conversion, cancellation, repeat-timeout and interlock tests.
Pin setuptools below 81 for the existing pyhershey/pkg_resources dependency.

Validation: 154 tests passed, one existing Python-3.12 text-rendering test
skipped, and curses PTY smoke checks passed. The operator confirmed jogging,
Move-To, and Z probing on the physical MDX-40A.
Add MDX-40A Z probing and refine interactive motion controls
@shuckc

shuckc commented Oct 31, 2026

Copy link
Copy Markdown
Member

HI @btingle thanks for this. I have soldered up a replacement cable for my Z-height probe so should be able to verify it works.

I have not yet tried to decode the stored Z-height sensor height (14mm?) I will try to get that figured out in the preferences dialog code.

@btingle

btingle commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor Author

HI @btingle thanks for this. I have soldered up a replacement cable for my Z-height probe so should be able to verify it works.

I have not yet tried to decode the stored Z-height sensor height (14mm?) I will try to get that figured out in the preferences dialog code.

Mine is 15.1mm high. Calipers work well enough here :)

Edit: oh I see- you need to store this value (whatever it is measured as) in the machine's configuration so it knows how to set zero... Did not implement that yet!

@shuckc

shuckc commented Nov 3, 2026

Copy link
Copy Markdown
Member

The way the existing move command work is:

  • Press [C] to choose coordinate space (other than MCS). This updates the position displays to be relative to that coordinate system's origin.
  • Jog to a foreign location using arrow keys so X/Y/Z/A is showing a non-zero value.
  • Press [M] to open move dialog, then select axis, then enter.

The machine sets those axis back to zero in the selected coordinate system.
If you are already at the origin, then sure those moves do nothing.

What is your model/firmware version shown on first connect?

@btingle

btingle commented Nov 3, 2026

Copy link
Copy Markdown
Contributor Author

The way the existing move command work is:

  • Press [C] to choose coordinate space (other than MCS). This updates the position displays to be relative to that coordinate system's origin.
  • Jog to a foreign location using arrow keys so X/Y/Z/A is showing a non-zero value.
  • Press [M] to open move dialog, then select axis, then enter.

The machine sets those axis back to zero in the selected coordinate system. If you are already at the origin, then sure those moves do nothing.

What is your model/firmware version shown on first connect?

I was attempting to follow that procedure- but no matter which coordinate system I selected or what coordinates I set move-to wouldn’t do anything. So I had my chatgippity intercept move-tos from the actual vpanel application to understand how to fix.

don’t know the model/firmware- probably mismatched from yours. Will check next time I’m at the machine.

@btingle

btingle commented Nov 4, 2026

Copy link
Copy Markdown
Contributor Author

16:10:36.938 INFO rollingmill.usb: MDX-40A link bus=1 addr=2 serial='A' interface=0
16:10:36.941 INFO rollingmill.usb: GET_DEVICE_ID: ·6MFG:Roland;CMD:RML-1;MDL:MDX-40A;DES:Roland MDX-40A;
16:10:36.948 INFO rollingmill.machine: Machine endian confirmed (sig=0x1234)
16:10:36.952 INFO rollingmill.machine: Firmware ID: V170;B210

Here is the device ID/firmware.

@shuckc

shuckc commented Nov 7, 2026 •

Copy link
Copy Markdown
Member

Looks like you are on a newer firmware 1.7, mine is 1.5:

16:50:21.926  INFO     rollingmill.usb: MDX-40A link bus=1 addr=4 serial='A' interface=0
16:50:21.926  INFO     rollingmill.usb: GET_DEVICE_ID: ·6MFG:Roland;CMD:RML-1;MDL:MDX-40A;DES:Roland MDX-40A;
16:50:21.928  INFO     rollingmill.machine: Machine endian confirmed (sig=0x1234)
16:50:21.935  INFO     rollingmill.machine: Firmware ID: V150;B210
16:50:21.936  INFO     rollingmill.machine: Axis scaling: X=100.000% Y=100.000% Z=100.000% A=100.000%
16:50:21.937  INFO     rollingmill.machine: Rotary angle correction: P1(X=50.000 Y=0.000 Z=0.000) P2(X=250.000 Y=0.000 Z=0.000) mm

I wonder if Gcode/RML/Auto mode makes a difference, and/or the workspaces being used. I will have a play around with the Z0 sensor code and see how it works.

@shuckc shuckc mentioned this pull request Nov 7, 2026
2 tasks done
shuckc added a commit that referenced this pull request Nov 8, 2026
Press b, confirm with Y, and the firmware runs its Z0 sensor cycle for the
User (RML-1) coordinate system, based on a captured VPanel session
(SET 0x3902 with the 0x2001 sensor pre-checks). The TUI keeps polling during
the cycle, Esc requests a stop, and any cancelled/lost/timed-out cycle is
reported as unverified.

Extracted from the Z-probe parts of PR #3 by btingle (probing.py, tests,
docs, decode entries and the TUI hooks); the jogging and move-to changes in
that PR are left out.

Co-authored-by: Chris Shucksmith <chris@shucksmith.co.uk>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
shuckc added a commit that referenced this pull request Nov 8, 2026
Press b, confirm with Y, and the firmware runs its Z0 sensor cycle for the
User (RML-1) coordinate system, based on a captured VPanel session
(SET 0x3902 with the 0x2001 sensor pre-checks). The TUI keeps polling during
the cycle, Esc requests a stop, and any cancelled/lost/timed-out cycle is
reported as unverified.

Extracted from the Z-probe parts of PR #3 by btingle (probing.py, tests,
docs, decode entries and the TUI hooks); the jogging and move-to changes in
that PR are left out.

Co-authored-by: Chris Shucksmith <chris@shucksmith.co.uk>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
shuckc added a commit that referenced this pull request Nov 8, 2026
Press b, confirm with Y, and the firmware runs its Z0 sensor cycle for the
User (RML-1) coordinate system, based on a captured VPanel session
(SET 0x3902 with the 0x2001 sensor pre-checks). The TUI keeps polling during
the cycle, Esc requests a stop, and any cancelled/lost/timed-out cycle is
reported as unverified.

Extracted from the Z-probe parts of PR #3 by btingle (probing.py, tests,
docs, decode entries and the TUI hooks); the jogging and move-to changes in
that PR are left out.

Co-authored-by: Chris Shucksmith <chris@shucksmith.co.uk>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
shuckc added a commit that referenced this pull request Nov 9, 2026
Press b, confirm with Y, and the firmware runs its Z0 sensor cycle for the
User (RML-1) coordinate system, based on a captured VPanel session
(SET 0x3902 with the 0x2001 sensor pre-checks). The TUI keeps polling during
the cycle, Esc requests a stop, and any cancelled/lost/timed-out cycle is
reported as unverified.

Extracted from the Z-probe parts of PR #3 by btingle (probing.py, tests,
docs, decode entries and the TUI hooks); the jogging and move-to changes in
that PR are left out.

Co-authored-by: Chris Shucksmith <chris@shucksmith.co.uk>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@shuckc

shuckc commented Nov 9, 2026 •

Copy link
Copy Markdown
Member

@btingle PR #8 took your Z-origin sensor probe work and gave it a bit of polish, added ability to read/set the probe height (mine measures 15.030mm). I've verified in hardware that this round trips, and the offset works for the Gcode workspaces too, nice way to set the machine.

Meanwhile I have merged code to re/write the 'machine config' ie. NC mode, RML-1 mode or Auto, plus the NC settings under the n keypress, and report the settings in the startup log messages.

The jogging changes are a bit tricky as I sometimes use the mill for manual cutting work, where I slow the feed right down to cutting speed, start the spindle with s, <, >, and just eyeball the slot or whatever using 50mm, 10mm, 1mm increments until it's cut, lower Z and cut back the other way -- to save writing G code. This is a bit too tricky to do with the feed rate combined with the jog step, as it can't cut the longer moves at higher speed.

I've still got no clue why the 'Move To' dialog doesn't work for you, I will do a bit more testing. Thanks for your kind words.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants