From 611b9f54162f9620b6781eedd8dfa2dfdb925ff1 Mon Sep 17 00:00:00 2001 From: Edward Wall Date: Fri, 10 Apr 2026 08:22:47 +0200 Subject: [PATCH] disables the bsx and bsy motors when the beamstop isn't in an okay state --- db/sans_llb_beamstop.db | 26 ++++++++++++++++++++++---- scripts/sans_llb_beamstop.cmd | 4 +++- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/db/sans_llb_beamstop.db b/db/sans_llb_beamstop.db index 29f09c0..a2eda5a 100644 --- a/db/sans_llb_beamstop.db +++ b/db/sans_llb_beamstop.db @@ -22,7 +22,7 @@ record(seq, "$(INSTR)$(SPS_REGISTER_NAME):TRIGGER-DELAY") { field(DESC, "Delays Internal Trigger as SPS too slow") field(DOL0, 1) - field(LNK0, "$(INSTR)$(SPS_REGISTER_NAME):SET-BUSY.PROC PP") + field(LNK0, "$(INSTR)$(SPS_REGISTER_NAME):SET-BUSY.PROC PP") field(DLY0, 0.5) field(SELM, "All") field(PINI, "NO") @@ -32,8 +32,8 @@ record(longout, "$(INSTR)$(SPS_REGISTER_NAME):SET-BUSY") { field(DESC, "Trigger Internal Busy Status") # This determines the number of max retry ticks - field(VAL, 5) - field(OUT, "$(INSTR)$(SPS_REGISTER_NAME):BUSY PP") + field(VAL, 5) + field(OUT, "$(INSTR)$(SPS_REGISTER_NAME):BUSY PP") field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):TRIGGER") } @@ -103,7 +103,7 @@ record(seq, "$(INSTR)$(SPS_REGISTER_NAME):DELAY-RETRY-ERROR") { field(DESC, "Delays checking if retry error occurred") field(DOL0, 1) - field(LNK0, "$(INSTR)$(SPS_REGISTER_NAME):RETRY-ERROR.PROC PP") + field(LNK0, "$(INSTR)$(SPS_REGISTER_NAME):RETRY-ERROR.PROC PP") field(DLY0, 0.5) field(SELM, "All") } @@ -176,5 +176,23 @@ record(calcout, "$(INSTR)$(SPS_REGISTER_NAME):SET-READY") field(DOPT, "Use OCAL") field(OCAL, "0") field(OUT, "$(INSTR)$(SPS_REGISTER_NAME):BUSY PP") + field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):SHOULD-BLOCK-MOTORS") } +record(calc, "$(INSTR)$(SPS_REGISTER_NAME):SHOULD-BLOCK-MOTORS") +{ + field(DESC, "Whether to block bsx and bsy") + field(INPA, "$(INSTR)$(SPS_REGISTER_NAME):STATUS NPP") + field(CALC, "A=0?0:1") + field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP-MOTOR-BLOCK PP") +} + +record(seq, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP-MOTOR-BLOCK") +{ + field(DESC, "Block moving bsx and bsy") + field(DOL0, "$(INSTR)$(SPS_REGISTER_NAME):SHOULD-BLOCK-MOTORS NPP") + field(LNK0, "$(BSX_MOT).DISV PP") + field(DOL1, "$(INSTR)$(SPS_REGISTER_NAME):SHOULD-BLOCK-MOTORS NPP") + field(LNK1, "$(BSY_MOT).DISV PP") + field(SELM, "All") +} diff --git a/scripts/sans_llb_beamstop.cmd b/scripts/sans_llb_beamstop.cmd index 0fb9b03..d3728de 100644 --- a/scripts/sans_llb_beamstop.cmd +++ b/scripts/sans_llb_beamstop.cmd @@ -9,6 +9,8 @@ # # out IO Interrupt Delay (if 0 then only reacts on a change) # ) +# Expects as an argument, the PV's for the motors bsx and bsy. + epicsEnvSet("SPS_REGISTER_NAME", "SPS-BEAMSTOP") epicsEnvSet("SPS_FETCH_SIZE", "40") epicsEnvSet("SPS_WRITE_SIZE", "2") @@ -22,4 +24,4 @@ dbLoadRecords("$(sinqSPS_DB)/sps_status.db", "INSTR=$(INSTR), SPS_REGISTER_NAME= dbLoadTemplate("$(sinqSPS_DB)/sans_llb_beamstop.substitutions", "INSTR=$(INSTR), SPS_REGISTER_NAME=$(SPS_REGISTER_NAME), STATUS_FLNK=$(INSTR)$(SPS_REGISTER_NAME):MAP-STATUS") # Additional Mapping PVs -dbLoadRecords("$(sinqSPS_DB)/sans_llb_beamstop.db", "INSTR=$(INSTR), SPS_REGISTER_NAME=$(SPS_REGISTER_NAME)") +dbLoadRecords("$(sinqSPS_DB)/sans_llb_beamstop.db", "INSTR=$(INSTR), SPS_REGISTER_NAME=$(SPS_REGISTER_NAME), BSX_MOT=$(BSX_MOT), BSY_MOT=$(BSY_MOT)")