diff --git a/Makefile b/Makefile index 9ad027c..1dfbf7d 100644 --- a/Makefile +++ b/Makefile @@ -8,7 +8,7 @@ ARCH_FILTER=RHEL% # additional module dependencies REQUIRED+=calc -# REQUIRED+=s7plcFW +REQUIRED+=sinqS7plcFW # General DB files to include in the release TEMPLATES += db/sps_status.db diff --git a/README.md b/README.md index c7a19a8..bf77737 100644 --- a/README.md +++ b/README.md @@ -4,13 +4,25 @@ A collection of standardised SPS databases (or "modules") for interacting with the control unit itself and other external hardware. This makes use of the -[s7plcFW Epics driver](https://git.psi.ch/epics_driver_modules/s7plcFW) for +[s7plcFW Epics driver](https://gitea.psi.ch/lin-epics-modules/sinqS7plcFW) for communication with the Siemens 7th Generation PLC via the Fetch-Write Protocol. # Shutter Module -``` -epicsEnvSet("PREFIX", "SQ:INSTRUMENT") # can also be set in runScript call +This script allows the shutter at the instrument to be opened and closed as +well as providing access to many status bits and messages. -runScript "$(sinqSPS_DIR)shutter.cmd" "SPS_IP=172.28.101.26, FETCH_DB=2000" ``` +epicsEnvSet("INSTR", "SQ:INSTRUMENT:") # can also be set in runScript call + +runScript("$(sinqSPS_DIR)shutter.cmd","SPS_IP=172.28.101.26,FETCH_DB=210") +``` + +The directly exposed database fields can be found in +[shutter.substitutions](./templates/shutter.substitutions). + +A simplified status value and status message is created from these fields via +the logic in [shutter.db](./db/shutter.db). + +The corresponding nicos device is located at +[nicos\_sinq/devices/epics/shutter.py](https://gitea.psi.ch/lin-instrument-computers/Nicos/src/branch/release-3.12/nicos_sinq/devices/epics/shutter.py). diff --git a/db/readbit.db b/db/readbit.db index 12a4f7a..0ee6569 100644 --- a/db/readbit.db +++ b/db/readbit.db @@ -1,4 +1,4 @@ -record(bi,"$(PREFIX):$(SPS_REGISTER_NAME):$(BIT_NAME)") +record(bi,"$(INSTR)$(SPS_REGISTER_NAME):$(BIT_NAME)") { field(DTYP, "S7plcFW") field(DESC, "$(DESC)") diff --git a/db/readstring.db b/db/readstring.db index a700a3d..f625d33 100644 --- a/db/readstring.db +++ b/db/readstring.db @@ -1,4 +1,4 @@ -record(stringin, "$(PREFIX):$(SPS_REGISTER_NAME):$(STRING_NAME)-Msg") +record(stringin, "$(INSTR)$(SPS_REGISTER_NAME):$(STRING_NAME)-Msg") { field(DTYP, "S7plcFW") field(INP, "@$(SPS_REGISTER_NAME)/$(OFFSET) L=$(LENGTH)") diff --git a/db/shutter.db b/db/shutter.db index 23d767e..3ba64c0 100644 --- a/db/shutter.db +++ b/db/shutter.db @@ -1,4 +1,4 @@ -record(bo, "$(PREFIX):$(SPS_REGISTER_NAME):SHUTTER") +record(bo, "$(INSTR)$(SPS_REGISTER_NAME):SHUTTER") { field(DESC, "Open or close the shutter") field(DTYP, "Soft Channel") @@ -6,40 +6,40 @@ record(bo, "$(PREFIX):$(SPS_REGISTER_NAME):SHUTTER") field(VAL, 0) field(ZNAM, "Closed") field(ONAM, "Open") - field(FLNK, "$(PREFIX):$(SPS_REGISTER_NAME):SHUTTER-CONTROL PP") + field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):SHUTTER-CONTROL PP") } # The Exposed SPS Interface has an open register and a close register. You need # to write 1 to the corresponding register to perform said action. This, in -# combination with "$(PREFIX):$(SPS_REGISTER_NAME):SHUTTER", maps the binay 0/1 +# combination with "$(INSTR)$(SPS_REGISTER_NAME):SHUTTER", maps the binay 0/1 # to writing a 1 to the required register. -record(seq, "$(PREFIX):$(SPS_REGISTER_NAME):SHUTTER-CONTROL") +record(seq, "$(INSTR)$(SPS_REGISTER_NAME):SHUTTER-CONTROL") { field(SELM, "Specified") - field(SELL, "$(PREFIX):$(SPS_REGISTER_NAME):SHUTTER.VAL NPP") + field(SELL, "$(INSTR)$(SPS_REGISTER_NAME):SHUTTER.VAL NPP") field(DO0, 1) field(DO1, 1) - field(LNK0, "$(PREFIX):$(SPS_REGISTER_NAME):CLOSE-SHUTTER PP") - field(LNK1, "$(PREFIX):$(SPS_REGISTER_NAME):OPEN-SHUTTER PP") + field(LNK0, "$(INSTR)$(SPS_REGISTER_NAME):CLOSE-SHUTTER PP") + field(LNK1, "$(INSTR)$(SPS_REGISTER_NAME):OPEN-SHUTTER PP") } -record(calc, "$(PREFIX):$(SPS_REGISTER_NAME):MAP-STATUS") +record(calc, "$(INSTR)$(SPS_REGISTER_NAME):MAP-STATUS") { field(DESC, "Maps Status Variables to singular status") - field(INPA, "$(PREFIX):$(SPS_REGISTER_NAME):SHUTTER-READY NPP") - field(INPB, "$(PREFIX):$(SPS_REGISTER_NAME):NOT-LOCKED NPP") - field(INPC, "$(PREFIX):$(SPS_REGISTER_NAME):REMOTE-OKAY NPP") - field(INPD, "$(PREFIX):$(SPS_REGISTER_NAME):PSYS-OK NPP") - field(INPE, "$(PREFIX):$(SPS_REGISTER_NAME):EMERGENCY-STOP-OFF NPP") + field(INPA, "$(INSTR)$(SPS_REGISTER_NAME):SHUTTER-READY NPP") + field(INPB, "$(INSTR)$(SPS_REGISTER_NAME):NOT-LOCKED NPP") + field(INPC, "$(INSTR)$(SPS_REGISTER_NAME):REMOTE-OKAY NPP") + field(INPD, "$(INSTR)$(SPS_REGISTER_NAME):PSYS-OK NPP") + field(INPE, "$(INSTR)$(SPS_REGISTER_NAME):EMERGENCY-STOP-OFF NPP") field(CALC, "(E=0||B=0)?2:(A=0||D=0)?1:C=0?2:0") field(SCAN, ".1 second") - field(FLNK, "$(PREFIX):$(SPS_REGISTER_NAME):STATUS PP") + field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):STATUS PP") } -record(mbbi, "$(PREFIX):$(SPS_REGISTER_NAME):STATUS") +record(mbbi, "$(INSTR)$(SPS_REGISTER_NAME):STATUS") { field(DESC, "Status of Shutter") - field(INP, "$(PREFIX):$(SPS_REGISTER_NAME):MAP-STATUS NPP") + field(INP, "$(INSTR)$(SPS_REGISTER_NAME):MAP-STATUS NPP") field(ZRVL, "0") field(ZRST, "Okay") field(ONVL, "1") @@ -48,28 +48,24 @@ record(mbbi, "$(PREFIX):$(SPS_REGISTER_NAME):STATUS") field(TWST, "Error") field(THVL, "3") field(THST, "Unknown") - field(FLNK, "$(PREFIX):$(SPS_REGISTER_NAME):STATUS-Msg PP") + field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):STATUS-Msg PP") } -record(scalcout, "$(PREFIX):$(SPS_REGISTER_NAME):STATUS-Msg") +record(scalcout, "$(INSTR)$(SPS_REGISTER_NAME):STATUS-Msg") { field(DESC, "Status Message") - field(INPA, "$(PREFIX):$(SPS_REGISTER_NAME):OPEN NPP") - field(INPC, "$(PREFIX):$(SPS_REGISTER_NAME):SHUTTER-READY NPP") - field(INPD, "$(PREFIX):$(SPS_REGISTER_NAME):NOT-LOCKED NPP") - field(INPE, "$(PREFIX):$(SPS_REGISTER_NAME):REMOTE-OKAY NPP") - field(INPF, "$(PREFIX):$(SPS_REGISTER_NAME):PSYS-OK NPP") - field(INPG, "$(PREFIX):$(SPS_REGISTER_NAME):EMERGENCY-STOP-OFF NPP") - field(INAA, "$(PREFIX):$(SPS_REGISTER_NAME):OPEN-Msg NPP") - field(INBB, "$(PREFIX):$(SPS_REGISTER_NAME):REMOTE-Msg NPP") - field(INCC, "$(PREFIX):$(SPS_REGISTER_NAME):SHUTTER-READY-Msg NPP") - field(INDD, "$(PREFIX):$(SPS_REGISTER_NAME):EMERGENCY-STOP-Msg NPP") - field(INEE, "$(PREFIX):$(SPS_REGISTER_NAME):BLOCKED-Msg NPP") - field(INFF, "$(PREFIX):$(SPS_REGISTER_NAME):BLOCKED-REASON-Msg NPP") - field(INGG, "$(PREFIX):$(SPS_REGISTER_NAME):PSYS-OK-Msg NPP") - # field(CALC, '(C=0||D=0||F=0)?"inv":G=0?DD:E=0?BB:AA') - # field(CALC, 'E=0?BB:G=0?DD:AA') - # field(CALC, 'G=0?DD:F=0?GG:C=0?CC:(EE[8,10]!="not")?(EE+": "+FF):E=0?BB:AA') - # field(CALC, 'G=0?DD:F=0?GG:C=0?CC:D=0?(EE+": "+FF):E=0?BB:AA') + field(INPA, "$(INSTR)$(SPS_REGISTER_NAME):OPEN NPP") + field(INPC, "$(INSTR)$(SPS_REGISTER_NAME):SHUTTER-READY NPP") + field(INPD, "$(INSTR)$(SPS_REGISTER_NAME):NOT-LOCKED NPP") + field(INPE, "$(INSTR)$(SPS_REGISTER_NAME):REMOTE-OKAY NPP") + field(INPF, "$(INSTR)$(SPS_REGISTER_NAME):PSYS-OK NPP") + field(INPG, "$(INSTR)$(SPS_REGISTER_NAME):EMERGENCY-STOP-OFF NPP") + field(INAA, "$(INSTR)$(SPS_REGISTER_NAME):OPEN-Msg NPP") + field(INBB, "$(INSTR)$(SPS_REGISTER_NAME):REMOTE-Msg NPP") + field(INCC, "$(INSTR)$(SPS_REGISTER_NAME):SHUTTER-READY-Msg NPP") + field(INDD, "$(INSTR)$(SPS_REGISTER_NAME):EMERGENCY-STOP-Msg NPP") + field(INEE, "$(INSTR)$(SPS_REGISTER_NAME):BLOCKED-Msg NPP") + field(INFF, "$(INSTR)$(SPS_REGISTER_NAME):BLOCKED-REASON-Msg NPP") + field(INGG, "$(INSTR)$(SPS_REGISTER_NAME):PSYS-OK-Msg NPP") field(CALC, 'G=0?DD:D=0?(EE+": "+FF):F=0?GG:C=0?CC:E=0?BB:AA') } diff --git a/db/sps_status.db b/db/sps_status.db index 708a3f1..6c483d0 100644 --- a/db/sps_status.db +++ b/db/sps_status.db @@ -1,4 +1,4 @@ -record(bi, "$(PREFIX):$(SPS_REGISTER_NAME):ConnStatusFetch") +record(bi, "$(INSTR)$(SPS_REGISTER_NAME):ConnStatusFetch") { field(DTYP, "S7plcFW stat") field(INP, "@$(SPS_REGISTER_NAME)") @@ -7,7 +7,7 @@ record(bi, "$(PREFIX):$(SPS_REGISTER_NAME):ConnStatusFetch") field(SCAN, "I/O Intr") } -record(bi, "$(PREFIX):$(SPS_REGISTER_NAME):ConnStatusWrite") +record(bi, "$(INSTR)$(SPS_REGISTER_NAME):ConnStatusWrite") { field(DTYP, "S7plcFW stat2") field(INP, "@$(SPS_REGISTER_NAME)") diff --git a/db/writebit.db b/db/writebit.db index 1eba373..206fe83 100644 --- a/db/writebit.db +++ b/db/writebit.db @@ -1,4 +1,4 @@ -record(bo, "$(PREFIX):$(SPS_REGISTER_NAME):$(BIT_NAME)") +record(bo, "$(INSTR)$(SPS_REGISTER_NAME):$(BIT_NAME)") { field(DTYP, "S7plcFW") field(DESC, "$(DESC)") diff --git a/scripts/shutter.cmd b/scripts/shutter.cmd index 508d9e4..626cd54 100644 --- a/scripts/shutter.cmd +++ b/scripts/shutter.cmd @@ -1,4 +1,4 @@ -require s7plcFW, wall_e +require sinqS7plcFW # s7plcFWConfigure( # # Alias, @@ -28,10 +28,10 @@ $(SET_SIM_MODE=#) $(SET_SIM_MODE) sleep 3 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", "PREFIX=$(PREFIX), SPS_REGISTER_NAME=$(SPS_REGISTER_NAME)") +dbLoadRecords("$(sinqSPS_DB)/sps_status.db", "INSTR=$(INSTR), SPS_REGISTER_NAME=$(SPS_REGISTER_NAME)") # Shutter PVs -dbLoadTemplate("$(sinqSPS_DB)/shutter.substitutions", "PREFIX=$(PREFIX), SPS_REGISTER_NAME=$(SPS_REGISTER_NAME)") +dbLoadTemplate("$(sinqSPS_DB)/shutter.substitutions", "INSTR=$(INSTR), SPS_REGISTER_NAME=$(SPS_REGISTER_NAME)") # Additional Mapping PVs -dbLoadRecords("$(sinqSPS_DB)/shutter.db", "PREFIX=$(PREFIX), SPS_REGISTER_NAME=$(SPS_REGISTER_NAME)") +dbLoadRecords("$(sinqSPS_DB)/shutter.db", "INSTR=$(INSTR), SPS_REGISTER_NAME=$(SPS_REGISTER_NAME)")