mirror of
https://github.com/openglow-org/forgefirm.git
synced 2026-09-27 16:51:12 -07:00
bench: the stale-origin drill goes, drills report their verdict, the pgood gate follows the pin
The faultpos live-fire drill armed and commanded a cut at an origin it called stale to test a refusal the design decided not to gate: its only outcome was an emission at an unknown position. Removed from the script and the bench page. live_fire_drills.py discarded every drill's return value, so the bench page recorded a failed live-fire drill as OK. The exit status is the drill's. laser_pgood is the supply's power-good, high on every healthy machine; fire_test.py and the K3 drill aborted on it and pgood_probe.py inverted it. The latch-unlock drills now gate on the safety chain holding HV off (charge-pump watchdog dead, pulse engine idle), as the kernel suite does, and the probe reports the pin as the kernel publishes it. motion.deadman: the controller resumed from its hang recovers on $X and moves again without a restart (the stream's fault acknowledgment).
This commit is contained in:
@@ -34,6 +34,17 @@ def rd(attr):
|
||||
return f.read().strip()
|
||||
|
||||
|
||||
# The safety chain asserts HV_ENABLE only while a run feeds the charge-pump
|
||||
# watchdog: a dead watchdog and an idle pulse engine mean HV off. That is
|
||||
# the gate for a latch unlock; laser_pgood is the supply's power-good,
|
||||
# high on every healthy machine, and says nothing about HV.
|
||||
def hv_off_reason():
|
||||
alive = rd('cnc/charge_pump_alive')
|
||||
state = rd('cnc/state')
|
||||
if alive != '0' or state != 'idle':
|
||||
return 'charge_pump_alive=%s state=%s' % (alive, state)
|
||||
return None
|
||||
|
||||
def rd_pos():
|
||||
with open('/sys/glowforge/cnc/position', 'rb') as f:
|
||||
raw = f.read(32)
|
||||
@@ -61,9 +72,9 @@ stream = (
|
||||
print('phase %s: stream %d bytes = %.3f s' % (mode, len(stream), len(stream) / TICK_HZ))
|
||||
|
||||
if unlock:
|
||||
pgood = rd('cnc/laser_pgood')
|
||||
if pgood != '0':
|
||||
print('ABORT: laser_pgood=%s (HV supply reports good) - refusing latch unlock' % pgood)
|
||||
why = hv_off_reason()
|
||||
if why is not None:
|
||||
print('ABORT: the safety chain is not holding HV off (%s) - refusing latch unlock' % why)
|
||||
sys.exit(1)
|
||||
|
||||
snap('pre ')
|
||||
|
||||
Reference in New Issue
Block a user