XHC-WHB04B-6(1) | LinuxCNC Documentation | XHC-WHB04B-6(1) |
xhc-whb04b-6 - Userspace jog dial HAL component for the wireless XHC WHB04B-6 USB device.
xhc-whb04b-6 [-h] | [-H] [OPTIONS]
The xhc-whb04b-6 HAL component supports the XHC WHB04B-6, a 6-axis wireless USB pendant. It provides a number of push-buttons, a jogwheel, two rotary buttons for axis and speed / step selection and an ordinary LCD display.
The LCD display, having a very simple firmware interface, indicates the following listed information only. No other information, such as custom data, can be printed.
The pendant display, its rotary selector switch, and the component pin names use designators x, y, z, a, b and c. While this arrangement presumes a machine configured as X, Y, Z, A, B an C, the pins can be assigned independently as required in a HAL configuration.
-h, --help Prints the synopsis and the most commonly used commands.
-H Run xhc-whb04b-6 in HAL-mode instead of interactive mode. When in HAL mode commands from device will be exposed to HAL’s shred memory. Interactive mode is useful for testing device connectivity and debugging.
-s Lead + jogwheel changes the spindle override speed. Each tick will increase/decrease the spindle override.
-f MPG + jogwheel changes the feed override. Each tick will increment/decrement the feed override.
-B Add 5 mm and 10 mm to Step feedrate output
-t Wait with timeout for USB device then proceed, exit otherwise. Without -t the timeout is implicitly infinite.
-u, -U Show received data from device. With -U received and transmitted data will be printed. Output is prefixed with "usb".
-p Show HAL pins and HAL related messages. Output is prefixed with "hal".
-e Show captured events such as button pressed/released, jog dial, axis rotary button, and feed rotary button event. Output is prefixed with "event".
-a Enable all logging facilities without explicitly specifying each.
-c Enable checksum output which is necessary for debugging the checksum generator function. Do not rely on this feature since it will be removed once the generator is implemented.
-n Force being silent and not printing any output except of errors. This will also inhibit messages prefixed with "init".
The xhc-whb04b-6 executable needs permission for reading the pendant’s USB device. There may be the need for additional udev rules. If so, this file /etc/udev/rules.d/99-xhc-whb04b-6.rules should be created with the single line ATTR{idProduct}=="eb93", ATTR{idVendor}=="10ce", MODE="0666", OWNER="root", GROUP="plugdev".
The xhc-whb04b-6 program can be run from the command line without LinuxCNC to test a pendant. This standalone mode is used to identify the button codes produced for each button press and debug transmitted USB data.
xhc-whb04b-6 -ue
xhc-whb04b-6 -p
xhc-whb04b-6 -H
xhc-whb04b-6 -HsfB
Use the -H option to specify HAL mode and other options as required: loadusr -W xhc-whb04b-6 -HsfB
Note: For each button an output pin is provided even if no functionality is realized with that signal. For example, to stop a running program the Stop button pin may be directly connected to halui.program.stop. However, to start/pause/resume a program, the corresponding button toggles besides whb.button.start-pause also the ``whb.halui.program.``{run,pause,resume} signals accordingly.
Note: The Spindle+/Spindle- buttons do manipulate the spindle override. The spindle speed is set with the respective combos Fn + Spindle- and FN + Spindle+.
The following tables list all in-/output pins and state which signals they are meant to be connected to.
Axis and Stepgen
Signals utilized for moving axis.
<N> ... denotes the axis number, which is of {x, y, z, a, b, c}.
whb.halui.home-all (bit,out)
whb.halui.axis._<N>_.select (bit,out)
whb.axis._<N>_.jog-counts (s32,out)
whb.axis._<N>_.jog-enable (bit,out)
whb.axis._<N>_.jog-scale (float,out)
whb.axis._<N>_.jog-vel-mode (bit,out)
whb.halui.max-velocity.value (float,in)
whb.halui.feed-override.scale (float,in)
whb.halui.axis.`__<N>__.pos-feedback` (float,in)
whb.halui.axis._<N>_.pos-relative (float,in)
Machine
Signals utilized for toggling machine status.
whb.halui.machine.on (bit,out)
whb.halui.machine.is-on (bit,in)
whb.halui.machine.off (bit,out)
Spindle
Signals utilized for operating a spindle.
whb.halui.spindle.start (bit,out)
whb.halui.spindle.is-on (bit,in)
whb.halui.spindle.stop (bit,out)
whb.halui.spindle.forward (bit,out)
whb.halui.spindle.reverse (bit,out)
whb.halui.spindle.decrease (bit,out)
whb.halui.spindle.increase (bit,out)
whb.halui.spindle-override.increase (bit,out)
whb.halui.spindle-override.decrease (bit,out)
whb.halui.spindle-override.value (float,in)
whb.halui.spindle-override.scale (float,in)
Feed
Signals utilized for operating spindle and feed override. The feed rotary button can serve in
Continuous: In this mode jogging is performed at the selected feed rate. As long the jogwheel turns, the selected axis moves.
Step: In this mode the machine moves steps * wheel_counts at the currently selected step size and the current set feed rate in machine units. If the commanded position is not reached the machine keeps moving even the jogwheel is not turning.
Lead: Manipulates the spindle override.
MPG: Manipulates the feedrate override.
Note: As a consequence of 3 modes from manufacturer, switching the feed rotary button back from Lead revert to MPG mode, MPG mode is default mode at startup. Depending on the mode before turning the rotary button, the feed override results in different values. In MPG/CON the feed rate will change to 100%, 60%, ... and so forth. In Step mode the feed rate is specified in mm.
whb.halui.feed-override.value (float,in)
whb.halui.feed-override.decrease (bit,out)
whb.halui.feed-override.increase (bit,out)
whb.halui.feed-override.scale (float,out)
whb.halui.max-velocity.value (float,out)
Program
Signals for operating program and MDI mode.
whb.halui.program.run (bit,out)
whb.halui.program.is-running (bit,in)
whb.halui.program.pause (bit,out)
whb.halui.program.is-paused (bit,in)
whb.halui.program.resume (bit,out)
whb.halui.program.stop (bit,out)
whb.halui.program.is-idle (bit,in)
whb.halui.mode.auto (bit,out)
whb.halui.mode.is-auto (bit,in)
whb.halui.mode.joint (bit,out)
whb.halui.mode.is-joint (bit,in)
whb.halui.mode.manual (bit,out)
whb.halui.mode.is-manual (bit,in)
whb.halui.mode.mdi (bit,out)
whb.halui.mode.is-mdi (bit,in)
whb.halui.mode.teleop (bit,out)
whb.halui.mode.is-teleop (bit,in)
Buttons
For flexibility reasons each button provides an output pin even if no functionality is realized directly with that signal. The Fn button can be combined with each other push-button. This includes also RESET, Stop, Start/Pause, Macro-10, and Step|Continuous. By default the more frequent used orange buttons are executed, whereas blue ones (whb.button.macro-<M>) by combining them with Fn (press Fn first then button).
Button macro needs to be added to your INI and needs to be edited for your own use:
[HALUI] MDI_COMMAND=(debug,macro0) # this one is for numbering but not used by pendant (need 1 to 16) MDI_COMMAND=(debug,macro1) MDI_COMMAND=(debug,macro2) MDI_COMMAND=(debug,macro3) MDI_COMMAND=(debug,macro4) MDI_COMMAND=(debug,macro5) MDI_COMMAND=(debug,macro6) MDI_COMMAND=(debug,macro7) MDI_COMMAND=(debug,macro8) MDI_COMMAND=(debug,macro9) MDI_COMMAND=(debug,macro10) MDI_COMMAND=(debug,macro11) MDI_COMMAND=(debug,macro12) MDI_COMMAND=(debug,macro13) MDI_COMMAND=(debug,macro14) MDI_COMMAND=(debug,macro15) MDI_COMMAND=(debug,macro16)
<M> ... denotes an arbitrary macro number which is of {1, 2, ..., 16}
whb.button.reset (bit,out)
whb.button.stop (bit,out)
whb.button.start-pause (bit,out)
whb.button.feed-plus (bit,out)
whb.button.feed-minus (bit,out)
whb.button.spindle-plus (bit,out)
whb.button.spindle-minus (bit,out)
whb.button.m-home (bit,out)
whb.button.safe-z (bit,out)
whb.button.w-home (bit,out)
whb.button.s-on-off (bit,out)
whb.button.fn (bit,out)
whb.button.probe-z (bit,out)
whb.button.macro-1 (bit,out)
whb.button.macro-2 (bit,out)
whb.button.macro-3 (bit,out)
whb.button.macro-4 (bit,out)
whb.button.macro-5 (bit,out)
whb.button.macro-6 (bit,out)
whb.button.macro-7 (bit,out)
whb.button.macro-8 (bit,out)
whb.button.macro-9 (bit,out)
whb.button.macro-10 (bit,out)
whb.button.macro-11 (bit,out)
whb.button.macro-12 (bit,out)
whb.button.macro-13 (bit,out)
whb.button.macro-14 (bit,out)
whb.button.macro-15 (bit,out)
whb.button.macro-16 (bit,out)
whb.button.mode-continuous (bit,out)
whb.button.mode-step (bit,out)
Pendant
whb.pendant.is-sleeping (bit,out)
whb.pendant.is-connected (bit,out)
Exercise caution if using copy and paste of this example code from the online web docs. Certain characters are incompatibly encoded by the web site (minus becomes em-dash). It is safer to copy and paste from https://raw.githubusercontent.com/LinuxCNC/linuxcnc/2.8/src/hal/user_comps/xhc-whb04b-6/example-configuration.md.
# ### Hal File xhc_whb04b_6.hal Example # # ###################################################################### # load pendant components # ###################################################################### loadusr -W xhc-whb04b-6 -HsfB # ###################################################################### # pendant signal configuration # ###################################################################### # On/Off signals net machine.is-on halui.machine.is-on whb.halui.machine.is-on net pdnt.machine.on whb.halui.machine.on halui.machine.on net pdnt.machine.off whb.halui.machine.off halui.machine.off # program related signals net pdnt.program.is-idle whb.halui.program.is-idle halui.program.is-idle net pdnt.program.is-paused whb.halui.program.is-paused halui.program.is-paused net pdnt.program-is-running whb.halui.program.is-running halui.program.is-running net pdnt.program.resume whb.halui.program.resume halui.program.resume net pdnt.program.pause whb.halui.program.pause halui.program.pause net pdnt.program.run whb.halui.program.run halui.program.run net pdnt.program.stop whb.halui.program.stop halui.program.stop # machine mode related signals net pdnt.mode.auto whb.halui.mode.auto halui.mode.auto net pdnt.mode.manual whb.halui.mode.manual halui.mode.manual net pdnt.mode.mdi whb.halui.mode.mdi halui.mode.mdi net pdnt.mode.joint whb.halui.mode.joint halui.mode.joint net pdnt.mode.teleop whb.halui.mode.teleop halui.mode.teleop net pdnt.mode.is-auto halui.mode.is-auto whb.halui.mode.is-auto net pdnt.mode.is-manual halui.mode.is-manual whb.halui.mode.is-manual net pdnt.mode.is-mdi halui.mode.is-mdi whb.halui.mode.is-mdi net pdnt.mode.is-joint halui.mode.is-joint whb.halui.mode.is-joint net pdnt.mode.is-teleop halui.mode.is-teleop whb.halui.mode.is-teleop # "is-homed" axis signal for allowing pendant when machine is not homed net pdnt.axis.X.is-homed halui.joint.0.is-homed whb.halui.joint.x.is-homed net pdnt.axis.Y.is-homed halui.joint.1.is-homed whb.halui.joint.y.is-homed net pdnt.axis.Z.is-homed halui.joint.2.is-homed whb.halui.joint.z.is-homed # "selected axis" signals net pdnt.axis.X.select whb.halui.axis.x.select halui.axis.x.select net pdnt.axis.y.select whb.halui.axis.y.select halui.axis.y.select net pdnt.axis.Z.select whb.halui.axis.z.select halui.axis.z.select net pdnt.axis.x.jog-scale whb.axis.x.jog-scale axis.x.jog-scale net pdnt.axis.y.jog-scale whb.axis.y.jog-scale axis.y.jog-scale net pdnt.axis.z.jog-scale whb.axis.z.jog-scale axis.z.jog-scale net pdnt.axis.x.jog-counts whb.axis.x.jog-counts axis.x.jog-counts net pdnt.axis.y.jog-counts whb.axis.y.jog-counts axis.y.jog-counts net pdnt.axis.z.jog-counts whb.axis.z.jog-counts axis.z.jog-counts net pdnt.axis.x.jog-enable whb.axis.x.jog-enable axis.x.jog-enable net pdnt.axis.y.jog-enable whb.axis.y.jog-enable axis.y.jog-enable net pdnt.axis.z.jog-enable whb.axis.z.jog-enable axis.z.jog-enable net pdnt.axis.x.jog-vel-mode whb.axis.x.jog-vel-mode axis.x.jog-vel-mode net pdnt.axis.y.jog-vel-mode whb.axis.y.jog-vel-mode axis.y.jog-vel-mode net pdnt.axis.z.jog-vel-mode whb.axis.z.jog-vel-mode axis.z.jog-vel-mode # macro buttons to MDI commands net pdnt.macro-1 whb.button.macro-1 halui.mdi-command-01 # use MDI command from main.ini net pdnt.macro-2 whb.button.macro-2 halui.mdi-command-02 # use MDI command from main.ini or used for Hardcoded lube on/off net pdnt.reserved.for.spindle+ whb.button.macro-3 # Hardcoded for spindle+ whb.halui.spindle.increase net pdnt.reserved.for.spindle- whb.button.macro-4 # Hardcoded for spindle- whb.halui.spindle.decrease net pdnt.macro-5 whb.button.macro-5 halui.mdi-command-05 # use MDI command from main.ini net pdnt.macro-6 whb.button.macro-6 halui.mdi-command-06 # use MDI command from main.ini net pdnt.macro-7 whb.button.macro-7 halui.mdi-command-07 # use MDI command from main.ini net pdnt.reserved.for.spindle.dir whb.button.macro-8 # Hardcoded for spindle direction inside pendant net pdnt.macro-9 whb.button.macro-9 halui.mdi-command-09 # use MDI command from main.ini net pdnt.reserved.for.ABS-REL whb.button.macro-10 # Hardcoded for swap Dro Relative/Absolute net pdnt.macro-14 whb.button.macro-14 halui.mdi-command-14 # use MDI command from main.ini net pdnt.reserved.for.flood whb.button.macro-15 # Hardcoded for halui.flood on/off net pdnt.reserved.for.mist whb.button.macro-16 # Hardcoded for halui.mist on/off net pdnt.macro.11 whb.button.macro-11 halui.mdi-command-11 # use MDI command from main.ini net pdnt.macro.12 whb.button.macro-12 halui.mdi-command-12 # use MDI command from main.ini net pdnt.macro.13 whb.button.macro-13 halui.mdi-command-13 # use MDI command from main.ini # flood and mist toggle signals net pdnt.flood.is-on whb.halui.flood.is-on halui.flood.is-on #return signal is on or off net pdnt.flood.off whb.halui.flood.off halui.flood.off #reserved whb.button.macro-15 net pdnt.flood.on whb.halui.flood.on halui.flood.on #reserved whb.button.macro-15 net pdnt.mist.is-on whb.halui.mist.is-on halui.mist.is-on #return signal is on or off net pdnt.mist.off whb.halui.mist.off halui.mist.off #reserved whb.button.macro-16 net pdnt.mist.on whb.halui.mist.on halui.mist.on #reserved whb.button.macro-16 #net pdnt.lube.is-on whb.halui.lube.is-on halui.lube.is-on #return signal is on or off #net pdnt.lube.off whb.halui.lube.off halui.lube.off #reserved whb.button.macro-2 #net pdnt.lube.on whb.halui.lube.on halui.lube.on #reserved whb.button.macro-2 # default function button signals net pdnt.button.m-home whb.button.m-home halui.home-all # Homeing use built-in halui home all net pdnt.button.safe-z whb.button.safe-z halui.mdi-command-03 # Safe-z use MDI command from main.ini net pdnt.button.w-home whb.button.w-home halui.mdi-command-04 # Unpark use MDI command from main.ini net pdnt.button.probe-z whb.button.probe-z halui.mdi-command-08 # Probe-Z use MDI command from main.ini # unused, just exposes pendant internal status or as basic button #net pdnt.mode-lead whb.halui.feed.selected-lead #net pdnt.mode-mpg-feed whb.halui.feed.selected-mpg-feed #net pdnt.mode-continuous whb.halui.feed.selected-continuous #net pdnt.mode-step whb.halui.feed.selected-step #net pdnt.button.mode-mpg whb.button.mode-continuous #net pdnt.button.mode-step whb.button.mode-step #net pdnt.button.fn whb.button.fn #net pdnt.button.reset whb.button.reset #net pdnt.button.stop whb.button.stop #net pdnt.button.start-pause whb.button.start-pause #net pdnt.button.s-on-off whb.button.s-on-off #net pdnt.button.spindle-plus whb.button.spindle-plus #net pdnt.button.spindle-minus whb.button.spindle-minus #net pdnt.button.feed-plus whb.button.feed-plus #net pdnt.button.feed-minus whb.button.feed-minus # spindle related signals net pdnt.spindle.is-on whb.halui.spindle.is-on spindle.0.on net pdnt.spindle.start whb.halui.spindle.start halui.spindle.0.start net pdnt.spindle.stop whb.halui.spindle.stop halui.spindle.0.stop net pdnt.spindle.forward whb.halui.spindle.forward halui.spindle.0.forward net pdnt.spindle.reverse whb.halui.spindle.reverse halui.spindle.0.reverse net pdnt.spindle.increase whb.halui.spindle.increase halui.spindle.0.increase # reserved whb.button.macro-3 net pdnt.spindle.decrease whb.halui.spindle.decrease halui.spindle.0.decrease # reserved whb.button.macro-4 net pdnt.spindle-speed-abs whb.halui.spindle-speed-cmd spindle.0.speed-out-abs # speed cmd from motion in rpm absolute # spindle speed override signals net pdnt.spindle-override.scale whb.halui.spindle-override.scale halui.spindle.0.override.scale # needed for both spindle+/- and spindleoverride+/- button net pdnt.spindle.override.value halui.spindle.0.override.value whb.halui.spindle-override.value # GUI feed rate related signals net pdnt.spindle.override.increase whb.halui.spindle-override.increase halui.spindle.0.override.increase net pdnt.spindle.override.decrease whb.halui.spindle-override.decrease halui.spindle.0.override.decrease # GUI feed rate related signals can be used when program is running moving GUI slider net pdnt.feed-override.scale whb.halui.feed-override.scale halui.feed-override.scale # needed for both FeedOverride+/- and rotary knob button net pdnt.max-velocity.value whb.halui.max-velocity.value halui.max-velocity.value # needed for Mpg mode : button feed position% * max-velocity = Mpg feedrate # take feed override min/max values from/to the GUI net pdnt.feed-override.value halui.feed-override.value whb.halui.feed-override.value # GUI feed rate related signals net pdnt.feed-override.increase whb.halui.feed-override.increase halui.feed-override.increase net pdnt.feed-override.decrease whb.halui.feed-override.decrease halui.feed-override.decrease # axis position related signals feedback net pdnt.axis.x.pos-feedback halui.axis.x.pos-feedback whb.halui.axis.x.pos-feedback net pdnt.axis.y.pos-feedback halui.axis.y.pos-feedback whb.halui.axis.y.pos-feedback net pdnt.axis.z.pos-feedback halui.axis.z.pos-feedback whb.halui.axis.z.pos-feedback # axis position related signals relative net pdnt.axis.x.pos-relative halui.axis.x.pos-relative whb.halui.axis.x.pos-relative net pdnt.axis.y.pos-relative halui.axis.y.pos-relative whb.halui.axis.y.pos-relative net pdnt.axis.z.pos-relative halui.axis.z.pos-relative whb.halui.axis.z.pos-relative
xhc-whb04b-6 developer documentation on GitHub
The CRC code function is not disclosed by the manufacturer. Thus the CRC value transmitted with each package is not checked yet. Feel free to help us enhance the component.
This component was started by Raoul Rubien based on predecessor device component xhc-hb04.cc. https://github.com/machinekit/machinekit/graphs/contributors gives you a more complete list of contributors.
The component was developed accidentally as leisure project. The development started with the xhc-whb04 (4-axis wireless pendant) implementation as reference. 73 & many thanks to the developers who delivered provided an excellent preparatory work!
Copyright © 2018 Raoul Rubien (github.com/rubienr) Updated for Linuxcnc 2020 by alkabal_free.fr. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
02/10/2023 | LinuxCNC |