moves time channel specific to own file and makes similar to channel file
Example Action / Lint (push) Successful in 3s
Example Action / BuildAndTest (push) Failing after 9s

This commit is contained in:
2026-06-05 13:13:07 +02:00
parent 0789462aed
commit 521deaa921
11 changed files with 252 additions and 224 deletions
+1
View File
@@ -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
+9 -8
View File
@@ -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")
}
################################################################################
+10 -10
View File
@@ -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";}
}
+37 -68
View File
@@ -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
+15 -15
View File
@@ -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
+19 -19
View File
@@ -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
+23 -104
View File
@@ -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")
}
+132
View File
@@ -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")
}
+2
View File
@@ -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")
+2
View File
@@ -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")
+2
View File
@@ -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")