Files
sinqDAQ/db/time.db
T
wall_e 008a879d75
Example Action / Lint (push) Successful in 2s
Example Action / BuildAndTest (push) Successful in 37s
fixes tests
2026-06-05 14:22:05 +02:00

133 lines
3.5 KiB
Plaintext

# 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, "Time 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")
}