diff --git a/db/channels.db b/db/channels.db index 892d237..8c2971f 100644 --- a/db/channels.db +++ b/db/channels.db @@ -10,26 +10,35 @@ ################################################################################ # Status Variables +# record(dfanout, "$(INSTR)$(NAME):RESET_MT$(CHANNEL)") +# { +# field(DESC, "Resets Internal Variables") +# field(SELM, "All") +# field(OMSL, "supervisory") +# field(OUTA, "$(INSTR)$(NAME):M$(CHANNEL)_CLEARED PP") +# field(OUTB, "$(INSTR)$(NAME):M$(CHANNEL)_PRESET PP") +# } + # Trigger a change in status as clearing record(bo, "$(INSTR)$(NAME):T$(CHANNEL)") { field(DESC, "Trigger Clearing Status") field(VAL, 1) - field(OUT, "$(INSTR)$(NAME):S$(CHANNEL) PP") + field(OUT, "$(INSTR)$(NAME):M$(CHANNEL)_CLEARED PP") } # Trigger a change in status as value returned to 0 record(seq, "$(INSTR)$(NAME):O$(CHANNEL)") { field(DESC, "Trigger Returned to 0 Status") - field(LNK0, "$(INSTR)$(NAME):S$(CHANNEL) PP") field(DO0, 0) + field(LNK0, "$(INSTR)$(NAME):M$(CHANNEL)_CLEARED PP") field(SELM, "Specified") field(SELL, "$(INSTR)$(NAME):M$(CHANNEL).VAL") + field(FLNK, "$(INSTR)$(NAME):S$(CHANNEL)") } -# Current Status of Channel, i.e. is it ready to count? -record(bi, "$(INSTR)$(NAME):S$(CHANNEL)") +record(bi, "$(INSTR)$(NAME):M$(CHANNEL)_CLEARED") { field(DESC, "Channel Status") field(VAL, 0) @@ -37,6 +46,99 @@ record(bi, "$(INSTR)$(NAME):S$(CHANNEL)") field(ONAM, "CLEARING") } +# Current Status of Channel, i.e. is it ready for a new operation? +record(calc, "$(INSTR)$(NAME):S$(CHANNEL)") +{ + field(DESC, "Stupid Nicos Stuff") + field(INPA, "$(INSTR)$(NAME):STATUS NPP") + field(INPB, "$(INSTR)$(NAME):M$(CHANNEL)_CLEARED NPP") + field(INPC, "$(INSTR)$(NAME):M$(CHANNEL)_PRESET NPP") + field(CALC, "A == 1 || B || C") + field(FLNK, "$(INSTR)$(NAME):MTS$(CHANNEL)") +} + +# If set, stop count once threshold reached +record(int64in, "$(INSTR)$(NAME):MT$(CHANNEL)") +{ + field(DESC, "Monitor Count Threshold") + field(VAL, 0) + field(FLNK, "$(INSTR)$(NAME):M$(CHANNEL)_SET") +} + +# Stop the count, if threshold is reached +record(calcout, "$(INSTR)$(NAME):MTS$(CHANNEL)") +{ + field(INPA, "$(INSTR)$(NAME):M$(CHANNEL) NPP") + field(INPB, "$(INSTR)$(NAME):MT$(CHANNEL) NPP") + field(CALC, "B > 0 && A >= B") + field(OOPT, "When Non-zero") + field(OUT, "$(INSTR)$(NAME):STOP.PROC") +} + +record(dfanout, "$(INSTR)$(NAME):M$(CHANNEL)_SET") +{ + field(DESC, "Trigger setting HW preset") + field(SELM, "All") + field(OMSL, "closed_loop") + field(DOL, 1) + field(OUTA, "$(INSTR)$(NAME):M$(CHANNEL)_PRESET PP") + field(OUTB, "$(INSTR)$(NAME):SET-TYPE-MON$(CHANNEL).PROC PP") +} + +record(calcout, "$(INSTR)$(NAME):M$(CHANNEL)_CHECK_SET") +{ + field(SCAN, ".1 second") + field(INPA, "$(INSTR)$(NAME):M$(CHANNEL)_PRESET NPP") + field(INPB, "$(INSTR)$(NAME):MONITOR-CHANNEL NPP") + field(INPC, "$(INSTR)$(NAME):MONITOR-CHANNEL_RBV NPP") + field(CALC, "A && ( ($(CHANNEL) # B) || (B = C) )") + field(OOPT, "When Non-zero") + field(DOPT, "Use OCAL") + field(OCAL, "0") + # This is just a delay, as otherwise, Nicos will not see + # the $(INSTR)$(NAME):M$(CHANNEL)_PRESET state change + # when not changing which monitor channel the preset + # applies to. Is there a better way? + field(ODLY, .5) + field(OUT, "$(INSTR)$(NAME):M$(CHANNEL)_PRESET PP") +} + +record(bi, "$(INSTR)$(NAME):M$(CHANNEL)_PRESET") +{ + field(DESC, "Channel Status") + field(VAL, 0) + field(ZNAM, "OK") + field(ONAM, "SETTING") +} + +record(calcout, "$(INSTR)$(NAME):SET-TYPE-MON$(CHANNEL)") +{ + field(DESC, "Set to HW Mon Type if possible") + field(INPA, "$(INSTR)$(NAME):PRESET-TYPE NPP") + field(INPB, "$(INSTR)$(NAME):MT$(CHANNEL) NPP") + field(INPC, "$(INSTR)$(NAME):MONITOR-CHANNEL.DRVH NPP") + field(CALC, "A=0 && B>0 && $(CHANNEL)<=C") + field(OOPT, "When Non-zero") + field(DOPT, "Use OCAL") + field(OCAL, "1") + field(OUT, "$(INSTR)$(NAME):SET-HW-CHANNEL$(CHANNEL).PROC") +} + +record(ao, "$(INSTR)$(NAME):SET-HW-CHANNEL$(CHANNEL)") +{ + field(OMSL, "closed_loop") + field(DOL, $(CHANNEL)) + field(OUT, "$(INSTR)$(NAME):MONITOR-CHANNEL PP") + field(FLNK, "$(INSTR)$(NAME):SET-TYPE-MON2$(CHANNEL) PP") +} + +record(ao, "$(INSTR)$(NAME):SET-TYPE-MON2$(CHANNEL)") +{ + field(OMSL, "closed_loop") + field(DOL, 2) + field(OUT, "$(INSTR)$(NAME):PRESET-TYPE PP") +} + ################################################################################ # Count Commands diff --git a/db/daq_2nd_gen.db b/db/daq_2nd_gen.db index 84c72e5..dbed757 100644 --- a/db/daq_2nd_gen.db +++ b/db/daq_2nd_gen.db @@ -20,12 +20,13 @@ record(longout, "$(INSTR)$(NAME):MONITOR-CHANNEL") field(FLNK, "$(INSTR)$(NAME):MONITOR-CHANNEL_RBV.PROC") } +# TODO we might need to make sure we wait, when the channel is changed record(longin, "$(INSTR)$(NAME):MONITOR-CHANNEL_RBV") { field(DESC, "PRESET-COUNT Monitors this channel") field(DTYP, "stream") field(INP, "@$(PROTO) readPresetMonitor($(INSTR)$(NAME):) $(ASYN_PORT)") - field(SCAN, "1 second") + field(SCAN, ".5 second") field(FLNK, "$(INSTR)$(NAME):CORRECT-MONITOR-CHANNEL.PROC") } @@ -38,6 +39,115 @@ record(seq, "$(INSTR)$(NAME):CORRECT-MONITOR-CHANNEL") field(LNK0, "$(INSTR)$(NAME):MONITOR-CHANNEL PP") } +record(sel, "$(INSTR)$(NAME):HW_MT") +{ + field(DESC, "Monitor threshold to actually use") + field(SELM, "Specified") + field(NVL, "$(INSTR)$(NAME):MONITOR-CHANNEL_RBV.VAL NPP") + # Skip A as it corresponds to 0 + field(INPB, "$(INSTR)$(NAME):MT1 NPP") + field(INPC, "$(INSTR)$(NAME):MT2 NPP") + field(INPD, "$(INSTR)$(NAME):MT3 NPP") + field(INPE, "$(INSTR)$(NAME):MT4 NPP") + field(INPF, "$(INSTR)$(NAME):MT5 NPP") + field(INPG, "$(INSTR)$(NAME):MT6 NPP") + field(INPH, "$(INSTR)$(NAME):MT7 NPP") + field(INPI, "$(INSTR)$(NAME):MT8 NPP") + field(INPJ, "$(INSTR)$(NAME):MT9 NPP") + field(INPK, "$(INSTR)$(NAME):MT10 NPP") +} + +record(dfanout,"$(INSTR)$(NAME):RESET_HW_MT") +{ + field(SELM, "All") + field(OMSL, "supervisory") + field(OUTA, "$(INSTR)$(NAME):RESET_HW_MT1 PP") + field(OUTB, "$(INSTR)$(NAME):RESET_HW_MT2 PP") +} + +record(dfanout,"$(INSTR)$(NAME):RESET_HW_MT1") +{ + field(SELM, "All") + field(OMSL, "supervisory") + field(OUTA, "$(INSTR)$(NAME):MT1 PP") + field(OUTB, "$(INSTR)$(NAME):MT2 PP") + field(OUTC, "$(INSTR)$(NAME):MT3 PP") + field(OUTD, "$(INSTR)$(NAME):MT4 PP") + field(OUTE, "$(INSTR)$(NAME):MT5 PP") + field(OUTF, "$(INSTR)$(NAME):MT6 PP") + field(OUTG, "$(INSTR)$(NAME):MT7 PP") + field(OUTH, "$(INSTR)$(NAME):MT8 PP") +} + +record(dfanout,"$(INSTR)$(NAME):RESET_HW_MT2") +{ + field(SELM, "All") + field(OMSL, "supervisory") + field(OUTA, "$(INSTR)$(NAME):MT9 PP") + field(OUTB, "$(INSTR)$(NAME):MT10 PP") +} + +# record(dfanout,"$(INSTR)$(NAME):RESET_MT") +# { +# field(DESC, "Resets Internal Variables") +# field(SELM, "All") +# field(OMSL, "supervisory") +# field(OUTA, "$(INSTR)$(NAME):RESET_MT1 PP") +# field(OUTB, "$(INSTR)$(NAME):RESET_MT2 PP") +# } +# +# record(dfanout,"$(INSTR)$(NAME):RESET_MT1") +# { +# field(SELM, "All") +# field(OMSL, "supervisory") +# field(OUTA, "$(INSTR)$(NAME):RESET_MT1 PP") +# field(OUTB, "$(INSTR)$(NAME):RESET_MT2 PP") +# field(OUTC, "$(INSTR)$(NAME):RESET_MT3 PP") +# field(OUTD, "$(INSTR)$(NAME):RESET_MT4 PP") +# field(OUTE, "$(INSTR)$(NAME):RESET_MT5 PP") +# field(OUTF, "$(INSTR)$(NAME):RESET_MT6 PP") +# field(OUTG, "$(INSTR)$(NAME):RESET_MT7 PP") +# field(OUTH, "$(INSTR)$(NAME):RESET_MT8 PP") +# } +# +# record(dfanout,"$(INSTR)$(NAME):RESET_MT2") +# { +# field(SELM, "All") +# field(OMSL, "supervisory") +# field(OUTA, "$(INSTR)$(NAME):RESET_MT9 PP") +# field(OUTB, "$(INSTR)$(NAME):RESET_MT10 PP") +# } + +record(dfanout,"$(INSTR)$(NAME):CMONITORS") +{ + field(SELM, "All") + field(OMSL, "supervisory") + field(OUTA, "$(INSTR)$(NAME):CMONITORS1 PP") + field(OUTB, "$(INSTR)$(NAME):CMONITORS2 PP") +} + +record(dfanout,"$(INSTR)$(NAME):CMONITORS1") +{ + field(SELM, "All") + field(OMSL, "supervisory") + field(OUTA, "$(INSTR)$(NAME):C1 PP") + field(OUTB, "$(INSTR)$(NAME):C2 PP") + field(OUTC, "$(INSTR)$(NAME):C3 PP") + field(OUTD, "$(INSTR)$(NAME):C4 PP") + field(OUTE, "$(INSTR)$(NAME):C5 PP") + field(OUTF, "$(INSTR)$(NAME):C6 PP") + field(OUTG, "$(INSTR)$(NAME):C7 PP") + field(OUTH, "$(INSTR)$(NAME):C8 PP") +} + +record(dfanout,"$(INSTR)$(NAME):CMONITORS2") +{ + field(SELM, "All") + field(OMSL, "supervisory") + field(OUTA, "$(INSTR)$(NAME):C9 PP") + field(OUTB, "$(INSTR)$(NAME):C10 PP") +} + ################################################################################ # Count Commands diff --git a/db/daq_4ch.db b/db/daq_4ch.db index ca34dd5..81a3bf8 100644 --- a/db/daq_4ch.db +++ b/db/daq_4ch.db @@ -25,6 +25,42 @@ record(longin, "$(INSTR)$(NAME):MONITOR-CHANNEL_RBV") field(DISP, 1) } +record(ai, "$(INSTR)$(NAME):HW_MT") +{ + field(DESC, "Monitor threshold to actually use") + field(INP, "$(INSTR)$(NAME):MT1 NPP") +} + +record(dfanout,"$(INSTR)$(NAME):RESET_HW_MT") +{ + field(OMSL, "supervisory") + field(SELM, "All") + field(OUTA, "$(INSTR)$(NAME):MT1 PP") + field(OUTB, "$(INSTR)$(NAME):MT2 PP") + field(OUTC, "$(INSTR)$(NAME):MT3 PP") + field(OUTD, "$(INSTR)$(NAME):MT4 PP") +} + +# record(dfanout,"$(INSTR)$(NAME):RESET_MT") +# { +# field(OMSL, "supervisory") +# field(SELM, "All") +# field(OUTA, "$(INSTR)$(NAME):RESET_MT1 PP") +# field(OUTB, "$(INSTR)$(NAME):RESET_MT2 PP") +# field(OUTC, "$(INSTR)$(NAME):RESET_MT3 PP") +# field(OUTD, "$(INSTR)$(NAME):RESET_MT4 PP") +# } + +record(dfanout,"$(INSTR)$(NAME):CMONITORS") +{ + field(SELM, "All") + field(OMSL, "supervisory") + field(OUTA, "$(INSTR)$(NAME):C1 PP") + field(OUTB, "$(INSTR)$(NAME):C2 PP") + field(OUTC, "$(INSTR)$(NAME):C3 PP") + field(OUTD, "$(INSTR)$(NAME):C4 PP") +} + ################################################################################ # Count Commands diff --git a/db/daq_8ch.db b/db/daq_8ch.db index fa49da6..ece1e16 100644 --- a/db/daq_8ch.db +++ b/db/daq_8ch.db @@ -25,6 +25,54 @@ record(longin, "$(INSTR)$(NAME):MONITOR-CHANNEL_RBV") field(DISP, 1) } +record(ai, "$(INSTR)$(NAME):HW_MT") +{ + field(DESC, "Monitor threshold to actually use") + field(INP, "$(INSTR)$(NAME):MT1 NPP") +} + +record(dfanout,"$(INSTR)$(NAME):RESET_HW_MT") +{ + field(OMSL, "supervisory") + field(SELM, "All") + field(OUTA, "$(INSTR)$(NAME):MT1 PP") + field(OUTB, "$(INSTR)$(NAME):MT2 PP") + field(OUTC, "$(INSTR)$(NAME):MT3 PP") + field(OUTD, "$(INSTR)$(NAME):MT4 PP") + field(OUTE, "$(INSTR)$(NAME):MT5 PP") + field(OUTF, "$(INSTR)$(NAME):MT6 PP") + field(OUTG, "$(INSTR)$(NAME):MT7 PP") + field(OUTH, "$(INSTR)$(NAME):MT8 PP") +} + +# record(dfanout,"$(INSTR)$(NAME):RESET_MT") +# { +# field(OMSL, "supervisory") +# field(SELM, "All") +# field(OUTA, "$(INSTR)$(NAME):RESET_MT1 PP") +# field(OUTB, "$(INSTR)$(NAME):RESET_MT2 PP") +# field(OUTC, "$(INSTR)$(NAME):RESET_MT3 PP") +# field(OUTD, "$(INSTR)$(NAME):RESET_MT4 PP") +# field(OUTE, "$(INSTR)$(NAME):RESET_MT5 PP") +# field(OUTF, "$(INSTR)$(NAME):RESET_MT6 PP") +# field(OUTG, "$(INSTR)$(NAME):RESET_MT7 PP") +# field(OUTH, "$(INSTR)$(NAME):RESET_MT8 PP") +# } + +record(dfanout,"$(INSTR)$(NAME):CMONITORS") +{ + field(SELM, "All") + field(OMSL, "supervisory") + field(OUTA, "$(INSTR)$(NAME):C1 PP") + field(OUTB, "$(INSTR)$(NAME):C2 PP") + field(OUTC, "$(INSTR)$(NAME):C3 PP") + field(OUTD, "$(INSTR)$(NAME):C4 PP") + field(OUTE, "$(INSTR)$(NAME):C5 PP") + field(OUTF, "$(INSTR)$(NAME):C6 PP") + field(OUTG, "$(INSTR)$(NAME):C7 PP") + field(OUTH, "$(INSTR)$(NAME):C8 PP") +} + ################################################################################ # Count Commands diff --git a/db/daq_common.db b/db/daq_common.db index f7b68af..1a75c10 100644 --- a/db/daq_common.db +++ b/db/daq_common.db @@ -22,6 +22,24 @@ record(longout, "$(INSTR)$(NAME):FULL-RESET") field(DTYP, "stream") } +record(dfanout, "$(INSTR)$(NAME):RESET") +{ + field(DESC, "Reset internal state") + field(SELM, "All") + field(OMSL, "closed_loop") + field(DOL, "0") + # Internal Count Timer + field(OUTA, "$(INSTR)$(NAME):COUNT_STARTED PP") + # Time Preset + # field(OUTB, "$(INSTR)$(NAME):HW_ETT PP") + # field(OUTC, "$(INSTR)$(NAME):ET_CLEARED PP") + # Monitor Presets + # field(OUTD, "$(INSTR)$(NAME):RESET_HW_MT PP") + # field(OUTE, "$(INSTR)$(NAME):RESET_MT PP") + # HW Preset Type + # field(OUTF, "$(INSTR)$(NAME):PRESET-TYPE PP") +} + ################################################################################ # Status Variables @@ -107,6 +125,13 @@ record(bi, "$(INSTR)$(NAME):IS_PAUSED") field(ONAM, "PAUSED") } +record(longin, "$(INSTR)$(NAME):COUNT_STARTED") +{ + field(DESC, "Internal Sent Start Count") + field(VAL, 0) + field(PINI, "YES") +} + record(calc, "$(INSTR)$(NAME):MAP-STATUS") { field(DESC, "Maps Raw Status to State") @@ -116,7 +141,8 @@ record(calc, "$(INSTR)$(NAME):MAP-STATUS") field(INPD, "$(INSTR)$(NAME):COUNTING_PRESET PP MS") field(INPE, "$(INSTR)$(NAME):IS_LOWRATE PP MS") field(INPF, "$(INSTR)$(NAME):IS_PAUSED PP MS") - field(CALC, "(A=1||B=1)?4:(F=1)?3:(C=0&&D=0)?0:(E=1)?2:1") + field(INPG, "$(INSTR)$(NAME):COUNT_STARTED NPP MS") + field(CALC, "(A=1||B=1)?4:(F=1)?3:(C=0&&D=0&&G<=0)?0:(E=1)?2:1") field(FLNK, "$(INSTR)$(NAME):STATUS") } @@ -135,6 +161,52 @@ record(mbbi, "$(INSTR)$(NAME):STATUS") # 4 should never happen, if it does it means the DAQ reports undocumented statusbits field(FRVL, "4") field(FRST, "INVALID") + field(FLNK, "$(INSTR)$(NAME):RESET-P-PRESET") +} + +record(calcout, "$(INSTR)$(NAME):RESET-P-PRESET") +{ + field(INPA, "$(INSTR)$(NAME):STATUS NPP") + field(CALC, "A") + field(OOPT, "Transition To Zero") + field(DOPT, "Use OCAL") + field(OCAL, "0") + field(OUT, "$(INSTR)$(NAME):PRESET-TYPE PP") + field(FLNK, "$(INSTR)$(NAME):RESET-HW_ETT") +} + +record(calcout, "$(INSTR)$(NAME):RESET-HW_ETT") +{ + field(INPA, "$(INSTR)$(NAME):STATUS NPP") + field(CALC, "A") + field(OOPT, "Transition To Zero") + field(DOPT, "Use OCAL") + field(OCAL, "0") + field(OUT, "$(INSTR)$(NAME):HW_ETT PP") + field(FLNK, "$(INSTR)$(NAME):RESET-HW-PRESET") +} + +record(calcout, "$(INSTR)$(NAME):RESET-HW-PRESET") +{ + field(INPA, "$(INSTR)$(NAME):STATUS NPP") + field(CALC, "A") + field(OOPT, "Transition To Zero") + field(DOPT, "Use OCAL") + field(OCAL, "0") + field(OUT, "$(INSTR)$(NAME):RESET_HW_MT PP") + field(FLNK, "$(INSTR)$(NAME):Z_COUNT_STARTED") +} + +record(calcout, "$(INSTR)$(NAME):Z_COUNT_STARTED") +{ + field(INPA, "$(INSTR)$(NAME):COUNT_STARTED NPP") + field(INPB, "$(INSTR)$(NAME):COUNTING_TIME NPP MS") + field(INPC, "$(INSTR)$(NAME):COUNTING_PRESET NPP MS") + field(CALC, "A") + field(DOPT, "Use OCAL") + field(OCAL, "(B||C)?0:A-1") + field(OOPT, "When Non-zero") + field(OUT, "$(INSTR)$(NAME):COUNT_STARTED PP") } record(longin, "$(INSTR)$(NAME):CHANNELS") @@ -149,52 +221,142 @@ record(bo, "$(INSTR)$(NAME):ETT") { field(DESC, "Trigger Clearing Status") field(VAL, 1) - field(OUT, "$(INSTR)$(NAME):ETS PP") + field(OUT, "$(INSTR)$(NAME):ET_CLEARED PP") } # Trigger a change in status as value returned to 0 record(seq, "$(INSTR)$(NAME):ETO") { field(DESC, "Trigger Returned to 0 Status") - field(LNK0, "$(INSTR)$(NAME):ETS PP") + field(LNK0, "$(INSTR)$(NAME):ET_CLEARED PP") field(DO0, 0) field(SELM, "Specified") field(SELL, "$(INSTR)$(NAME):ELAPSED-TIME.VAL") + field(FLNK, "$(INSTR)$(NAME):ETS") } # Current Status of Channel, i.e. is it ready to count? -record(bi, "$(INSTR)$(NAME):ETS") +record(bi, "$(INSTR)$(NAME):ET_CLEARED") { field(DESC, "Channel Status") field(VAL, 0) - field(ZNAM, "OK") + field(ZNAM, "CLEARED") field(ONAM, "CLEARING") } +record(calc, "$(INSTR)$(NAME):ETS") +{ + field(DESC, "Stupid Nicos Stuff") + field(INPA, "$(INSTR)$(NAME):STATUS NPP") + field(INPB, "$(INSTR)$(NAME):ET_CLEARED NPP") + field(CALC, "A == 1 || B") + field(FLNK, "$(INSTR)$(NAME):ETCHECK") +} + +# Time Threshold +record(int64in, "$(INSTR)$(NAME):HW_ETT") +{ + field(DESC, "Time Threshold") + field(VAL, 0) + field(FLNK, "$(INSTR)$(NAME):SET-TYPE-TIME") +} + +# Stop the count, if threshold is reached +record(calcout, "$(INSTR)$(NAME):ETCHECK") +{ + field(INPA, "$(INSTR)$(NAME):ELAPSED-TIME NPP") + field(INPB, "$(INSTR)$(NAME):HW_ETT NPP") + field(CALC, "B > 0 && A >= B") + field(OOPT, "When Non-zero") + field(OUT, "$(INSTR)$(NAME):STOP.PROC") +} + +record(calcout, "$(INSTR)$(NAME):SET-TYPE-TIME") +{ + field(INPA, "$(INSTR)$(NAME):PRESET-TYPE NPP") + field(INPB, "$(INSTR)$(NAME):HW_ETT NPP") + field(CALC, "A=0 && B>0") + field(OOPT, "When Non-zero") + field(DOPT, "Use OCAL") + field(OCAL, "1") + field(OUT, "$(INSTR)$(NAME):PRESET-TYPE PP") +} + ################################################################################ # Count Commands -record(ao,"$(INSTR)$(NAME):PRESET-COUNT") +record(mbbi, "$(INSTR)$(NAME):PRESET-TYPE") { - field(DESC, "Count until preset reached") - field(DTYP, "stream") - field(OUT, "@$(PROTO) startWithCountPreset$(CHANNELS)($(INSTR)$(NAME):) $(ASYN_PORT)") - field(VAL, 0) - field(PREC, 2) - field(FLNK, "$(INSTR)$(NAME):RAW-STATUS") + field(DESC, "Type of Hardware Preset") + field(ZRVL, "0") + field(ZRST, "Unset") + field(ONVL, "1") + field(ONST, "Time") + field(TWVL, "2") + field(TWST, "Monitor") + field(VAL, 0) + field(PINI, "YES") +} + +record(bo,"$(INSTR)$(NAME):START") +{ + field(DESC, "Zero, then trigger") + field(FLNK, "$(INSTR)$(NAME):PREPARE") +} + +record(dfanout,"$(INSTR)$(NAME):PREPARE") +{ + field(DESC, "Zero channels") + field(SELM, "All") + field(OMSL, "supervisory") + # Elapsed Time + field(OUTA, "$(INSTR)$(NAME):CT PP") + field(OUTB, "$(INSTR)$(NAME):CMONITORS PP") + field(FLNK, "$(INSTR)$(NAME):TRIGGER") +} + +record(seq,"$(INSTR)$(NAME):TRIGGER") +{ + field(DESC, "Actually triggers sending start") + field(DO1, 1) + field(LNK1, "$(INSTR)$(NAME):PRESET-TIME.PROC") + field(DO2, 1) + field(LNK2, "$(INSTR)$(NAME):PRESET-COUNT.PROC") + field(SELM, "Specified") + field(SELL, "$(INSTR)$(NAME):PRESET-TYPE NPP") + field(FLNK, "$(INSTR)$(NAME):O_COUNT_STARTED") +} + +record(longout, "$(INSTR)$(NAME):O_COUNT_STARTED") +{ + field(OMSL, "closed_loop") + field(DOL, 5) + field(OUT, "$(INSTR)$(NAME):COUNT_STARTED PP") } record(ao,"$(INSTR)$(NAME):PRESET-TIME") { field(DESC, "Count for specified time") field(DTYP, "stream") + field(OMSL, "closed_loop") + field(DOL, "$(INSTR)$(NAME):HW_ETT NPP") field(OUT, "@$(PROTO) startWithTimePreset$(CHANNELS)($(INSTR)$(NAME):) $(ASYN_PORT)") - field(VAL, 0) field(PREC, 2) field(EGU, "seconds") field(FLNK, "$(INSTR)$(NAME):RAW-STATUS") } +record(ao,"$(INSTR)$(NAME):PRESET-COUNT") +{ + field(DESC, "Count until preset reached") + field(DTYP, "stream") + field(OMSL, "closed_loop") + field(DOL, "$(INSTR)$(NAME):HW_MT PP") + field(OUT, "@$(PROTO) startWithCountPreset$(CHANNELS)($(INSTR)$(NAME):) $(ASYN_PORT)") + field(PREC, 0) + field(FLNK, "$(INSTR)$(NAME):RAW-STATUS") +} + record(bo,"$(INSTR)$(NAME):PAUSE") { field(DESC, "Pause the current count")