adds software time preset, improves preset monitor switching logic
Example Action / Lint (push) Successful in 9s
Example Action / BuildAndTest (push) Failing after 14s

This commit is contained in:
2026-05-11 10:41:04 +02:00
parent 6ecc3e8e86
commit a413fecc43
5 changed files with 133 additions and 4 deletions
+49 -4
View File
@@ -10,6 +10,15 @@
################################################################################
# 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)")
{
@@ -37,13 +46,14 @@ record(bi, "$(INSTR)$(NAME):M$(CHANNEL)_CLEARED")
field(ONAM, "CLEARING")
}
# Current Status of Channel, i.e. is it ready to count?
# 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(CALC, "A == 1 || B")
field(INPC, "$(INSTR)$(NAME):M$(CHANNEL)_PRESET NPP")
field(CALC, "A == 1 || B || C")
field(FLNK, "$(INSTR)$(NAME):MTS$(CHANNEL)")
}
@@ -52,7 +62,7 @@ record(int64in, "$(INSTR)$(NAME):MT$(CHANNEL)")
{
field(DESC, "Monitor Count Threshold")
field(VAL, 0)
field(FLNK, "$(INSTR)$(NAME):SET-TYPE-MON$(CHANNEL)")
field(FLNK, "$(INSTR)$(NAME):M$(CHANNEL)_SET")
}
# Stop the count, if threshold is reached
@@ -65,6 +75,42 @@ record(calcout, "$(INSTR)$(NAME):MTS$(CHANNEL)")
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")
@@ -78,7 +124,6 @@ record(calcout, "$(INSTR)$(NAME):SET-TYPE-MON$(CHANNEL)")
field(OUT, "$(INSTR)$(NAME):SET-HW-CHANNEL$(CHANNEL).PROC")
}
# TODO, it might be necessary to wait for this to complete
record(ao, "$(INSTR)$(NAME):SET-HW-CHANNEL$(CHANNEL)")
{
field(OMSL, "closed_loop")
+31
View File
@@ -87,6 +87,37 @@ record(dfanout,"$(INSTR)$(NAME):RESET_HW_MT2")
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")
+10
View File
@@ -41,6 +41,16 @@ record(dfanout,"$(INSTR)$(NAME):RESET_HW_MT")
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")
+14
View File
@@ -45,6 +45,20 @@ record(dfanout,"$(INSTR)$(NAME):RESET_HW_MT")
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")
+29
View File
@@ -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
@@ -232,6 +250,7 @@ record(calc, "$(INSTR)$(NAME):ETS")
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
@@ -242,6 +261,16 @@ record(int64in, "$(INSTR)$(NAME):HW_ETT")
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")