Code:
#!/usr/bin/env python
# to load this in in hal:
# loadusr python linuxcnc-status.py
import sys
import hal
import linuxcnc
# Make a component and pins
h = hal.component("linuxcnc_status")
h.newpin("g7-is-active", hal.HAL_BIT, hal.HAL_OUT)
h.newpin("g8-is-active", hal.HAL_BIT, hal.HAL_OUT)
h.newpin("g54-is-active", hal.HAL_BIT, hal.HAL_OUT)
h.newpin("g55-is-active", hal.HAL_BIT, hal.HAL_OUT)
h.ready()
# test connection to linuxcnc
try:
s = linuxcnc.stat()
# create a connection to the status channel
s.poll()
# get current values
except Exception as e:
print("error ", e)
sys.exit(1)
#loop
while 1:
print(s.gcodes)
# get current values
s.poll()
# Handle absolute / incremental (G90/G91)
if s.gcodes[15] == 70:
h['g7-is-active'] = 1
h['g8-is-active'] = 0
elif s.gcodes[15] == 80:
h['g7-is-active'] = 0
h['g8-is-active'] = 1
else :
h['g7-is-active'] = 0
h['g8-is-active'] = 0
# Handle G54/G55
if s.gcodes[8] == 540:
h['g54-is-active'] = 1
h['g55-is-active'] = 0
elif s.gcodes[8] == 550:
h['g54-is-active'] = 0
h['g55-is-active'] = 1
else :
h['g54-is-active'] = 0
h['g55-is-active'] = 0