Files
sinqSPS/db/shutter.db
T
wall_e d133fd156e
Test And Build / Build (push) Successful in 4s
adds some delays and a reset
2026-03-19 11:55:24 +01:00

178 lines
6.2 KiB
Plaintext

record(longout, "$(INSTR)$(SPS_REGISTER_NAME):SHUTTER-INIT")
{
field(DESC, "Initialises SHUTTER PV")
field(OUT, "$(INSTR)$(SPS_REGISTER_NAME):SHUTTER NPP")
field(DOL, "$(INSTR)$(SPS_REGISTER_NAME):OPEN NPP")
field(OMSL, "closed_loop")
field(PINI, "YES")
}
record(bo, "$(INSTR)$(SPS_REGISTER_NAME):SHUTTER")
{
field(DESC, "Open or close the shutter")
field(DTYP, "Soft Channel")
field(OMSL, "supervisory")
field(ZNAM, "Closed")
field(ONAM, "Open")
field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):SET-BUSY PP")
}
record(seq, "$(INSTR)$(SPS_REGISTER_NAME):RESET")
{
field(DESC, "NICOS can't write to PROC field")
field(DOL0, 1)
field(LNK0, "$(INSTR)$(SPS_REGISTER_NAME):RESETTER.PROC")
field(SELM, "All")
field(PINI, "NO")
}
record(bo, "$(INSTR)$(SPS_REGISTER_NAME):RESETTER")
{
field(DESC, "PV For Resetting internal state")
field(DOL, 0)
field(OUT, "$(INSTR)$(SPS_REGISTER_NAME):BUSY PP")
}
record(bo, "$(INSTR)$(SPS_REGISTER_NAME):SET-BUSY")
{
field(DESC, "Trigger Internal Busy Status")
field(VAL, 1)
field(OUT, "$(INSTR)$(SPS_REGISTER_NAME):BUSY PP")
field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):CLEAR-CONTROL PP")
}
record(seq, "$(INSTR)$(SPS_REGISTER_NAME):SET-READY")
{
field(DESC, "Trigger Returned to Ready Status")
field(LNK1, "$(INSTR)$(SPS_REGISTER_NAME):BUSY PP")
field(DO1, 0)
field(SELM, "Specified")
field(SELL, "$(INSTR)$(SPS_REGISTER_NAME):SHUTTER-STATUS.VAL")
field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):INTERNAL-STATUS PP")
}
record(bi, "$(INSTR)$(SPS_REGISTER_NAME):BUSY")
{
field(DESC, "Internal Busy State")
field(VAL, 0)
field(ZNAM, "Ready")
field(ONAM, "Busy")
}
# 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 and make sure
# that the other bit is set back to 0. These two records, in combination with
# "$(INSTR)$(SPS_REGISTER_NAME):SHUTTER", first clear both control bits and
# then maps the binay 0/1 to writing a 1 to the required register.
record(dfanout, "$(INSTR)$(SPS_REGISTER_NAME):CLEAR-CONTROL")
{
field(DOL, 0)
field(OUTA, "$(INSTR)$(SPS_REGISTER_NAME):CLOSE-SHUTTER PP")
field(OUTB, "$(INSTR)$(SPS_REGISTER_NAME):OPEN-SHUTTER PP")
field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):SHUTTER-DELAY PP")
field(SELM, "All")
}
record(seq, "$(INSTR)$(SPS_REGISTER_NAME):SHUTTER-DELAY")
{
field(DESC, "Delays Internal Trigger as SPS too slow")
field(DOL0, 1)
field(LNK0, "$(INSTR)$(SPS_REGISTER_NAME):SHUTTER-CONTROL.PROC PP")
field(DLY0, 0.5)
field(SELM, "All")
field(PINI, "NO")
}
record(seq, "$(INSTR)$(SPS_REGISTER_NAME):SHUTTER-CONTROL")
{
field(SELM, "Specified")
field(SELL, "$(INSTR)$(SPS_REGISTER_NAME):SHUTTER.VAL NPP")
field(DO0, 1)
field(DO1, 1)
field(LNK0, "$(INSTR)$(SPS_REGISTER_NAME):CLOSE-SHUTTER PP")
field(LNK1, "$(INSTR)$(SPS_REGISTER_NAME):OPEN-SHUTTER PP")
field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):MAP-STATUS.PROC PP")
}
# We can't just compare the Write and Readback values, as the readback
# seems to change instantly, and doesn't wait for the shutter to
# actually be open.
record(calc, "$(INSTR)$(SPS_REGISTER_NAME):SHUTTER-STATUS")
{
field(DESC, "Maps Status Variables to singular status")
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(INPF, "$(INSTR)$(SPS_REGISTER_NAME):MOVES NPP")
field(INPG, "$(INSTR)$(SPS_REGISTER_NAME):ConnStatusFetch NPP")
field(INPH, "$(INSTR)$(SPS_REGISTER_NAME):ConnStatusWrite NPP")
field(CALC, "(G=0||H=0||E=0||B=0)?3:(A=0||D=0)?2:(F=1)?1:C=0?3:0")
field(SCAN, ".1 second")
field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):SET-READY PP")
}
record(calc, "$(INSTR)$(SPS_REGISTER_NAME):INTERNAL-STATUS")
{
field(DESC, "Maps Status Variables to singular status")
field(INPA, "$(INSTR)$(SPS_REGISTER_NAME):SHUTTER-STATUS NPP")
field(INPB, "$(INSTR)$(SPS_REGISTER_NAME):BUSY NPP")
field(CALC, "( A<2 && B=1 ) ? 1 : A")
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):INTERNAL-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")
field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):STATUS-Msg PP")
}
record(stringout, "$(INSTR)$(SPS_REGISTER_NAME):MOTION-Msg")
{
field(DESC, "Shutter opening/closing message")
field(VAL, "Shutter in motion")
}
record(stringout, "$(INSTR)$(SPS_REGISTER_NAME):Connection-Msg")
{
field(DESC, "Shutter connection disrupted message")
field(VAL, "Connection to SPS Disrupted")
}
record(scalcout, "$(INSTR)$(SPS_REGISTER_NAME):STATUS-Msg")
{
field(DESC, "Status Message")
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(INPH, "$(INSTR)$(SPS_REGISTER_NAME):MOVES NPP")
field(INPI, "$(INSTR)$(SPS_REGISTER_NAME):ConnStatusFetch NPP")
field(INPJ, "$(INSTR)$(SPS_REGISTER_NAME):ConnStatusWrite NPP")
field(INPK, "$(INSTR)$(SPS_REGISTER_NAME):BUSY 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(INHH, "$(INSTR)$(SPS_REGISTER_NAME):MOTION-Msg NPP")
field(INII, "$(INSTR)$(SPS_REGISTER_NAME):Connection-Msg NPP")
field(CALC, '(I=0||J=0)?II:(H=1||K=1)?HH:G=0?DD:D=0?(EE+": "+FF):F=0?GG:C=0?CC:E=0?BB:AA')
}