From 68361d8d1d03d076790bfd2a225522ecf71dc0be Mon Sep 17 00:00:00 2001 From: Lowri Jenkins Date: Fri, 7 Aug 2026 15:21:28 +0100 Subject: [PATCH 1/8] Add IOC --- BEAMCORR/.gitignore | 40 ++++ BEAMCORR/BEAMCORRApp/Db/Makefile | 23 ++ BEAMCORR/BEAMCORRApp/Db/beamcorr.db | 196 ++++++++++++++++++ .../BEAMCORRApp/Db/coefficients.substitutions | 28 +++ BEAMCORR/BEAMCORRApp/Db/coefficients.template | 18 ++ BEAMCORR/BEAMCORRApp/Makefile | 20 ++ BEAMCORR/BEAMCORRApp/protocol/Makefile | 15 ++ BEAMCORR/BEAMCORRApp/src/BEAMCORRMain.cpp | 27 +++ BEAMCORR/BEAMCORRApp/src/Makefile | 13 ++ BEAMCORR/BEAMCORRApp/src/build.mak | 81 ++++++++ BEAMCORR/Makefile | 15 ++ BEAMCORR/configure/CONFIG | 49 +++++ BEAMCORR/configure/CONFIG_SITE | 47 +++++ BEAMCORR/configure/Makefile | 12 ++ BEAMCORR/configure/RELEASE | 77 +++++++ BEAMCORR/configure/RULES | 10 + BEAMCORR/configure/RULES.ioc | 6 + BEAMCORR/configure/RULES_DIRS | 6 + BEAMCORR/configure/RULES_TOP | 7 + BEAMCORR/iocBoot/Makefile | 10 + BEAMCORR/iocBoot/iocBEAMCORR/Makefile | 10 + BEAMCORR/iocBoot/iocBEAMCORR/config.xml | 22 ++ BEAMCORR/iocBoot/iocBEAMCORR/st-common.cmd | 26 +++ BEAMCORR/iocBoot/iocBEAMCORR/st.cmd | 23 ++ Makefile | 1 + 25 files changed, 782 insertions(+) create mode 100644 BEAMCORR/.gitignore create mode 100644 BEAMCORR/BEAMCORRApp/Db/Makefile create mode 100644 BEAMCORR/BEAMCORRApp/Db/beamcorr.db create mode 100644 BEAMCORR/BEAMCORRApp/Db/coefficients.substitutions create mode 100644 BEAMCORR/BEAMCORRApp/Db/coefficients.template create mode 100644 BEAMCORR/BEAMCORRApp/Makefile create mode 100644 BEAMCORR/BEAMCORRApp/protocol/Makefile create mode 100644 BEAMCORR/BEAMCORRApp/src/BEAMCORRMain.cpp create mode 100644 BEAMCORR/BEAMCORRApp/src/Makefile create mode 100644 BEAMCORR/BEAMCORRApp/src/build.mak create mode 100644 BEAMCORR/Makefile create mode 100644 BEAMCORR/configure/CONFIG create mode 100644 BEAMCORR/configure/CONFIG_SITE create mode 100644 BEAMCORR/configure/Makefile create mode 100644 BEAMCORR/configure/RELEASE create mode 100644 BEAMCORR/configure/RULES create mode 100644 BEAMCORR/configure/RULES.ioc create mode 100644 BEAMCORR/configure/RULES_DIRS create mode 100644 BEAMCORR/configure/RULES_TOP create mode 100644 BEAMCORR/iocBoot/Makefile create mode 100644 BEAMCORR/iocBoot/iocBEAMCORR/Makefile create mode 100644 BEAMCORR/iocBoot/iocBEAMCORR/config.xml create mode 100644 BEAMCORR/iocBoot/iocBEAMCORR/st-common.cmd create mode 100644 BEAMCORR/iocBoot/iocBEAMCORR/st.cmd diff --git a/BEAMCORR/.gitignore b/BEAMCORR/.gitignore new file mode 100644 index 000000000..738e8bddf --- /dev/null +++ b/BEAMCORR/.gitignore @@ -0,0 +1,40 @@ +# SPDX-FileCopyrightText: 2022 Argonne National Laboratory +# +# SPDX-License-Identifier: EPICS + +# Install directories +/bin/ +/cfg/ +/db/ +/dbd/ +/html/ +/include/ +/lib/ +/templates/ +/data/ + +# Local configuration files +/configure/*.local + +# iocBoot generated files +/iocBoot/*ioc*/cdCommands +/iocBoot/*ioc*/dllPath*.bat +/iocBoot/*ioc*/dllCopy.bat +/iocBoot/*ioc*/runIOC.bat +/iocBoot/*ioc*/runIOC.sh +/iocBoot/*ioc*/envPaths +/iocBoot/*ioc*/relPaths.sh + +# iocsh +.iocsh_history + +# Build directories +O.*/ + +# Common files created by other tools +/QtC-* +/.vscode/ +*.orig +*.log +.*.swp +.DS_Store diff --git a/BEAMCORR/BEAMCORRApp/Db/Makefile b/BEAMCORR/BEAMCORRApp/Db/Makefile new file mode 100644 index 000000000..e1a100c5a --- /dev/null +++ b/BEAMCORR/BEAMCORRApp/Db/Makefile @@ -0,0 +1,23 @@ +# SPDX-FileCopyrightText: 1998 Argonne National Laboratory +# +# SPDX-License-Identifier: EPICS + +TOP=../.. +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE + +#---------------------------------------------------- +# Create and install (or just install) into /db +# databases, templates, substitutions like this +DB += beamcorr.db +DB += coefficients.db + +#---------------------------------------------------- +# If .db template is not named *.template add +# _template = + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE + diff --git a/BEAMCORR/BEAMCORRApp/Db/beamcorr.db b/BEAMCORR/BEAMCORRApp/Db/beamcorr.db new file mode 100644 index 000000000..8de2ca940 --- /dev/null +++ b/BEAMCORR/BEAMCORRApp/Db/beamcorr.db @@ -0,0 +1,196 @@ +### Generic Records + +record(bo, "$(P)SIM") +{ + field(SCAN, "Passive") + field(DTYP, "Soft Channel") + field(ZNAM, "NO") + field(ONAM, "YES") + field(VAL, "$(RECSIM)") +} + +record(bo, "$(P)DISABLE") +{ + field(DESC, "Disable comms") + field(PINI, "YES") + field(VAL, "$(DISABLE)") + field(OMSL, "supervisory") + field(ZNAM, "COMMS ENABLED") + field(ONAM, "COMMS DISABLED") +} + +### Enable Beam Corrections + +record(bo, "$(P)ENABLE:CORR") +{ + field(DESC, "Enable Beam Corrections") + field(ZNAM, "CORR ENABLED") + field(ONAM, "CORR DISABLED") +} + +record(mbbo, "$(P)BEAMLINE") +{ + field(VAL, "$(MYPVPREFIX)") + field(ZNAM, "IN:NDXEMU") + field(ONAM, "IN:NDXMUSR") + field(TNAM, "IN:NDXHIFI") +} + +record(CALC, "$(P)OVERRIDE:EMU){ + field(CALC, "EQUALS(A, 0)") + field(INPA, "(P)BEAMLINE") +} + +record(CALC, "$(P)OVERRIDE:MUSR){ + field(CALC, "EQUALS(A, 1)") + field(INPA, "(P)BEAMLINE") +} + +record(CALC, "$(P)OVERRIDE:HIFI){ + field(CALC, "EQUALS(A, 2)") + field(INPA, "(P)BEAMLINE") +} +// Equation for a single steering magnet +// bx = ax + (cx1 * m1 + cx2 * m2 +... + cxn * mn) +// where b = The output steering value +// a = the initital steering value +// x = the steering magnet +// cx1 through cxn = the coefficients of the interfering magnets to steering magnet x (set by scientists) +// m1 through mn = the current value of the interferring magnets + + +record(CALC, "$(P)STEERING_1:EMU){ + field(CALC, "A + B*C + D*E + F*G + H*I + J*K + L*M") + field(INPA, "EMU Stearing magnet 1") + field(INPB, "$(P)EMU:STEER_1_COEFF:HIFI_MAIN") + field(INPC, "Hifi Main") + field(INPD, "$(P)EMU:STEER_1_COEFF:MUSR_MAIN") + field(INPE, "Musr Main") + field(INPF, "$(P)EMU:STEER_1_COEFF:EMU_MAIN") + field(INPG, "Emu Main") + field(INPH, "$(P)EMU:STEER_1_COEFF:HIFI_TRANS") + field(INPI, "Hifi Trans") + field(INPJ, "$(P)EMU:STEER_1_COEFF:MUSR_TRANS") + field(INPK, "Musr Trans") + field(INPL, "$(P)EMU:STEER_1_COEFF:EMU_TRANS") + field(INPM, "Emu Trans") +} + +record(CALC, "$(P)STEERING_2:EMU){ + field(CALC, "A + B*C + D*E + F*G + H*I + J*K + L*M") + field(INPA, "EMU Stearing magnet 2") + field(INPB, "$(P)EMU:STEER_2_COEFF:HIFI_MAIN") + field(INPC, "Hifi Main") + field(INPD, "$(P)EMU:STEER_2_COEFF:MUSR_MAIN") + field(INPE, "Musr Main") + field(INPF, "$(P)EMU:STEER_2_COEFF:EMU_MAIN") + field(INPG, "Emu Main") + field(INPH, "$(P)EMU:STEER_2_COEFF:HIFI_TRANS") + field(INPI, "Hifi Trans") + field(INPJ, "$(P)EMU:STEER_2_COEFF:MUSR_TRANS") + field(INPK, "Musr Trans") + field(INPL, "$(P)EMU:STEER_2_COEFF:EMU_TRANS") + field(INPM, "Emu Trans") +} + +record(CALC, "$(P)STEERING_1:HIFI){ + field(CALC, "A + B*C + D*E + F*G + H*I + J*K + L*M") + field(INPA, "HIFI Stearing magnet 1") + field(INPB, "$(P)HIFI:STEER_1_COEFF:HIFI_MAIN") + field(INPC, "Hifi Main") + field(INPD, "$(P)HIFI:STEER_1_COEFF:MUSR_MAIN") + field(INPE, "Musr Main") + field(INPF, "$(P)HIFI:STEER_1_COEFF:EMU_MAIN") + field(INPG, "Emu Main") + field(INPH, "$(P)HIFI:STEER_1_COEFF:HIFI_TRANS") + field(INPI, "Hifi Trans") + field(INPJ, "$(P)HIFI:STEER_1_COEFF:MUSR_TRANS") + field(INPK, "Musr Trans") + field(INPL, "$(P)HIFI:STEER_1_COEFF:EMU_TRANS") + field(INPM, "Emu Trans") +} + +record(CALC, "$(P)STEERING_2:HIFI){ + field(CALC, "A + B*C + D*E + F*G + H*I + J*K + L*M") + field(INPA, "HIFI Stearing magnet 2") + field(INPB, "$(P)HIFI:STEER_2_COEFF:HIFI_MAIN") + field(INPC, "Hifi Main") + field(INPD, "$(P)HIFI:STEER_2_COEFF:MUSR_MAIN") + field(INPE, "Musr Main") + field(INPF, "$(P)HIFI:STEER_2_COEFF:EMU_MAIN") + field(INPG, "Emu Main") + field(INPH, "$(P)HIFI:STEER_2_COEFF:HIFI_TRANS") + field(INPI, "Hifi Trans") + field(INPJ, "$(P)HIFI:STEER_2_COEFF:MUSR_TRANS") + field(INPK, "Musr Trans") + field(INPL, "$(P)HIFI:STEER_2_COEFF:EMU_TRANS") + field(INPM, "Emu Trans") +} + +record(CALC, "$(P)STEERING_3:HIFI){ + field(CALC, "A + B*C + D*E + F*G + H*I + J*K + L*M") + field(INPA, "HIFI Stearing magnet 3") + field(INPB, "$(P)HIFI:STEER_3_COEFF:HIFI_MAIN") + field(INPC, "Hifi Main") + field(INPD, "$(P)HIFI:STEER_3_COEFF:MUSR_MAIN") + field(INPE, "Musr Main") + field(INPF, "$(P)HIFI:STEER_3_COEFF:EMU_MAIN") + field(INPG, "Emu Main") + field(INPH, "$(P)HIFI:STEER_3_COEFF:HIFI_TRANS") + field(INPI, "Hifi Trans") + field(INPJ, "$(P)HIFI:STEER_3_COEFF:MUSR_TRANS") + field(INPK, "Musr Trans") + field(INPL, "$(P)HIFI:STEER_3_COEFF:EMU_TRANS") + field(INPM, "Emu Trans") +} + +record(CALC, "$(P)STEERING_4:HIFI){ + field(CALC, "A + B*C + D*E + F*G + H*I + J*K + L*M") + field(INPA, "Stearing magnet 1") + field(INPB, "$(P)HIFI:STEER_4_COEFF:HIFI_MAIN") + field(INPC, "Hifi Main") + field(INPD, "$(P)HIFI:STEER_4_COEFF:MUSR_MAIN") + field(INPE, "Musr Main") + field(INPF, "$(P)HIFI:STEER_4_COEFF:EMU_MAIN") + field(INPG, "Emu Main") + field(INPH, "$(P)HIFI:STEER_4_COEFF:HIFI_TRANS") + field(INPI, "Hifi Trans") + field(INPJ, "$(P)HIFI:STEER_4_COEFF:MUSR_TRANS") + field(INPK, "Musr Trans") + field(INPL, "$(P)HIFI:STEER_4_COEFF:EMU_TRANS") + field(INPM, "Emu Trans") +} + +record(CALC, "$(P)STEERING_1:EMU){ + field(CALC, "A + B*C + D*E + F*G + H*I + J*K + L*M") + field(INPA, "EMU Stearing magnet 1") + field(INPB, "$(P)MUSR:STEER_1_COEFF:HIFI_MAIN") + field(INPC, "Hifi Main") + field(INPD, "$(P)MUSR:STEER_1_COEFF:MUSR_MAIN") + field(INPE, "Musr Main") + field(INPF, "$(P)MUSR:STEER_1_COEFF:EMU_MAIN") + field(INPG, "Emu Main") + field(INPH, "$(P)MUSR:STEER_1_COEFF:HIFI_TRANS") + field(INPI, "Hifi Trans") + field(INPJ, "$(P)MUSR:STEER_1_COEFF:MUSR_TRANS") + field(INPK, "Musr Trans") + field(INPL, "$(P)MUSR:STEER_1_COEFF:EMU_TRANS") + field(INPM, "Emu Trans") +} + +record(CALC, "$(P)STEERING_2:EMU){ + field(CALC, "A + B*C + D*E + F*G + H*I + J*K + L*M") + field(INPA, "EMU Stearing magnet 2") + field(INPB, "$(P)MUSR:STEER_2_COEFF:HIFI_MAIN") + field(INPC, "Hifi Main") + field(INPD, "$(P)MUSR:STEER_2_COEFF:MUSR_MAIN") + field(INPE, "Musr Main") + field(INPF, "$(P)MUSR:STEER_2_COEFF:EMU_MAIN") + field(INPG, "Emu Main") + field(INPH, "$(P)MUSR:STEER_2_COEFF:HIFI_TRANS") + field(INPI, "Hifi Trans") + field(INPJ, "$(P)MUSR:STEER_2_COEFF:MUSR_TRANS") + field(INPK, "Musr Trans") + field(INPL, "$(P)MUSR:STEER_2_COEFF:EMU_TRANS") + field(INPM, "Emu Trans") +} \ No newline at end of file diff --git a/BEAMCORR/BEAMCORRApp/Db/coefficients.substitutions b/BEAMCORR/BEAMCORRApp/Db/coefficients.substitutions new file mode 100644 index 000000000..b51ad82ad --- /dev/null +++ b/BEAMCORR/BEAMCORRApp/Db/coefficients.substitutions @@ -0,0 +1,28 @@ +file coefficients.template { + pattern { BEAMLINE, STEER_MAG, INT_MAG, INP1, INP2, INP3, INP4} + { "HIFI", "1", "HIFI", "B", "C", "D", "E" } + { "HIFI", "2", "HIFI", "B", "C", "D", "E" } + { "HIFI", "3", "HIFI", "B", "C", "D", "E" } + { "HIFI", "4", "HIFI", "B", "C", "D", "E" } + { "HIFI", "1", "EMU", "F", "G", "H", "I" } + { "HIFI", "2", "EMU", "F", "G", "H", "I" } + { "HIFI", "3", "EMU", "F", "G", "H", "I" } + { "HIFI", "4", "EMU", "F", "G", "H", "I" } + { "HIFI", "1", "MUSR", "J", "K", "L", "M" } + { "HIFI", "2", "MUSR", "J", "K", "L", "M" } + { "HIFI", "3", "MUSR", "J", "K", "L", "M" } + { "HIFI", "4", "MUSR", "J", "K", "L", "M" } + { "EMU", "1", "HIFI", "B", "C", "D", "E" } + { "EMU", "2", "HIFI", "B", "C", "D", "E" } + { "EMU", "1", "EMU", "F", "G", "H", "I" } + { "EMU", "2", "EMU", "F", "G", "H", "I" } + { "EMU", "1", "MUSR", "J", "K", "L", "M" } + { "EMU", "2", "MUSR", "J", "K", "L", "M" } + { "MUSR", "1", "HIFI", "B", "C", "D", "E" } + { "MUSR", "2", "HIFI", "B", "C", "D", "E" } + { "MUSR", "1", "EMU", "F", "G", "H", "I" } + { "MUSR", "2", "EMU", "F", "G", "H", "I" } + { "MUSR", "1", "MUSR", "J", "K", "L", "M" } + { "MUSR", "2", "MUSR", "J", "K", "L", "M" } +} + diff --git a/BEAMCORR/BEAMCORRApp/Db/coefficients.template b/BEAMCORR/BEAMCORRApp/Db/coefficients.template new file mode 100644 index 000000000..78386fd3f --- /dev/null +++ b/BEAMCORR/BEAMCORRApp/Db/coefficients.template @@ -0,0 +1,18 @@ +record(ao, "$(P)$(BEAMLINE):STEER_$(STEER_MAG):$(INT_MAG)_MAIN:COEFF") +{ + field(DESC, "Coefficient for $(BEAMLINE) $(STEER_MAG) $(INT_MAG)_MAIN") +} + +record(ao, "$(P)$(BEAMLINE):STEER_$(STEER_MAG):$(INT_MAG)_TRANS:COEFF") +{ + field(DESC, "Coefficient for $(BEAMLINE) $(STEER_MAG) $(INT_MAG)_TRANS") +} + +record(CALC, "$(P)STEERING_$(STEER_MAG):$(BEAMLINE)){ + field(CALC, "A + B*C + D*E + F*G + H*I + J*K + L*M") + field(INPA, "$(STEER_$(STEER_MAG)_$(BEAMLINE)_PV)") + field(INP$(INP1), "$(P)$(BEAMLINE):$(STEER_MAG):$(INT_MAG)_MAIN:COEFF") + field(INP$(INP2), "$($(INT_MAG)_PV_MAIN)") + field(INP$(INP3), "$(P)$(BEAMLINE):$(STEER_MAG):$(INT_MAG)_TRANS:COEFF") + field(INP$(INP4), "$($(INT_MAG)_PV_TRANS)") +} diff --git a/BEAMCORR/BEAMCORRApp/Makefile b/BEAMCORR/BEAMCORRApp/Makefile new file mode 100644 index 000000000..ff608c4df --- /dev/null +++ b/BEAMCORR/BEAMCORRApp/Makefile @@ -0,0 +1,20 @@ +# SPDX-FileCopyrightText: 1997 Argonne National Laboratory +# +# SPDX-License-Identifier: EPICS + +# Makefile at top of application tree +TOP = .. +include $(TOP)/configure/CONFIG + +# Directories to be built, in any order. +# You can replace these wildcards with an explicit list +DIRS += $(wildcard src* *Src*) +DIRS += $(wildcard db* *Db*) +DIRS += $(wildcard *protocol*) + + +# If the build order matters, add dependency rules like this, +# which specifies that xxxSrc must be built after src: +#xxxSrc_DEPEND_DIRS += src + +include $(TOP)/configure/RULES_DIRS diff --git a/BEAMCORR/BEAMCORRApp/protocol/Makefile b/BEAMCORR/BEAMCORRApp/protocol/Makefile new file mode 100644 index 000000000..b7dad25ec --- /dev/null +++ b/BEAMCORR/BEAMCORRApp/protocol/Makefile @@ -0,0 +1,15 @@ +TOP=../.. +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE + +#DATA += BEAMCORR.proto + +#---------------------------------------------------- +# If .db template is not named *.template add +# _TEMPLATE = + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE + diff --git a/BEAMCORR/BEAMCORRApp/src/BEAMCORRMain.cpp b/BEAMCORR/BEAMCORRApp/src/BEAMCORRMain.cpp new file mode 100644 index 000000000..7cdaa113c --- /dev/null +++ b/BEAMCORR/BEAMCORRApp/src/BEAMCORRMain.cpp @@ -0,0 +1,27 @@ +// SPDX-FileCopyrightText: 2000 Argonne National Laboratory +// +// SPDX-License-Identifier: EPICS + +/* BEAMCORRMain.cpp */ +/* Author: Marty Kraimer Date: 17MAR2000 */ + +#include +#include +#include +#include +#include + +#include "epicsExit.h" +#include "epicsThread.h" +#include "iocsh.h" + +int main(int argc,char *argv[]) +{ + if(argc>=2) { + iocsh(argv[1]); + epicsThreadSleep(.2); + } + iocsh(NULL); + epicsExit(0); + return(0); +} diff --git a/BEAMCORR/BEAMCORRApp/src/Makefile b/BEAMCORR/BEAMCORRApp/src/Makefile new file mode 100644 index 000000000..348e5628d --- /dev/null +++ b/BEAMCORR/BEAMCORRApp/src/Makefile @@ -0,0 +1,13 @@ +# SPDX-FileCopyrightText: 2003 Argonne National Laboratory +# +# SPDX-License-Identifier: EPICS + +TOP=../.. +# This file should do very little - it's purpose is to set the APPNAME and then load build.mak + +# this definition is used in build.mak +APPNAME=BEAMCORR + +# If we are ###-IOC-01 leave this as is, if we are ###-IOC-02 or higher change to ###-IOC-01 and delete build.mak from this directory +# there should only be a single build.mak for all IOCs of a given family and it is located in the ###-IOC-01 directory +include $(TOP)/BEAMCORRApp/src/build.mak diff --git a/BEAMCORR/BEAMCORRApp/src/build.mak b/BEAMCORR/BEAMCORRApp/src/build.mak new file mode 100644 index 000000000..fae24376b --- /dev/null +++ b/BEAMCORR/BEAMCORRApp/src/build.mak @@ -0,0 +1,81 @@ +TOP=../.. + +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE +#============================= + +### NOTE: there should only be one build.mak for a given IOC family and this should be located in the ###-IOC-01 directory + +#============================= +# Build the IOC application BEAMCORR +# We actually use $(APPNAME) below so this file can be included by multiple IOCs + +PROD_IOC = $(APPNAME) +# BEAMCORR.dbd will be created and installed +DBD += $(APPNAME).dbd + +# BEAMCORR.dbd will be made up from these files: +$(APPNAME)_DBD += base.dbd +## ISIS standard dbd ## +$(APPNAME)_DBD += icpconfig.dbd +$(APPNAME)_DBD += pvdump.dbd +$(APPNAME)_DBD += asSupport.dbd +$(APPNAME)_DBD += devIocStats.dbd +$(APPNAME)_DBD += caPutLog.dbd +$(APPNAME)_DBD += calcSupport.dbd +$(APPNAME)_DBD += utilities.dbd +## Stream device support ## +$(APPNAME)_DBD += asyn.dbd +$(APPNAME)_DBD += drvAsynSerialPort.dbd +$(APPNAME)_DBD += drvAsynIPPort.dbd +$(APPNAME)_DBD += luaSupport.dbd +$(APPNAME)_DBD += stream.dbd +## add other dbd here ## +#$(APPNAME)_DBD += xxx.dbd + +# Add all the support libraries needed by this IOC + +## Add additional libraries here ## +#$(APPNAME)_LIBS += xxx + +## ISIS standard libraries ## +## Stream device libraries ## +$(APPNAME)_LIBS += stream +$(APPNAME)_LIBS += lua +$(APPNAME)_LIBS += asyn +## other standard libraries here ## +$(APPNAME)_LIBS += devIocStats +$(APPNAME)_LIBS += pvdump $(MYSQLLIB) easySQLite sqlite +$(APPNAME)_LIBS += caPutLog +$(APPNAME)_LIBS += icpconfig +$(APPNAME)_LIBS += autosave +$(APPNAME)_LIBS += utilities pugixml libjson zlib +$(APPNAME)_LIBS += calc sscan +$(APPNAME)_LIBS += pcrecpp pcre +$(APPNAME)_LIBS += seq pv + +# BEAMCORR_registerRecordDeviceDriver.cpp derives from BEAMCORR.dbd +$(APPNAME)_SRCS += $(APPNAME)_registerRecordDeviceDriver.cpp + +# Build the main IOC entry point on workstation OSs. +$(APPNAME)_SRCS_DEFAULT += $(APPNAME)Main.cpp +$(APPNAME)_SRCS_vxWorks += -nil- + +# Add support from base/src/vxWorks if needed +#$(APPNAME)_OBJS_vxWorks += $(EPICS_BASE_BIN)/vxComLibrary + +## area detector already includes PVA, so avoid including it twice +ifeq ($(AREA_DETECTOR),) +include $(CONFIG)/CONFIG_PVA_ISIS +endif + +# Finally link to the EPICS Base libraries +$(APPNAME)_LIBS += $(EPICS_BASE_IOC_LIBS) + +#=========================== + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE + diff --git a/BEAMCORR/Makefile b/BEAMCORR/Makefile new file mode 100644 index 000000000..78d019142 --- /dev/null +++ b/BEAMCORR/Makefile @@ -0,0 +1,15 @@ +#Makefile at top of application tree +TOP = . +include $(TOP)/configure/CONFIG +DIRS := $(DIRS) $(filter-out $(DIRS), configure) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *App)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocBoot)) + +define DIR_template + $(1)_DEPEND_DIRS = configure +endef +$(foreach dir, $(filter-out configure,$(DIRS)),$(eval $(call DIR_template,$(dir)))) + +iocBoot_DEPEND_DIRS += $(filter %App,$(DIRS)) + +include $(TOP)/configure/RULES_TOP diff --git a/BEAMCORR/configure/CONFIG b/BEAMCORR/configure/CONFIG new file mode 100644 index 000000000..752b62740 --- /dev/null +++ b/BEAMCORR/configure/CONFIG @@ -0,0 +1,49 @@ +# SPDX-FileCopyrightText: 1997 Argonne National Laboratory +# +# SPDX-License-Identifier: EPICS + +# CONFIG - Load build configuration data +# +# Do not make changes to this file! + +# Allow user to override where the build rules come from +RULES = $(EPICS_BASE) + +# RELEASE files point to other application tops +include $(TOP)/configure/RELEASE +-include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).Common + +ifdef T_A + -include $(TOP)/configure/RELEASE.Common.$(T_A) + -include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A) +endif + +# Check EPICS_BASE is set properly +ifneq (file,$(origin EPICS_BASE)) + $(error EPICS_BASE must be set in a configure/RELEASE file) +else + ifeq ($(wildcard $(EPICS_BASE)/configure/CONFIG_BASE),) + $(error EPICS_BASE does not point to an EPICS installation) + endif +endif + +CONFIG = $(RULES)/configure +include $(CONFIG)/CONFIG + +# Override the Base definition: +INSTALL_LOCATION = $(TOP) + +# CONFIG_SITE files contain local build configuration settings +include $(TOP)/configure/CONFIG_SITE + +# Host-arch specific settings +-include $(TOP)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).Common + +ifdef T_A + # Target-arch specific settings + -include $(TOP)/configure/CONFIG_SITE.Common.$(T_A) + + # Host & target specific settings + -include $(TOP)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A) +endif + diff --git a/BEAMCORR/configure/CONFIG_SITE b/BEAMCORR/configure/CONFIG_SITE new file mode 100644 index 000000000..76326286f --- /dev/null +++ b/BEAMCORR/configure/CONFIG_SITE @@ -0,0 +1,47 @@ +# SPDX-FileCopyrightText: 2006 Argonne National Laboratory +# +# SPDX-License-Identifier: EPICS + +# CONFIG_SITE + +# Make any application-specific changes to the EPICS build +# configuration variables in this file. +# +# Host/target specific settings can be specified in files named +# CONFIG_SITE.$(EPICS_HOST_ARCH).Common +# CONFIG_SITE.Common.$(T_A) +# CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A) + +# CHECK_RELEASE controls the consistency checking of the support +# applications pointed to by the RELEASE* files. +# Normally CHECK_RELEASE should be set to YES. +# Set CHECK_RELEASE to NO to disable checking completely. +# Set CHECK_RELEASE to WARN to perform consistency checking but +# continue building even if conflicts are found. +CHECK_RELEASE = YES + +# Set this when you only want to compile this application +# for a subset of the cross-compiled target architectures +# that Base is built for. +#CROSS_COMPILER_TARGET_ARCHS = vxWorks-ppc32 + +# To install files into a location other than $(TOP) define +# INSTALL_LOCATION here. +#INSTALL_LOCATION= + +# Set this when the IOC and build host use different paths +# to the install location. This may be needed to boot from +# a Microsoft FTP server say, or on some NFS configurations. +#IOCS_APPL_TOP = + +# For application debugging purposes, override the HOST_OPT and/ +# or CROSS_OPT settings from base/configure/CONFIG_SITE +#HOST_OPT = NO +#CROSS_OPT = NO + +# These allow developers to override the CONFIG_SITE variable +# settings without having to modify the configure/CONFIG_SITE +# file itself. +-include $(TOP)/../CONFIG_SITE.local +-include $(TOP)/configure/CONFIG_SITE.local + diff --git a/BEAMCORR/configure/Makefile b/BEAMCORR/configure/Makefile new file mode 100644 index 000000000..e004cd71b --- /dev/null +++ b/BEAMCORR/configure/Makefile @@ -0,0 +1,12 @@ +# SPDX-FileCopyrightText: 1999 Argonne National Laboratory +# +# SPDX-License-Identifier: EPICS + +TOP=.. + +include $(TOP)/configure/CONFIG + +TARGETS = $(CONFIG_TARGETS) +CONFIGS += $(subst ../,,$(wildcard $(CONFIG_INSTALLS))) + +include $(TOP)/configure/RULES diff --git a/BEAMCORR/configure/RELEASE b/BEAMCORR/configure/RELEASE new file mode 100644 index 000000000..99c26b5e0 --- /dev/null +++ b/BEAMCORR/configure/RELEASE @@ -0,0 +1,77 @@ +# SPDX-FileCopyrightText: 1997 Argonne National Laboratory +# +# SPDX-License-Identifier: EPICS + +# RELEASE - Location of external support modules +# +# IF YOU CHANGE ANY PATHS in this file or make API changes to +# any modules it refers to, you should do a "make rebuild" in +# this application's top level directory. +# +# The EPICS build process does not check dependencies against +# any files from outside the application, so it is safest to +# rebuild it completely if any modules it depends on change. +# +# Host- or target-specific settings can be given in files named +# RELEASE.$(EPICS_HOST_ARCH).Common +# RELEASE.Common.$(T_A) +# RELEASE.$(EPICS_HOST_ARCH).$(T_A) +# +# This file is parsed by both GNUmake and an EPICS Perl script, +# so it may ONLY contain definititions of paths to other support +# modules, variable definitions that are used in module paths, +# and include statements that pull in other RELEASE files. +# Variables may be used before their values have been set. +# Build variables that are NOT used in paths should be set in +# the CONFIG_SITE file. + +# Variables and paths to dependent modules: +#MODULES = /path/to/modules +#MYMODULE = $(MODULES)/my-module + +# If using the sequencer, point SNCSEQ at its top directory: +#SNCSEQ = $(MODULES)/seq-ver + +# EPICS_BASE should appear last so earlier modules can override stuff: +EPICS_BASE = C:/Instrument/Apps/EPICS/base/master + +# Set RULES here if you want to use build rules from somewhere +# other than EPICS_BASE: +#RULES = $(MODULES)/build-rules + +# These lines allow developers to override these RELEASE settings +# without having to modify this file directly. +-include $(TOP)/../RELEASE.local +-include $(TOP)/../RELEASE.$(EPICS_HOST_ARCH).local +-include $(TOP)/configure/RELEASE.local + +# Macros required for basic ioc/stream device +ACCESSSECURITY=$(SUPPORT)/AccessSecurity/master +ASUBFUNCTIONS=$(SUPPORT)/asubFunctions/master +ASYN=$(SUPPORT)/asyn/master +AUTOSAVE=$(SUPPORT)/autosave/master +CALC=$(SUPPORT)/calc/master +CAPUTLOG=$(SUPPORT)/caPutLog/master +DEVIOCSTATS=$(SUPPORT)/devIocStats/master +ICPCONFIG=$(SUPPORT)/icpconfig/master +LIBJSON=$(SUPPORT)/libjson/master +LUA=$(SUPPORT)/lua/master +MYSQL=$(SUPPORT)/MySQL/master +ONCRPC=$(SUPPORT)/oncrpc/master +PCRE=$(SUPPORT)/pcre/master +PUGIXML=$(SUPPORT)/pugixml/master +PVDUMP=$(SUPPORT)/pvdump/master +SNCSEQ=$(SUPPORT)/seq/master +SQLITE=$(SUPPORT)/sqlite/master +SSCAN=$(SUPPORT)/sscan/master +STREAMDEVICE=$(SUPPORT)/StreamDevice/master +UTILITIES=$(SUPPORT)/utilities/master +ZLIB=$(SUPPORT)/zlib/master + +# optional extra local definitions here +-include $(TOP)/configure/RELEASE.private + +include $(TOP)/../../../ISIS_CONFIG +-include $(TOP)/../../../ISIS_CONFIG.$(EPICS_HOST_ARCH) + +# IOC-specific support module diff --git a/BEAMCORR/configure/RULES b/BEAMCORR/configure/RULES new file mode 100644 index 000000000..8041da67c --- /dev/null +++ b/BEAMCORR/configure/RULES @@ -0,0 +1,10 @@ +# SPDX-FileCopyrightText: 2000 Argonne National Laboratory +# +# SPDX-License-Identifier: EPICS + +# RULES + +include $(CONFIG)/RULES + +# Library should be rebuilt because LIBOBJS may have changed. +$(LIBNAME): ../Makefile diff --git a/BEAMCORR/configure/RULES.ioc b/BEAMCORR/configure/RULES.ioc new file mode 100644 index 000000000..1b271be95 --- /dev/null +++ b/BEAMCORR/configure/RULES.ioc @@ -0,0 +1,6 @@ +# SPDX-FileCopyrightText: 1999 Argonne National Laboratory +# +# SPDX-License-Identifier: EPICS + +#RULES.ioc +include $(CONFIG)/RULES.ioc diff --git a/BEAMCORR/configure/RULES_DIRS b/BEAMCORR/configure/RULES_DIRS new file mode 100644 index 000000000..2ad98ddb6 --- /dev/null +++ b/BEAMCORR/configure/RULES_DIRS @@ -0,0 +1,6 @@ +# SPDX-FileCopyrightText: 1999 Argonne National Laboratory +# +# SPDX-License-Identifier: EPICS + +#RULES_DIRS +include $(CONFIG)/RULES_DIRS diff --git a/BEAMCORR/configure/RULES_TOP b/BEAMCORR/configure/RULES_TOP new file mode 100644 index 000000000..3087a853a --- /dev/null +++ b/BEAMCORR/configure/RULES_TOP @@ -0,0 +1,7 @@ +# SPDX-FileCopyrightText: 1997 Argonne National Laboratory +# +# SPDX-License-Identifier: EPICS + +#RULES_TOP +include $(CONFIG)/RULES_TOP + diff --git a/BEAMCORR/iocBoot/Makefile b/BEAMCORR/iocBoot/Makefile new file mode 100644 index 000000000..e7ec38ae6 --- /dev/null +++ b/BEAMCORR/iocBoot/Makefile @@ -0,0 +1,10 @@ +# SPDX-FileCopyrightText: 1997 Argonne National Laboratory +# +# SPDX-License-Identifier: EPICS + +TOP = .. +include $(TOP)/configure/CONFIG +DIRS += $(wildcard *ioc*) +DIRS += $(wildcard as*) +include $(CONFIG)/RULES_DIRS + diff --git a/BEAMCORR/iocBoot/iocBEAMCORR/Makefile b/BEAMCORR/iocBoot/iocBEAMCORR/Makefile new file mode 100644 index 000000000..4110fd51a --- /dev/null +++ b/BEAMCORR/iocBoot/iocBEAMCORR/Makefile @@ -0,0 +1,10 @@ +# SPDX-FileCopyrightText: 2014 Argonne National Laboratory +# +# SPDX-License-Identifier: EPICS + +TOP = ../.. +include $(TOP)/configure/CONFIG +#ARCH = windows-x64 +ARCH = $(EPICS_HOST_ARCH) +TARGETS = envPaths dllPath.bat relPaths.sh runIOC.bat runIOC.sh +include $(TOP)/configure/RULES.ioc diff --git a/BEAMCORR/iocBoot/iocBEAMCORR/config.xml b/BEAMCORR/iocBoot/iocBEAMCORR/config.xml new file mode 100644 index 000000000..fb9e3259b --- /dev/null +++ b/BEAMCORR/iocBoot/iocBEAMCORR/config.xml @@ -0,0 +1,22 @@ + + + + ISIS Muon Beam Correction + + + + + + + + + + + + + + + + + + diff --git a/BEAMCORR/iocBoot/iocBEAMCORR/st-common.cmd b/BEAMCORR/iocBoot/iocBEAMCORR/st-common.cmd new file mode 100644 index 000000000..7699a535a --- /dev/null +++ b/BEAMCORR/iocBoot/iocBEAMCORR/st-common.cmd @@ -0,0 +1,26 @@ +epicsEnvSet "DEVICE" "L0" + +##ISIS## Run IOC initialisation +< $(IOCSTARTUP)/init.cmd + +## No need to load a device, this only talks to other iocs + + +## Load record instances + +##ISIS## Load common DB records +< $(IOCSTARTUP)/dbload.cmd + +## Load our record instances +dbLoadRecords("${TOP}/db/beamcorr.db","PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0),PORT=$(DEVICE)") +dbLoadRecords("${TOP}/db/coefficients.db","PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0),PORT=$(DEVICE),STEER_1_HIFI_PV=$(STEER_1_HIFI_PV),HIFI_PV_MAIN=$(HIFI_PV_MAIN),HIFI_PV_TRANS=$(HIFI_PV_TRANS),STEER_2_HIFI_PV=$(STEER_2_HIFI_PV),STEER_3_HIFI_PV=$(STEER_3_HIFI_PV),EMU_PV_MAIN=$(EMU_PV_MAIN),EMU_PV_TRANS=$(EMU_PV_TRANS),STEER_4_HIFI_PV=$(STEER_4_HIFI_PV),MUSR_PV_MAIN=$(MUSR_PV_MAIN),MUSR_PV_TRANS=$(MUSR_PV_TRANS),STEER_1_EMU_PV=$(STEER_1_EMU_PV),STEER_2_EMU_PV=$(STEER_2_EMU_PV),STEER_1_MUSR_PV=$(STEER_1_MUSR_PV),STEER_2_MUSR_PV=$(STEER_2_MUSR_PV)") + +##ISIS## Stuff that needs to be done after all records are loaded but before iocInit is called +< $(IOCSTARTUP)/preiocinit.cmd + +cd "${TOP}/iocBoot/${IOC}" +iocInit + + +##ISIS## Stuff that needs to be done after iocInit is called e.g. sequence programs +< $(IOCSTARTUP)/postiocinit.cmd diff --git a/BEAMCORR/iocBoot/iocBEAMCORR/st.cmd b/BEAMCORR/iocBoot/iocBEAMCORR/st.cmd new file mode 100644 index 000000000..547fd34c1 --- /dev/null +++ b/BEAMCORR/iocBoot/iocBEAMCORR/st.cmd @@ -0,0 +1,23 @@ +#!../../bin/windows-x64/BEAMCORR + +#- SPDX-FileCopyrightText: 2003 Argonne National Laboratory +#- +#- SPDX-License-Identifier: EPICS + +#- You may have to change BEAMCORR to something else +#- everywhere it appears in this file + +# Increase this if you get <> or discarded messages warnings in your errlog output +errlogInit2(65536, 256) + +< envPaths + +cd "${TOP}" + +## Register all support components +dbLoadDatabase "dbd/BEAMCORR.dbd" +BEAMCORR_registerRecordDeviceDriver pdbbase + +## calling common command file in ioc 01 boot dir +< ${TOP}/iocBoot/ioc_01_APP_NAME_/st-common.cmd + diff --git a/Makefile b/Makefile index 4e0177d3c..45aff5711 100644 --- a/Makefile +++ b/Makefile @@ -95,6 +95,7 @@ IOCDIRS += AMBRHEAT IOCDIRS += OPCUA IOCDIRS += ESP300 IOCDIRS += QNW +IOCDIRS += beamcorr ## check on missing directories From 5eae7ad860ce82e73a82e4e2693c11bfb9008372 Mon Sep 17 00:00:00 2001 From: Lowri Jenkins Date: Fri, 21 Aug 2026 12:58:56 +0100 Subject: [PATCH 2/8] split out coefficients so that all dont need to be loaded --- .../Db/EMU_coefficients.substitutions | 10 + ...utions => HIFI_coefficients.substitutions} | 12 -- .../Db/MUSR_coefficients.substitutions | 10 + BEAMCORR/BEAMCORRApp/Db/Makefile | 4 +- BEAMCORR/BEAMCORRApp/Db/beamcorr.db | 172 ++---------------- BEAMCORR/BEAMCORRApp/Db/coefficients.template | 31 +++- BEAMCORR/iocBoot/iocBEAMCORR/st-common.cmd | 4 +- BEAMCORR/iocBoot/iocBEAMCORR/st.cmd | 2 +- 8 files changed, 65 insertions(+), 180 deletions(-) create mode 100644 BEAMCORR/BEAMCORRApp/Db/EMU_coefficients.substitutions rename BEAMCORR/BEAMCORRApp/Db/{coefficients.substitutions => HIFI_coefficients.substitutions} (54%) create mode 100644 BEAMCORR/BEAMCORRApp/Db/MUSR_coefficients.substitutions diff --git a/BEAMCORR/BEAMCORRApp/Db/EMU_coefficients.substitutions b/BEAMCORR/BEAMCORRApp/Db/EMU_coefficients.substitutions new file mode 100644 index 000000000..81a224a35 --- /dev/null +++ b/BEAMCORR/BEAMCORRApp/Db/EMU_coefficients.substitutions @@ -0,0 +1,10 @@ +file coefficients.template { + pattern { BEAMLINE, STEER_MAG, INT_MAG, INP1, INP2, INP3, INP4} + { "EMU", "1", "HIFI", "B", "C", "D", "E" } + { "EMU", "2", "HIFI", "B", "C", "D", "E" } + { "EMU", "1", "EMU", "F", "G", "H", "I" } + { "EMU", "2", "EMU", "F", "G", "H", "I" } + { "EMU", "1", "MUSR", "J", "K", "L", "M" } + { "EMU", "2", "MUSR", "J", "K", "L", "M" } +} + diff --git a/BEAMCORR/BEAMCORRApp/Db/coefficients.substitutions b/BEAMCORR/BEAMCORRApp/Db/HIFI_coefficients.substitutions similarity index 54% rename from BEAMCORR/BEAMCORRApp/Db/coefficients.substitutions rename to BEAMCORR/BEAMCORRApp/Db/HIFI_coefficients.substitutions index b51ad82ad..47e6badba 100644 --- a/BEAMCORR/BEAMCORRApp/Db/coefficients.substitutions +++ b/BEAMCORR/BEAMCORRApp/Db/HIFI_coefficients.substitutions @@ -12,17 +12,5 @@ file coefficients.template { { "HIFI", "2", "MUSR", "J", "K", "L", "M" } { "HIFI", "3", "MUSR", "J", "K", "L", "M" } { "HIFI", "4", "MUSR", "J", "K", "L", "M" } - { "EMU", "1", "HIFI", "B", "C", "D", "E" } - { "EMU", "2", "HIFI", "B", "C", "D", "E" } - { "EMU", "1", "EMU", "F", "G", "H", "I" } - { "EMU", "2", "EMU", "F", "G", "H", "I" } - { "EMU", "1", "MUSR", "J", "K", "L", "M" } - { "EMU", "2", "MUSR", "J", "K", "L", "M" } - { "MUSR", "1", "HIFI", "B", "C", "D", "E" } - { "MUSR", "2", "HIFI", "B", "C", "D", "E" } - { "MUSR", "1", "EMU", "F", "G", "H", "I" } - { "MUSR", "2", "EMU", "F", "G", "H", "I" } - { "MUSR", "1", "MUSR", "J", "K", "L", "M" } - { "MUSR", "2", "MUSR", "J", "K", "L", "M" } } diff --git a/BEAMCORR/BEAMCORRApp/Db/MUSR_coefficients.substitutions b/BEAMCORR/BEAMCORRApp/Db/MUSR_coefficients.substitutions new file mode 100644 index 000000000..acb08482b --- /dev/null +++ b/BEAMCORR/BEAMCORRApp/Db/MUSR_coefficients.substitutions @@ -0,0 +1,10 @@ +file coefficients.template { + pattern { BEAMLINE, STEER_MAG, INT_MAG, INP1, INP2, INP3, INP4} + { "MUSR", "1", "HIFI", "B", "C", "D", "E" } + { "MUSR", "2", "HIFI", "B", "C", "D", "E" } + { "MUSR", "1", "EMU", "F", "G", "H", "I" } + { "MUSR", "2", "EMU", "F", "G", "H", "I" } + { "MUSR", "1", "MUSR", "J", "K", "L", "M" } + { "MUSR", "2", "MUSR", "J", "K", "L", "M" } +} + diff --git a/BEAMCORR/BEAMCORRApp/Db/Makefile b/BEAMCORR/BEAMCORRApp/Db/Makefile index e1a100c5a..23d636c58 100644 --- a/BEAMCORR/BEAMCORRApp/Db/Makefile +++ b/BEAMCORR/BEAMCORRApp/Db/Makefile @@ -11,7 +11,9 @@ include $(TOP)/configure/CONFIG # Create and install (or just install) into /db # databases, templates, substitutions like this DB += beamcorr.db -DB += coefficients.db +DB += EMU_coefficients.db +DB += HIFI_coefficients.db +DB += MUSR_coefficients.db #---------------------------------------------------- # If .db template is not named *.template add diff --git a/BEAMCORR/BEAMCORRApp/Db/beamcorr.db b/BEAMCORR/BEAMCORRApp/Db/beamcorr.db index 8de2ca940..e053686d3 100644 --- a/BEAMCORR/BEAMCORRApp/Db/beamcorr.db +++ b/BEAMCORR/BEAMCORRApp/Db/beamcorr.db @@ -28,169 +28,23 @@ record(bo, "$(P)ENABLE:CORR") field(ONAM, "CORR DISABLED") } -record(mbbo, "$(P)BEAMLINE") -{ - field(VAL, "$(MYPVPREFIX)") - field(ZNAM, "IN:NDXEMU") - field(ONAM, "IN:NDXMUSR") - field(TNAM, "IN:NDXHIFI") -} - -record(CALC, "$(P)OVERRIDE:EMU){ - field(CALC, "EQUALS(A, 0)") - field(INPA, "(P)BEAMLINE") -} - -record(CALC, "$(P)OVERRIDE:MUSR){ - field(CALC, "EQUALS(A, 1)") - field(INPA, "(P)BEAMLINE") -} - -record(CALC, "$(P)OVERRIDE:HIFI){ - field(CALC, "EQUALS(A, 2)") - field(INPA, "(P)BEAMLINE") -} -// Equation for a single steering magnet -// bx = ax + (cx1 * m1 + cx2 * m2 +... + cxn * mn) -// where b = The output steering value -// a = the initital steering value -// x = the steering magnet -// cx1 through cxn = the coefficients of the interfering magnets to steering magnet x (set by scientists) -// m1 through mn = the current value of the interferring magnets - - -record(CALC, "$(P)STEERING_1:EMU){ - field(CALC, "A + B*C + D*E + F*G + H*I + J*K + L*M") - field(INPA, "EMU Stearing magnet 1") - field(INPB, "$(P)EMU:STEER_1_COEFF:HIFI_MAIN") - field(INPC, "Hifi Main") - field(INPD, "$(P)EMU:STEER_1_COEFF:MUSR_MAIN") - field(INPE, "Musr Main") - field(INPF, "$(P)EMU:STEER_1_COEFF:EMU_MAIN") - field(INPG, "Emu Main") - field(INPH, "$(P)EMU:STEER_1_COEFF:HIFI_TRANS") - field(INPI, "Hifi Trans") - field(INPJ, "$(P)EMU:STEER_1_COEFF:MUSR_TRANS") - field(INPK, "Musr Trans") - field(INPL, "$(P)EMU:STEER_1_COEFF:EMU_TRANS") - field(INPM, "Emu Trans") -} - -record(CALC, "$(P)STEERING_2:EMU){ - field(CALC, "A + B*C + D*E + F*G + H*I + J*K + L*M") - field(INPA, "EMU Stearing magnet 2") - field(INPB, "$(P)EMU:STEER_2_COEFF:HIFI_MAIN") - field(INPC, "Hifi Main") - field(INPD, "$(P)EMU:STEER_2_COEFF:MUSR_MAIN") - field(INPE, "Musr Main") - field(INPF, "$(P)EMU:STEER_2_COEFF:EMU_MAIN") - field(INPG, "Emu Main") - field(INPH, "$(P)EMU:STEER_2_COEFF:HIFI_TRANS") - field(INPI, "Hifi Trans") - field(INPJ, "$(P)EMU:STEER_2_COEFF:MUSR_TRANS") - field(INPK, "Musr Trans") - field(INPL, "$(P)EMU:STEER_2_COEFF:EMU_TRANS") - field(INPM, "Emu Trans") -} - -record(CALC, "$(P)STEERING_1:HIFI){ - field(CALC, "A + B*C + D*E + F*G + H*I + J*K + L*M") - field(INPA, "HIFI Stearing magnet 1") - field(INPB, "$(P)HIFI:STEER_1_COEFF:HIFI_MAIN") - field(INPC, "Hifi Main") - field(INPD, "$(P)HIFI:STEER_1_COEFF:MUSR_MAIN") - field(INPE, "Musr Main") - field(INPF, "$(P)HIFI:STEER_1_COEFF:EMU_MAIN") - field(INPG, "Emu Main") - field(INPH, "$(P)HIFI:STEER_1_COEFF:HIFI_TRANS") - field(INPI, "Hifi Trans") - field(INPJ, "$(P)HIFI:STEER_1_COEFF:MUSR_TRANS") - field(INPK, "Musr Trans") - field(INPL, "$(P)HIFI:STEER_1_COEFF:EMU_TRANS") - field(INPM, "Emu Trans") -} - -record(CALC, "$(P)STEERING_2:HIFI){ - field(CALC, "A + B*C + D*E + F*G + H*I + J*K + L*M") - field(INPA, "HIFI Stearing magnet 2") - field(INPB, "$(P)HIFI:STEER_2_COEFF:HIFI_MAIN") - field(INPC, "Hifi Main") - field(INPD, "$(P)HIFI:STEER_2_COEFF:MUSR_MAIN") - field(INPE, "Musr Main") - field(INPF, "$(P)HIFI:STEER_2_COEFF:EMU_MAIN") - field(INPG, "Emu Main") - field(INPH, "$(P)HIFI:STEER_2_COEFF:HIFI_TRANS") - field(INPI, "Hifi Trans") - field(INPJ, "$(P)HIFI:STEER_2_COEFF:MUSR_TRANS") - field(INPK, "Musr Trans") - field(INPL, "$(P)HIFI:STEER_2_COEFF:EMU_TRANS") - field(INPM, "Emu Trans") -} -record(CALC, "$(P)STEERING_3:HIFI){ - field(CALC, "A + B*C + D*E + F*G + H*I + J*K + L*M") - field(INPA, "HIFI Stearing magnet 3") - field(INPB, "$(P)HIFI:STEER_3_COEFF:HIFI_MAIN") - field(INPC, "Hifi Main") - field(INPD, "$(P)HIFI:STEER_3_COEFF:MUSR_MAIN") - field(INPE, "Musr Main") - field(INPF, "$(P)HIFI:STEER_3_COEFF:EMU_MAIN") - field(INPG, "Emu Main") - field(INPH, "$(P)HIFI:STEER_3_COEFF:HIFI_TRANS") - field(INPI, "Hifi Trans") - field(INPJ, "$(P)HIFI:STEER_3_COEFF:MUSR_TRANS") - field(INPK, "Musr Trans") - field(INPL, "$(P)HIFI:STEER_3_COEFF:EMU_TRANS") - field(INPM, "Emu Trans") +record(scalcout, "$(P)OVERRIDE:EMU"){ + field(CALC, "$(P)==IN:EMU:BEAMCORR:") } -record(CALC, "$(P)STEERING_4:HIFI){ - field(CALC, "A + B*C + D*E + F*G + H*I + J*K + L*M") - field(INPA, "Stearing magnet 1") - field(INPB, "$(P)HIFI:STEER_4_COEFF:HIFI_MAIN") - field(INPC, "Hifi Main") - field(INPD, "$(P)HIFI:STEER_4_COEFF:MUSR_MAIN") - field(INPE, "Musr Main") - field(INPF, "$(P)HIFI:STEER_4_COEFF:EMU_MAIN") - field(INPG, "Emu Main") - field(INPH, "$(P)HIFI:STEER_4_COEFF:HIFI_TRANS") - field(INPI, "Hifi Trans") - field(INPJ, "$(P)HIFI:STEER_4_COEFF:MUSR_TRANS") - field(INPK, "Musr Trans") - field(INPL, "$(P)HIFI:STEER_4_COEFF:EMU_TRANS") - field(INPM, "Emu Trans") +record(scalcout, "$(P)OVERRIDE:MUSR"){ + field(CALC, "$(P)==IN:MUSR:BEAMCORR:") } -record(CALC, "$(P)STEERING_1:EMU){ - field(CALC, "A + B*C + D*E + F*G + H*I + J*K + L*M") - field(INPA, "EMU Stearing magnet 1") - field(INPB, "$(P)MUSR:STEER_1_COEFF:HIFI_MAIN") - field(INPC, "Hifi Main") - field(INPD, "$(P)MUSR:STEER_1_COEFF:MUSR_MAIN") - field(INPE, "Musr Main") - field(INPF, "$(P)MUSR:STEER_1_COEFF:EMU_MAIN") - field(INPG, "Emu Main") - field(INPH, "$(P)MUSR:STEER_1_COEFF:HIFI_TRANS") - field(INPI, "Hifi Trans") - field(INPJ, "$(P)MUSR:STEER_1_COEFF:MUSR_TRANS") - field(INPK, "Musr Trans") - field(INPL, "$(P)MUSR:STEER_1_COEFF:EMU_TRANS") - field(INPM, "Emu Trans") +record(scalcout, "$(P)OVERRIDE:HIFI"){ + field(CALC, "$(P)==IN:HIFI:BEAMCORR:") } -record(CALC, "$(P)STEERING_2:EMU){ - field(CALC, "A + B*C + D*E + F*G + H*I + J*K + L*M") - field(INPA, "EMU Stearing magnet 2") - field(INPB, "$(P)MUSR:STEER_2_COEFF:HIFI_MAIN") - field(INPC, "Hifi Main") - field(INPD, "$(P)MUSR:STEER_2_COEFF:MUSR_MAIN") - field(INPE, "Musr Main") - field(INPF, "$(P)MUSR:STEER_2_COEFF:EMU_MAIN") - field(INPG, "Emu Main") - field(INPH, "$(P)MUSR:STEER_2_COEFF:HIFI_TRANS") - field(INPI, "Hifi Trans") - field(INPJ, "$(P)MUSR:STEER_2_COEFF:MUSR_TRANS") - field(INPK, "Musr Trans") - field(INPL, "$(P)MUSR:STEER_2_COEFF:EMU_TRANS") - field(INPM, "Emu Trans") -} \ No newline at end of file +# Equation for a single steering magnet +# bx = ax + (cx1 * m1 + cx2 * m2 +... + cxn * mn) +# where b = The output steering value +# a = the initital steering value +# x = the steering magnet +# cx1 through cxn = the coefficients of the interfering magnets to steering magnet x (set by scientists) +# m1 through mn = the current value of the interferring magnets diff --git a/BEAMCORR/BEAMCORRApp/Db/coefficients.template b/BEAMCORR/BEAMCORRApp/Db/coefficients.template index 78386fd3f..022dd0388 100644 --- a/BEAMCORR/BEAMCORRApp/Db/coefficients.template +++ b/BEAMCORR/BEAMCORRApp/Db/coefficients.template @@ -8,11 +8,30 @@ record(ao, "$(P)$(BEAMLINE):STEER_$(STEER_MAG):$(INT_MAG)_TRANS:COEFF") field(DESC, "Coefficient for $(BEAMLINE) $(STEER_MAG) $(INT_MAG)_TRANS") } -record(CALC, "$(P)STEERING_$(STEER_MAG):$(BEAMLINE)){ - field(CALC, "A + B*C + D*E + F*G + H*I + J*K + L*M") + +# Equation for a single steering magnet +# bx = ax + (cx1 * m1 + cx2 * m2 +... + cxn * mn) +# where b = The output steering value +# a = the initital steering value +# x = the steering magnet +# cx1 through cxn = the coefficients of the interfering magnets to steering magnet x (set by scientists) +# m1 through mn = the current value of the interferring magnets + +record(calc, $(P)STEERING_$(STEER_MAG):$(BEAMLINE):MAIN_$(INT_MAG)){ + field(CALC, "A*B") + field(INPA, "$(P)$(BEAMLINE):$(STEER_MAG):$(INT_MAG)_MAIN:COEFF") + field(INPB, "$($(INT_MAG)_PV_MAIN)") +} + +record(calc, $(P)STEERING_$(STEER_MAG):$(BEAMLINE):TRANS_$(INT_MAG)){ + field(CALC, "A*B) + field(INPA, "$(P)$(BEAMLINE):$(STEER_MAG):$(INT_MAG)_TRANS:COEFF") + field(INPB, "$($(INT_MAG)_PV_TRANS)") +} + +record(calc, "$(P)STEERING_$(STEER_MAG):$(BEAMLINE)"){ + field(CALC, "A + B + C + D + E + F + G") field(INPA, "$(STEER_$(STEER_MAG)_$(BEAMLINE)_PV)") - field(INP$(INP1), "$(P)$(BEAMLINE):$(STEER_MAG):$(INT_MAG)_MAIN:COEFF") - field(INP$(INP2), "$($(INT_MAG)_PV_MAIN)") - field(INP$(INP3), "$(P)$(BEAMLINE):$(STEER_MAG):$(INT_MAG)_TRANS:COEFF") - field(INP$(INP4), "$($(INT_MAG)_PV_TRANS)") + field(INP$(INP1), "$(P)STEERING_$(STEER_MAG):$(BEAMLINE):MAIN_$(INT_MAG)") + field(INP$(INP2), "$(P)STEERING_$(STEER_MAG):$(BEAMLINE):TRANS_$(INT_MAG)") } diff --git a/BEAMCORR/iocBoot/iocBEAMCORR/st-common.cmd b/BEAMCORR/iocBoot/iocBEAMCORR/st-common.cmd index 7699a535a..a05f38fdd 100644 --- a/BEAMCORR/iocBoot/iocBEAMCORR/st-common.cmd +++ b/BEAMCORR/iocBoot/iocBEAMCORR/st-common.cmd @@ -13,7 +13,9 @@ epicsEnvSet "DEVICE" "L0" ## Load our record instances dbLoadRecords("${TOP}/db/beamcorr.db","PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0),PORT=$(DEVICE)") -dbLoadRecords("${TOP}/db/coefficients.db","PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0),PORT=$(DEVICE),STEER_1_HIFI_PV=$(STEER_1_HIFI_PV),HIFI_PV_MAIN=$(HIFI_PV_MAIN),HIFI_PV_TRANS=$(HIFI_PV_TRANS),STEER_2_HIFI_PV=$(STEER_2_HIFI_PV),STEER_3_HIFI_PV=$(STEER_3_HIFI_PV),EMU_PV_MAIN=$(EMU_PV_MAIN),EMU_PV_TRANS=$(EMU_PV_TRANS),STEER_4_HIFI_PV=$(STEER_4_HIFI_PV),MUSR_PV_MAIN=$(MUSR_PV_MAIN),MUSR_PV_TRANS=$(MUSR_PV_TRANS),STEER_1_EMU_PV=$(STEER_1_EMU_PV),STEER_2_EMU_PV=$(STEER_2_EMU_PV),STEER_1_MUSR_PV=$(STEER_1_MUSR_PV),STEER_2_MUSR_PV=$(STEER_2_MUSR_PV)") +dbLoadRecords("${TOP}/db/coefficients.db","PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0),PORT=$(DEVICE),HIFI_PV_MAIN=$(HIFI_PV_MAIN),HIFI_PV_TRANS=$(HIFI_PV_TRANS),EMU_PV_MAIN=$(EMU_PV_MAIN),EMU_PV_TRANS=$(EMU_PV_TRANS),MUSR_PV_MAIN=$(MUSR_PV_MAIN),MUSR_PV_TRANS=$(MUSR_PV_TRANS),STEER_1_EMU_PV=$(STEER_1_EMU_PV),STEER_2_EMU_PV=$(STEER_2_EMU_PV)") +dbLoadRecords("${TOP}/db/coefficients.db","PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0),PORT=$(DEVICE),STEER_1_HIFI_PV=$(STEER_1_HIFI_PV),HIFI_PV_MAIN=$(HIFI_PV_MAIN),HIFI_PV_TRANS=$(HIFI_PV_TRANS),STEER_2_HIFI_PV=$(STEER_2_HIFI_PV),STEER_3_HIFI_PV=$(STEER_3_HIFI_PV),EMU_PV_MAIN=$(EMU_PV_MAIN),EMU_PV_TRANS=$(EMU_PV_TRANS),STEER_4_HIFI_PV=$(STEER_4_HIFI_PV),MUSR_PV_MAIN=$(MUSR_PV_MAIN),MUSR_PV_TRANS=$(MUSR_PV_TRANS)") +dbLoadRecords("${TOP}/db/coefficients.db","PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0),PORT=$(DEVICE),HIFI_PV_MAIN=$(HIFI_PV_MAIN),HIFI_PV_TRANS=$(HIFI_PV_TRANS),EMU_PV_MAIN=$(EMU_PV_MAIN),EMU_PV_TRANS=$(EMU_PV_TRANS),MUSR_PV_MAIN=$(MUSR_PV_MAIN),MUSR_PV_TRANS=$(MUSR_PV_TRANS),STEER_1_MUSR_PV=$(STEER_1_MUSR_PV),STEER_2_MUSR_PV=$(STEER_2_MUSR_PV)") ##ISIS## Stuff that needs to be done after all records are loaded but before iocInit is called < $(IOCSTARTUP)/preiocinit.cmd diff --git a/BEAMCORR/iocBoot/iocBEAMCORR/st.cmd b/BEAMCORR/iocBoot/iocBEAMCORR/st.cmd index 547fd34c1..32d7374b1 100644 --- a/BEAMCORR/iocBoot/iocBEAMCORR/st.cmd +++ b/BEAMCORR/iocBoot/iocBEAMCORR/st.cmd @@ -19,5 +19,5 @@ dbLoadDatabase "dbd/BEAMCORR.dbd" BEAMCORR_registerRecordDeviceDriver pdbbase ## calling common command file in ioc 01 boot dir -< ${TOP}/iocBoot/ioc_01_APP_NAME_/st-common.cmd +< ${TOP}/iocBoot/iocBEAMCORR/st-common.cmd From b0be160358d5ce8610f2e16674600b1ac43af310 Mon Sep 17 00:00:00 2001 From: Lowri Jenkins Date: Fri, 11 Sep 2026 10:02:16 +0100 Subject: [PATCH 3/8] Update --- .../Db/EMU_coefficients.substitutions | 10 - .../Db/HIFI_coefficients.substitutions | 16 -- .../Db/MUSR_coefficients.substitutions | 10 - BEAMCORR/BEAMCORRApp/Db/Makefile | 5 +- BEAMCORR/BEAMCORRApp/Db/beamcorr.db | 209 ++++++++++++++++-- .../BEAMCORRApp/Db/coefficients.substitutions | 6 + BEAMCORR/BEAMCORRApp/Db/coefficients.template | 34 +-- BEAMCORR/BEAMCORRApp/Db/steering.db | 83 +++++++ .../Makefile | 0 .../iocBoot/iocBEAMCORR-IOC-01/config.xml | 18 ++ .../iocBoot/iocBEAMCORR-IOC-01/st-common.cmd | 43 ++++ .../st.cmd | 0 BEAMCORR/iocBoot/iocBEAMCORR/config.xml | 22 -- BEAMCORR/iocBoot/iocBEAMCORR/st-common.cmd | 28 --- 14 files changed, 365 insertions(+), 119 deletions(-) delete mode 100644 BEAMCORR/BEAMCORRApp/Db/EMU_coefficients.substitutions delete mode 100644 BEAMCORR/BEAMCORRApp/Db/HIFI_coefficients.substitutions delete mode 100644 BEAMCORR/BEAMCORRApp/Db/MUSR_coefficients.substitutions create mode 100644 BEAMCORR/BEAMCORRApp/Db/coefficients.substitutions create mode 100644 BEAMCORR/BEAMCORRApp/Db/steering.db rename BEAMCORR/iocBoot/{iocBEAMCORR => iocBEAMCORR-IOC-01}/Makefile (100%) create mode 100644 BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/config.xml create mode 100644 BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/st-common.cmd rename BEAMCORR/iocBoot/{iocBEAMCORR => iocBEAMCORR-IOC-01}/st.cmd (100%) delete mode 100644 BEAMCORR/iocBoot/iocBEAMCORR/config.xml delete mode 100644 BEAMCORR/iocBoot/iocBEAMCORR/st-common.cmd diff --git a/BEAMCORR/BEAMCORRApp/Db/EMU_coefficients.substitutions b/BEAMCORR/BEAMCORRApp/Db/EMU_coefficients.substitutions deleted file mode 100644 index 81a224a35..000000000 --- a/BEAMCORR/BEAMCORRApp/Db/EMU_coefficients.substitutions +++ /dev/null @@ -1,10 +0,0 @@ -file coefficients.template { - pattern { BEAMLINE, STEER_MAG, INT_MAG, INP1, INP2, INP3, INP4} - { "EMU", "1", "HIFI", "B", "C", "D", "E" } - { "EMU", "2", "HIFI", "B", "C", "D", "E" } - { "EMU", "1", "EMU", "F", "G", "H", "I" } - { "EMU", "2", "EMU", "F", "G", "H", "I" } - { "EMU", "1", "MUSR", "J", "K", "L", "M" } - { "EMU", "2", "MUSR", "J", "K", "L", "M" } -} - diff --git a/BEAMCORR/BEAMCORRApp/Db/HIFI_coefficients.substitutions b/BEAMCORR/BEAMCORRApp/Db/HIFI_coefficients.substitutions deleted file mode 100644 index 47e6badba..000000000 --- a/BEAMCORR/BEAMCORRApp/Db/HIFI_coefficients.substitutions +++ /dev/null @@ -1,16 +0,0 @@ -file coefficients.template { - pattern { BEAMLINE, STEER_MAG, INT_MAG, INP1, INP2, INP3, INP4} - { "HIFI", "1", "HIFI", "B", "C", "D", "E" } - { "HIFI", "2", "HIFI", "B", "C", "D", "E" } - { "HIFI", "3", "HIFI", "B", "C", "D", "E" } - { "HIFI", "4", "HIFI", "B", "C", "D", "E" } - { "HIFI", "1", "EMU", "F", "G", "H", "I" } - { "HIFI", "2", "EMU", "F", "G", "H", "I" } - { "HIFI", "3", "EMU", "F", "G", "H", "I" } - { "HIFI", "4", "EMU", "F", "G", "H", "I" } - { "HIFI", "1", "MUSR", "J", "K", "L", "M" } - { "HIFI", "2", "MUSR", "J", "K", "L", "M" } - { "HIFI", "3", "MUSR", "J", "K", "L", "M" } - { "HIFI", "4", "MUSR", "J", "K", "L", "M" } -} - diff --git a/BEAMCORR/BEAMCORRApp/Db/MUSR_coefficients.substitutions b/BEAMCORR/BEAMCORRApp/Db/MUSR_coefficients.substitutions deleted file mode 100644 index acb08482b..000000000 --- a/BEAMCORR/BEAMCORRApp/Db/MUSR_coefficients.substitutions +++ /dev/null @@ -1,10 +0,0 @@ -file coefficients.template { - pattern { BEAMLINE, STEER_MAG, INT_MAG, INP1, INP2, INP3, INP4} - { "MUSR", "1", "HIFI", "B", "C", "D", "E" } - { "MUSR", "2", "HIFI", "B", "C", "D", "E" } - { "MUSR", "1", "EMU", "F", "G", "H", "I" } - { "MUSR", "2", "EMU", "F", "G", "H", "I" } - { "MUSR", "1", "MUSR", "J", "K", "L", "M" } - { "MUSR", "2", "MUSR", "J", "K", "L", "M" } -} - diff --git a/BEAMCORR/BEAMCORRApp/Db/Makefile b/BEAMCORR/BEAMCORRApp/Db/Makefile index 23d636c58..db66b7c04 100644 --- a/BEAMCORR/BEAMCORRApp/Db/Makefile +++ b/BEAMCORR/BEAMCORRApp/Db/Makefile @@ -11,9 +11,8 @@ include $(TOP)/configure/CONFIG # Create and install (or just install) into /db # databases, templates, substitutions like this DB += beamcorr.db -DB += EMU_coefficients.db -DB += HIFI_coefficients.db -DB += MUSR_coefficients.db +DB += coefficients.db +DB += steering.db #---------------------------------------------------- # If .db template is not named *.template add diff --git a/BEAMCORR/BEAMCORRApp/Db/beamcorr.db b/BEAMCORR/BEAMCORRApp/Db/beamcorr.db index e053686d3..0e90a5b3c 100644 --- a/BEAMCORR/BEAMCORRApp/Db/beamcorr.db +++ b/BEAMCORR/BEAMCORRApp/Db/beamcorr.db @@ -24,27 +24,208 @@ record(bo, "$(P)DISABLE") record(bo, "$(P)ENABLE:CORR") { field(DESC, "Enable Beam Corrections") - field(ZNAM, "CORR ENABLED") - field(ONAM, "CORR DISABLED") + field(ZNAM, "DISABLED") + field(ONAM, "ENABLED") } - -record(scalcout, "$(P)OVERRIDE:EMU"){ - field(CALC, "$(P)==IN:EMU:BEAMCORR:") -} - -record(scalcout, "$(P)OVERRIDE:MUSR"){ - field(CALC, "$(P)==IN:MUSR:BEAMCORR:") -} - -record(scalcout, "$(P)OVERRIDE:HIFI"){ - field(CALC, "$(P)==IN:HIFI:BEAMCORR:") +record(ao, "$(P)NUM:STEER_MAG"){ + field(DESC, "Number of Steering Magnets") + field(VAL, "$(NUM_STEER)") } -# Equation for a single steering magnet +# Equation for a single steering magnet offset # bx = ax + (cx1 * m1 + cx2 * m2 +... + cxn * mn) # where b = The output steering value # a = the initital steering value # x = the steering magnet # cx1 through cxn = the coefficients of the interfering magnets to steering magnet x (set by scientists) # m1 through mn = the current value of the interferring magnets + +record(ai, "$(P)HIFI_PV:MAIN"){ + field(INP, "$(HIFI_PV_MAIN) CP MS") + field(SIOL, "$(P)SIM:HIFI_PV:MAIN") + field(SIML, "$(P)SIM") +} + +record(stringout, "$(P)HIFI_PV:MAIN:UNITS_SET") +{ + field(DESC, "Push units from one pv to another") + field(DOL, "$(HIFI_PV_MAIN).EGU CP") + field(OMSL, "closed_loop") + field(OUT, "$(P)HIFI_PV:MAIN.EGU NPP") + field(SIOL, "$(P)SIM:HIFI_PV:MAIN:UNITS_SET PP") + field(SIML, "$(P)SIM") +} + +record(ai, "$(P)HIFI_PV:TRANS"){ + field(INP, "$(HIFI_PV_TRANS) CP MS") + field(SIOL, "$(P)SIM:HIFI_PV:TRANS") + field(SIML, "$(P)SIM") +} + +record(stringout, "$(P)HIFI_PV:TRANS:UNITS_SET") +{ + field(DESC, "Push units from one pv to another") + field(DOL, "$(HIFI_PV_TRANS).EGU CP") + field(OMSL, "closed_loop") + field(OUT, "$(P)HIFI_PV:TRANS.EGU NPP") + field(SIOL, "$(P)SIM:HIFI_PV:TRANS:UNITS_SET PP") + field(SIML, "$(P)SIM") +} + +record(ai, "$(P)EMU_PV:MAIN"){ + field(INP, "$(EMU_PV_MAIN) CP MS") + field(SIOL, "$(P)SIM:EMU_PV:MAIN") + field(SIML, "$(P)SIM") +} + +record(stringout, "$(P)EMU_PV:MAIN:UNITS_SET") +{ + field(DESC, "Push units from one pv to another") + field(DOL, "$(EMU_PV_MAIN).EGU CP") + field(OMSL, "closed_loop") + field(OUT, "$(P)EMU_PV:MAIN.EGU NPP") + field(SIOL, "$(P)SIM:EMU_PV:MAIN:UNITS_SET PP") + field(SIML, "$(P)SIM") +} + +record(ai, "$(P)EMU_PV:TRANS"){ + field(INP, "$(EMU_PV_TRANS) CP MS") + field(SIOL, "$(P)SIM:EMU_PV:TRANS") + field(SIML, "$(P)SIM") +} + +record(stringout, "$(P)EMU_PV:TRANS:UNITS_SET") +{ + field(DESC, "Push units from one pv to another") + field(DOL, "$(EMU_PV_TRANS).EGU CP") + field(OMSL, "closed_loop") + field(OUT, "$(P)EMU_PV:TRANS.EGU NPP") + field(SIOL, "$(P)SIM:EMU_PV:TRANS:UNITS_SET PP") + field(SIML, "$(P)SIM") +} + +### When MUSR replaces direction with second set of magnets, uncomment input field and remove MUSR +### Rotation calcouts. +record(ai, "$(P)MUSR_PV:MAIN"){ +# field(INP, "$(MUSR_PV_MAIN) CP MS") +# field(SIOL, "$(P)SIM:MUSR_PV:MAIN") +# field(SIML, "$(P)SIM") +} + +record(stringout, "$(P)MUSR_PV:MAIN:UNITS_SET") +{ + field(DESC, "Push units from one pv to another") + field(DOL, "$(MUSR_PV_MAIN).EGU CP") + field(OMSL, "closed_loop") + field(OUT, "$(P)MUSR_PV:MAIN.EGU NPP") + field(SIOL, "$(P)SIM:MUSR_PV:MAIN:UNITS_SET PP") + field(SIML, "$(P)SIM") +} + +### When MUSR replaces direction with second set of magnets, uncomment input field and remove MUSR +### Rotation calcouts. +record(ai, "$(P)MUSR_PV:TRANS"){ +# field(INP, "$(MUSR_PV_TRANS) CP MS") +# field(SIOL, "$(P)SIM:MUSR_PV:TRANS") +# field(SIML, "$(P)SIM") +} + +record(stringout, "$(P)MUSR_PV:TRANS:UNITS_SET") +{ + field(DESC, "Push units from one pv to another") + field(DOL, "$(MUSR_PV_TRANS).EGU CP") + field(OMSL, "closed_loop") + field(OUT, "$(P)MUSR_PV:TRANS.EGU NPP") + field(SIOL, "$(P)SIM:MUSR_PV:TRANS:UNITS_SET PP") + field(SIML, "$(P)SIM") +} + +record(calcout, "$(P)MUSR_ROTATION:ISLONG"){ + field(DESC, "Handle MUSR Direction") + field(CALC, "(A==0)?B:0") +$(IFNOTRECSIM="") field(INPA, "IN:MUSR:MUSR_ROTATION CP MS") +$(IFRECSIM="") field(INPA, "$(P)SIM:MUSR_ROTATION CP MS") +$(IFNOTRECSIM="") field(INPB, "$(MUSR_PV_MAIN) CP MS") +$(IFRECSIM="") field(INPB, "$(P)SIM:MUSR_PV:MAIN CP MS") + field(OUT, "$(P)MUSR_PV:MAIN PP") +} + +record(calcout, "$(P)MUSR_ROTATION:ISTRANS"){ + field(DESC, "Handle MUSR Direction") + field(CALC, "(A==1)?B:0") +$(IFNOTRECSIM="") field(INPA, "IN:MUSR:MUSR_ROTATION CP MS") +$(IFRECSIM="") field(INPA, "$(P)SIM:MUSR_ROTATION CP MS") +$(IFNOTRECSIM="")field(INPB, "$(MUSR_PV_MAIN) CP MS") +$(IFRECSIM="") field(INPB, "$(P)SIM:MUSR_PV:MAIN CP MS") + field(OUT, "$(P)MUSR_PV:TRANS PP") +} + +### Sim Records + +record(mbbo, "$(P)SIM:MUSR_ROTATION"){ + field(DESC, "SIM MUSR Direction for testing") + field(ZRST, "Longitudinal") + field(ONST, "Transverse") + field(TWST, "Indeterminate") +} + +record(ai, "$(P)SIM:HIFI_PV:MAIN"){ + field(FLNK, "$(P)HIFI_PV:MAIN") +} + +record(stringout, "$(P)SIM:HIFI_PV:MAIN:UNITS_SET") +{ + field(DESC, "Push units from one pv to another") + field(OUT, "$(P)HIFI_PV:MAIN.EGU NPP") +} + +record(ai, "$(P)SIM:HIFI_PV:TRANS"){ + field(FLNK, "$(P)HIFI_PV:TRANS") +} + +record(stringout, "$(P)SIM:HIFI_PV:TRANS:UNITS_SET") +{ + field(DESC, "Push units from one pv to another") + field(OUT, "$(P)HIFI_PV:TRANS.EGU NPP") +} + +record(ai, "$(P)SIM:EMU_PV:MAIN"){ + field(FLNK, "$(P)EMU_PV:MAIN") +} + +record(stringout, "$(P)SIM:EMU_PV:MAIN:UNITS_SET") +{ + field(DESC, "Push units from one pv to another") + field(OUT, "$(P)EMU_PV:MAIN.EGU NPP") +} + +record(ai, "$(P)SIM:EMU_PV:TRANS"){ + field(FLNK, "$(P)EMU_PV:TRANS") +} + +record(stringout, "$(P)SIM:EMU_PV:TRANS:UNITS_SET") +{ + field(DESC, "Push units from one pv to another") + field(OUT, "$(P)EMU_PV:TRANS.EGU NPP") +} + +record(ai, "$(P)SIM:MUSR_PV:MAIN"){ + field(FLNK, "$(P)MUSR_PV:MAIN") +} + +record(stringout, "$(P)SIM:MUSR_PV:MAIN:UNITS_SET") +{ + field(DESC, "Push units from one pv to another") + field(OUT, "$(P)MUSR_PV:MAIN.EGU NPP") +} + +#record(ai, "$(P)SIM:MUSR_PV:TRANS"){ +# field(FLNK, "$(P)MUSR_PV:TRANS") +#} + +record(stringout, "$(P)SIM:MUSR_PV:TRANS:UNITS_SET") +{ + field(DESC, "Push units from one pv to another") + field(OUT, "$(P)MUSR_PV:TRANS.EGU NPP") +} \ No newline at end of file diff --git a/BEAMCORR/BEAMCORRApp/Db/coefficients.substitutions b/BEAMCORR/BEAMCORRApp/Db/coefficients.substitutions new file mode 100644 index 000000000..aaccd6eee --- /dev/null +++ b/BEAMCORR/BEAMCORRApp/Db/coefficients.substitutions @@ -0,0 +1,6 @@ +file coefficients.template { + pattern { INT_MAG, INP1, INP2} + { "HIFI", "A", "B" } + { "EMU", "C", "D" } + { "MUSR", "E", "F" } +} diff --git a/BEAMCORR/BEAMCORRApp/Db/coefficients.template b/BEAMCORR/BEAMCORRApp/Db/coefficients.template index 022dd0388..e3c30f214 100644 --- a/BEAMCORR/BEAMCORRApp/Db/coefficients.template +++ b/BEAMCORR/BEAMCORRApp/Db/coefficients.template @@ -1,11 +1,13 @@ -record(ao, "$(P)$(BEAMLINE):STEER_$(STEER_MAG):$(INT_MAG)_MAIN:COEFF") +record(ao, "$(P)STEER_$(STEER_MAG):$(INT_MAG)_MAIN:COEFF") { - field(DESC, "Coefficient for $(BEAMLINE) $(STEER_MAG) $(INT_MAG)_MAIN") + field(DESC, "Coefficient for steering $(STEER_MAG) $(INT_MAG)_MAIN") + field(PREC, "3") } -record(ao, "$(P)$(BEAMLINE):STEER_$(STEER_MAG):$(INT_MAG)_TRANS:COEFF") +record(ao, "$(P)STEER_$(STEER_MAG):$(INT_MAG)_TRANS:COEFF") { - field(DESC, "Coefficient for $(BEAMLINE) $(STEER_MAG) $(INT_MAG)_TRANS") + field(DESC, "Coefficient for steering $(STEER_MAG) $(INT_MAG)_TRANS") + field(PREC, "3") } @@ -17,21 +19,21 @@ record(ao, "$(P)$(BEAMLINE):STEER_$(STEER_MAG):$(INT_MAG)_TRANS:COEFF") # cx1 through cxn = the coefficients of the interfering magnets to steering magnet x (set by scientists) # m1 through mn = the current value of the interferring magnets -record(calc, $(P)STEERING_$(STEER_MAG):$(BEAMLINE):MAIN_$(INT_MAG)){ +record(calc, $(P)STEERING_$(STEER_MAG):MAIN_$(INT_MAG)){ field(CALC, "A*B") - field(INPA, "$(P)$(BEAMLINE):$(STEER_MAG):$(INT_MAG)_MAIN:COEFF") - field(INPB, "$($(INT_MAG)_PV_MAIN)") + field(INPA, "$(P)STEER_$(STEER_MAG):$(INT_MAG)_MAIN:COEFF CP MS") + field(INPB, "$(P)$(INT_MAG)_PV:MAIN CP MS") } -record(calc, $(P)STEERING_$(STEER_MAG):$(BEAMLINE):TRANS_$(INT_MAG)){ - field(CALC, "A*B) - field(INPA, "$(P)$(BEAMLINE):$(STEER_MAG):$(INT_MAG)_TRANS:COEFF") - field(INPB, "$($(INT_MAG)_PV_TRANS)") +record(calc, $(P)STEERING_$(STEER_MAG):TRANS_$(INT_MAG)){ + field(CALC, "A*B") + field(INPA, "$(P)STEER_$(STEER_MAG):$(INT_MAG)_TRANS:COEFF CP MS") + field(INPB, "$(P)$(INT_MAG)_PV:TRANS CP MS") } -record(calc, "$(P)STEERING_$(STEER_MAG):$(BEAMLINE)"){ - field(CALC, "A + B + C + D + E + F + G") - field(INPA, "$(STEER_$(STEER_MAG)_$(BEAMLINE)_PV)") - field(INP$(INP1), "$(P)STEERING_$(STEER_MAG):$(BEAMLINE):MAIN_$(INT_MAG)") - field(INP$(INP2), "$(P)STEERING_$(STEER_MAG):$(BEAMLINE):TRANS_$(INT_MAG)") +record(calc, "$(P)STEERING_$(STEER_MAG):OFFSET"){ + field(CALC, "A + B + C + D + E + F") + field(PREC, "3") + field(INP$(INP1), "$(P)STEERING_$(STEER_MAG):MAIN_$(INT_MAG) CP MS") + field(INP$(INP2), "$(P)STEERING_$(STEER_MAG):TRANS_$(INT_MAG) CP MS") } diff --git a/BEAMCORR/BEAMCORRApp/Db/steering.db b/BEAMCORR/BEAMCORRApp/Db/steering.db new file mode 100644 index 000000000..0d3a7855d --- /dev/null +++ b/BEAMCORR/BEAMCORRApp/Db/steering.db @@ -0,0 +1,83 @@ +record(ai, "$(P)STEER_$(STEER_MAG)"){ + field(INP, "$(STEER_PV) CP MS") + field(PREC, "3") + field(DESC, "Readback for steering magnet $(STEER_MAG)") + field(SIML, "$(P)SIM") + field(SIOL, "$(P)SIM:STEER_$(STEER_MAG)") +} + +record(stringout, "$(P)STEER_$(STEER_MAG):UNITS_SET") +{ + field(DESC, "Push units to $(STEER_MAG) PV") + field(DOL, "$(STEER_PV).EGU CP") + field(OMSL, "closed_loop") + field(OUT, "$(P)STEER_$(STEER_MAG).EGU NPP") + field(SIML, "$(P)SIM") + field(SIOL, "$(P)SIM:STEER_$(STEER_MAG):UNITS_SET PP") +} + +record(ao, "$(P)STEER_$(STEER_MAG):SP"){ + field(DESC, "Setpoint for steer magnet $(STEER_MAG)") + field(PREC, "3") +} + +record(stringout, "$(P)STEER_$(STEER_MAG):SP:UNITS_SET") +{ + field(DESC, "Push units to the $(STEER_MAG) Setpoint") + field(DOL, "$(STEER_PV).EGU CP") + field(OMSL, "closed_loop") + field(OUT, "$(P)STEER_$(STEER_MAG):SP.EGU NPP") + field(SIML, "$(P)SIM") + field(SIOL, "$(P)SIM:STEER_$(STEER_MAG):SP:UNITS_SET PP") +} + +record(calcout, "$(P)STEER_$(STEER_MAG):DISABLED:SP"){ + field(OCAL, "A") + field(CALC, "B") +$(IFNOTRECSIM="") field(OUT, "$(STEER_PV):SP PP") +$(IFRECSIM="") field(OUT, "$(P)SIM:STEER_$(STEER_MAG) PP") + field(INPA, "$(P)STEER_$(STEER_MAG):SP CP MS") + field(INPB, "$(P)ENABLE:CORR CP MS") + field(DOPT, "Use OCAL") + field(OOPT, "When Zero") +} + +record(calcout, "$(P)STEER_$(STEER_MAG):_SP"){ + field(OCAL, "A+B") + field(CALC, "C") +$(IFNOTRECSIM="") field(OUT, "$(STEER_PV):SP PP") +$(IFRECSIM="") field(OUT, "$(P)SIM:STEER_$(STEER_MAG) PP") + field(INPA, "$(P)STEER_$(STEER_MAG):SP CP MS") + field(INPB, "$(P)STEERING_1:OFFSET CP MS") + field(INPC, "$(P)ENABLE:CORR") + field(DOPT, "Use OCAL") + field(OOPT, "When Non-zero") +} + +record(calcout, "$(P)STEER_$(STEER_MAG):_SP:RESET"){ + field(OCAL, "A") + field(CALC, "B") +$(IFNOTRECSIM="") field(INPA, "$(STEER_PV):SP CP MS") +$(IFRECSIM="") field(INPA, "$(P)SIM:STEER_$(STEER_MAG) CP MS") + field(OUT, "$(P)STEER_$(STEER_MAG):SP PP") + field(INPB, "$(P)ENABLE:CORR CP MS") + field(DOPT, "Use OCAL") + field(OOPT, "Transition To Zero") +} + +record(ao, "$(P)SIM:STEER_$(STEER_MAG)") +{ + field(SCAN, "Passive") + field(DTYP, "Soft Channel") + field(FLNK, "$(P)STEER_$(STEER_MAG)") +} + +record(stringout, "$(P)SIM:STEER_$(STEER_MAG):UNITS_SET") +{ + field(OUT, "$(P)STEER_$(STEER_MAG).EGU NPP") +} + +record(stringout, "$(P)SIM:STEER_$(STEER_MAG):SP:UNITS_SET") +{ + field(OUT, "$(P)STEER_$(STEER_MAG):SP.EGU NPP") +} \ No newline at end of file diff --git a/BEAMCORR/iocBoot/iocBEAMCORR/Makefile b/BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/Makefile similarity index 100% rename from BEAMCORR/iocBoot/iocBEAMCORR/Makefile rename to BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/Makefile diff --git a/BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/config.xml b/BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/config.xml new file mode 100644 index 000000000..09e86dcab --- /dev/null +++ b/BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/config.xml @@ -0,0 +1,18 @@ + + + + ISIS Muon Beam Correction + + + + + + + + + + + + + + diff --git a/BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/st-common.cmd b/BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/st-common.cmd new file mode 100644 index 000000000..062a15453 --- /dev/null +++ b/BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/st-common.cmd @@ -0,0 +1,43 @@ +epicsEnvSet "DEVICE" "L0" + +##ISIS## Run IOC initialisation +< $(IOCSTARTUP)/init.cmd + +## No need to load a device, this only talks to other iocs + + +## Load record instances + +##ISIS## Load common DB records +< $(IOCSTARTUP)/dbload.cmd + +## Load our record instances +stringiftest("IN:HIFI", "$(MYPVPREFIX)" 5 "IN:HIFI") +stringiftest("", "$(MYPVPREFIX)" 5 "IN:HIFI") +$(IFIN:HIFI) epicsEnvSet "NUM_STEER" "4" +$(IFNOTIN:HIFI) epicsEnvSet "NUM_STEER" "2" +## Un-comment for super MUSR +# epicsEnvSet "NUM_STEER" "6" + +dbLoadRecords("${TOP}/db/beamcorr.db","PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0), NUM_STEER=$(NUM_STEER), HIFI_PV_MAIN=$(HIFI_PV_MAIN=),HIFI_PV_TRANS=$(HIFI_PV_TRANS=),EMU_PV_MAIN=$(EMU_PV_MAIN=),EMU_PV_TRANS=$(EMU_PV_TRANS=),MUSR_PV_MAIN=$(MUSR_PV_MAIN=),MUSR_PV_TRANS=$(MUSR_PV_TRANS=),IFRECSIM=$(IFRECSIM=), IFNOTRECSIM=$(IFNOTRECSIM=)") +dbLoadRecordsLoop("${TOP}/db/coefficients.db","PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0),STEER_MAG=\$(I)", "I", "1", "$(NUM_STEER)") +dbLoadRecords("${TOP}/db/steering.db", "PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0), STEER_MAG=1, STEER_PV=$(STEER_1_PV=) IFRECSIM=$(IFRECSIM=), IFNOTRECSIM=$(IFNOTRECSIM=)") +dbLoadRecords("${TOP}/db/steering.db", "PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0), STEER_MAG=2, STEER_PV=$(STEER_2_PV=) IFRECSIM=$(IFRECSIM=), IFNOTRECSIM=$(IFNOTRECSIM=)") + +stringiftest("2_STEER", "$(NUM_STEER)" 5 "2") +$(IFNOT2_STEER)dbLoadRecords("${TOP}/db/steering.db", "PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0), STEER_MAG=3, STEER_PV=$(STEER_3_PV=) IFRECSIM=$(IFRECSIM=), IFNOTRECSIM=$(IFNOTRECSIM=)") +$(IFNOT2_STEER)dbLoadRecords("${TOP}/db/steering.db", "PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0), STEER_MAG=4, STEER_PV=$(STEER_4_PV=) IFRECSIM=$(IFRECSIM=), IFNOTRECSIM=$(IFNOTRECSIM=)") + +stringiftest("6_STEER", "$(NUM_STEER)" 5 "6") +$(IF6_STEER)dbLoadRecords("${TOP}/db/steering.db", "PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0), STEER_MAG=5, STEER_PV=$(STEER_5_PV=) IFRECSIM=$(IFRECSIM=), IFNOTRECSIM=$(IFNOTRECSIM=)") +$(IF6_STEER)dbLoadRecords("${TOP}/db/steering.db", "PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0), STEER_MAG=6, STEER_PV=$(STEER_6_PV=) IFRECSIM=$(IFRECSIM=), IFNOTRECSIM=$(IFNOTRECSIM=)") + +##ISIS## Stuff that needs to be done after all records are loaded but before iocInit is called +< $(IOCSTARTUP)/preiocinit.cmd + +cd "${TOP}/iocBoot/${IOC}" +iocInit + + +##ISIS## Stuff that needs to be done after iocInit is called e.g. sequence programs +< $(IOCSTARTUP)/postiocinit.cmd diff --git a/BEAMCORR/iocBoot/iocBEAMCORR/st.cmd b/BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/st.cmd similarity index 100% rename from BEAMCORR/iocBoot/iocBEAMCORR/st.cmd rename to BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/st.cmd diff --git a/BEAMCORR/iocBoot/iocBEAMCORR/config.xml b/BEAMCORR/iocBoot/iocBEAMCORR/config.xml deleted file mode 100644 index fb9e3259b..000000000 --- a/BEAMCORR/iocBoot/iocBEAMCORR/config.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - ISIS Muon Beam Correction - - - - - - - - - - - - - - - - - - diff --git a/BEAMCORR/iocBoot/iocBEAMCORR/st-common.cmd b/BEAMCORR/iocBoot/iocBEAMCORR/st-common.cmd deleted file mode 100644 index a05f38fdd..000000000 --- a/BEAMCORR/iocBoot/iocBEAMCORR/st-common.cmd +++ /dev/null @@ -1,28 +0,0 @@ -epicsEnvSet "DEVICE" "L0" - -##ISIS## Run IOC initialisation -< $(IOCSTARTUP)/init.cmd - -## No need to load a device, this only talks to other iocs - - -## Load record instances - -##ISIS## Load common DB records -< $(IOCSTARTUP)/dbload.cmd - -## Load our record instances -dbLoadRecords("${TOP}/db/beamcorr.db","PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0),PORT=$(DEVICE)") -dbLoadRecords("${TOP}/db/coefficients.db","PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0),PORT=$(DEVICE),HIFI_PV_MAIN=$(HIFI_PV_MAIN),HIFI_PV_TRANS=$(HIFI_PV_TRANS),EMU_PV_MAIN=$(EMU_PV_MAIN),EMU_PV_TRANS=$(EMU_PV_TRANS),MUSR_PV_MAIN=$(MUSR_PV_MAIN),MUSR_PV_TRANS=$(MUSR_PV_TRANS),STEER_1_EMU_PV=$(STEER_1_EMU_PV),STEER_2_EMU_PV=$(STEER_2_EMU_PV)") -dbLoadRecords("${TOP}/db/coefficients.db","PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0),PORT=$(DEVICE),STEER_1_HIFI_PV=$(STEER_1_HIFI_PV),HIFI_PV_MAIN=$(HIFI_PV_MAIN),HIFI_PV_TRANS=$(HIFI_PV_TRANS),STEER_2_HIFI_PV=$(STEER_2_HIFI_PV),STEER_3_HIFI_PV=$(STEER_3_HIFI_PV),EMU_PV_MAIN=$(EMU_PV_MAIN),EMU_PV_TRANS=$(EMU_PV_TRANS),STEER_4_HIFI_PV=$(STEER_4_HIFI_PV),MUSR_PV_MAIN=$(MUSR_PV_MAIN),MUSR_PV_TRANS=$(MUSR_PV_TRANS)") -dbLoadRecords("${TOP}/db/coefficients.db","PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0),PORT=$(DEVICE),HIFI_PV_MAIN=$(HIFI_PV_MAIN),HIFI_PV_TRANS=$(HIFI_PV_TRANS),EMU_PV_MAIN=$(EMU_PV_MAIN),EMU_PV_TRANS=$(EMU_PV_TRANS),MUSR_PV_MAIN=$(MUSR_PV_MAIN),MUSR_PV_TRANS=$(MUSR_PV_TRANS),STEER_1_MUSR_PV=$(STEER_1_MUSR_PV),STEER_2_MUSR_PV=$(STEER_2_MUSR_PV)") - -##ISIS## Stuff that needs to be done after all records are loaded but before iocInit is called -< $(IOCSTARTUP)/preiocinit.cmd - -cd "${TOP}/iocBoot/${IOC}" -iocInit - - -##ISIS## Stuff that needs to be done after iocInit is called e.g. sequence programs -< $(IOCSTARTUP)/postiocinit.cmd From 56dd3a0e7c447f3c6dc4530cb75a542276442312 Mon Sep 17 00:00:00 2001 From: Lowri Jenkins Date: Fri, 11 Sep 2026 14:08:45 +0100 Subject: [PATCH 4/8] fix problems --- BEAMCORR/{BEAMCORRApp => BEAMCORR-IOC-01App}/Db/Makefile | 0 .../{BEAMCORRApp => BEAMCORR-IOC-01App}/Db/beamcorr.db | 0 .../Db/coefficients.substitutions | 0 .../Db/coefficients.template | 0 .../{BEAMCORRApp => BEAMCORR-IOC-01App}/Db/steering.db | 0 BEAMCORR/{BEAMCORRApp => BEAMCORR-IOC-01App}/Makefile | 0 .../{BEAMCORRApp => BEAMCORR-IOC-01App}/protocol/Makefile | 0 .../src/BEAMCORR-IOC-01Main.cpp} | 0 BEAMCORR/{BEAMCORRApp => BEAMCORR-IOC-01App}/src/Makefile | 4 ++-- BEAMCORR/{BEAMCORRApp => BEAMCORR-IOC-01App}/src/build.mak | 0 BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/st-common.cmd | 2 -- BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/st.cmd | 7 ++++--- 12 files changed, 6 insertions(+), 7 deletions(-) rename BEAMCORR/{BEAMCORRApp => BEAMCORR-IOC-01App}/Db/Makefile (100%) rename BEAMCORR/{BEAMCORRApp => BEAMCORR-IOC-01App}/Db/beamcorr.db (100%) rename BEAMCORR/{BEAMCORRApp => BEAMCORR-IOC-01App}/Db/coefficients.substitutions (100%) rename BEAMCORR/{BEAMCORRApp => BEAMCORR-IOC-01App}/Db/coefficients.template (100%) rename BEAMCORR/{BEAMCORRApp => BEAMCORR-IOC-01App}/Db/steering.db (100%) rename BEAMCORR/{BEAMCORRApp => BEAMCORR-IOC-01App}/Makefile (100%) rename BEAMCORR/{BEAMCORRApp => BEAMCORR-IOC-01App}/protocol/Makefile (100%) rename BEAMCORR/{BEAMCORRApp/src/BEAMCORRMain.cpp => BEAMCORR-IOC-01App/src/BEAMCORR-IOC-01Main.cpp} (100%) rename BEAMCORR/{BEAMCORRApp => BEAMCORR-IOC-01App}/src/Makefile (87%) rename BEAMCORR/{BEAMCORRApp => BEAMCORR-IOC-01App}/src/build.mak (100%) diff --git a/BEAMCORR/BEAMCORRApp/Db/Makefile b/BEAMCORR/BEAMCORR-IOC-01App/Db/Makefile similarity index 100% rename from BEAMCORR/BEAMCORRApp/Db/Makefile rename to BEAMCORR/BEAMCORR-IOC-01App/Db/Makefile diff --git a/BEAMCORR/BEAMCORRApp/Db/beamcorr.db b/BEAMCORR/BEAMCORR-IOC-01App/Db/beamcorr.db similarity index 100% rename from BEAMCORR/BEAMCORRApp/Db/beamcorr.db rename to BEAMCORR/BEAMCORR-IOC-01App/Db/beamcorr.db diff --git a/BEAMCORR/BEAMCORRApp/Db/coefficients.substitutions b/BEAMCORR/BEAMCORR-IOC-01App/Db/coefficients.substitutions similarity index 100% rename from BEAMCORR/BEAMCORRApp/Db/coefficients.substitutions rename to BEAMCORR/BEAMCORR-IOC-01App/Db/coefficients.substitutions diff --git a/BEAMCORR/BEAMCORRApp/Db/coefficients.template b/BEAMCORR/BEAMCORR-IOC-01App/Db/coefficients.template similarity index 100% rename from BEAMCORR/BEAMCORRApp/Db/coefficients.template rename to BEAMCORR/BEAMCORR-IOC-01App/Db/coefficients.template diff --git a/BEAMCORR/BEAMCORRApp/Db/steering.db b/BEAMCORR/BEAMCORR-IOC-01App/Db/steering.db similarity index 100% rename from BEAMCORR/BEAMCORRApp/Db/steering.db rename to BEAMCORR/BEAMCORR-IOC-01App/Db/steering.db diff --git a/BEAMCORR/BEAMCORRApp/Makefile b/BEAMCORR/BEAMCORR-IOC-01App/Makefile similarity index 100% rename from BEAMCORR/BEAMCORRApp/Makefile rename to BEAMCORR/BEAMCORR-IOC-01App/Makefile diff --git a/BEAMCORR/BEAMCORRApp/protocol/Makefile b/BEAMCORR/BEAMCORR-IOC-01App/protocol/Makefile similarity index 100% rename from BEAMCORR/BEAMCORRApp/protocol/Makefile rename to BEAMCORR/BEAMCORR-IOC-01App/protocol/Makefile diff --git a/BEAMCORR/BEAMCORRApp/src/BEAMCORRMain.cpp b/BEAMCORR/BEAMCORR-IOC-01App/src/BEAMCORR-IOC-01Main.cpp similarity index 100% rename from BEAMCORR/BEAMCORRApp/src/BEAMCORRMain.cpp rename to BEAMCORR/BEAMCORR-IOC-01App/src/BEAMCORR-IOC-01Main.cpp diff --git a/BEAMCORR/BEAMCORRApp/src/Makefile b/BEAMCORR/BEAMCORR-IOC-01App/src/Makefile similarity index 87% rename from BEAMCORR/BEAMCORRApp/src/Makefile rename to BEAMCORR/BEAMCORR-IOC-01App/src/Makefile index 348e5628d..19e11e053 100644 --- a/BEAMCORR/BEAMCORRApp/src/Makefile +++ b/BEAMCORR/BEAMCORR-IOC-01App/src/Makefile @@ -6,8 +6,8 @@ TOP=../.. # This file should do very little - it's purpose is to set the APPNAME and then load build.mak # this definition is used in build.mak -APPNAME=BEAMCORR +APPNAME=BEAMCORR-IOC-01 # If we are ###-IOC-01 leave this as is, if we are ###-IOC-02 or higher change to ###-IOC-01 and delete build.mak from this directory # there should only be a single build.mak for all IOCs of a given family and it is located in the ###-IOC-01 directory -include $(TOP)/BEAMCORRApp/src/build.mak +include $(TOP)/BEAMCORR-IOC-01App/src/build.mak diff --git a/BEAMCORR/BEAMCORRApp/src/build.mak b/BEAMCORR/BEAMCORR-IOC-01App/src/build.mak similarity index 100% rename from BEAMCORR/BEAMCORRApp/src/build.mak rename to BEAMCORR/BEAMCORR-IOC-01App/src/build.mak diff --git a/BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/st-common.cmd b/BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/st-common.cmd index 062a15453..636b35490 100644 --- a/BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/st-common.cmd +++ b/BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/st-common.cmd @@ -1,5 +1,3 @@ -epicsEnvSet "DEVICE" "L0" - ##ISIS## Run IOC initialisation < $(IOCSTARTUP)/init.cmd diff --git a/BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/st.cmd b/BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/st.cmd index 32d7374b1..3f99852b9 100644 --- a/BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/st.cmd +++ b/BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/st.cmd @@ -11,13 +11,14 @@ errlogInit2(65536, 256) < envPaths +epicsEnvSet "IOCNAME" "BEAMCORR_01" cd "${TOP}" ## Register all support components -dbLoadDatabase "dbd/BEAMCORR.dbd" -BEAMCORR_registerRecordDeviceDriver pdbbase +dbLoadDatabase "dbd/BEAMCORR-IOC-01.dbd" +BEAMCORR-IOC-01_registerRecordDeviceDriver pdbbase ## calling common command file in ioc 01 boot dir -< ${TOP}/iocBoot/iocBEAMCORR/st-common.cmd +< ${TOP}/iocBoot/iocBEAMCORR-IOC-01/st-common.cmd From 9ac8a030b1a79dbd1e7e72f2875bb84fba87c77f Mon Sep 17 00:00:00 2001 From: Lowri Jenkins Date: Wed, 16 Sep 2026 11:45:30 +0100 Subject: [PATCH 5/8] Fix remaining issues and add x and y transverse field to hifi --- BEAMCORR/BEAMCORR-IOC-01App/Db/beamcorr.db | 48 +++++++++++++++---- .../Db/coefficients.substitutions | 12 +++-- .../Db/coefficients.template | 28 +++-------- BEAMCORR/BEAMCORR-IOC-01App/Db/steering.db | 14 ++++-- .../iocBoot/iocBEAMCORR-IOC-01/config.xml | 15 +++--- .../iocBoot/iocBEAMCORR-IOC-01/st-common.cmd | 19 ++++---- BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/st.cmd | 2 +- Makefile | 2 +- 8 files changed, 82 insertions(+), 58 deletions(-) diff --git a/BEAMCORR/BEAMCORR-IOC-01App/Db/beamcorr.db b/BEAMCORR/BEAMCORR-IOC-01App/Db/beamcorr.db index 0e90a5b3c..4b5fcdb9b 100644 --- a/BEAMCORR/BEAMCORR-IOC-01App/Db/beamcorr.db +++ b/BEAMCORR/BEAMCORR-IOC-01App/Db/beamcorr.db @@ -26,6 +26,7 @@ record(bo, "$(P)ENABLE:CORR") field(DESC, "Enable Beam Corrections") field(ZNAM, "DISABLED") field(ONAM, "ENABLED") + field(VAL, "$(ENABLED_DEFAULT)") } record(ao, "$(P)NUM:STEER_MAG"){ @@ -57,18 +58,34 @@ record(stringout, "$(P)HIFI_PV:MAIN:UNITS_SET") field(SIML, "$(P)SIM") } -record(ai, "$(P)HIFI_PV:TRANS"){ - field(INP, "$(HIFI_PV_TRANS) CP MS") - field(SIOL, "$(P)SIM:HIFI_PV:TRANS") +record(ai, "$(P)HIFI_PV:TRANS_X"){ + field(INP, "$(HIFI_PV_TRANS_X) CP MS") + field(SIOL, "$(P)SIM:HIFI_PV:TRANS_X") field(SIML, "$(P)SIM") } -record(stringout, "$(P)HIFI_PV:TRANS:UNITS_SET") +record(stringout, "$(P)HIFI_PV:TRANS_X:UNITS_SET") { field(DESC, "Push units from one pv to another") - field(DOL, "$(HIFI_PV_TRANS).EGU CP") + field(DOL, "$(HIFI_PV_TRANS_X).EGU CP") field(OMSL, "closed_loop") - field(OUT, "$(P)HIFI_PV:TRANS.EGU NPP") + field(OUT, "$(P)HIFI_PV:TRANS_X.EGU NPP") + field(SIOL, "$(P)SIM:HIFI_PV:TRANS_X:UNITS_SET PP") + field(SIML, "$(P)SIM") +} + +record(ai, "$(P)HIFI_PV:TRANS_Y"){ + field(INP, "$(HIFI_PV_TRANS_Y) CP MS") + field(SIOL, "$(P)SIM:HIFI_PV:TRANS_Y") + field(SIML, "$(P)SIM") +} + +record(stringout, "$(P)HIFI_PV:TRANS_Y:UNITS_SET") +{ + field(DESC, "Push units from one pv to another") + field(DOL, "$(HIFI_PV_TRANS_Y).EGU CP") + field(OMSL, "closed_loop") + field(OUT, "$(P)HIFI_PV:TRANS_Y.EGU NPP") field(SIOL, "$(P)SIM:HIFI_PV:TRANS:UNITS_SET PP") field(SIML, "$(P)SIM") } @@ -180,16 +197,27 @@ record(stringout, "$(P)SIM:HIFI_PV:MAIN:UNITS_SET") field(OUT, "$(P)HIFI_PV:MAIN.EGU NPP") } -record(ai, "$(P)SIM:HIFI_PV:TRANS"){ - field(FLNK, "$(P)HIFI_PV:TRANS") +record(ai, "$(P)SIM:HIFI_PV:TRANS_X"){ + field(FLNK, "$(P)HIFI_PV:TRANS_X") +} + +record(stringout, "$(P)SIM:HIFI_PV:TRANS_X:UNITS_SET") +{ + field(DESC, "Push units from one pv to another") + field(OUT, "$(P)HIFI_PV:TRANS_X.EGU NPP") +} + +record(ai, "$(P)SIM:HIFI_PV:TRANS_Y"){ + field(FLNK, "$(P)HIFI_PV:TRANS_Y") } -record(stringout, "$(P)SIM:HIFI_PV:TRANS:UNITS_SET") +record(stringout, "$(P)SIM:HIFI_PV:TRANS_Y:UNITS_SET") { field(DESC, "Push units from one pv to another") - field(OUT, "$(P)HIFI_PV:TRANS.EGU NPP") + field(OUT, "$(P)HIFI_PV:TRANS_Y.EGU NPP") } + record(ai, "$(P)SIM:EMU_PV:MAIN"){ field(FLNK, "$(P)EMU_PV:MAIN") } diff --git a/BEAMCORR/BEAMCORR-IOC-01App/Db/coefficients.substitutions b/BEAMCORR/BEAMCORR-IOC-01App/Db/coefficients.substitutions index aaccd6eee..340782390 100644 --- a/BEAMCORR/BEAMCORR-IOC-01App/Db/coefficients.substitutions +++ b/BEAMCORR/BEAMCORR-IOC-01App/Db/coefficients.substitutions @@ -1,6 +1,10 @@ file coefficients.template { - pattern { INT_MAG, INP1, INP2} - { "HIFI", "A", "B" } - { "EMU", "C", "D" } - { "MUSR", "E", "F" } + pattern { INT_MAG, INP, DIRECTION} + { "HIFI", "A", "MAIN"} + { "HIFI", "B", "TRANS_X" } + { "HIFI", "C", "TRANS_Y"} + { "EMU", "D", "MAIN"} + { "EMU", "E", "TRANS" } + { "MUSR", "F", "MAIN"} + { "MUSR", "G" "TRANS" } } diff --git a/BEAMCORR/BEAMCORR-IOC-01App/Db/coefficients.template b/BEAMCORR/BEAMCORR-IOC-01App/Db/coefficients.template index e3c30f214..1dfcd5d23 100644 --- a/BEAMCORR/BEAMCORR-IOC-01App/Db/coefficients.template +++ b/BEAMCORR/BEAMCORR-IOC-01App/Db/coefficients.template @@ -1,16 +1,9 @@ -record(ao, "$(P)STEER_$(STEER_MAG):$(INT_MAG)_MAIN:COEFF") +record(ao, "$(P)STEER_$(STEER_MAG):$(INT_MAG)_$(DIRECTION):COEFF") { - field(DESC, "Coefficient for steering $(STEER_MAG) $(INT_MAG)_MAIN") + field(DESC, "Coefficient for steering $(STEER_MAG) $(INT_MAG)_$(DIRECTION)") field(PREC, "3") } -record(ao, "$(P)STEER_$(STEER_MAG):$(INT_MAG)_TRANS:COEFF") -{ - field(DESC, "Coefficient for steering $(STEER_MAG) $(INT_MAG)_TRANS") - field(PREC, "3") -} - - # Equation for a single steering magnet # bx = ax + (cx1 * m1 + cx2 * m2 +... + cxn * mn) # where b = The output steering value @@ -19,21 +12,14 @@ record(ao, "$(P)STEER_$(STEER_MAG):$(INT_MAG)_TRANS:COEFF") # cx1 through cxn = the coefficients of the interfering magnets to steering magnet x (set by scientists) # m1 through mn = the current value of the interferring magnets -record(calc, $(P)STEERING_$(STEER_MAG):MAIN_$(INT_MAG)){ - field(CALC, "A*B") - field(INPA, "$(P)STEER_$(STEER_MAG):$(INT_MAG)_MAIN:COEFF CP MS") - field(INPB, "$(P)$(INT_MAG)_PV:MAIN CP MS") -} - -record(calc, $(P)STEERING_$(STEER_MAG):TRANS_$(INT_MAG)){ +record(calc, $(P)STEERING_$(STEER_MAG):$(DIRECTION)_$(INT_MAG)){ field(CALC, "A*B") - field(INPA, "$(P)STEER_$(STEER_MAG):$(INT_MAG)_TRANS:COEFF CP MS") - field(INPB, "$(P)$(INT_MAG)_PV:TRANS CP MS") + field(INPA, "$(P)STEER_$(STEER_MAG):$(INT_MAG)_$(DIRECTION):COEFF CP MS") + field(INPB, "$(P)$(INT_MAG)_PV:$(DIRECTION) CP MS") } record(calc, "$(P)STEERING_$(STEER_MAG):OFFSET"){ - field(CALC, "A + B + C + D + E + F") + field(CALC, "A + B + C + D + E + F + G") field(PREC, "3") - field(INP$(INP1), "$(P)STEERING_$(STEER_MAG):MAIN_$(INT_MAG) CP MS") - field(INP$(INP2), "$(P)STEERING_$(STEER_MAG):TRANS_$(INT_MAG) CP MS") + field(INP$(INP), "$(P)STEERING_$(STEER_MAG):$(DIRECTION)_$(INT_MAG) CP MS") } diff --git a/BEAMCORR/BEAMCORR-IOC-01App/Db/steering.db b/BEAMCORR/BEAMCORR-IOC-01App/Db/steering.db index 0d3a7855d..0cc140a73 100644 --- a/BEAMCORR/BEAMCORR-IOC-01App/Db/steering.db +++ b/BEAMCORR/BEAMCORR-IOC-01App/Db/steering.db @@ -21,6 +21,12 @@ record(ao, "$(P)STEER_$(STEER_MAG):SP"){ field(PREC, "3") } +record(ao, "$(P)STEER_$(STEER_MAG):OUT:_SP"){ + field(DESC, "Setpoint for steer magnet $(STEER_MAG)") + field(PREC, "3") + field(OUT, "$(P)SIM:STEER_$(STEER_MAG) PP") +} + record(stringout, "$(P)STEER_$(STEER_MAG):SP:UNITS_SET") { field(DESC, "Push units to the $(STEER_MAG) Setpoint") @@ -35,7 +41,7 @@ record(calcout, "$(P)STEER_$(STEER_MAG):DISABLED:SP"){ field(OCAL, "A") field(CALC, "B") $(IFNOTRECSIM="") field(OUT, "$(STEER_PV):SP PP") -$(IFRECSIM="") field(OUT, "$(P)SIM:STEER_$(STEER_MAG) PP") +$(IFRECSIM="") field(OUT, "$(P)STEER_$(STEER_MAG):OUT:_SP PP") field(INPA, "$(P)STEER_$(STEER_MAG):SP CP MS") field(INPB, "$(P)ENABLE:CORR CP MS") field(DOPT, "Use OCAL") @@ -45,10 +51,10 @@ $(IFRECSIM="") field(OUT, "$(P)SIM:STEER_$(STEER_MAG) PP") record(calcout, "$(P)STEER_$(STEER_MAG):_SP"){ field(OCAL, "A+B") field(CALC, "C") -$(IFNOTRECSIM="") field(OUT, "$(STEER_PV):SP PP") -$(IFRECSIM="") field(OUT, "$(P)SIM:STEER_$(STEER_MAG) PP") +$(IFNOTRECSIM) field(OUT, "$(STEER_PV):SP PP") +$(IFRECSIM) field(OUT, "$(P)STEER_$(STEER_MAG):OUT:_SP PP") field(INPA, "$(P)STEER_$(STEER_MAG):SP CP MS") - field(INPB, "$(P)STEERING_1:OFFSET CP MS") + field(INPB, "$(P)STEERING_$(STEER_MAG):OFFSET CP MS") field(INPC, "$(P)ENABLE:CORR") field(DOPT, "Use OCAL") field(OOPT, "When Non-zero") diff --git a/BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/config.xml b/BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/config.xml index 09e86dcab..612763e84 100644 --- a/BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/config.xml +++ b/BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/config.xml @@ -3,16 +3,19 @@ ISIS Muon Beam Correction - - - - - - + + + + + + + + + diff --git a/BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/st-common.cmd b/BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/st-common.cmd index 636b35490..e9a2ac26b 100644 --- a/BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/st-common.cmd +++ b/BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/st-common.cmd @@ -12,23 +12,20 @@ ## Load our record instances stringiftest("IN:HIFI", "$(MYPVPREFIX)" 5 "IN:HIFI") stringiftest("", "$(MYPVPREFIX)" 5 "IN:HIFI") -$(IFIN:HIFI) epicsEnvSet "NUM_STEER" "4" -$(IFNOTIN:HIFI) epicsEnvSet "NUM_STEER" "2" -## Un-comment for super MUSR -# epicsEnvSet "NUM_STEER" "6" -dbLoadRecords("${TOP}/db/beamcorr.db","PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0), NUM_STEER=$(NUM_STEER), HIFI_PV_MAIN=$(HIFI_PV_MAIN=),HIFI_PV_TRANS=$(HIFI_PV_TRANS=),EMU_PV_MAIN=$(EMU_PV_MAIN=),EMU_PV_TRANS=$(EMU_PV_TRANS=),MUSR_PV_MAIN=$(MUSR_PV_MAIN=),MUSR_PV_TRANS=$(MUSR_PV_TRANS=),IFRECSIM=$(IFRECSIM=), IFNOTRECSIM=$(IFNOTRECSIM=)") + +dbLoadRecords("${TOP}/db/beamcorr.db","PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0), NUM_STEER=$(NUM_STEER), HIFI_PV_MAIN=$(HIFI_PV_MAIN=),HIFI_PV_TRANS_X=$(HIFI_PV_TRANS_X=),HIFI_PV_TRANS_Y=$(HIFI_PV_TRANS_Y=),EMU_PV_MAIN=$(EMU_PV_MAIN=),EMU_PV_TRANS=$(EMU_PV_TRANS=),MUSR_PV_MAIN=$(MUSR_PV_MAIN=),MUSR_PV_TRANS=$(MUSR_PV_TRANS=),IFRECSIM=$(IFRECSIM=), IFNOTRECSIM=$(IFNOTRECSIM=)") dbLoadRecordsLoop("${TOP}/db/coefficients.db","PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0),STEER_MAG=\$(I)", "I", "1", "$(NUM_STEER)") -dbLoadRecords("${TOP}/db/steering.db", "PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0), STEER_MAG=1, STEER_PV=$(STEER_1_PV=) IFRECSIM=$(IFRECSIM=), IFNOTRECSIM=$(IFNOTRECSIM=)") -dbLoadRecords("${TOP}/db/steering.db", "PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0), STEER_MAG=2, STEER_PV=$(STEER_2_PV=) IFRECSIM=$(IFRECSIM=), IFNOTRECSIM=$(IFNOTRECSIM=)") +dbLoadRecords("${TOP}/db/steering.db", "PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0), STEER_MAG=1, STEER_PV=$(STEER_1_PV=), IFRECSIM=$(IFRECSIM), IFNOTRECSIM=$(IFNOTRECSIM)") +dbLoadRecords("${TOP}/db/steering.db", "PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0), STEER_MAG=2, STEER_PV=$(STEER_2_PV=), IFRECSIM=$(IFRECSIM=), IFNOTRECSIM=$(IFNOTRECSIM=)") stringiftest("2_STEER", "$(NUM_STEER)" 5 "2") -$(IFNOT2_STEER)dbLoadRecords("${TOP}/db/steering.db", "PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0), STEER_MAG=3, STEER_PV=$(STEER_3_PV=) IFRECSIM=$(IFRECSIM=), IFNOTRECSIM=$(IFNOTRECSIM=)") -$(IFNOT2_STEER)dbLoadRecords("${TOP}/db/steering.db", "PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0), STEER_MAG=4, STEER_PV=$(STEER_4_PV=) IFRECSIM=$(IFRECSIM=), IFNOTRECSIM=$(IFNOTRECSIM=)") +$(IFNOT2_STEER)dbLoadRecords("${TOP}/db/steering.db", "PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0), STEER_MAG=3, STEER_PV=$(STEER_3_PV=), IFRECSIM=$(IFRECSIM=), IFNOTRECSIM=$(IFNOTRECSIM=)") +$(IFNOT2_STEER)dbLoadRecords("${TOP}/db/steering.db", "PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0), STEER_MAG=4, STEER_PV=$(STEER_4_PV=), IFRECSIM=$(IFRECSIM=), IFNOTRECSIM=$(IFNOTRECSIM=)") stringiftest("6_STEER", "$(NUM_STEER)" 5 "6") -$(IF6_STEER)dbLoadRecords("${TOP}/db/steering.db", "PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0), STEER_MAG=5, STEER_PV=$(STEER_5_PV=) IFRECSIM=$(IFRECSIM=), IFNOTRECSIM=$(IFNOTRECSIM=)") -$(IF6_STEER)dbLoadRecords("${TOP}/db/steering.db", "PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0), STEER_MAG=6, STEER_PV=$(STEER_6_PV=) IFRECSIM=$(IFRECSIM=), IFNOTRECSIM=$(IFNOTRECSIM=)") +$(IF6_STEER)dbLoadRecords("${TOP}/db/steering.db", "PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0), STEER_MAG=5, STEER_PV=$(STEER_5_PV=), IFRECSIM=$(IFRECSIM=), IFNOTRECSIM=$(IFNOTRECSIM=)") +$(IF6_STEER)dbLoadRecords("${TOP}/db/steering.db", "PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0), STEER_MAG=6, STEER_PV=$(STEER_6_PV=), IFRECSIM=$(IFRECSIM=), IFNOTRECSIM=$(IFNOTRECSIM=)") ##ISIS## Stuff that needs to be done after all records are loaded but before iocInit is called < $(IOCSTARTUP)/preiocinit.cmd diff --git a/BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/st.cmd b/BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/st.cmd index 3f99852b9..9a4bea22d 100644 --- a/BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/st.cmd +++ b/BEAMCORR/iocBoot/iocBEAMCORR-IOC-01/st.cmd @@ -17,7 +17,7 @@ cd "${TOP}" ## Register all support components dbLoadDatabase "dbd/BEAMCORR-IOC-01.dbd" -BEAMCORR-IOC-01_registerRecordDeviceDriver pdbbase +BEAMCORR_IOC_01_registerRecordDeviceDriver pdbbase ## calling common command file in ioc 01 boot dir < ${TOP}/iocBoot/iocBEAMCORR-IOC-01/st-common.cmd diff --git a/Makefile b/Makefile index 45aff5711..8c1d6ded8 100644 --- a/Makefile +++ b/Makefile @@ -95,7 +95,7 @@ IOCDIRS += AMBRHEAT IOCDIRS += OPCUA IOCDIRS += ESP300 IOCDIRS += QNW -IOCDIRS += beamcorr +IOCDIRS += BEAMCORR ## check on missing directories From 73c39c2eb519e812b9fc8aaf066eeb6c7ba67f99 Mon Sep 17 00:00:00 2001 From: Lowri Jenkins Date: Wed, 16 Sep 2026 13:04:00 +0100 Subject: [PATCH 6/8] Add essential fields --- BEAMCORR/BEAMCORR-IOC-01App/Db/beamcorr.db | 38 ++++++++++++++++--- .../Db/coefficients.template | 5 +++ BEAMCORR/BEAMCORR-IOC-01App/Db/steering.db | 9 +++++ 3 files changed, 46 insertions(+), 6 deletions(-) diff --git a/BEAMCORR/BEAMCORR-IOC-01App/Db/beamcorr.db b/BEAMCORR/BEAMCORR-IOC-01App/Db/beamcorr.db index 4b5fcdb9b..8a4b08a92 100644 --- a/BEAMCORR/BEAMCORR-IOC-01App/Db/beamcorr.db +++ b/BEAMCORR/BEAMCORR-IOC-01App/Db/beamcorr.db @@ -17,6 +17,7 @@ record(bo, "$(P)DISABLE") field(OMSL, "supervisory") field(ZNAM, "COMMS ENABLED") field(ONAM, "COMMS DISABLED") + } ### Enable Beam Corrections @@ -27,11 +28,14 @@ record(bo, "$(P)ENABLE:CORR") field(ZNAM, "DISABLED") field(ONAM, "ENABLED") field(VAL, "$(ENABLED_DEFAULT)") + info(INTEREST, "MEDIUM") + info(alarm, "BEAMCORR") } record(ao, "$(P)NUM:STEER_MAG"){ field(DESC, "Number of Steering Magnets") field(VAL, "$(NUM_STEER)") + info(INTEREST, "MEDIUM") } # Equation for a single steering magnet offset @@ -43,9 +47,11 @@ record(ao, "$(P)NUM:STEER_MAG"){ # m1 through mn = the current value of the interferring magnets record(ai, "$(P)HIFI_PV:MAIN"){ + field(DESC, "Readback for main HIFI magnet") field(INP, "$(HIFI_PV_MAIN) CP MS") field(SIOL, "$(P)SIM:HIFI_PV:MAIN") field(SIML, "$(P)SIM") + field(PREC, "3") } record(stringout, "$(P)HIFI_PV:MAIN:UNITS_SET") @@ -59,9 +65,11 @@ record(stringout, "$(P)HIFI_PV:MAIN:UNITS_SET") } record(ai, "$(P)HIFI_PV:TRANS_X"){ + field(DESC, "Readback for x transverse HIFI magnet") field(INP, "$(HIFI_PV_TRANS_X) CP MS") field(SIOL, "$(P)SIM:HIFI_PV:TRANS_X") field(SIML, "$(P)SIM") + field(PREC, "3") } record(stringout, "$(P)HIFI_PV:TRANS_X:UNITS_SET") @@ -75,9 +83,11 @@ record(stringout, "$(P)HIFI_PV:TRANS_X:UNITS_SET") } record(ai, "$(P)HIFI_PV:TRANS_Y"){ + field(DESC, "Readback for y transverse HIFI magnet") field(INP, "$(HIFI_PV_TRANS_Y) CP MS") field(SIOL, "$(P)SIM:HIFI_PV:TRANS_Y") field(SIML, "$(P)SIM") + field(PREC, "3") } record(stringout, "$(P)HIFI_PV:TRANS_Y:UNITS_SET") @@ -91,9 +101,11 @@ record(stringout, "$(P)HIFI_PV:TRANS_Y:UNITS_SET") } record(ai, "$(P)EMU_PV:MAIN"){ + field(DESC, "Readback for main EMU magnet") field(INP, "$(EMU_PV_MAIN) CP MS") field(SIOL, "$(P)SIM:EMU_PV:MAIN") field(SIML, "$(P)SIM") + field(PREC, "3") } record(stringout, "$(P)EMU_PV:MAIN:UNITS_SET") @@ -107,9 +119,11 @@ record(stringout, "$(P)EMU_PV:MAIN:UNITS_SET") } record(ai, "$(P)EMU_PV:TRANS"){ + field(DESC, "Readback for transverse EMU magnet") field(INP, "$(EMU_PV_TRANS) CP MS") field(SIOL, "$(P)SIM:EMU_PV:TRANS") field(SIML, "$(P)SIM") + field(PREC, "3") } record(stringout, "$(P)EMU_PV:TRANS:UNITS_SET") @@ -125,9 +139,11 @@ record(stringout, "$(P)EMU_PV:TRANS:UNITS_SET") ### When MUSR replaces direction with second set of magnets, uncomment input field and remove MUSR ### Rotation calcouts. record(ai, "$(P)MUSR_PV:MAIN"){ + field(DESC, "Readback for main MUSR magnet") # field(INP, "$(MUSR_PV_MAIN) CP MS") # field(SIOL, "$(P)SIM:MUSR_PV:MAIN") # field(SIML, "$(P)SIM") +# field(PREC, "3") } record(stringout, "$(P)MUSR_PV:MAIN:UNITS_SET") @@ -143,9 +159,11 @@ record(stringout, "$(P)MUSR_PV:MAIN:UNITS_SET") ### When MUSR replaces direction with second set of magnets, uncomment input field and remove MUSR ### Rotation calcouts. record(ai, "$(P)MUSR_PV:TRANS"){ -# field(INP, "$(MUSR_PV_TRANS) CP MS") + field(DESC, "Readback for transverse MUSR magnet") +# field(INP, "$(MUSR_PV_TRANS) CP MS") # field(SIOL, "$(P)SIM:MUSR_PV:TRANS") # field(SIML, "$(P)SIM") +# field(PREC, "3") } record(stringout, "$(P)MUSR_PV:TRANS:UNITS_SET") @@ -188,6 +206,7 @@ record(mbbo, "$(P)SIM:MUSR_ROTATION"){ } record(ai, "$(P)SIM:HIFI_PV:MAIN"){ + field(DESC, "SIM Hifi main magnet") field(FLNK, "$(P)HIFI_PV:MAIN") } @@ -198,6 +217,7 @@ record(stringout, "$(P)SIM:HIFI_PV:MAIN:UNITS_SET") } record(ai, "$(P)SIM:HIFI_PV:TRANS_X"){ + field(DESC, "SIM Hifi trans X magnet") field(FLNK, "$(P)HIFI_PV:TRANS_X") } @@ -208,6 +228,7 @@ record(stringout, "$(P)SIM:HIFI_PV:TRANS_X:UNITS_SET") } record(ai, "$(P)SIM:HIFI_PV:TRANS_Y"){ + field(DESC, "SIM Hifi trans Y magnet") field(FLNK, "$(P)HIFI_PV:TRANS_Y") } @@ -219,6 +240,7 @@ record(stringout, "$(P)SIM:HIFI_PV:TRANS_Y:UNITS_SET") record(ai, "$(P)SIM:EMU_PV:MAIN"){ + field(DESC, "SIM Emu main magnet") field(FLNK, "$(P)EMU_PV:MAIN") } @@ -229,6 +251,7 @@ record(stringout, "$(P)SIM:EMU_PV:MAIN:UNITS_SET") } record(ai, "$(P)SIM:EMU_PV:TRANS"){ + field(DESC, "SIM Emu transverse magnet") field(FLNK, "$(P)EMU_PV:TRANS") } @@ -239,6 +262,7 @@ record(stringout, "$(P)SIM:EMU_PV:TRANS:UNITS_SET") } record(ai, "$(P)SIM:MUSR_PV:MAIN"){ + field(DESC, "SIM MUSR main magnet") field(FLNK, "$(P)MUSR_PV:MAIN") } @@ -248,12 +272,14 @@ record(stringout, "$(P)SIM:MUSR_PV:MAIN:UNITS_SET") field(OUT, "$(P)MUSR_PV:MAIN.EGU NPP") } +# Uncomment for super musr #record(ai, "$(P)SIM:MUSR_PV:TRANS"){ +# field(DESC, "SIM MUSR transverse magnet") # field(FLNK, "$(P)MUSR_PV:TRANS") #} -record(stringout, "$(P)SIM:MUSR_PV:TRANS:UNITS_SET") -{ - field(DESC, "Push units from one pv to another") - field(OUT, "$(P)MUSR_PV:TRANS.EGU NPP") -} \ No newline at end of file +#record(stringout, "$(P)SIM:MUSR_PV:TRANS:UNITS_SET") +#{ +# field(DESC, "Push units from one pv to another") +# field(OUT, "$(P)MUSR_PV:TRANS.EGU NPP") +#} \ No newline at end of file diff --git a/BEAMCORR/BEAMCORR-IOC-01App/Db/coefficients.template b/BEAMCORR/BEAMCORR-IOC-01App/Db/coefficients.template index 1dfcd5d23..9be736bea 100644 --- a/BEAMCORR/BEAMCORR-IOC-01App/Db/coefficients.template +++ b/BEAMCORR/BEAMCORR-IOC-01App/Db/coefficients.template @@ -2,6 +2,8 @@ record(ao, "$(P)STEER_$(STEER_MAG):$(INT_MAG)_$(DIRECTION):COEFF") { field(DESC, "Coefficient for steering $(STEER_MAG) $(INT_MAG)_$(DIRECTION)") field(PREC, "3") + info(autosaveFields, "VAL") + info(INTEREST, "LOW") } # Equation for a single steering magnet @@ -13,13 +15,16 @@ record(ao, "$(P)STEER_$(STEER_MAG):$(INT_MAG)_$(DIRECTION):COEFF") # m1 through mn = the current value of the interferring magnets record(calc, $(P)STEERING_$(STEER_MAG):$(DIRECTION)_$(INT_MAG)){ + field(DESC, "$(INT_MAG) $(DIRECTION) multiplied by coefficient for Steer $(STEER_MAG)") field(CALC, "A*B") field(INPA, "$(P)STEER_$(STEER_MAG):$(INT_MAG)_$(DIRECTION):COEFF CP MS") field(INPB, "$(P)$(INT_MAG)_PV:$(DIRECTION) CP MS") } record(calc, "$(P)STEERING_$(STEER_MAG):OFFSET"){ + field(DESC, "Offset for steer magnet $(STEER_MAG)") field(CALC, "A + B + C + D + E + F + G") field(PREC, "3") field(INP$(INP), "$(P)STEERING_$(STEER_MAG):$(DIRECTION)_$(INT_MAG) CP MS") + info(INTEREST, "LOW") } diff --git a/BEAMCORR/BEAMCORR-IOC-01App/Db/steering.db b/BEAMCORR/BEAMCORR-IOC-01App/Db/steering.db index 0cc140a73..57c4ac873 100644 --- a/BEAMCORR/BEAMCORR-IOC-01App/Db/steering.db +++ b/BEAMCORR/BEAMCORR-IOC-01App/Db/steering.db @@ -19,12 +19,15 @@ record(stringout, "$(P)STEER_$(STEER_MAG):UNITS_SET") record(ao, "$(P)STEER_$(STEER_MAG):SP"){ field(DESC, "Setpoint for steer magnet $(STEER_MAG)") field(PREC, "3") + info(INTEREST, "HIGH") + field(UDFS, "NO_ALARM") } record(ao, "$(P)STEER_$(STEER_MAG):OUT:_SP"){ field(DESC, "Setpoint for steer magnet $(STEER_MAG)") field(PREC, "3") field(OUT, "$(P)SIM:STEER_$(STEER_MAG) PP") + field(UDFS, "NO_ALARM") } record(stringout, "$(P)STEER_$(STEER_MAG):SP:UNITS_SET") @@ -38,6 +41,7 @@ record(stringout, "$(P)STEER_$(STEER_MAG):SP:UNITS_SET") } record(calcout, "$(P)STEER_$(STEER_MAG):DISABLED:SP"){ + field(DESC, "Calc to forward Steering magnet while corrections disabled") field(OCAL, "A") field(CALC, "B") $(IFNOTRECSIM="") field(OUT, "$(STEER_PV):SP PP") @@ -49,6 +53,7 @@ $(IFRECSIM="") field(OUT, "$(P)STEER_$(STEER_MAG):OUT:_SP PP") } record(calcout, "$(P)STEER_$(STEER_MAG):_SP"){ + field(DESC, "Calc to determine Steering magnet while corrections enabled") field(OCAL, "A+B") field(CALC, "C") $(IFNOTRECSIM) field(OUT, "$(STEER_PV):SP PP") @@ -61,6 +66,7 @@ $(IFRECSIM) field(OUT, "$(P)STEER_$(STEER_MAG):OUT:_SP PP") } record(calcout, "$(P)STEER_$(STEER_MAG):_SP:RESET"){ + field(DESC, "Calc to reset setpoint to current value when disabling corrections") field(OCAL, "A") field(CALC, "B") $(IFNOTRECSIM="") field(INPA, "$(STEER_PV):SP CP MS") @@ -73,6 +79,7 @@ $(IFRECSIM="") field(INPA, "$(P)SIM:STEER_$(STEER_MAG) CP MS") record(ao, "$(P)SIM:STEER_$(STEER_MAG)") { + field(DESC, "SIM Steering magnet") field(SCAN, "Passive") field(DTYP, "Soft Channel") field(FLNK, "$(P)STEER_$(STEER_MAG)") @@ -80,10 +87,12 @@ record(ao, "$(P)SIM:STEER_$(STEER_MAG)") record(stringout, "$(P)SIM:STEER_$(STEER_MAG):UNITS_SET") { + field(DESC, "SIM Steering magnet Unit setter") field(OUT, "$(P)STEER_$(STEER_MAG).EGU NPP") } record(stringout, "$(P)SIM:STEER_$(STEER_MAG):SP:UNITS_SET") { + field(DESC, "SIM Steering magnet Setpoint unit setter") field(OUT, "$(P)STEER_$(STEER_MAG):SP.EGU NPP") } \ No newline at end of file From dec26949f389464c8ac2345cede6813563df44f0 Mon Sep 17 00:00:00 2001 From: Lowri Jenkins Date: Wed, 16 Sep 2026 13:12:34 +0100 Subject: [PATCH 7/8] DB checker changes --- BEAMCORR/BEAMCORR-IOC-01App/Db/beamcorr.db | 19 ++++++++++--------- BEAMCORR/BEAMCORR-IOC-01App/Db/steering.db | 15 ++++++++------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/BEAMCORR/BEAMCORR-IOC-01App/Db/beamcorr.db b/BEAMCORR/BEAMCORR-IOC-01App/Db/beamcorr.db index 8a4b08a92..510da8a7c 100644 --- a/BEAMCORR/BEAMCORR-IOC-01App/Db/beamcorr.db +++ b/BEAMCORR/BEAMCORR-IOC-01App/Db/beamcorr.db @@ -35,6 +35,7 @@ record(bo, "$(P)ENABLE:CORR") record(ao, "$(P)NUM:STEER_MAG"){ field(DESC, "Number of Steering Magnets") field(VAL, "$(NUM_STEER)") + field(EGU, "") info(INTEREST, "MEDIUM") } @@ -179,20 +180,20 @@ record(stringout, "$(P)MUSR_PV:TRANS:UNITS_SET") record(calcout, "$(P)MUSR_ROTATION:ISLONG"){ field(DESC, "Handle MUSR Direction") field(CALC, "(A==0)?B:0") -$(IFNOTRECSIM="") field(INPA, "IN:MUSR:MUSR_ROTATION CP MS") -$(IFRECSIM="") field(INPA, "$(P)SIM:MUSR_ROTATION CP MS") -$(IFNOTRECSIM="") field(INPB, "$(MUSR_PV_MAIN) CP MS") -$(IFRECSIM="") field(INPB, "$(P)SIM:MUSR_PV:MAIN CP MS") +$(IFNOTRECSIM) field(INPA, "IN:MUSR:MUSR_ROTATION CP MS") +$(IFRECSIM) field(INPA, "$(P)SIM:MUSR_ROTATION CP MS") +$(IFNOTRECSIM) field(INPB, "$(MUSR_PV_MAIN) CP MS") +$(IFRECSIM) field(INPB, "$(P)SIM:MUSR_PV:MAIN CP MS") field(OUT, "$(P)MUSR_PV:MAIN PP") } record(calcout, "$(P)MUSR_ROTATION:ISTRANS"){ field(DESC, "Handle MUSR Direction") field(CALC, "(A==1)?B:0") -$(IFNOTRECSIM="") field(INPA, "IN:MUSR:MUSR_ROTATION CP MS") -$(IFRECSIM="") field(INPA, "$(P)SIM:MUSR_ROTATION CP MS") -$(IFNOTRECSIM="")field(INPB, "$(MUSR_PV_MAIN) CP MS") -$(IFRECSIM="") field(INPB, "$(P)SIM:MUSR_PV:MAIN CP MS") +$(IFNOTRECSIM) field(INPA, "IN:MUSR:MUSR_ROTATION CP MS") +$(IFRECSIM) field(INPA, "$(P)SIM:MUSR_ROTATION CP MS") +$(IFNOTRECSIM)field(INPB, "$(MUSR_PV_MAIN) CP MS") +$(IFRECSIM) field(INPB, "$(P)SIM:MUSR_PV:MAIN CP MS") field(OUT, "$(P)MUSR_PV:TRANS PP") } @@ -282,4 +283,4 @@ record(stringout, "$(P)SIM:MUSR_PV:MAIN:UNITS_SET") #{ # field(DESC, "Push units from one pv to another") # field(OUT, "$(P)MUSR_PV:TRANS.EGU NPP") -#} \ No newline at end of file +#} diff --git a/BEAMCORR/BEAMCORR-IOC-01App/Db/steering.db b/BEAMCORR/BEAMCORR-IOC-01App/Db/steering.db index 57c4ac873..798ba1a89 100644 --- a/BEAMCORR/BEAMCORR-IOC-01App/Db/steering.db +++ b/BEAMCORR/BEAMCORR-IOC-01App/Db/steering.db @@ -21,6 +21,7 @@ record(ao, "$(P)STEER_$(STEER_MAG):SP"){ field(PREC, "3") info(INTEREST, "HIGH") field(UDFS, "NO_ALARM") + field(EGU, "") } record(ao, "$(P)STEER_$(STEER_MAG):OUT:_SP"){ @@ -41,11 +42,11 @@ record(stringout, "$(P)STEER_$(STEER_MAG):SP:UNITS_SET") } record(calcout, "$(P)STEER_$(STEER_MAG):DISABLED:SP"){ - field(DESC, "Calc to forward Steering magnet while corrections disabled") + field(DESC, "forward steer val while disabled") field(OCAL, "A") field(CALC, "B") -$(IFNOTRECSIM="") field(OUT, "$(STEER_PV):SP PP") -$(IFRECSIM="") field(OUT, "$(P)STEER_$(STEER_MAG):OUT:_SP PP") +$(IFNOTRECSIM) field(OUT, "$(STEER_PV):SP PP") +$(IFRECSIM) field(OUT, "$(P)STEER_$(STEER_MAG):OUT:_SP PP") field(INPA, "$(P)STEER_$(STEER_MAG):SP CP MS") field(INPB, "$(P)ENABLE:CORR CP MS") field(DOPT, "Use OCAL") @@ -53,7 +54,7 @@ $(IFRECSIM="") field(OUT, "$(P)STEER_$(STEER_MAG):OUT:_SP PP") } record(calcout, "$(P)STEER_$(STEER_MAG):_SP"){ - field(DESC, "Calc to determine Steering magnet while corrections enabled") + field(DESC, "determine steer val while enabled") field(OCAL, "A+B") field(CALC, "C") $(IFNOTRECSIM) field(OUT, "$(STEER_PV):SP PP") @@ -66,11 +67,11 @@ $(IFRECSIM) field(OUT, "$(P)STEER_$(STEER_MAG):OUT:_SP PP") } record(calcout, "$(P)STEER_$(STEER_MAG):_SP:RESET"){ - field(DESC, "Calc to reset setpoint to current value when disabling corrections") + field(DESC, "Reset SP on disable") field(OCAL, "A") field(CALC, "B") -$(IFNOTRECSIM="") field(INPA, "$(STEER_PV):SP CP MS") -$(IFRECSIM="") field(INPA, "$(P)SIM:STEER_$(STEER_MAG) CP MS") +$(IFNOTRECSIM) field(INPA, "$(STEER_PV):SP CP MS") +$(IFRECSIM) field(INPA, "$(P)SIM:STEER_$(STEER_MAG) CP MS") field(OUT, "$(P)STEER_$(STEER_MAG):SP PP") field(INPB, "$(P)ENABLE:CORR CP MS") field(DOPT, "Use OCAL") From d88930785960cd841c9de511e25f12aacfc7ed7e Mon Sep 17 00:00:00 2001 From: Lowri Jenkins Date: Wed, 16 Sep 2026 13:18:30 +0100 Subject: [PATCH 8/8] Ensure template also complies with db checker --- BEAMCORR/BEAMCORR-IOC-01App/Db/coefficients.template | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/BEAMCORR/BEAMCORR-IOC-01App/Db/coefficients.template b/BEAMCORR/BEAMCORR-IOC-01App/Db/coefficients.template index 9be736bea..103123579 100644 --- a/BEAMCORR/BEAMCORR-IOC-01App/Db/coefficients.template +++ b/BEAMCORR/BEAMCORR-IOC-01App/Db/coefficients.template @@ -4,6 +4,8 @@ record(ao, "$(P)STEER_$(STEER_MAG):$(INT_MAG)_$(DIRECTION):COEFF") field(PREC, "3") info(autosaveFields, "VAL") info(INTEREST, "LOW") + field(EGU, "") + field(UDFS, "NO_ALARM") } # Equation for a single steering magnet @@ -15,7 +17,7 @@ record(ao, "$(P)STEER_$(STEER_MAG):$(INT_MAG)_$(DIRECTION):COEFF") # m1 through mn = the current value of the interferring magnets record(calc, $(P)STEERING_$(STEER_MAG):$(DIRECTION)_$(INT_MAG)){ - field(DESC, "$(INT_MAG) $(DIRECTION) multiplied by coefficient for Steer $(STEER_MAG)") + field(DESC, "$(INT_MAG) $(DIRECTION) X Coeff for STEER $(STEER_MAG)") field(CALC, "A*B") field(INPA, "$(P)STEER_$(STEER_MAG):$(INT_MAG)_$(DIRECTION):COEFF CP MS") field(INPB, "$(P)$(INT_MAG)_PV:$(DIRECTION) CP MS") @@ -27,4 +29,5 @@ record(calc, "$(P)STEERING_$(STEER_MAG):OFFSET"){ field(PREC, "3") field(INP$(INP), "$(P)STEERING_$(STEER_MAG):$(DIRECTION)_$(INT_MAG) CP MS") info(INTEREST, "LOW") + field(ASG, "READONLY") }