diff --git a/Makefile b/Makefile index 8e7762c..367c1d3 100644 --- a/Makefile +++ b/Makefile @@ -13,6 +13,7 @@ REQUIRED+=stream # DB files to include in the release TEMPLATES += db/channels.db +TEMPLATES += db/time.db TEMPLATES += db/gating_channels.db TEMPLATES += db/daq_4ch.db TEMPLATES += db/daq_8ch.db diff --git a/db/channels.db b/db/channels.db index 72469e6..df3b66b 100644 --- a/db/channels.db +++ b/db/channels.db @@ -49,7 +49,7 @@ record(dfanout, "$(INSTR)$(NAME):CH$(CHANNEL)_POLL") field(OMSL, "closed_loop") field(DOL, 1) field(OUTA, "$(INSTR)$(NAME):CH$(CHANNEL)_HWCS.PROC") - field(OUTB, "$(INSTR)$(NAME):CH$(CHANNEL)_STSRAW.PROC") + field(OUTB, "$(INSTR)$(NAME):CH$(CHANNEL)_STS_RAW.PROC") field(OUTC, "$(INSTR)$(NAME):CH$(CHANNEL)_REACHED.PROC") } @@ -58,6 +58,7 @@ record(dfanout, "$(INSTR)$(NAME):CH$(CHANNEL)_POLL") record(bi, "$(INSTR)$(NAME):CH$(CHANNEL)_CLEARED") { + field(DESC, "are hw counts being cleared") field(VAL, 0) field(ZNAM, "Cleared") field(ONAM, "Clearing") @@ -66,7 +67,7 @@ record(bi, "$(INSTR)$(NAME):CH$(CHANNEL)_CLEARED") # Trigger a change in status as value returned to 0 record(seq, "$(INSTR)$(NAME):CH$(CHANNEL)_HWCS") { - field(DESC, "Trigger Returned to 0 Status") + field(DESC, "Trigger returned to 0 status") field(SELM, "Specified") field(SELL, "$(INSTR)$(NAME):CH$(CHANNEL).VAL") field(DO0, 0) @@ -95,9 +96,9 @@ record(longout, "$(INSTR)$(NAME):CH$(CHANNEL)_HWC") ################################################################################ # Determining Channel Status -record(calc, "$(INSTR)$(NAME):CH$(CHANNEL)_STSRAW") +record(calc, "$(INSTR)$(NAME):CH$(CHANNEL)_STS_RAW") { - field(DESC, "Channel Status") + field(DESC, "Raw Channel Status") field(INPA, "$(INSTR)$(NAME):STATUS NPP") field(INPB, "$(INSTR)$(NAME):CH$(CHANNEL)_CLEARED NPP") field(INPC, "$(INSTR)$(NAME):CH$(CHANNEL)_SET NPP") @@ -109,7 +110,7 @@ record(calc, "$(INSTR)$(NAME):CH$(CHANNEL)_STSRAW") record(mbbi, "$(INSTR)$(NAME):CH$(CHANNEL)_STS") { field(DESC, "Channel Status") - field(INP, "$(INSTR)$(NAME):CH$(CHANNEL)_STSRAW NPP MS") + field(INP, "$(INSTR)$(NAME):CH$(CHANNEL)_STS_RAW NPP MS") field(ZRVL, "0") field(ZRST, "Idle") field(ONVL, "1") @@ -142,7 +143,7 @@ record(calcout, "$(INSTR)$(NAME):CH$(CHANNEL)_REACHED") record(bi, "$(INSTR)$(NAME):CH$(CHANNEL)_SET") { - field(DESC, "Channel Status") + field(DESC, "is preset being configured") field(VAL, 0) field(ZNAM, "Set") field(ONAM, "Setting") @@ -180,7 +181,7 @@ record(dfanout, "$(INSTR)$(NAME):CH$(CHANNEL)_SETTING") record(calcout, "$(INSTR)$(NAME):CH$(CHANNEL)_IN_HW") { field(DESC, "Possible to configure in HW") - field(INPA, "$(INSTR)$(NAME):PRESET-TYPE NPP") + field(INPA, "$(INSTR)$(NAME):PRESET_TYPE NPP") field(INPB, "$(INSTR)$(NAME):CH$(CHANNEL)_PRESET NPP") field(INPC, "$(INSTR)$(NAME):MONITOR-CHANNEL.DRVH NPP") field(CALC, "A=0 && B>0 && $(CHANNEL)<=C") @@ -203,7 +204,7 @@ record(ao, "$(INSTR)$(NAME):CH$(CHANNEL)_SET_PTYPE") { field(OMSL, "closed_loop") field(DOL, 2) - field(OUT, "$(INSTR)$(NAME):PRESET-TYPE PP") + field(OUT, "$(INSTR)$(NAME):PRESET_TYPE PP") } ################################################################################ diff --git a/db/daq.proto b/db/daq.proto index 18f9fe0..ff1af45 100644 --- a/db/daq.proto +++ b/db/daq.proto @@ -1,12 +1,12 @@ # # SinqDAQ Protocol File -# +# OutTerminator = CR; InTerminator = CR; -ReadTimeout = 100; -WriteTimeout = 100; -ReplyTimeout = 1000; -LockTimeout = 500; +ReadTimeout = 100; +WriteTimeout = 100; +ReplyTimeout = 1000; +LockTimeout = 500; initialise { out "RMT 1"; # Turn on Remote Control @@ -141,25 +141,25 @@ readRateMonitor{ readAll4 { out "RA"; - in "%(\$1ELAPSED-TIME)f %(\$1M1)d %(\$1M2)d %(\$1M3)d %(\$1M4)d"; + in "%(\$1T)f %(\$1CH1)d %(\$1CH2)d %(\$1CH3)d %(\$1CH4)d"; @mismatch{in "%(\$1MsgTxt)s";} } readAll8 { out "RA"; - in "%(\$1ELAPSED-TIME)f %(\$1M1)d %(\$1M2)d %(\$1M3)d %(\$1M4)d %(\$1M5)d %(\$1M6)d %(\$1M7)d %(\$1M8)d"; + in "%(\$1T)f %(\$1CH1)d %(\$1CH2)d %(\$1CH3)d %(\$1CH4)d %(\$1CH5)d %(\$1CH6)d %(\$1CH7)d %(\$1CH8)d"; @mismatch{in "%(\$1MsgTxt)s";} } readAll10 { out "RA"; - in "%(\$1ELAPSED-TIME)f %(\$1M1)d %(\$1M2)d %(\$1M3)d %(\$1M4)d %(\$1M5)d %(\$1M6)d %(\$1M7)d %(\$1M8)d"; + in "%(\$1T)f %(\$1CH1)d %(\$1CH2)d %(\$1CH3)d %(\$1CH4)d %(\$1CH5)d %(\$1CH6)d %(\$1CH7)d %(\$1CH8)d"; # At least on the sinqtest variant this is broken # requiring channels 9 and 10 to be manually queried out "RC 9"; - in "%(\$1M9)d"; + in "%(\$1CH9)d"; out "RC 10"; - in "%(\$1M10)d"; + in "%(\$1CH10)d"; @mismatch{in "%(\$1MsgTxt)s";} } diff --git a/db/daq_2nd_gen.db b/db/daq_2nd_gen.db index 512e303..ff03e73 100644 --- a/db/daq_2nd_gen.db +++ b/db/daq_2nd_gen.db @@ -20,18 +20,17 @@ 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, ".5 second") - field(FLNK, "$(INSTR)$(NAME):CORRECT-MONITOR-CHANNEL.PROC") + field(FLNK, "$(INSTR)$(NAME):CORRECT_MONITOR_CHANNEL.PROC") } # Force back to 1 if it is 0, as 0 has no meaning... -record(seq, "$(INSTR)$(NAME):CORRECT-MONITOR-CHANNEL") +record(seq, "$(INSTR)$(NAME):CORRECT_MONITOR_CHANNEL") { field(SELM, "Specified") field(SELL, "$(INSTR)$(NAME):MONITOR-CHANNEL_RBV.VAL NPP") @@ -39,7 +38,7 @@ record(seq, "$(INSTR)$(NAME):CORRECT-MONITOR-CHANNEL") field(LNK0, "$(INSTR)$(NAME):MONITOR-CHANNEL PP") } -record(sel, "$(INSTR)$(NAME):HW_MT") +record(sel, "$(INSTR)$(NAME):CH_PRESET") { field(DESC, "Monitor threshold to actually use") field(SELM, "Specified") @@ -57,16 +56,17 @@ record(sel, "$(INSTR)$(NAME):HW_MT") field(INPK, "$(INSTR)$(NAME):CH10_PRESET NPP") } -record(dfanout,"$(INSTR)$(NAME):RESET_HW_MT") +record(dfanout,"$(INSTR)$(NAME):CH_PRESET_CLEAR") { + field(DESC, "Clears all channel presets") field(SELM, "All") field(OMSL, "closed_loop") field(DOL, 1) - field(OUTA, "$(INSTR)$(NAME):RESET_HW_MT1.PROC") - field(OUTB, "$(INSTR)$(NAME):RESET_HW_MT2.PROC") + field(OUTA, "$(INSTR)$(NAME):CH_PRESET_CLEAR1.PROC") + field(OUTB, "$(INSTR)$(NAME):CH_PRESET_CLEAR2.PROC") } -record(dfanout,"$(INSTR)$(NAME):RESET_HW_MT1") +record(dfanout,"$(INSTR)$(NAME):CH_PRESET_CLEAR1") { field(SELM, "All") field(OMSL, "closed_loop") @@ -81,7 +81,7 @@ record(dfanout,"$(INSTR)$(NAME):RESET_HW_MT1") field(OUTH, "$(INSTR)$(NAME):CH8_PRESET PP") } -record(dfanout,"$(INSTR)$(NAME):RESET_HW_MT2") +record(dfanout,"$(INSTR)$(NAME):CH_PRESET_CLEAR2") { field(SELM, "All") field(OMSL, "closed_loop") @@ -90,82 +90,54 @@ record(dfanout,"$(INSTR)$(NAME):RESET_HW_MT2") field(OUTB, "$(INSTR)$(NAME):CH10_PRESET 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") +record(dfanout,"$(INSTR)$(NAME):CH_CLEAR") { + field(DESC, "Clears all channel counts") field(SELM, "All") - field(OMSL, "supervisory") - field(OUTA, "$(INSTR)$(NAME):CMONITORS1 PP") - field(OUTB, "$(INSTR)$(NAME):CMONITORS2 PP") + field(OMSL, "closed_loop") + field(DOL, 1) + field(OUTA, "$(INSTR)$(NAME):CH_CLEAR1.PROC PP") + field(OUTB, "$(INSTR)$(NAME):CH_CLEAR2.PROC PP") } -record(dfanout,"$(INSTR)$(NAME):CMONITORS1") +record(dfanout,"$(INSTR)$(NAME):CH_CLEAR1") { field(SELM, "All") - field(OMSL, "supervisory") - field(OUTA, "$(INSTR)$(NAME):CH1_CLEAR PP") - field(OUTB, "$(INSTR)$(NAME):CH2_CLEAR PP") - field(OUTC, "$(INSTR)$(NAME):CH3_CLEAR PP") - field(OUTD, "$(INSTR)$(NAME):CH4_CLEAR PP") - field(OUTE, "$(INSTR)$(NAME):CH5_CLEAR PP") - field(OUTF, "$(INSTR)$(NAME):CH6_CLEAR PP") - field(OUTG, "$(INSTR)$(NAME):CH7_CLEAR PP") - field(OUTH, "$(INSTR)$(NAME):CH8_CLEAR PP") + field(OMSL, "closed_loop") + field(DOL, 1) + field(OUTA, "$(INSTR)$(NAME):CH1_CLEAR.PROC PP") + field(OUTB, "$(INSTR)$(NAME):CH2_CLEAR.PROC PP") + field(OUTC, "$(INSTR)$(NAME):CH3_CLEAR.PROC PP") + field(OUTD, "$(INSTR)$(NAME):CH4_CLEAR.PROC PP") + field(OUTE, "$(INSTR)$(NAME):CH5_CLEAR.PROC PP") + field(OUTF, "$(INSTR)$(NAME):CH6_CLEAR.PROC PP") + field(OUTG, "$(INSTR)$(NAME):CH7_CLEAR.PROC PP") + field(OUTH, "$(INSTR)$(NAME):CH8_CLEAR.PROC PP") } -record(dfanout,"$(INSTR)$(NAME):CMONITORS2") +record(dfanout,"$(INSTR)$(NAME):CH_CLEAR2") { field(SELM, "All") - field(OMSL, "supervisory") - field(OUTA, "$(INSTR)$(NAME):CH9_CLEAR PP") - field(OUTB, "$(INSTR)$(NAME):CH10_CLEAR PP") + field(OMSL, "closed_loop") + field(DOL, 1) + field(OUTA, "$(INSTR)$(NAME):CH9_CLEAR.PROC PP") + field(OUTB, "$(INSTR)$(NAME):CH10_CLEAR.PROC PP") } ################################################################################ -# Count Commands - # The hardware stores a separate threshold for each channel, which is somewhat # unintuitive for the user, as only one can actually be made use of at a time. # So, we just write the threshold value to all channels when it is changed. -record(dfanout,"$(INSTR)$(NAME):THRESHOLD-F") +record(dfanout,"$(INSTR)$(NAME):CH_THRESHOLD") { + field(DESC, "Sets Channel Lowrate Thresholds") field(OMSL, "supervisory") field(SELM, "All") - field(OUTA, "$(INSTR)$(NAME):THRESHOLD-F1 PP") - field(OUTB, "$(INSTR)$(NAME):THRESHOLD-F2 PP") + field(OUTA, "$(INSTR)$(NAME):CH_THRESHOLD1 PP") + field(OUTB, "$(INSTR)$(NAME):CH_THRESHOLD2 PP") } -record(dfanout,"$(INSTR)$(NAME):THRESHOLD-F1") +record(dfanout,"$(INSTR)$(NAME):CH_THRESHOLD1") { field(OMSL, "supervisory") field(SELM, "All") @@ -179,13 +151,10 @@ record(dfanout,"$(INSTR)$(NAME):THRESHOLD-F1") field(OUTH, "$(INSTR)$(NAME):CH8_THRESH PP") } -record(dfanout,"$(INSTR)$(NAME):THRESHOLD-F2") +record(dfanout,"$(INSTR)$(NAME):CH_THRESHOLD2") { field(OMSL, "supervisory") field(SELM, "All") field(OUTA, "$(INSTR)$(NAME):CH9_THRESH PP") field(OUTB, "$(INSTR)$(NAME):CH10_THRESH PP") } - -################################################################################ -# Read all monitors values diff --git a/db/daq_4ch.db b/db/daq_4ch.db index 87cb984..3fd4367 100644 --- a/db/daq_4ch.db +++ b/db/daq_4ch.db @@ -25,40 +25,43 @@ record(longin, "$(INSTR)$(NAME):MONITOR-CHANNEL_RBV") field(DISP, 1) } -record(ai, "$(INSTR)$(NAME):HW_MT") +record(ai, "$(INSTR)$(NAME):CH_PRESET") { field(DESC, "Monitor threshold to actually use") field(INP, "$(INSTR)$(NAME):CH1_PRESET NPP") } -record(dfanout,"$(INSTR)$(NAME):RESET_HW_MT") +record(dfanout,"$(INSTR)$(NAME):CH_PRESET_CLEAR") { - field(OMSL, "supervisory") + field(DESC, "Clears all channel presets") field(SELM, "All") + field(OMSL, "closed_loop") + field(DOL, 0) field(OUTA, "$(INSTR)$(NAME):CH1_PRESET PP") field(OUTB, "$(INSTR)$(NAME):CH2_PRESET PP") field(OUTC, "$(INSTR)$(NAME):CH3_PRESET PP") field(OUTD, "$(INSTR)$(NAME):CH4_PRESET PP") } -record(dfanout,"$(INSTR)$(NAME):CMONITORS") +record(dfanout,"$(INSTR)$(NAME):CH_CLEAR") { + field(DESC, "Clears all channel counts") field(SELM, "All") - field(OMSL, "supervisory") - field(OUTA, "$(INSTR)$(NAME):CH1_CLEAR PP") - field(OUTB, "$(INSTR)$(NAME):CH2_CLEAR PP") - field(OUTC, "$(INSTR)$(NAME):CH3_CLEAR PP") - field(OUTD, "$(INSTR)$(NAME):CH4_CLEAR PP") + field(OMSL, "closed_loop") + field(DOL, 1) + field(OUTA, "$(INSTR)$(NAME):CH1_CLEAR.PROC PP") + field(OUTB, "$(INSTR)$(NAME):CH2_CLEAR.PROC PP") + field(OUTC, "$(INSTR)$(NAME):CH3_CLEAR.PROC PP") + field(OUTD, "$(INSTR)$(NAME):CH4_CLEAR.PROC PP") } ################################################################################ -# Count Commands - # The hardware stores a separate threshold for each channel, which is somewhat # unintuitive for the user, as only one can actually be made use of at a time. # So, we just write the threshold value to all channels when it is changed. -record(dfanout,"$(INSTR)$(NAME):THRESHOLD-F") +record(dfanout,"$(INSTR)$(NAME):CH_THRESHOLD") { + field(DESC, "Sets Channel Lowrate Thresholds") field(OMSL, "supervisory") field(SELM, "All") field(OUTA, "$(INSTR)$(NAME):CH1_THRESH PP") @@ -66,6 +69,3 @@ record(dfanout,"$(INSTR)$(NAME):THRESHOLD-F") field(OUTC, "$(INSTR)$(NAME):CH3_THRESH PP") field(OUTD, "$(INSTR)$(NAME):CH4_THRESH PP") } - -################################################################################ -# Read all monitors values diff --git a/db/daq_8ch.db b/db/daq_8ch.db index 675d3fb..27b628a 100644 --- a/db/daq_8ch.db +++ b/db/daq_8ch.db @@ -25,16 +25,18 @@ record(longin, "$(INSTR)$(NAME):MONITOR-CHANNEL_RBV") field(DISP, 1) } -record(ai, "$(INSTR)$(NAME):HW_MT") +record(ai, "$(INSTR)$(NAME):CH_PRESET") { field(DESC, "Monitor threshold to actually use") field(INP, "$(INSTR)$(NAME):CH1_PRESET NPP") } -record(dfanout,"$(INSTR)$(NAME):RESET_HW_MT") +record(dfanout,"$(INSTR)$(NAME):CH_PRESET_CLEAR") { - field(OMSL, "supervisory") + field(DESC, "Clears all channel presets") field(SELM, "All") + field(OMSL, "closed_loop") + field(DOL, 0) field(OUTA, "$(INSTR)$(NAME):CH1_PRESET PP") field(OUTB, "$(INSTR)$(NAME):CH2_PRESET PP") field(OUTC, "$(INSTR)$(NAME):CH3_PRESET PP") @@ -45,28 +47,29 @@ record(dfanout,"$(INSTR)$(NAME):RESET_HW_MT") field(OUTH, "$(INSTR)$(NAME):CH8_PRESET PP") } -record(dfanout,"$(INSTR)$(NAME):CMONITORS") +record(dfanout,"$(INSTR)$(NAME):CH_CLEAR") { + field(DESC, "Clears all channel counts") field(SELM, "All") - field(OMSL, "supervisory") - field(OUTA, "$(INSTR)$(NAME):CH1_CLEAR PP") - field(OUTB, "$(INSTR)$(NAME):CH2_CLEAR PP") - field(OUTC, "$(INSTR)$(NAME):CH3_CLEAR PP") - field(OUTD, "$(INSTR)$(NAME):CH4_CLEAR PP") - field(OUTE, "$(INSTR)$(NAME):CH5_CLEAR PP") - field(OUTF, "$(INSTR)$(NAME):CH6_CLEAR PP") - field(OUTG, "$(INSTR)$(NAME):CH7_CLEAR PP") - field(OUTH, "$(INSTR)$(NAME):CH8_CLEAR PP") + field(OMSL, "closed_loop") + field(DOL, 1) + field(OUTA, "$(INSTR)$(NAME):CH1_CLEAR.PROC PP") + field(OUTB, "$(INSTR)$(NAME):CH2_CLEAR.PROC PP") + field(OUTC, "$(INSTR)$(NAME):CH3_CLEAR.PROC PP") + field(OUTD, "$(INSTR)$(NAME):CH4_CLEAR.PROC PP") + field(OUTE, "$(INSTR)$(NAME):CH5_CLEAR.PROC PP") + field(OUTF, "$(INSTR)$(NAME):CH6_CLEAR.PROC PP") + field(OUTG, "$(INSTR)$(NAME):CH7_CLEAR.PROC PP") + field(OUTH, "$(INSTR)$(NAME):CH8_CLEAR.PROC PP") } ################################################################################ -# Count Commands - # The hardware stores a separate threshold for each channel, which is somewhat # unintuitive for the user, as only one can actually be made use of at a time. # So, we just write the threshold value to all channels when it is changed. -record(dfanout,"$(INSTR)$(NAME):THRESHOLD-F") +record(dfanout,"$(INSTR)$(NAME):CH_THRESHOLD") { + field(DESC, "Sets Channel Lowrate Thresholds") field(OMSL, "supervisory") field(SELM, "All") field(OUTA, "$(INSTR)$(NAME):CH1_THRESH PP") @@ -78,6 +81,3 @@ record(dfanout,"$(INSTR)$(NAME):THRESHOLD-F") field(OUTG, "$(INSTR)$(NAME):CH7_THRESH PP") field(OUTH, "$(INSTR)$(NAME):CH8_THRESH PP") } - -################################################################################ -# Read all monitors values diff --git a/db/daq_common.db b/db/daq_common.db index eda311d..2e9ff53 100644 --- a/db/daq_common.db +++ b/db/daq_common.db @@ -32,13 +32,13 @@ record(dfanout, "$(INSTR)$(NAME):RESET") # 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") + # field(OUTB, "$(INSTR)$(NAME):T_PRESET PP") + # field(OUTC, "$(INSTR)$(NAME):T_CLEARED PP") # Monitor Presets - # field(OUTD, "$(INSTR)$(NAME):RESET_HW_MT PP") + # field(OUTD, "$(INSTR)$(NAME):CH_PRESET_CLEAR PP") # field(OUTE, "$(INSTR)$(NAME):RESET_MT PP") # HW Preset Type - # field(OUTF, "$(INSTR)$(NAME):PRESET-TYPE PP") + # field(OUTF, "$(INSTR)$(NAME):PRESET_TYPE PP") } ################################################################################ @@ -162,39 +162,39 @@ 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") + field(FLNK, "$(INSTR)$(NAME):PRESET_TYPE_CLEAR") } -record(calcout, "$(INSTR)$(NAME):RESET-P-PRESET") +record(calcout, "$(INSTR)$(NAME):PRESET_TYPE_CLEAR") { 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") + field(OUT, "$(INSTR)$(NAME):PRESET_TYPE PP") + field(FLNK, "$(INSTR)$(NAME):T_PRESET_CLEAR") } -record(calcout, "$(INSTR)$(NAME):RESET-HW_ETT") +record(calcout, "$(INSTR)$(NAME):T_PRESET_CLEAR") { 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") + field(OUT, "$(INSTR)$(NAME):T_PRESET PP") + field(FLNK, "$(INSTR)$(NAME):PRESET_CLEAR") } -record(calcout, "$(INSTR)$(NAME):RESET-HW-PRESET") +record(calcout, "$(INSTR)$(NAME):PRESET_CLEAR") { 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(OUT, "$(INSTR)$(NAME):CH_PRESET_CLEAR PP") field(FLNK, "$(INSTR)$(NAME):Z_COUNT_STARTED") } @@ -217,76 +217,10 @@ record(longin, "$(INSTR)$(NAME):CHANNELS") field(DISP, 1) } -# Trigger a change in status as clearing -record(bo, "$(INSTR)$(NAME):ETT") -{ - field(DESC, "Trigger Clearing Status") - field(VAL, 1) - 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):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):ET_CLEARED") -{ - field(DESC, "Channel Status") - field(VAL, 0) - 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(mbbi, "$(INSTR)$(NAME):PRESET-TYPE") +record(mbbi, "$(INSTR)$(NAME):PRESET_TYPE") { field(DESC, "Type of Hardware Preset") field(ZRVL, "0") @@ -311,8 +245,8 @@ record(dfanout,"$(INSTR)$(NAME):PREPARE") field(SELM, "All") field(OMSL, "supervisory") # Elapsed Time - field(OUTA, "$(INSTR)$(NAME):CT PP") - field(OUTB, "$(INSTR)$(NAME):CMONITORS PP") + field(OUTA, "$(INSTR)$(NAME):T_HWC PP") + field(OUTB, "$(INSTR)$(NAME):CH_CLEAR PP") field(FLNK, "$(INSTR)$(NAME):TRIGGER") } @@ -320,13 +254,13 @@ record(seq,"$(INSTR)$(NAME):TRIGGER") { field(DESC, "Actually triggers sending start") field(DO0, 1) - field(LNK0, "$(INSTR)$(NAME):FAKE-HW-COUNT.PROC") + field(LNK0, "$(INSTR)$(NAME):PRESET-SOFT.PROC") 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(SELL, "$(INSTR)$(NAME):PRESET_TYPE NPP") field(FLNK, "$(INSTR)$(NAME):O_COUNT_STARTED") } @@ -337,12 +271,12 @@ record(longout, "$(INSTR)$(NAME):O_COUNT_STARTED") field(OUT, "$(INSTR)$(NAME):COUNT_STARTED PP") } -record(ao, "$(INSTR)$(NAME):FAKE-HW-COUNT") +record(ao, "$(INSTR)$(NAME):PRESET-SOFT") { field(DESC, "Count forever :)") field(OMSL, "closed_loop") field(DOL, "15768000") # Half a year :) - field(OUT, "$(INSTR)$(NAME):HW_ETT") + field(OUT, "$(INSTR)$(NAME):T_PRESET") field(FLNK, "$(INSTR)$(NAME):PRESET-TIME") } @@ -351,7 +285,7 @@ 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(DOL, "$(INSTR)$(NAME):T_PRESET NPP") field(OUT, "@$(PROTO) startWithTimePreset$(CHANNELS)($(INSTR)$(NAME):) $(ASYN_PORT)") field(PREC, 2) field(EGU, "seconds") @@ -363,7 +297,7 @@ 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(DOL, "$(INSTR)$(NAME):CH_PRESET PP") field(OUT, "@$(PROTO) startWithCountPreset$(CHANNELS)($(INSTR)$(NAME):) $(ASYN_PORT)") field(PREC, 0) field(FLNK, "$(INSTR)$(NAME):RAW-STATUS") @@ -405,7 +339,7 @@ record(ao,"$(INSTR)$(NAME):THRESHOLD") field(DRVH, "100000") # Maximum Rate field(OMSL, "supervisory") field(OROC, "0") - field(OUT, "$(INSTR)$(NAME):THRESHOLD-F PP") + field(OUT, "$(INSTR)$(NAME):CH_THRESHOLD PP") } record(ai,"$(INSTR)$(NAME):THRESHOLD_RBV") @@ -446,14 +380,6 @@ record(calcout, "$(INSTR)$(NAME):THRESHOLD-MONITOR-FLNK") field(OUT, "$(INSTR)$(NAME):THRESHOLD_RBV.PROC PP") } -record(longout, "$(INSTR)$(NAME):CT") -{ - field(DESC, "Clear the timer") - field(DTYP, "stream") - field(OUT, "@$(PROTO) clearTimer($(INSTR)$(NAME):) $(ASYN_PORT)") - field(FLNK, "$(INSTR)$(NAME):ETT") -} - ################################################################################ # Read all monitors values @@ -464,10 +390,3 @@ record(ai, "$(INSTR)$(NAME):READALL") field(DTYP, "stream") field(FLNK, "$(INSTR)$(NAME):MAP-STATUS") } - -record(ai,"$(INSTR)$(NAME):ELAPSED-TIME") -{ - field(DESC, "DAQ Measured Time") - field(EGU, "sec") - field(FLNK, "$(INSTR)$(NAME):ETO") -} diff --git a/db/time.db b/db/time.db new file mode 100644 index 0000000..cdc539e --- /dev/null +++ b/db/time.db @@ -0,0 +1,132 @@ +# EPICS Database for streamdevice specific to time channel +# +# Macros +# INSTR - Prefix +# NAME - the device name, e.g. EL737 +# PROTO - Stream device protocol file +# ASYN_PORT - Low level Asyn IP Port to DAQ + +################################################################################ +# Time Channel Specific + +# Updated by READALL, at POLL_FREQ frequency +record(ai,"$(INSTR)$(NAME):T") +{ + field(DESC, "DAQ Measured Time") + field(EGU, "sec") + field(FLNK, "$(INSTR)$(NAME):T_POLL") +} + +################################################################################ +# Poll Loop + +record(dfanout, "$(INSTR)$(NAME):T_POLL") +{ + field(DESC, "Channel $(CHANNEL) poll sequence") + field(SELM, "All") + field(OMSL, "closed_loop") + field(DOL, 1) + field(OUTA, "$(INSTR)$(NAME):T_HWCS.PROC") + field(OUTB, "$(INSTR)$(NAME):T_STS_RAW.PROC") + field(OUTC, "$(INSTR)$(NAME):TIME_REACHED.PROC") +} + +################################################################################ +# Clearing Time + +# Current Status of Channel, i.e. is it ready to count? +record(bi, "$(INSTR)$(NAME):T_CLEARED") +{ + field(DESC, "is hw time being cleared") + field(VAL, 0) + field(ZNAM, "Cleared") + field(ONAM, "Clearing") +} + +# Trigger a change in status as value returned to 0 +record(seq, "$(INSTR)$(NAME):T_HWCS") +{ + field(DESC, "Trigger returned to 0 status") + field(LNK0, "$(INSTR)$(NAME):T_CLEARED PP") + field(DO0, 0) + field(SELM, "Specified") + field(SELL, "$(INSTR)$(NAME):T.VAL") +} + +# Trigger a change in status as clearing +record(dfanout, "$(INSTR)$(NAME):T_CLEAR") +{ + field(DESC, "Clears the time channel count") + field(SELM, "All") + field(OMSL, "closed_loop") + field(DOL, 1) + field(OUTA, "$(INSTR)$(NAME):T_CLEARED PP") + field(OUTB, "$(INSTR)$(NAME):T_HWC.PROC PP") +} + +record(longout, "$(INSTR)$(NAME):T_HWC") +{ + field(DESC, "Clear in Hardware") + field(DTYP, "stream") + field(OMSL, "closed_loop") + field(DOL, "1") + field(OUT, "@$(PROTO) clearTimer($(INSTR)$(NAME):) $(ASYN_PORT)") +} + +################################################################################ +# Determining Time Channel Status + +record(calc, "$(INSTR)$(NAME):T_STS_RAW") +{ + field(DESC, "Raw time channel status") + field(INPA, "$(INSTR)$(NAME):STATUS NPP MS") + field(INPB, "$(INSTR)$(NAME):T_CLEARED NPP") + field(CALC, "A == 1 || B") + field(FLNK, "$(INSTR)$(NAME):T_STS") +} + +# Current Status of Channel, i.e. is it ready for a new operation? +record(mbbi, "$(INSTR)$(NAME):T_STS") +{ + field(DESC, "Time channel status") + field(INP, "$(INSTR)$(NAME):T_STS_RAW NPP MS") + field(ZRVL, "0") + field(ZRST, "Idle") + field(ONVL, "1") + field(ONST, "Busy") +} + +################################################################################ +# Time Channel Preset + +# If set, stop count once preset reached +record(int64in, "$(INSTR)$(NAME):T_PRESET") +{ + field(DESC, "Time Preset") + field(VAL, 0) + field(FLNK, "$(INSTR)$(NAME):TIME_SET_PTYPE") +} + +record(calcout, "$(INSTR)$(NAME):TIME_REACHED") +{ + field(DESC, "Stop if preset reached") + field(INPA, "$(INSTR)$(NAME):T NPP") + field(INPB, "$(INSTR)$(NAME):T_PRESET NPP") + field(CALC, "B > 0 && A >= B") + field(OOPT, "When Non-zero") + field(OUT, "$(INSTR)$(NAME):STOP.PROC") +} + +################################################################################ +# Setting Time Channel Preset + +record(calcout, "$(INSTR)$(NAME):TIME_SET_PTYPE") +{ + field(INPA, "$(INSTR)$(NAME):PRESET_TYPE NPP") + field(INPB, "$(INSTR)$(NAME):T_PRESET 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") +} diff --git a/scripts/daq_2nd_gen.cmd b/scripts/daq_2nd_gen.cmd index f9879cf..8f0d8f1 100644 --- a/scripts/daq_2nd_gen.cmd +++ b/scripts/daq_2nd_gen.cmd @@ -15,6 +15,8 @@ drvAsynIPPortConfigure("ASYN_$(NAME)", "$($(NAME)_DAQ_HOST)", 0, 0, 0) dbLoadRecords("$(sinqDAQ_DB)daq_common.db", "INSTR=$(INSTR), NAME=$(NAME), PROTO=$(PROTO), ASYN_PORT=ASYN_$(NAME), CHANNELS=10, RATE_OKAY_BIT=$(RATE_OKAY_BIT=0)") dbLoadRecords("$(sinqDAQ_DB)daq_2nd_gen.db", "INSTR=$(INSTR), NAME=$(NAME), PROTO=$(PROTO), ASYN_PORT=ASYN_$(NAME), CHANNELS=10") +dbLoadRecords("$(sinqDAQ_DB)time.db", "INSTR=$(INSTR), NAME=$(NAME), PROTO=$(PROTO), ASYN_PORT=ASYN_$(NAME)") + # Could also use substitions instead. dbLoadRecords("$(sinqDAQ_DB)channels.db", "INSTR=$(INSTR), NAME=$(NAME), PROTO=$(PROTO), ASYN_PORT=ASYN_$(NAME), CHANNEL=1") dbLoadRecords("$(sinqDAQ_DB)channels.db", "INSTR=$(INSTR), NAME=$(NAME), PROTO=$(PROTO), ASYN_PORT=ASYN_$(NAME), CHANNEL=2") diff --git a/scripts/daq_4ch.cmd b/scripts/daq_4ch.cmd index 208dfc1..a896616 100644 --- a/scripts/daq_4ch.cmd +++ b/scripts/daq_4ch.cmd @@ -15,6 +15,8 @@ drvAsynIPPortConfigure("ASYN_$(NAME)", "$($(NAME)_DAQ_HOST)", 0, 0, 0) dbLoadRecords("$(sinqDAQ_DB)daq_common.db", "INSTR=$(INSTR), NAME=$(NAME), PROTO=$(PROTO), ASYN_PORT=ASYN_$(NAME), CHANNELS=4, RATE_OKAY_BIT=$(RATE_OKAY_BIT=0)") dbLoadRecords("$(sinqDAQ_DB)daq_4ch.db", "INSTR=$(INSTR), NAME=$(NAME), PROTO=$(PROTO), ASYN_PORT=ASYN_$(NAME)") +dbLoadRecords("$(sinqDAQ_DB)time.db", "INSTR=$(INSTR), NAME=$(NAME), PROTO=$(PROTO), ASYN_PORT=ASYN_$(NAME)") + # Could also use substitions instead. dbLoadRecords("$(sinqDAQ_DB)channels.db", "INSTR=$(INSTR), NAME=$(NAME), PROTO=$(PROTO), ASYN_PORT=ASYN_$(NAME), CHANNEL=1") dbLoadRecords("$(sinqDAQ_DB)channels.db", "INSTR=$(INSTR), NAME=$(NAME), PROTO=$(PROTO), ASYN_PORT=ASYN_$(NAME), CHANNEL=2") diff --git a/scripts/daq_8ch.cmd b/scripts/daq_8ch.cmd index af2f1be..58dcf57 100644 --- a/scripts/daq_8ch.cmd +++ b/scripts/daq_8ch.cmd @@ -15,6 +15,8 @@ drvAsynIPPortConfigure("ASYN_$(NAME)", "$($(NAME)_DAQ_HOST)", 0, 0, 0) dbLoadRecords("$(sinqDAQ_DB)daq_common.db", "INSTR=$(INSTR), NAME=$(NAME), PROTO=$(PROTO), ASYN_PORT=ASYN_$(NAME), CHANNELS=8, RATE_OKAY_BIT=$(RATE_OKAY_BIT=0)") dbLoadRecords("$(sinqDAQ_DB)daq_8ch.db", "INSTR=$(INSTR), NAME=$(NAME), PROTO=$(PROTO), ASYN_PORT=ASYN_$(NAME)") +dbLoadRecords("$(sinqDAQ_DB)time.db", "INSTR=$(INSTR), NAME=$(NAME), PROTO=$(PROTO), ASYN_PORT=ASYN_$(NAME)") + # Could also use substitions instead. dbLoadRecords("$(sinqDAQ_DB)channels.db", "INSTR=$(INSTR), NAME=$(NAME), PROTO=$(PROTO), ASYN_PORT=ASYN_$(NAME), CHANNEL=1") dbLoadRecords("$(sinqDAQ_DB)channels.db", "INSTR=$(INSTR), NAME=$(NAME), PROTO=$(PROTO), ASYN_PORT=ASYN_$(NAME), CHANNEL=2")