HEXAGON (RDS) Arm: Threaded Receiver and Scanner Logging
- VTube Update Articles
- VTube Technical Articles
- Downloadable Resources
- VTube Videos
- Measuring Devices
- Utility Software
- Partners
- Benderlink Hardware
- Bending Terminology
- Benderlink Software
- Benderlink Update Articles
- CNC Bender ProControl
- Bender to XYZ
- General Software Topics
- Windows Technical Articles
- TubeCAD
- FIF Translator Updates
Table of Contents
Advanced Topic for Technicians
The information here is very technical. Use it to understand how to optimize and diagnose HEXAGON RDS scan data speeds in VTube-LASER.
Applies to: VTube-LASER with HEXAGON/ROMER arms connected through RDS
Available from: VTube 4.5.1973, September 25, 2026
Overview
VTube receives laser stripes and arm positions from the HEXAGON RDS software. By default, VTube receives this data on its main (user interface) thread. When VTube is busy, RDS has to wait, and on older or slower PCs this can cause lag. A common symptom is the scanning sound continuing after the scan button is released.
RDS Threaded Receiver
An RDS threaded receiver is a newer development that prevents VTube from holding up the HEXAGON RDS software, so VTube can take the arm's full stripe rate (about 150 per second) instead of the roughly 40 it previously kept, without lagging.
It also fixes the lag on slower PCs where the scanning sound kept playing after the scan button was released.
What is a “Threaded Receiver”
A threaded receiver is a small part of VTube that runs on its own thread, separate from the one that runs VTube's screens and measuring logic. A thread is an independent line of work inside a program, so both can run at the same time.
Without it, the HEXAGON RDS software hands each stripe and arm position straight to VTube's main thread and waits until VTube has finished with it before sending the next one. If VTube is busy redrawing the screen or processing a scan, RDS is stuck waiting, and the data backs up.
With it, the receiver's only job is to take each message from RDS, put it in a waiting line (a queue), and immediately tell RDS it can send the next one. That takes a tiny fraction of a millisecond. VTube's main thread then works through the queue in order as soon as it's free. If VTube ever falls more than about a second behind, the oldest waiting data is dropped, so VTube always works with current data.
Illustration: It's like a receptionist who signs for every delivery right away and stacks them in order, so the courier never has to wait for other people in the company to collect each package individually. She signs for them all, the courier leaves, then others pick them off the pile as they arrive in the office.
Two settings in the VTube config file control this:
| Setting | What it does | Default |
|---|---|---|
| HEXAGON RDS Threaded Receiver | Receives RDS data on a separate background thread, so RDS is never held up by VTube. | 0 (off) |
| HEXAGON RDS Scanner Logging | Writes a once-per-second performance line to SmartInspect for diagnosing scanner speed. | 0 (off) |
With the threaded receiver on, VTube can accept the arm's full stripe rate (about 150 stripes per second on current scanners). If a PC falls behind, VTube drops the oldest waiting data rather than accumulating a delay, so it never falls more than about 1 second behind.
Where the settings are by default
File: C:\Users\Public\Documents\VTube\config\vtube local settings.cfg
Section: [Measuring Device]
Milliseconds Between Stripes Idle - HEXAGON Arm=100 Milliseconds Between Stripes Scanning - HEXAGON Arm=10 HEXAGON RDS Scanner Logging=0 HEXAGON RDS Threaded Receiver=0
Important:
- Close VTube before editing this file. VTube rewrites the file when it saves its configuration, so changes made while it's running will be overwritten.
- If the two HEXAGON RDS lines aren't in the file yet, VTube adds them the next time it saves its configuration. You can also type them in yourself under
[Measuring Device]. - Changes take effect the next time VTube starts and connects to the arm.
Recommended settings for using the threaded receiver
| Setting | Recommended with the threaded receiver | Notes |
|---|---|---|
| HEXAGON RDS Threaded Receiver | 1 | Turns on the background receiver. |
| Milliseconds Between Stripes Scanning - HEXAGON Arm | 0 | Accepts every stripe while scanning. With the threaded receiver, any value above 0 drops more stripes than expected. |
| Milliseconds Between Stripes Idle - HEXAGON Arm | 100 (leave as is) | Only applies when the scan button isn't pressed. |
| HEXAGON RDS Scanner Logging | 0 normally, 1 for diagnosing | Leave off in normal use. |
Threaded Receiver is ON by Default in New Installs
In new VTube installations, the HEXAGON RDS Threaded Receiver is on (HEXAGON RDS Threaded Receiver=1), and Milliseconds Between Stripes Scanning - HEXAGON Arm is 0, so VTube accepts every stripe the arm sends.
When VTube is updated on an existing PC, the threaded receiver turns on automatically, but the existing Milliseconds Between Stripes Scanning value remains unchanged. Set that value to 0 manually in the configuration file to get the full LASER stripe rate.
How to enable the threaded receiver
- Close VTube.
- Open
vtube local settings.cfgin Notepad. - In the
[Measuring Device]section, set:
HEXAGON RDS Threaded Receiver=1 Milliseconds Between Stripes Scanning - HEXAGON Arm=0
- Save the file and start VTube.
- Connect to the arm as usual.
- Check the result:
- The arm connects normally.
- The DRO updates while you move the arm.
- Perform a simple scan, like with the Point Cloud scanning.
- When scanning, see that the DRO updates much faster than when not scanning.
- When you release the scan button, the scanning sound stops right away (there is not a noticeable delay).
How to turn it off (fallback to the legacy system)
If the arm won't connect, or anything behaves unacceptably:
- Close VTube.
- Set
HEXAGON RDS Threaded Receiver=0. - If the PC is older, also set
Milliseconds Between Stripes Scanning - HEXAGON Arm=10. - Start VTube. It now receives data exactly as it did in earlier builds.
Diagnosing scanner speed with logging
You'll need the SmartInspect Redistributable Console open on the same PC. (Ask a technician for help if you want to use the SmartInspect logging.)
- Close VTube and set
HEXAGON RDS Scanner Logging=1. - Start SmartInspect, then start VTube and connect to the arm.
- Take a short scan. VTube logs one line per second, for example:
RDS stripes/sec arrived: 150 accepted: 150 | stripe ms total: 61.1 max: 0.6 event ms total: 28.0 max: 0.2 | positions: 150 ms total: 78.2 | max idle gap ms: 37.3 | button: 2 | receiver: threaded - queue max: 6 dropped stripes: 0 dropped positions: 0
- Set logging back to 0 when you're done.
What the values mean
| Value | Meaning | What's normal |
|---|---|---|
| arrived | Stripes RDS sent that second. | About 150 while scanning. Much lower (about 15–60) when the button isn't pressed; that's normal RDS behavior. |
| accepted | Stripes VTube kept that second. | Same as arrived while scanning, if the Scanning setting is 0. |
| stripe ms total / max | Time VTube spent handling stripes that second, and the longest single stripe. | Total well under 1000; max around 1 ms or less. |
| event ms total / max | The part of the stripe time spent in VTube's measuring logic. | Smaller than stripe ms. |
| positions / ms total | Arm position messages received that second, and the time spent handling them. | About the same count as arrived. |
| max idle gap ms | Longest pause between two messages that second. | Under about 100 while scanning. Occasional values of a few hundred are normal VTube pauses. |
| button | Scan button state. | 2 = scanning, 0 = not pressed, 1 = accept or other button. |
| receiver | Which receive mode is active. | threaded or direct. |
| queue max | Most messages waiting at once that second (stripes and positions together, roughly half each). | Under about 20 while scanning. Up to about 100 during a short VTube pause. |
| dropped stripes / positions | Old data thrown away because VTube fell more than about 1 second behind. | 0 while scanning. Drops while the button isn't pressed are harmless. |
Reading the results
| What you see | What it means | What to do |
|---|---|---|
| accepted much lower than arrived while scanning | The Scanning setting is filtering out stripes. | Set Milliseconds Between Stripes Scanning - HEXAGON Arm=0. |
| arrived stays low (about 15–20) while the button shows 2 | RDS or the scanner is sending slowly. | Check the scanner's settings in the RDS software. This isn't a VTube issue. |
| stripe ms total plus positions ms total near 1000 | This PC can't keep up with the full stripe rate. | Keep the threaded receiver on. It limits the delay to about 1 second. Or raise the Scanning value (for example to 10) to accept fewer stripes. |
| dropped stripes above 0 while scanning, queue max near 300 | VTube paused for more than about 1 second during a scan. | Close other programs; check PC performance. If it happens often, report it with the log. |
| receiver: direct when you expected threaded | The setting didn't take effect, or the receiver couldn't start. | Check the config line and restart VTube. Look in the RDS connection window's event log for "RDS threaded receiver started" or an error. |
Troubleshooting
-
The arm won't connect with the threaded receiver on: set
HEXAGON RDS Threaded Receiver=0and restart VTube. Send the RDS connection window's event log to support. - The scanning sound keeps playing after release: turn on logging and scan again. If stripe ms total plus positions ms total is near 1000, the PC is too slow for the full rate. Make sure the threaded receiver is on, or raise the Scanning value.
- Settings keep reverting in the configuration file: VTube was running while you edited the file. Close VTube first, then edit.