133 lines
3.5 KiB
Plaintext
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")
|
|
}
|