From c2b45a91d26af729c78c2b13219d0a938ebffe14 Mon Sep 17 00:00:00 2001 From: Edward Wall Date: Tue, 19 May 2026 15:31:31 +0200 Subject: [PATCH] use internal MCU-derived state in addition to SPS --- beamstop/beamstop_motors.proto | 4 ++-- beamstop/sans_llb_beamstop.db | 34 +++++++++++++++++++++++++--------- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/beamstop/beamstop_motors.proto b/beamstop/beamstop_motors.proto index 420e5d5..667d31a 100644 --- a/beamstop/beamstop_motors.proto +++ b/beamstop/beamstop_motors.proto @@ -9,8 +9,8 @@ pmac_get { st { InTerminator = CR ACK; - out "P553 Q401 Q501"; - in "%(A)d%*[ ]%(B)f%*[ ]%(C)f"; + out "P553 Q401 Q501 P423 P523"; + in "%(A)d%*[ ]%(B)f%*[ ]%(C)f\r%(D)d\r%(E)d"; } stop { diff --git a/beamstop/sans_llb_beamstop.db b/beamstop/sans_llb_beamstop.db index eb30d31..1964958 100644 --- a/beamstop/sans_llb_beamstop.db +++ b/beamstop/sans_llb_beamstop.db @@ -185,7 +185,11 @@ record(calc, "$(INSTR)$(SPS_REGISTER_NAME):MAP-STATUS") field(INPH, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP NPP") field(INPI, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP_RBV NPP") field(INPK, "$(INSTR)$(SPS_REGISTER_NAME):RETRY-ERROR NPP") - field(CALC, "(F=0||G=0||D=1||K=1)?3:(A=1)?2:(B=1||H#I)?1:0") + # For the case of 0... as the SPS always has everything as 0 + # during movement, meaning that we end up flicking between + # busy and not busy when switching to 0 + field(INPC, "$(INSTR)$(SPS_REGISTER_NAME):LOADED NPP") + field(CALC, "(F=0||G=0||D=1||K=1)?3:(A=1)?2:(B=1||H#I||H#C)?1:0") field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):UNBLOCK-MOTORS") } @@ -311,10 +315,12 @@ record(fanout, "$(BS_MCU):BS:ST_FANOUT1") { } record(fanout, "$(BS_MCU):BS:ST_FANOUT2") { - field(LNK1, "$(BS_MCU):BS:TARGET_RANGE_RAW") - field(LNK2, "$(BS_MCU):BS:TARGET_RANGE") - field(LNK3, "$(BS_MCU):BS:LOADED_RAW") - field(LNK4, "$(BS_MCU):BS:INVALID") + field(LNK1, "$(BS_MCU):BS:BSX_ACK_RBV") + field(LNK2, "$(BS_MCU):BS:BSY_ACK_RBV") + field(LNK3, "$(BS_MCU):BS:TARGET_RANGE_RAW") + field(LNK4, "$(BS_MCU):BS:TARGET_RANGE") + field(LNK5, "$(BS_MCU):BS:LOADED_RAW") + field(LNK6, "$(BS_MCU):BS:INVALID") } record(longin, "$(BS_MCU):BS:TARGET") { @@ -332,6 +338,16 @@ record(ai, "$(BS_MCU):BS:TARGET_Y") { field(INP, "$(BS_MCU):BS:ST.C NPP MS") } +record(longin, "$(BS_MCU):BS:BSX_ACK_RBV") { + field(DESC, "BSX ACK") + field(INP, "$(BS_MCU):BS:ST.D NPP MS") +} + +record(longin, "$(BS_MCU):BS:BSY_ACK_RBV") { + field(DESC, "BSY ACK") + field(INP, "$(BS_MCU):BS:ST.E NPP MS") +} + record(calc, "$(BS_MCU):BS:TARGET_BS_RAW") { field(DESC, "Beamstop == TARGET_X") # Dynamic Inputs @@ -387,19 +403,19 @@ record(calcout, "$(BS_MCU):BS:LOADED_RAW") field(OOPT, "Transition To Zero") field(DOPT, "Use OCAL") field(OCAL, "A") - field(OUT, "$(BS_MCU):BS:LOADED PP") + field(OUT, "$(INSTR)$(SPS_REGISTER_NAME):LOADED PP") } record(longout, "$(INSTR)$(SPS_REGISTER_NAME):LOADED-INIT") { field(DESC, "Initialises LOADED PV") field(DOL, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP_RBV NPP") - field(OUT, "$(BS_MCU):BS:LOADED NPP") + field(OUT, "$(INSTR)$(SPS_REGISTER_NAME):LOADED NPP") field(OMSL, "closed_loop") field(PINI, "YES") } -record(mbbi, "$(BS_MCU):BS:LOADED") +record(mbbi, "$(INSTR)$(SPS_REGISTER_NAME):LOADED") { field(DESC, "Most recently lifted beamstop") field(ZRST, "No Beamstop") @@ -413,7 +429,7 @@ record(calcout, "$(BS_MCU):BS:INVALID") { # Dynamic Inputs field(INPA, "$(BS_MCU):BS:TARGET_BS NPP MS") field(INPB, "$(BS_MCU):BS:TARGET_RANGE NPP MS") - field(INPC, "$(BS_MCU):BS:LOADED NPP MS") + field(INPC, "$(INSTR)$(SPS_REGISTER_NAME):LOADED NPP MS") field(CALC, "(A<4) && (B=1) && (A#C)") field(OOPT, "Transition To Non-zero") field(OUT, "$(BS_MCU):BS:IMMEDIATE_STOP.PROC PP")