VistaCNC Pendant Issues - PP MD5 Checksum blocking HAL file modification?

Hi Folks,
I am trying to set up a VistaCNC P1A-S Pendant on my PCNC 440 running Pathpilot V2.10.1 and running into what appears to be a failed md5sum checksum issue that prevents Pathpilot from starting. I can’t seem to find anything about this error online, either for Pathpilot or LinuxCNC, and I reached out to VistaCNC but their suggested ini file modifications didn’t work (still waiting on hearing back about next steps).

Here’s the background: first I successfully flashed the pendant to LinuxCNC firmware, then followed VistaCNC’s instructions (attached pdf) to “install” the “firmware” for the pendant on the Pathpilot controller (mostly involves copying various HAL files to various locations, running a make install command in terminal, and modifying the tormach_mill_base.ini file (under home/operator/tmc/configs/tormach_mill) to call out the new HAL files. But once I do that, when I restart the controller Pathpilot refuses to open, giving me the following error:

Error Starting PathPilot
It appears that PathPilot was not able to start successfully. Sometimes this can be caused by an incorrect machine configuration. After clicking OK, the machine configuration will appear and provide an opportunity to make changes if necessary.

Redoing machine configuration doesn’t allow it to start, I end up with the same message. If I revert the original tormach_mill_base.ini file it starts fine, but of course the pendant won’t work. The changes I was instructed to make to the base.ini file are as follows (added lines highlighted by **):

[HAL]
HALUI = halui
HALFILE = tormach_mill_mesa.hal
**HALFILE = vc-p1as-pp.hal**
POSTGUI_SHUTTLEXPRESS_HALFILE = millshuttlexpress.hal
POSTGUI_VMC_CONSOLE_HALFILE = ../common/operator_console_controls_4axis.hal
POSTGUI_HALFILE = postgui_tormach_mill.hal
POSTGUI_USER_COMP_DEPENDENCIES = zbotatc remap

**[HALUI]**
**MDI_COMMAND=...**
**MDI_COMMAND=...**
**MDI_COMMAND=...**
**MDI_COMMAND=...**
**MDI_COMMAND=...**
**MDI_COMMAND=G10 L20 P1 X0**
**MDI_COMMAND=G10 L20 P1 Y0**
**MDI_COMMAND=G10 L20 P1 Z0**

[TRAJ]

I’ve gone through and verified to the best of my ability that all the files in the VistaCNC instructions are in the correct locations, and triple-checked for typos in base.ini (plus tried a few variants because the sample text in the instructions is a bit different from my original file, but someone from VistaCNC suggested the callout above as the correct one).

Anyway, when checking the log file, I believe the relevant error is this:

024-11-15 20:22:40.819452 | Z-Bot ATC: HAL component : started [python/hal_zbotatc.py:31]
2024-11-15 20:22:41.136272 | Smart Cool: HAL component: started [python/hal_zbotschnozz.py:122]
tormachheightgauge: starting
2024-11-15 20:22:41.476047 | USBIO : HAL component starting [usbio.py:31]
tormach_mill_mesa.hal:151: parameter or pin 'hm2_7i92T.0.encoder.timer-number' not found
HALCMD ini file /home/operator/tmc/configs/tormach_mill/tormach_440_7i92.ini load failed with config file tormach_mill_mesa.hal
Shutting down and cleaning up LinuxCNC...
2666
Killing linuxcncsvr
Killing task linuxcncsvr, PID=2666
  PID TTY      STAT   TIME COMMAND
2665
Killing redis-server
Killing task redis-server, PID=2665
  PID TTY      STAT   TIME COMMAND
 2665 ?        Sl     0:00 /home/operator/tmc/bin/redis-server *:6379                                                                                                                                                                                                      
  PID TTY      STAT   TIME COMMAND
Stopping realtime threads
halcmd stop
Unloading hal components
halcmd unload all

And/or this:

Checking md5sum manifest for all config files in /home/operator/v2.10.1/configs
./tormach_mill/tormach_mill_base.ini: FAILED
md5sum: WARNING: 1 computed checksum did NOT match
ALERT: config files have been changed by customer.
Disabling USB autosuspend
/home/operator/v2.10.1/venv
Entering Python virtual environment

I’m not a good programmer, but from what I can tell during startup, Pathpilot checks tormach_mill_base.ini (and/or other files generated from it) against a checksum hash and throws an error if the file appears to be modified, preventing the program from starting. Does anyone know if there is a way to disable or bypass this checksum? Or generate a new hash for the modified file? Or any other workaround? I assume this checksum appeared in a somewhat recent PP version because I can find videos of other people who successfully installed the P1A-S pendant years ago and none mention running into it (plus the VistaCNC instructions don’t mention it either)… I suppose I could downgrade my PP version but that’s not so ideal.

Appreciate any insight here! Happy to supply full log files or any other info you might need.

P.S. I do get another error right after the BIOS screen flashes on every startup that says the following:

[ 0.551029] ACPI Exception: AE_BAD_PARAMETER, Could not install PciConfig handler for Root Bridge PCIO (20170119/evrgnini-245)

However, I think this error has been present since I first set up the machine and occurs whether or not the base.ini file is modified. It doesn’t seem to affect any functionality as far as I can tell (my USB wifi adapter works, bluetooth keyboard, USB drive, HDMI video out is fine, etc.), and PP starts fine… so I doubt it is related to the pendant issue, but if anyone knows about it and if it’s something I should try to resolve, let me know. Otherwise I’ll just live with it.

P1A-S PathPilot Installation Instruction.pdf (143.6 KB)

Well, VistaCNC got back to me as I was typing this and the solution they offered worked perfectly! They had me remove the HALFILE = vc-p1as-pp.hal callout from the tormach_mill_base.ini file (but keep the MDI commands) and append the text from vc-p1as-pp.hal at the end of the postgui_tormach_mill.hal file. Simple as that, even the e-stop button works! This is a solid pendant!

Since I bet some others will encounter this issue, I’ll put the full solution for me here (I bet VistaCNC will update their instructions too). I can’t seem to upload .txt or .zip files so I’ll just paste the code excerpts here.

Installing a VistaCNC P1A-S on a Pathpilot controller (for PCNC 440 but probably similar steps for other PCNCs):

  1. Follow VistaCNC’s instructions to flash the pendant with LinuxCNC firmware.
  2. Follow VistaCNC’s instructions to “install” the “firmware” on the Pathpilot Controller, make backup copies of tormach_mill_base.ini and postgui_tormach_mill.hal.
  3. Instead of the modifications they suggest for the tormach_mill_base.ini file, make the following edits (added lines highlighted in bold) and save:

[HAL]
HALUI = halui
HALFILE = tormach_mill_mesa.hal
POSTGUI_SHUTTLEXPRESS_HALFILE = millshuttlexpress.hal
POSTGUI_VMC_CONSOLE_HALFILE = …/common/operator_console_controls_4axis.hal
POSTGUI_HALFILE = postgui_tormach_mill.hal
POSTGUI_USER_COMP_DEPENDENCIES = zbotatc remap

[HALUI]
MDI_COMMAND=…
MDI_COMMAND=…
MDI_COMMAND=…
MDI_COMMAND=…
MDI_COMMAND=…
MDI_COMMAND=G10 L20 P1 X0
MDI_COMMAND=G10 L20 P1 Y0
MDI_COMMAND=G10 L20 P1 Z0

[TRAJ]
(Note that there is no callout for vc-p1as-pp.hal here since that led to the error I experienced)

  1. Append the text from vc-p1as-pp.hal to the end of your postgui_tormach_mill.hal file and save. The end of mine looks like this (added lines in bold):

#Detection of axis jogging to enforce CE mode 1 restrictions
net cesig1 axis.0.kb-jog-active tormach.axis-0-kb-jog-active
net cesig2 axis.1.kb-jog-active tormach.axis-1-kb-jog-active
net cesig3 axis.2.kb-jog-active tormach.axis-2-kb-jog-active
net cesig4 axis.3.kb-jog-active tormach.axis-3-kb-jog-active

#Connect CE machine signal
net machine-mode tormach.ce-machine

#0—vc-p1a-s
loadusr -W vc-p1as

#1—LCD Work Coordinates
net axis.0.pos-relative halui.axis.0.pos-relative => vc-p1as.axis.0.pos-relative
net axis.1.pos-relative halui.axis.1.pos-relative => vc-p1as.axis.1.pos-relative
net axis.2.pos-relative halui.axis.2.pos-relative => vc-p1as.axis.2.pos-relative
net axis.3.pos-relative halui.axis.3.pos-relative => vc-p1as.axis.3.pos-relative

#2—JOG
net axis.0.jog-en vc-p1as.axis.0.jog-enable => axis.0.jog-enable
net axis.1.jog-en vc-p1as.axis.1.jog-enable => axis.1.jog-enable
net axis.2.jog-en vc-p1as.axis.2.jog-enable => axis.2.jog-enable
net jog-scale vc-p1as.jog-scale => axis.0.jog-scale
net jog-scale vc-p1as.jog-scale => axis.1.jog-scale
net jog-scale vc-p1as.jog-scale => axis.2.jog-scale
net jog-counts vc-p1as.jog-counts => axis.0.jog-counts
net jog-counts vc-p1as.jog-counts => axis.1.jog-counts
net jog-counts vc-p1as.jog-counts => axis.2.jog-counts
net jog.0.cont-plus vc-p1as.jog.0.plus => halui.jog.0.plus
net jog.0.cont-minus vc-p1as.jog.0.minus => halui.jog.0.minus
net jog.1.cont-plus vc-p1as.jog.1.plus => halui.jog.1.plus
net jog.1.cont-minus vc-p1as.jog.1.minus => halui.jog.1.minus
net jog.2.cont-plus vc-p1as.jog.2.plus => halui.jog.2.plus
net jog.2.cont-mimus vc-p1as.jog.2.minus => halui.jog.2.minus
net jog-speed vc-p1as.jog.velocity => halui.jog-speed
net motion-in-position motion.in-position => vc-p1as.is-moving
setp axis_0_max_velocity [AXIS_0]MAX_VELOCITY
setp axis_1_max_velocity [AXIS_1]MAX_VELOCITY
setp axis_2_max_velocity [AXIS_2]MAX_VELOCITY

#3—FOR 4TH AXIS, REMOVE # FROM THE FOLLOWING LINES
net axis.3.jog-en vc-p1as.axis.3.jog-enable => axis.3.jog-enable
net jog-scale vc-p1as.jog-scale => axis.3.jog-scale
net jog-counts vc-p1as.jog-counts => axis.3.jog-counts
net jog.3.cont-plus vc-p1as.jog.3.plus => halui.jog.3.plus
net jog.3.cont-mimus vc-p1as.jog.3.minus => halui.jog.3.minus
setp axis_3_max_velocity [AXIS_3]MAX_VELOCITY

#4—FEED OVERRIDE
setp halui.feed-override.scale 0.001
net jog-feed-enable vc-p1as.feed-override.count-enable => halui.feed-override.count-enable
net feedrate-counts vc-p1as.feedrate-counts => halui.feed-override.counts
net jog-feed.value halui.feed-override.value => vc-p1as.feed-override.value

#5—SPINDLE OVERRIDE
setp halui.spindle-override.scale 0.001
net jog-spindle-enable vc-p1as.spindle-override.count.enable => halui.spindle-override.count-enable
net spindle-counts vc-p1as.spindle-counts => halui.spindle-override.counts
net jog-spindle halui.spindle-override.value => vc-p1as.spindle-override.value

#6—ZERO
net zero-x vc-p1as.zero-x => halui.mdi-command-05
net zero-y vc-p1as.zero-y => halui.mdi-command-06
net zero-z vc-p1as.zero-z => halui.mdi-command-07
#net zero-a vc-p1as.zero-a => halui.mdi-command-09
#net go-to-zero vc-p1as.go-to-zero => halui.mdi-command-08

#7—E-STOP
net p-estop vc-p1as.estop.activate => halui.estop.activate
#net p-reset vc-p1as.estop.reset => halui.estop.reset
net p-estop-is-activated halui.estop.is-activated => vc-p1as.estop.is-activated

#8—MACHINE
#net p-machine-on vc-p1as.machine.on => halui.machine.on
#net p-machine-off vc-p1as.machine.off => halui.machine.off
net p-machine-is-on halui.machine.is-on => vc-p1as.machine.ison

#P1A-S pendant settings

#number of decimal digit to display on axis DRO, settable number, 2,3,4
setp vc-p1as.decimal 3

#step size, set 0 to skip.
setp vc-p1as.stepsize-1 0.0001
setp vc-p1as.stepsize-2 0.001
setp vc-p1as.stepsize-3 0.01
setp vc-p1as.stepsize-4 0.1
setp vc-p1as.stepsize-5 0
setp vc-p1as.stepsize-6 0
setp vc-p1as.stepsize-7 0
setp vc-p1as.stepsize-8 0
setp vc-p1as.stepsize-9 0

  1. Shutdown the controller, plug in the pendant to USB, start up (make sure e-stop is on). Should be working now!

Hope this helps someone!