From 3738f0750eb1f23a16e20f5afb9171298491d638 Mon Sep 17 00:00:00 2001 From: Edward Wall Date: Tue, 17 Mar 2026 11:03:59 +0100 Subject: [PATCH 1/6] adds draft sans_llb beamstop database --- db/readusint.db | 8 +++++ db/writeusint.db | 7 ++++ scripts/sans_llb_beamstop.cmd | 25 +++++++++++++++ templates/sans_llb_beamstop.substitutions | 39 +++++++++++++++++++++++ 4 files changed, 79 insertions(+) create mode 100644 db/readusint.db create mode 100644 db/writeusint.db create mode 100644 scripts/sans_llb_beamstop.cmd create mode 100644 templates/sans_llb_beamstop.substitutions diff --git a/db/readusint.db b/db/readusint.db new file mode 100644 index 0000000..09a8c42 --- /dev/null +++ b/db/readusint.db @@ -0,0 +1,8 @@ +record(longin, "$(INSTR)$(SPS_REGISTER_NAME):$(UINT_NAME)") +{ + field(DTYP, "S7plcFW") + field(DESC, "$(DESC)") + field(INP, "@$(SPS_REGISTER_NAME)/$(OFFSET) T=UINT8") + field(PINI, "YES") + field(SCAN, "I/O Intr") +} diff --git a/db/writeusint.db b/db/writeusint.db new file mode 100644 index 0000000..e1b6812 --- /dev/null +++ b/db/writeusint.db @@ -0,0 +1,7 @@ +record(longout, "$(INSTR)$(SPS_REGISTER_NAME):$(UINT_NAME)") +{ + field(DTYP, "S7plcFW") + field(DESC, "$(DESC)") + field(OUT, "@$(SPS_REGISTER_NAME)/$(OFFSET) T=UINT8") + field(PINI, "NO") +} diff --git a/scripts/sans_llb_beamstop.cmd b/scripts/sans_llb_beamstop.cmd new file mode 100644 index 0000000..eb831f5 --- /dev/null +++ b/scripts/sans_llb_beamstop.cmd @@ -0,0 +1,25 @@ +require sinqS7plcFW + +# s7plcFWConfigure( +# # Alias, +# # IP, +# # fetchPort,fetchOrg,fetchDb,fetchOffsetInDb,fetchSizeOfDb, +# # writePort,writeOrg,writeDb,writeOffsetInDb,writeSizeOfDb, +# # 0 == big endian, 1 == little endian, +# # receive timeout, +# # receive delay, +# # out IO Interrupt Delay (if 0 then only reacts on a change) +# ) + +epicsEnvSet("SPS_REGISTER_NAME", "SPS-BEAMSTOP") +epicsEnvSet("SPS_FETCH_SIZE", "40") +# Seems that 1 doesn't work +epicsEnvSet("SPS_WRITE_SIZE", "2") + +s7plcFWConfigure("$(SPS_REGISTER_NAME)", "$(SPS_IP)", "$(FETCH_PORT=2000),1,$(FETCH_DB),0,$(SPS_FETCH_SIZE)", "$(WRITE_PORT=2001),1,$(WRITE_DB=$(FETCH_DB)),0,$(SPS_WRITE_SIZE)", "$(SPS_ENDIANNESS=1)", "$(SPS_RECEIVE_TIMEOUT=1000)", "$(SPS_RECEIVE_DELAY=200)", "0") + +# Provides Connection Status PVs +dbLoadRecords("$(sinqSPS_DB)/sps_status.db", "INSTR=$(INSTR), SPS_REGISTER_NAME=$(SPS_REGISTER_NAME)") + +# Shutter PVs +dbLoadTemplate("$(sinqSPS_DB)/sans_llb_beamstop.substitutions", "INSTR=$(INSTR), SPS_REGISTER_NAME=$(SPS_REGISTER_NAME)") diff --git a/templates/sans_llb_beamstop.substitutions b/templates/sans_llb_beamstop.substitutions new file mode 100644 index 0000000..25ef6d8 --- /dev/null +++ b/templates/sans_llb_beamstop.substitutions @@ -0,0 +1,39 @@ +file "$(sinqSPS_DB)/writeusint.db" +{ + pattern + {OFFSET, UINT_NAME , DESC } + {0 , "BEAMSTOP" , "Beamstop to change to" } +} + +file "$(sinqSPS_DB)/writebit.db" +{ + pattern + {OFFSET, BIT, BIT_NAME , DESC } + {1 , 0 , "EXECUTE-CHANGE" , "Changes Beamstop" } +} + +file "$(sinqSPS_DB)/readusint.db" +{ + pattern + {OFFSET, UINT_NAME , DESC } + {2 , "BEAMSTOP-CMD" , "Sent Beamstop to change to" } + {3 , "BEAMSTOP_RBV" , "Current Beamstop in place" } +} + +file "$(sinqSPS_DB)/readbit.db" +{ + pattern + {OFFSET, BIT, BIT_NAME , ZNAM , ONAM , DESC} + {6 , 0 , "SERVICE-MODE" , "disabled", "enabled", "" } + {6 , 1 , "IN-POSITION" , "no" , "yes" , "" } + {6 , 2 , "MOVES" , "no" , "yes" , "" } + {6 , 3 , "ERROR" , "no" , "yes" , "" } + {6 , 4 , "EXECUTE-POSSIBLE" , "no" , "yes" , "" } +} + +file "$(sinqSPS_DB)/readstring.db" +{ + pattern + {OFFSET, LENGTH, STRING_NAME } + {8 , 30 , "BLOCKED-REASON" } +} -- 2.52.0 From 391fd54f9628e234d65e06cfcc88e6c77baa0865 Mon Sep 17 00:00:00 2001 From: Edward Wall Date: Wed, 18 Mar 2026 08:55:10 +0100 Subject: [PATCH 2/6] can now read beamstop database --- Makefile | 6 +++++- db/readusint.db | 2 +- db/writeusint.db | 2 +- scripts/sans_llb_beamstop.cmd | 3 --- scripts/shutter.cmd | 2 -- 5 files changed, 7 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 1dfbf7d..05825c6 100644 --- a/Makefile +++ b/Makefile @@ -15,10 +15,14 @@ TEMPLATES += db/sps_status.db TEMPLATES += db/writebit.db TEMPLATES += db/readbit.db TEMPLATES += db/readstring.db +TEMPLATES += db/writeusint.db +TEMPLATES += db/readusint.db # Specific devices to include in the release TEMPLATES += db/shutter.db TEMPLATES += templates/shutter.substitutions SCRIPTS += scripts/shutter.cmd - SCRIPTS += sim/shutter_sim.py + +TEMPLATES += templates/sans_llb_beamstop.substitutions +SCRIPTS += scripts/sans_llb_beamstop.cmd diff --git a/db/readusint.db b/db/readusint.db index 09a8c42..d088264 100644 --- a/db/readusint.db +++ b/db/readusint.db @@ -2,7 +2,7 @@ record(longin, "$(INSTR)$(SPS_REGISTER_NAME):$(UINT_NAME)") { field(DTYP, "S7plcFW") field(DESC, "$(DESC)") - field(INP, "@$(SPS_REGISTER_NAME)/$(OFFSET) T=UINT8") + field(INP, "@$(SPS_REGISTER_NAME)/$(OFFSET) T=BYTE") field(PINI, "YES") field(SCAN, "I/O Intr") } diff --git a/db/writeusint.db b/db/writeusint.db index e1b6812..329d757 100644 --- a/db/writeusint.db +++ b/db/writeusint.db @@ -2,6 +2,6 @@ record(longout, "$(INSTR)$(SPS_REGISTER_NAME):$(UINT_NAME)") { field(DTYP, "S7plcFW") field(DESC, "$(DESC)") - field(OUT, "@$(SPS_REGISTER_NAME)/$(OFFSET) T=UINT8") + field(OUT, "@$(SPS_REGISTER_NAME)/$(OFFSET) T=BYTE") field(PINI, "NO") } diff --git a/scripts/sans_llb_beamstop.cmd b/scripts/sans_llb_beamstop.cmd index eb831f5..e3a74f7 100644 --- a/scripts/sans_llb_beamstop.cmd +++ b/scripts/sans_llb_beamstop.cmd @@ -1,5 +1,3 @@ -require sinqS7plcFW - # s7plcFWConfigure( # # Alias, # # IP, @@ -13,7 +11,6 @@ require sinqS7plcFW epicsEnvSet("SPS_REGISTER_NAME", "SPS-BEAMSTOP") epicsEnvSet("SPS_FETCH_SIZE", "40") -# Seems that 1 doesn't work epicsEnvSet("SPS_WRITE_SIZE", "2") s7plcFWConfigure("$(SPS_REGISTER_NAME)", "$(SPS_IP)", "$(FETCH_PORT=2000),1,$(FETCH_DB),0,$(SPS_FETCH_SIZE)", "$(WRITE_PORT=2001),1,$(WRITE_DB=$(FETCH_DB)),0,$(SPS_WRITE_SIZE)", "$(SPS_ENDIANNESS=1)", "$(SPS_RECEIVE_TIMEOUT=1000)", "$(SPS_RECEIVE_DELAY=200)", "0") diff --git a/scripts/shutter.cmd b/scripts/shutter.cmd index 2e8a788..be826d2 100644 --- a/scripts/shutter.cmd +++ b/scripts/shutter.cmd @@ -1,5 +1,3 @@ -require sinqS7plcFW - # s7plcFWConfigure( # # Alias, # # IP, -- 2.52.0 From c29e88aef260be590641cabd1e1470f768db100d Mon Sep 17 00:00:00 2001 From: Edward Wall Date: Wed, 18 Mar 2026 09:46:57 +0100 Subject: [PATCH 3/6] adds status mapping and write pv for nicos --- Makefile | 1 + db/sans_llb_beamstop.db | 52 +++++++++++++++++++++++ scripts/sans_llb_beamstop.cmd | 3 ++ templates/sans_llb_beamstop.substitutions | 6 +-- 4 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 db/sans_llb_beamstop.db diff --git a/Makefile b/Makefile index 05825c6..3772b5a 100644 --- a/Makefile +++ b/Makefile @@ -24,5 +24,6 @@ TEMPLATES += templates/shutter.substitutions SCRIPTS += scripts/shutter.cmd SCRIPTS += sim/shutter_sim.py +TEMPLATES += db/sans_llb_beamstop.db TEMPLATES += templates/sans_llb_beamstop.substitutions SCRIPTS += scripts/sans_llb_beamstop.cmd diff --git a/db/sans_llb_beamstop.db b/db/sans_llb_beamstop.db new file mode 100644 index 0000000..305b4ee --- /dev/null +++ b/db/sans_llb_beamstop.db @@ -0,0 +1,52 @@ +record(longout, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP") +{ + field(DESC, "Move to new Beamstop") + field(OUT, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP-RAW PP") + field(OMSL, "supervisory") + field(DRVL, 1) + field(DRVH, 3) + field(PINI, "NO") + field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):TRIGGER PP") +} + +record(longout, "$(INSTR)$(SPS_REGISTER_NAME):TRIGGER") +{ + field(DESC, "Internal Trigger") + field(OUT, "$(INSTR)$(SPS_REGISTER_NAME):EXECUTE-CHANGE PP") + field(OMSL, "closed_loop") + field(DOL, 1) + field(PINI, "NO") +} + +record(calc, "$(INSTR)$(SPS_REGISTER_NAME):MAP-STATUS") +{ + field(DESC, "Maps Status Variables to singular status") + field(INPA, "$(INSTR)$(SPS_REGISTER_NAME):SERVICE-MODE NPP") + field(INPB, "$(INSTR)$(SPS_REGISTER_NAME):IN-POSITION NPP") + field(INPC, "$(INSTR)$(SPS_REGISTER_NAME):MOVES NPP") + field(INPD, "$(INSTR)$(SPS_REGISTER_NAME):ERROR NPP") + field(INPE, "$(INSTR)$(SPS_REGISTER_NAME):EXECUTE-POSSIBLE NPP") + field(INPF, "$(INSTR)$(SPS_REGISTER_NAME):ConnStatusFetch NPP") + field(INPG, "$(INSTR)$(SPS_REGISTER_NAME):ConnStatusWrite NPP") + field(INPH, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP NPP") + field(INPI, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP_RBV NPP") + field(CALC, "(F=0||G=0||D=1||A=1)?3:(C=1||H#I)?1:(B=0)?3:0") + field(SCAN, ".1 second") + field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):STATUS PP") +} + +record(mbbi, "$(INSTR)$(SPS_REGISTER_NAME):STATUS") +{ + field(DESC, "Status of Shutter") + field(INP, "$(INSTR)$(SPS_REGISTER_NAME):MAP-STATUS NPP") + field(ZRVL, "0") + field(ZRST, "Okay") + field(ONVL, "1") + field(ONST, "Busy") + field(TWVL, "2") + field(TWST, "Warning") + field(THVL, "3") + field(THST, "Error") + field(FRST, "4") + field(FRST, "Unknown") +} diff --git a/scripts/sans_llb_beamstop.cmd b/scripts/sans_llb_beamstop.cmd index e3a74f7..42159de 100644 --- a/scripts/sans_llb_beamstop.cmd +++ b/scripts/sans_llb_beamstop.cmd @@ -20,3 +20,6 @@ dbLoadRecords("$(sinqSPS_DB)/sps_status.db", "INSTR=$(INSTR), SPS_REGISTER_NAME= # Shutter PVs dbLoadTemplate("$(sinqSPS_DB)/sans_llb_beamstop.substitutions", "INSTR=$(INSTR), SPS_REGISTER_NAME=$(SPS_REGISTER_NAME)") + +# Additional Mapping PVs +dbLoadRecords("$(sinqSPS_DB)/sans_llb_beamstop.db", "INSTR=$(INSTR), SPS_REGISTER_NAME=$(SPS_REGISTER_NAME)") diff --git a/templates/sans_llb_beamstop.substitutions b/templates/sans_llb_beamstop.substitutions index 25ef6d8..4a6c16c 100644 --- a/templates/sans_llb_beamstop.substitutions +++ b/templates/sans_llb_beamstop.substitutions @@ -1,15 +1,15 @@ file "$(sinqSPS_DB)/writeusint.db" { pattern - {OFFSET, UINT_NAME , DESC } - {0 , "BEAMSTOP" , "Beamstop to change to" } + {OFFSET, UINT_NAME , DESC } + {0 , "BEAMSTOP-RAW" , "Beamstop to switch to" } } file "$(sinqSPS_DB)/writebit.db" { pattern {OFFSET, BIT, BIT_NAME , DESC } - {1 , 0 , "EXECUTE-CHANGE" , "Changes Beamstop" } + {1 , 0 , "EXECUTE-CHANGE" , "Change Beamstop" } } file "$(sinqSPS_DB)/readusint.db" -- 2.52.0 From a7b00172f7b45bb213cb74743438fc4b1815eb8b Mon Sep 17 00:00:00 2001 From: Edward Wall Date: Wed, 18 Mar 2026 11:47:46 +0100 Subject: [PATCH 4/6] corrects initial state --- db/sans_llb_beamstop.db | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/db/sans_llb_beamstop.db b/db/sans_llb_beamstop.db index 305b4ee..0981543 100644 --- a/db/sans_llb_beamstop.db +++ b/db/sans_llb_beamstop.db @@ -1,3 +1,12 @@ +record(longout, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP-INIT") +{ + field(DESC, "Initialises BEAMSTOP PV") + field(OUT, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP NPP") + field(DOL, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP_RBV NPP") + field(OMSL, "closed_loop") + field(PINI, "YES") +} + record(longout, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP") { field(DESC, "Move to new Beamstop") -- 2.52.0 From a99d7eb8a3092198cbb08e608b6c8a2013a73092 Mon Sep 17 00:00:00 2001 From: Edward Wall Date: Wed, 18 Mar 2026 11:52:22 +0100 Subject: [PATCH 5/6] service mode is only a warning --- db/sans_llb_beamstop.db | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/sans_llb_beamstop.db b/db/sans_llb_beamstop.db index 0981543..3b4dd5d 100644 --- a/db/sans_llb_beamstop.db +++ b/db/sans_llb_beamstop.db @@ -39,7 +39,7 @@ record(calc, "$(INSTR)$(SPS_REGISTER_NAME):MAP-STATUS") field(INPG, "$(INSTR)$(SPS_REGISTER_NAME):ConnStatusWrite NPP") field(INPH, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP NPP") field(INPI, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP_RBV NPP") - field(CALC, "(F=0||G=0||D=1||A=1)?3:(C=1||H#I)?1:(B=0)?3:0") + field(CALC, "(F=0||G=0||D=1)?3:(A=1)?2:(C=1||H#I)?1:(B=0)?3:0") field(SCAN, ".1 second") field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):STATUS PP") } -- 2.52.0 From 31431ddf3f61f40fbf538c32fb3c01e5682e4fc1 Mon Sep 17 00:00:00 2001 From: Edward Wall Date: Wed, 18 Mar 2026 12:18:26 +0100 Subject: [PATCH 6/6] trigger an immediate update after triggering a change of beamstop --- db/sans_llb_beamstop.db | 1 + 1 file changed, 1 insertion(+) diff --git a/db/sans_llb_beamstop.db b/db/sans_llb_beamstop.db index 3b4dd5d..62b4900 100644 --- a/db/sans_llb_beamstop.db +++ b/db/sans_llb_beamstop.db @@ -25,6 +25,7 @@ record(longout, "$(INSTR)$(SPS_REGISTER_NAME):TRIGGER") field(OMSL, "closed_loop") field(DOL, 1) field(PINI, "NO") + field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):MAP-STATUS PP") } record(calc, "$(INSTR)$(SPS_REGISTER_NAME):MAP-STATUS") -- 2.52.0