# $Source: /cvs/G/DRV/SATECO/SATECO_base.template,v $
# $Date: 2008/10/28 14:01:25 $
# $Revision: 1.20 $
# $Author: wang_x1 $
# Required substitutions:
# NAME - prefix, e.g. X99SA-ES1-CRYOJET:
# UNIT - temperature unit
# PTCOLS - StreamDevice protocol file
# PORT - port name
# The Alarm Status of this record is used to trigger WATCHDOG
record(stringin, "$(NAME):VERSION")
{
field(DESC, "control version")
field(DTYP, "stream")
field(INP, "@$(PTCOLS) GET_VERSION $(PORT)")
field(SCAN, "1 second")
field(DISV, "0")
field(SDIS, "$(NAME):WATCHDOG.VAL")
field(FLNK, "$(NAME):ONESHOT")
}
##############################################
# Controller Mode
##############################################
record(mbbi, "$(NAME):MODE_RBV")
{
field(DESC, "control mode")
field(DTYP, "stream")
field(INP, "@$(PTCOLS) GET_MODE $(PORT)")
field(ZRVL, "0")
field(ONVL, "1")
field(ZRST, "Local")
field(ONST, "Remote")
field(SCAN, "1 second")
field(DISV, "0")
field(SDIS, "$(NAME):WATCHDOG.VAL")
}
record(mbbo, "$(NAME):MODE")
{
field(DESC, "control mode")
field(DTYP, "stream")
field(OUT, "@$(PTCOLS) SET_MODE $(PORT)")
field(ZRVL, "0")
field(ONVL, "1")
field(ZRST, "Local")
field(ONST, "Remote")
field(DISV, "0")
field(SDIS, "$(NAME):WATCHDOG.VAL")
}
##############################################
# Connection Status Monitor
##############################################
record(mbbo, "$(NAME):CONN-STAT")
{
field(DESC, "connection status")
field(ZRVL, "0")
field(ONVL, "1")
field(TWVL, "2")
field(ZRST, "Disconnected")
field(ONST, "Connected")
field(TWST, "Connecting")
field(ZRSV, "MAJOR")
field(ONSV, "NO_ALARM")
field(TWSV, "MINOR")
}
record(bo, "$(NAME):CONN")
{
field(DESC, "turn on/off connection")
field(ZNAM, "Disconnect")
field(ONAM, "Connect")
field(ZSV, "MAJOR")
field(OSV, "NO_ALARM")
field(OUT, "$(NAME):CONN-DFAN.VAL PP")
field(FLNK, "$(NAME):CONN-CALC")
}
record(dfanout, "$(NAME):CONN-DFAN")
{
field(DESC, "fanout connect action")
field(OMSL, "supervisory")
field(OUTA, "$(NAME):ASYNIO.ENBL")
# field(OUTB, "$(NAME):ENBLSCAN.VAL")
field(OUTC, "$(NAME):WATCHDOG.VAL PP")
}
record(calcout, "$(NAME):CONN-CALC")
{
field(DESC, "connecting")
field(INPA, "$(NAME):CONN.VAL")
field(CALC, "A=1?2:0")
field(DOPT, "Use CALC")
field(OOPT, "Transition To Non-zero")
field(OUT, "$(NAME):CONN-STAT.VAL PP MS")
field(SCAN, "Passive")
}
record(calcout, "$(NAME):ONESHOT")
{
field(DESC, "watchdog trigger")
field(INPA, "$(NAME):VERSION.STAT")
field(CALC, "A=0?1:0")
field(OOPT, "When Non-zero")
field(OUT, "$(NAME):WATCHDOG.VAL PP MS")
field(SCAN, "Passive")
}
record(bo, "$(NAME):ENBLSCAN")
{
field(DESC, "enable/disable record scan")
field(DTYP, "Soft Channel")
field(SCAN, "Passive")
field(ZNAM, "Disable")
field(ONAM, "Enable")
}
record(bo, "$(NAME):WATCHDOG")
{
field(DESC, "connection indicator")
field(DTYP, "Soft Channel")
field(HIGH, "15")
field(SCAN, "Passive")
field(OUT, "$(NAME):CONN-STAT.VAL PP")
field(ZNAM, "Disconnected")
field(ONAM, "Connected")
field(ZSV, "MAJOR")
field(OSV, "NO_ALARM")
}
record(asyn, "$(NAME):ASYNIO")
{
field(DESC, "asyn port")
field(PORT, "$(PORT)")
}
record(calcout, "$(NAME):TRIG-CONN")
{
field(DESC, "trigger scan")
field(INPA, "$(NAME):WATCHDOG.VAL CPP MS")
field(CALC, "A")
field(OUT, "$(NAME):CONN.VAL PP MS")
field(OOPT, "Transition To Zero")
}
###########################################
# PID
###########################################
record(ao, "$(NAME):P")
{
field(DESC, "PID - proportion set-point")
field(DTYP, "stream")
field(OUT, "@$(PTCOLS) SET_P($(NAME)) $(PORT)")
field(DISV, "0")
field(SDIS, "$(NAME):WATCHDOG.VAL")
field(PREC, "1")
}
record(ai, "$(NAME):P_RBV")
{
field(DESC, "PID - proportion readback")
field(DTYP, "stream")
field(INP, "@$(PTCOLS) GET_P $(PORT)")
field(SCAN, "1 second")
field(DISV, "0")
field(SDIS, "$(NAME):WATCHDOG.VAL")
field(PREC, "1")
}
record(ao, "$(NAME):I")
{
field(DESC, "PID - integral set-point")
field(DTYP, "stream")
field(OUT, "@$(PTCOLS) SET_I($(NAME)) $(PORT)")
field(DISV, "0")
field(SDIS, "$(NAME):WATCHDOG.VAL")
field(PREC, "1")
}
record(ai, "$(NAME):I_RBV")
{
field(DESC, "PID - integral readback")
field(DTYP, "stream")
field(INP, "@$(PTCOLS) GET_I $(PORT)")
field(SCAN, "1 second")
field(DISV, "0")
field(SDIS, "$(NAME):WATCHDOG.VAL")
field(PREC, "1")
}
record(ao, "$(NAME):D")
{
field(DESC, "PID - derivative set-point")
field(DTYP, "stream")
field(OUT, "@$(PTCOLS) SET_D($(NAME)) $(PORT)")
field(DISV, "0")
field(SDIS, "$(NAME):WATCHDOG.VAL")
field(PREC, "1")
}
record(ai, "$(NAME):D_RBV")
{
field(DESC, "PID - derivative readback")
field(DTYP, "stream")
field(INP, "@$(PTCOLS) GET_D $(PORT)")
field(SCAN, "1 second")
field(DISV, "0")
field(SDIS, "$(NAME):WATCHDOG.VAL")
field(PREC, "1")
}
###########################################
# Heating Level
###########################################
record(ao, "$(NAME):HT-LVL")
{
field(DESC, "heater level set-point")
field(DTYP, "stream")
field(OUT, "@$(PTCOLS) SET_HEAT-LEVEL $(PORT)")
field(DISV, "0")
field(SDIS, "$(NAME):WATCHDOG.VAL")
field(HOPR, "100")
field(LOPR, "0")
field(PREC, "1")
field(EGU, "%")
}
record(ai, "$(NAME):HT-LVL_RBV")
{
field(DESC, "heater level readback")
field(DTYP, "stream")
field(INP, "@$(PTCOLS) GET_HEAT-LEVEL $(PORT)")
field(SCAN, "1 second")
field(DISV, "0")
field(SDIS, "$(NAME):WATCHDOG.VAL")
field(HOPR, "100")
field(LOPR, "0")
field(PREC, "1")
field(EGU, "%")
}
###########################################
# Temperature
###########################################
record(ai, "$(NAME):TEMP_RBV")
{
field(DESC, "temperature")
field(DTYP, "stream")
field(INP, "@$(PTCOLS) GET_TEMP $(PORT)")
field(FLNK, "$(NAME):TEMP-AVG")
field(SCAN, "1 second")
field(DISV, "0")
field(SDIS, "$(NAME):WATCHDOG.VAL")
field(PREC, "2")
field(EGU, "$(UNIT)")
}
record(ao, "$(NAME):TEMP")
{
field(DESC, "temperature")
field(DTYP, "stream")
field(OUT, "@$(PTCOLS) SET_TEMP $(PORT)")
field(DISV, "0")
field(SDIS, "$(NAME):WATCHDOG.VAL")
field(PREC, "2")
field(EGU, "$(UNIT)")
field(FLNK, "$(NAME):GO-1 PP MS")
}
#!
record(ai, "$(NAME):TEMP-SP")
{
field(DESC, "temperature setpoint")
field(DTYP, "stream")
field(INP, "@$(PTCOLS) GET_TEMP-SP $(PORT)")
field(DISV, "0")
field(SDIS, "$(NAME):WATCHDOG.VAL")
field(PREC, "2")
field(EGU, "$(UNIT)")
}
###########################################
# busy record for temperature set-point
###########################################
record(calcout, "$(NAME):GO-1")
{
field(DESC, "")
field(INPA, "$(NAME):TEMP.SIMM")
field(CALC, "A=1?0:1")
field(OUT, "$(NAME):GO-2 PP MS")
field(OOPT, "When Non-zero")
}
record(bo, "$(NAME):GO-2")
{
field(DESC, "")
field(DTYP, "Soft Channel")
field(OMSL, "supervisory")
field(VAL, "1")
field(OUT, "$(NAME):BUSY.VAL PP MS")
# update TEMP-STAT, not waiting for next readback
field(FLNK, "$(NAME):RNG-CALC")
}
record(busy, "$(NAME):BUSY")
{
}
###########################################
# Temperature Status Monitor
###########################################
record(longout, "$(NAME):SETTL-PRD")
{
field(DESC, "settling time")
field(EGU, "s")
field(VAL, "120")
field(FLNK, "$(NAME):TEMP-AVG")
}
record(ao, "$(NAME):TOLERANCE")
{
field(DESC, "tolerance band width")
field(EGU, "$(UNIT)")
field(VAL, "1")
field(PREC, "2")
}
record(sub, "$(NAME):TEMP-AVG")
{
field(DESC, "temperature average")
field(INPA, "$(NAME):SETTL-PRD.VAL")
field(INPB, "$(NAME):TEMP_RBV.VAL")
field(INPD, "0") # Continuous Mode
field(INAM, "initSubAve")
field(SNAM, "SubAve")
field(PREC, "2")
field(SCAN, "Passive")
field(FLNK, "$(NAME):RNG-CALC")
}
record(calcout, "$(NAME):RNG-CALC")
{
field(DESC, "temperature status calc")
field(INPA, "$(NAME):TEMP-AVG.VAL")
field(INPB, "$(NAME):TEMP.VAL")
field(INPC, "$(NAME):TOLERANCE.VAL")
field(INPD, "$(NAME):TEMP_RBV.VAL")
field(CALC, "(ABS(A-B)<=C)&&(ABS(D-B)<=C)?0:1")
field(DOPT, "Use CALC")
field(OOPT, "When Zero")
field(OUT, "$(NAME):BUSY.VAL PP MS")
field(FLNK, "$(NAME):TEMP-STAT.VAL PP MS")
field(SCAN, "Passive")
}
record(mbbo, "$(NAME):TEMP-STAT")
{
field(DESC, "temperature status")
field(DOL, "$(NAME):RNG-CALC MS")
field(OMSL, "closed_loop")
field(ZRVL, "0")
field(ONVL, "1")
field(ZRST, "Inside Range")
field(ONST, "Out of Range")
field(ZRSV, "NO_ALARM")
field(ONSV, "MAJOR")
field(SCAN, "Passive")
}
###########################################
# For Debug Use
###########################################
record(stringout, "$(NAME):QUERY")
{
field(DESC, "debug - query")
field(DTYP, "stream")
field(OUT, "@$(PTCOLS) QUERY($(NAME):RECV.VAL) $(PORT)")
field(DISV, "0")
field(SDIS, "$(NAME):WATCHDOG.VAL")
}
record(stringout, "$(NAME):RECV")
{
field(DESC, "debug - received message")
field(DTYP, "Soft Channel")
}
###########################################
# retrieve temp set-point when connected
###########################################
record(calcout, "$(NAME):TRIG-STAT")
{
field(DESC, "trigger TRIG-SP")
field(INPA, "$(NAME):CONN-STAT.VAL CPP MS")
field(CALC, "A=1?1:0")
field(OUT, "$(NAME):TEMP-SIMM1.VAL PP MS")
field(OOPT, "Transition To Non-zero")
}
record(bo, "$(NAME):TEMP-SIMM1")
{
field(DESC, "set TEMP in simulation")
field(OUT, "$(NAME):TEMP.SIMM")
field(FLNK, "$(NAME):SEQ")
}
record(sseq, "$(NAME):SEQ")
{
field(SELM, "All")
field(WAIT1,"Wait")
field(DO1, "1")
field(LNK1, "$(NAME):TEMP-SP.PROC CA")
field(DOL2, "$(NAME):TEMP-SP.VAL")
field(LNK2, "$(NAME):TEMP.VAL PP")
field(FLNK, "$(NAME):TEMP-SIMM2")
}
record(bo, "$(NAME):TEMP-SIMM2")
{
field(DESC, "reset TEMP out simulation")
field(DOL, "0")
field(OUT, "$(NAME):TEMP.SIMM")
field(OMSL, "closed_loop")
}