# 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, "(0 < A && A < 4) || 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 # TODO type 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") }