record(bo, "$(INSTR)$(SPS_REGISTER_NAME):SHUTTER") { field(DESC, "Open or close the shutter") field(DTYP, "Soft Channel") field(OMSL, "supervisory") field(VAL, 0) field(ZNAM, "Closed") field(ONAM, "Open") field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):CLEAR-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 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-CONTROL PP") field(SELM, "All") } 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") } record(calc, "$(INSTR)$(SPS_REGISTER_NAME):MAP-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):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") 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(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?HH:G=0?DD:D=0?(EE+": "+FF):F=0?GG:C=0?CC:E=0?BB:AA') }