WIP: presets all managed on epics side, separates presets from starting #8
+106
-4
@@ -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")
|
||||
|
wall_e
commented
maybe preset_status and clearing_status instead maybe preset_status and clearing_status instead
|
||||
{
|
||||
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
|
||||
|
||||
|
||||
+111
-1
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
+175
-13
@@ -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")
|
||||
|
wall_e
commented
should probably just be start should probably just be start
|
||||
{
|
||||
field(DESC, "Zero channels")
|
||||
field(SELM, "All")
|
||||
field(OMSL, "supervisory")
|
||||
|
wall_e
commented
closed_loop closed_loop
|
||||
# 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")
|
||||
|
||||
Reference in New Issue
Block a user
rethink naming as possible
clearing
and
no
yes