Files
sinqepicsapp/iocBoot/iocsinqEPICS/lakeshore.db
2015-08-21 16:16:18 +02:00

25653 lines
604 KiB
Plaintext

################################################################
#
# Lakeshore 336/350 Temperature Controller template file.
#
# Macros:
# P - Prefix for PV name
# PORT - Bus/Port Address (eg. ASYN Port).
# ADDR - Address on the bus (optional)
# TEMPSCAN - SCAN rate for the temperature/voltage readings
# SCAN - SCAN rate for non-temperature/voltage parameters.
# ADEL (optional) - Archive deadband for temperatures
# MDEL (optional) - Monitor deadband for temperatures
#
# Notes: The loop/output dependant PVs are in a seperate template file, included in this one.
# Generally, set records forward process the associated read records in order
# to update the read record faster than their SCAN rate otherwise would do (but they
# are not processed in the same processing chain).
#
# Matt Pearson, June 2013
#
# June 2014 - modified to support Lakeshore 350. The 350 is almost
# identical to the 336 so I just had to modify menu
# options. I also added in support for the 3062 option card.
#
# June 2014 - factor out input sensor records into lakeshore_input.template
# and add support for reading input sensor descriptions. This
# is also used in lakeshore_option_3062.template.
#
################################################################
record(bo, "KM36:TST:LS:DISABLE") {
field(DESC, "Disable set records")
field(PINI, "YES")
field(VAL, "0")
field(OMSL, "supervisory")
field(ZNAM, "Set Enabled")
field(ONAM, "Set Disabled")
field(ZSV, "NO_ALARM")
field(OSV, "MAJOR")
}
record(bo, "KM36:TST:LS:DISABLE_POLL") {
field(DESC, "Disable polling")
field(PINI, "YES")
field(VAL, "0")
field(OMSL, "supervisory")
field(ZNAM, "Poll Enabled")
field(ONAM, "Poll Disabled")
field(ZSV, "NO_ALARM")
field(OSV, "MAJOR")
}
################################################################
# Read records
################################################################
##
## Read the ID string from the device.
##
record(stringin, "KM36:TST:LS:ID") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(INP, "@ls336.proto getID serial1 0")
field(SCAN, "Passive")
field(PINI, "YES")
}
##
## Read the model number from the device.
##
record(stringin, "KM36:TST:LS:MODEL") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(INP, "@ls336.proto getMODEL serial1 0")
field(SCAN, "I/O Intr")
}
##
## Read the serial number from the device.
##
record(stringin, "KM36:TST:LS:SERIAL") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(INP, "@ls336.proto getSERIAL serial1 0")
field(SCAN, "I/O Intr")
}
##
## Read the firmware from the device.
##
record(stringin, "KM36:TST:LS:FIRMWARE") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(INP, "@ls336.proto getFIRMWARE serial1 0")
field(SCAN, "I/O Intr")
}
##
## Read the tuning status from the device.
##
#record(stringin, "KM36:TST:LS:TUNEST") {
# field(DTYP, "stream")
# field(SDIS, "KM36:TST:LS:DISABLE_POLL")
# field(INP, "@ls336.proto getTUNEST serial1 0")
# field(SCAN, "5 second")
#}
##
## Read the tuning status success parameter
##
#record(bi, "KM36:TST:LS:TUNESTSUCCESS") {
# field(DTYP, "stream")
# field(SDIS, "KM36:TST:LS:DISABLE_POLL")
# field(INP, "@ls336.proto getTUNESTSUCCESS serial1 0")
# field(SCAN, "5 second")
# field(ZNAM, "No Error")
# field(ONAM, "Error (see manual)")
#}
################################################################
# Input sensor records
################################################################
record(bo, "KM36:TST:LS:DISABLE_0") {
field(DESC, "Disable A polling")
field(PINI, "YES")
field(VAL, "1")
field(OMSL, "supervisory")
field(ZNAM, "Enabled")
field(ONAM, "Disabled")
field(ZSV, "NO_ALARM")
field(OSV, "MINOR")
info(autosaveFields, "VAL")
}
record(bo, "KM36:TST:LS:DISABLE_1") {
field(DESC, "Disable B polling")
field(PINI, "YES")
field(VAL, "1")
field(OMSL, "supervisory")
field(ZNAM, "Enabled")
field(ONAM, "Disabled")
field(ZSV, "NO_ALARM")
field(OSV, "MINOR")
info(autosaveFields, "VAL")
}
record(bo, "KM36:TST:LS:DISABLE_2") {
field(DESC, "Disable C polling")
field(PINI, "YES")
field(VAL, "1")
field(OMSL, "supervisory")
field(ZNAM, "Enabled")
field(ONAM, "Disabled")
field(ZSV, "NO_ALARM")
field(OSV, "MINOR")
info(autosaveFields, "VAL")
}
record(bo, "KM36:TST:LS:DISABLE_3") {
field(DESC, "Disable D polling")
field(PINI, "YES")
field(VAL, "1")
field(OMSL, "supervisory")
field(ZNAM, "Enabled")
field(ONAM, "Disabled")
field(ZSV, "NO_ALARM")
field(OSV, "MINOR")
info(autosaveFields, "VAL")
}
# Template to provide the records required for an input.
# This makes use of the macros required by lakeshore336.template
# but also requires macros to specify the input channel and index.
# The index is to provide a way for the developer to use a different
# channel naming scheme.
#
# For some commands, I hard coded the last part of the record names into
# the protocol file. This seems the easiest way to deal with commands
# will lots of params returned back, and avoid problematic long INP fields.
# For the ZONE commands I used waveforms and subarrays, but that is not as simple.
#
# Macros:
# INPUT - A to D, or D1 to D5
# INDEX - Index to use for the input channel PV name and DESC (eg. 0 to 3)
# DISABLE - PV name to use for SDIS
##
## Alarm summary record for input
## This summarizes the software limits on the temperature readings,
## the alarm status reading from the controller and the input reading status.
##
record(calc, "KM36:TST:LS:ALARM0_SUMMARY_CALC") {
field(INPA, "KM36:TST:LS:KRDG0 CP MS")
field(INPB, "KM36:TST:LS:ALARM0_HIGH CP MS")
field(INPC, "KM36:TST:LS:ALARM0_LOW CP MS")
field(INPD, "KM36:TST:LS:RDGST0 CP MS")
field(CALC, "A")
field(FLNK, "KM36:TST:LS:ALARM0_SUMMARY_CALC2")
field(SDIS, "KM36:TST:LS:DISABLE_0")
}
record(calcout, "KM36:TST:LS:ALARM0_SUMMARY_CALC2") {
field(INPA, "KM36:TST:LS:ALARM0_SUMMARY_CALC.STAT")
field(CALC, "A!=0?1:0")
field(DOPT, "Use CALC")
field(OOPT, "Every Time")
field(OUT, "KM36:TST:LS:ALARM0_SUMMARY PP")
}
record(bi, "KM36:TST:LS:ALARM0_SUMMARY") {
field(ZNAM, "No Alarm")
field(ONAM, "Alarm")
field(OSV, "MAJOR")
field(PINI, "YES")
field(VAL, "0")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## If we disable polling this input, disable the alarm
##
record(calcout, "KM36:TST:LS:ALARM0_SUMMARY_DISABLE") {
field(INPA, "KM36:TST:LS:DISABLE_0 CP")
field(CALC, "A==1?0:1")
field(DOPT, "Use CALC")
field(OOPT, "When Zero")
field(OUT, "KM36:TST:LS:ALARM0_SUMMARY.VAL PP")
}
##
## Read the temperature on channel 0 in Kelvin.
##
record(ai, "KM36:TST:LS:KRDG0") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_0")
field(DESC, "Channel 0 Temperature")
field(INP, "@ls336.proto getKRDG(A) serial1 0")
field(SCAN, "1 second")
field(PREC, "3")
field(EGU, "K")
field(HHSV,"MAJOR")
field(HSV, "MINOR")
field(LSV, "MINOR")
field(LLSV,"MAJOR")
field(HYST,"1.0")
field(HIHI,"1000")
field(HIGH,"1000")
field(LOW,"-1")
field(LOLO,"-1")
field(ADEL, "1")
field(MDEL, "0")
info(autosaveFields, "HIHI HIGH LOW LOLO ADEL MDEL")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the raw voltage on channel 0.
##
record(ai, "KM36:TST:LS:SRDG0") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_0")
field(INP, "@ls336.proto getSRDG(A) serial1 0")
field(SCAN, "1 second")
field(PREC, "3")
field(EGU, "V")
field(ADEL, "1")
field(MDEL, "0")
}
##
## Set sensor 0 name
##
record(stringout, "KM36:TST:LS:INNAME_S0") {
field(DESC, "Input 0 Name")
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setINNAME(A) serial1 0")
field(FLNK, "KM36:TST:LS:INNAME0.PROC CA")
}
##
## Read input sensor 0 name
##
record(stringin, "KM36:TST:LS:INNAME0") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(INP, "@ls336.proto getINNAME(A) serial1 0")
field(PINI, "YES")
field(SCAN, "Passive")
}
##
## Read the high alarm status for input 0.
## This also populates ALARM0_LOW
##
record(bi, "KM36:TST:LS:ALARM0_HIGH") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_0")
field(INP, "@ls336.proto getALARMST(A,KM36:TST:LS:ALARM0_LOW) serial1 0")
field(SCAN, "5 second")
field(ZNAM, "Off")
field(ONAM, "On")
field(OSV, "MAJOR")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the low alarm status for input 0
##
record(bi, "KM36:TST:LS:ALARM0_LOW") {
field(DTYP, "Soft Channel")
field(ZNAM, "Off")
field(ONAM, "On")
field(OSV, "MAJOR")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the alarm parameters.
## NOTE: the last part of the record name is hard coded into protocol file.
##
record(bi, "KM36:TST:LS:ALARM0") {
field(DESC, "Read Alarm Params")
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_0")
field(INP, "@ls336.proto getALARM(A,KM36:TST:LS:ALARM0) serial1 0")
field(SCAN, "5 second")
}
##
## Read the rest of the alarm params.
## NOTE: the last part of the record names are hard coded into protocol file.
##
record(bi, "KM36:TST:LS:ALARM0_ONOFF") {
field(DESC, "Alarm Enabled")
field(ZNAM, "Disabled")
field(ONAM, "Enabled")
}
record(ai, "KM36:TST:LS:ALARM0_HIGHVAL") {
field(DESC, "Alarm High Value")
field(EGU, "K")
}
record(ai, "KM36:TST:LS:ALARM0_LOWVAL") {
field(DESC, "Alarm Low Value")
field(EGU, "K")
}
record(ai, "KM36:TST:LS:ALARM0_DB") {
field(DESC, "Alarm Deadband")
field(EGU, "K")
}
record(bi, "KM36:TST:LS:ALARM0_LE") {
field(DESC, "Alarm Latch Enable")
field(ZNAM, "Non Latching")
field(ONAM, "Latching")
}
record(bi, "KM36:TST:LS:ALARM0_AU") {
field(DESC, "Alarm Audible")
field(ZNAM, "Quiet")
field(ONAM, "Audible")
}
record(bi, "KM36:TST:LS:ALARM0_VIS") {
field(DESC, "Alarm Visible")
field(ZNAM, "Non Visible")
field(ONAM, "Visible")
}
##
## Read the input reading status
##
record(mbbi, "KM36:TST:LS:RDGST0") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_0")
field(ZRST, "Valid")
field(ZRVL, "0")
field(ONST, "Invalid")
field(ONVL, "1")
field(TWST, "Temp Under")
field(TWVL, "16")
field(THST, "Temp Over")
field(THVL, "32")
field(FRST, "Sensor Zero")
field(FRVL, "64")
field(FVST, "Sensor Over")
field(FVVL, "128")
field(ONSV, "MAJOR")
field(TWSV, "MAJOR")
field(THSV, "MAJOR")
field(FRSV, "MAJOR")
field(FVSV, "MAJOR")
field(SCAN, "5 second")
field(INP, "@ls336.proto getRDGST(A) serial1 0")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the input curve number
##
record(longin, "KM36:TST:LS:INCRV0") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_0")
field(SCAN, "5 second")
field(INP, "@ls336.proto getINCRV(A) serial1 0")
}
##
## Read the input type information.
## NOTE: the last part of the record name is hard coded into protocol file.
##
record(bi, "KM36:TST:LS:INTYPE0") {
field(DESC, "Read Input Type Params")
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_0")
field(INP, "@ls336.proto getINTYPE(A,KM36:TST:LS:INTYPE0) serial1 0")
field(SCAN, "5 second")
}
##
## Read the rest of the input type params.
## NOTE: the last part of the record names are hard coded into protocol file.
##
record(mbbi, "KM36:TST:LS:INTYPE0_S") {
field(DESC, "Sensor Type")
field(ZRST, "Disabled")
field(ZRVL, "0")
field(ONST, "Diode")
field(ONVL, "1")
field(TWST, "Platinum RTD")
field(TWVL, "2")
field(THST, "NTC RTD")
field(THVL, "3")
field(FRST, "Thermocouple")
field(FRVL, "4")
field(FVST, "Capacitance")
field(FVVL, "5")
}
record(bi, "KM36:TST:LS:INTYPE0_AR") {
field(DESC, "Auto Range")
field(ZNAM, "Off")
field(ONAM, "On")
}
record(mbbi, "KM36:TST:LS:INTYPE0_R") {
field(DESC, "Range")
field(ZRST, "10 Ohm / 2.5V / 50mV")
field(ZRVL, "0")
field(ONST, "30 Ohm / 10V")
field(ONVL, "1")
field(TWST, "100 Ohm")
field(TWVL, "2")
field(THST, "300 Ohm")
field(THVL, "3")
field(FRST, "1 KOhm")
field(FRVL, "4")
field(FVST, "3 KOhm")
field(FVVL, "5")
field(SXST, "10 KOhm")
field(SXVL, "6")
field(SVST, "30 KOhm")
field(SVVL, "7")
field(EIST, "100 KOhm")
field(EIVL, "8")
}
record(bi, "KM36:TST:LS:INTYPE0_C") {
field(DESC, "Compensation")
field(ZNAM, "Off")
field(ONAM, "On")
}
record(mbbi, "KM36:TST:LS:INTYPE0_U") {
field(DESC, "Units")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Kelvin")
field(ONVL, "1")
field(TWST, "Celcius")
field(TWVL, "2")
field(THST, "Sensor")
field(THVL, "3")
}
# Template to provide the records required for an input.
# This makes use of the macros required by lakeshore336.template
# but also requires macros to specify the input channel and index.
# The index is to provide a way for the developer to use a different
# channel naming scheme.
#
# For some commands, I hard coded the last part of the record names into
# the protocol file. This seems the easiest way to deal with commands
# will lots of params returned back, and avoid problematic long INP fields.
# For the ZONE commands I used waveforms and subarrays, but that is not as simple.
#
# Macros:
# INPUT - A to D, or D1 to D5
# INDEX - Index to use for the input channel PV name and DESC (eg. 0 to 3)
# DISABLE - PV name to use for SDIS
##
## Alarm summary record for input
## This summarizes the software limits on the temperature readings,
## the alarm status reading from the controller and the input reading status.
##
record(calc, "KM36:TST:LS:ALARM1_SUMMARY_CALC") {
field(INPA, "KM36:TST:LS:KRDG1 CP MS")
field(INPB, "KM36:TST:LS:ALARM1_HIGH CP MS")
field(INPC, "KM36:TST:LS:ALARM1_LOW CP MS")
field(INPD, "KM36:TST:LS:RDGST1 CP MS")
field(CALC, "A")
field(FLNK, "KM36:TST:LS:ALARM1_SUMMARY_CALC2")
field(SDIS, "KM36:TST:LS:DISABLE_1")
}
record(calcout, "KM36:TST:LS:ALARM1_SUMMARY_CALC2") {
field(INPA, "KM36:TST:LS:ALARM1_SUMMARY_CALC.STAT")
field(CALC, "A!=0?1:0")
field(DOPT, "Use CALC")
field(OOPT, "Every Time")
field(OUT, "KM36:TST:LS:ALARM1_SUMMARY PP")
}
record(bi, "KM36:TST:LS:ALARM1_SUMMARY") {
field(ZNAM, "No Alarm")
field(ONAM, "Alarm")
field(OSV, "MAJOR")
field(PINI, "YES")
field(VAL, "0")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## If we disable polling this input, disable the alarm
##
record(calcout, "KM36:TST:LS:ALARM1_SUMMARY_DISABLE") {
field(INPA, "KM36:TST:LS:DISABLE_1 CP")
field(CALC, "A==1?0:1")
field(DOPT, "Use CALC")
field(OOPT, "When Zero")
field(OUT, "KM36:TST:LS:ALARM1_SUMMARY.VAL PP")
}
##
## Read the temperature on channel 1 in Kelvin.
##
record(ai, "KM36:TST:LS:KRDG1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_1")
field(DESC, "Channel 1 Temperature")
field(INP, "@ls336.proto getKRDG(B) serial1 0")
field(SCAN, "1 second")
field(PREC, "3")
field(EGU, "K")
field(HHSV,"MAJOR")
field(HSV, "MINOR")
field(LSV, "MINOR")
field(LLSV,"MAJOR")
field(HYST,"1.0")
field(HIHI,"1000")
field(HIGH,"1000")
field(LOW,"-1")
field(LOLO,"-1")
field(ADEL, "1")
field(MDEL, "0")
info(autosaveFields, "HIHI HIGH LOW LOLO ADEL MDEL")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the raw voltage on channel 1.
##
record(ai, "KM36:TST:LS:SRDG1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_1")
field(INP, "@ls336.proto getSRDG(B) serial1 0")
field(SCAN, "1 second")
field(PREC, "3")
field(EGU, "V")
field(ADEL, "1")
field(MDEL, "0")
}
##
## Set sensor 1 name
##
record(stringout, "KM36:TST:LS:INNAME_S1") {
field(DESC, "Input 1 Name")
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setINNAME(B) serial1 0")
field(FLNK, "KM36:TST:LS:INNAME1.PROC CA")
}
##
## Read input sensor 1 name
##
record(stringin, "KM36:TST:LS:INNAME1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(INP, "@ls336.proto getINNAME(B) serial1 0")
field(PINI, "YES")
field(SCAN, "Passive")
}
##
## Read the high alarm status for input 1.
## This also populates ALARM1_LOW
##
record(bi, "KM36:TST:LS:ALARM1_HIGH") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_1")
field(INP, "@ls336.proto getALARMST(B,KM36:TST:LS:ALARM1_LOW) serial1 0")
field(SCAN, "5 second")
field(ZNAM, "Off")
field(ONAM, "On")
field(OSV, "MAJOR")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the low alarm status for input 1
##
record(bi, "KM36:TST:LS:ALARM1_LOW") {
field(DTYP, "Soft Channel")
field(ZNAM, "Off")
field(ONAM, "On")
field(OSV, "MAJOR")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the alarm parameters.
## NOTE: the last part of the record name is hard coded into protocol file.
##
record(bi, "KM36:TST:LS:ALARM1") {
field(DESC, "Read Alarm Params")
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_1")
field(INP, "@ls336.proto getALARM(B,KM36:TST:LS:ALARM1) serial1 0")
field(SCAN, "5 second")
}
##
## Read the rest of the alarm params.
## NOTE: the last part of the record names are hard coded into protocol file.
##
record(bi, "KM36:TST:LS:ALARM1_ONOFF") {
field(DESC, "Alarm Enabled")
field(ZNAM, "Disabled")
field(ONAM, "Enabled")
}
record(ai, "KM36:TST:LS:ALARM1_HIGHVAL") {
field(DESC, "Alarm High Value")
field(EGU, "K")
}
record(ai, "KM36:TST:LS:ALARM1_LOWVAL") {
field(DESC, "Alarm Low Value")
field(EGU, "K")
}
record(ai, "KM36:TST:LS:ALARM1_DB") {
field(DESC, "Alarm Deadband")
field(EGU, "K")
}
record(bi, "KM36:TST:LS:ALARM1_LE") {
field(DESC, "Alarm Latch Enable")
field(ZNAM, "Non Latching")
field(ONAM, "Latching")
}
record(bi, "KM36:TST:LS:ALARM1_AU") {
field(DESC, "Alarm Audible")
field(ZNAM, "Quiet")
field(ONAM, "Audible")
}
record(bi, "KM36:TST:LS:ALARM1_VIS") {
field(DESC, "Alarm Visible")
field(ZNAM, "Non Visible")
field(ONAM, "Visible")
}
##
## Read the input reading status
##
record(mbbi, "KM36:TST:LS:RDGST1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_1")
field(ZRST, "Valid")
field(ZRVL, "0")
field(ONST, "Invalid")
field(ONVL, "1")
field(TWST, "Temp Under")
field(TWVL, "16")
field(THST, "Temp Over")
field(THVL, "32")
field(FRST, "Sensor Zero")
field(FRVL, "64")
field(FVST, "Sensor Over")
field(FVVL, "128")
field(ONSV, "MAJOR")
field(TWSV, "MAJOR")
field(THSV, "MAJOR")
field(FRSV, "MAJOR")
field(FVSV, "MAJOR")
field(SCAN, "5 second")
field(INP, "@ls336.proto getRDGST(B) serial1 0")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the input curve number
##
record(longin, "KM36:TST:LS:INCRV1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_1")
field(SCAN, "5 second")
field(INP, "@ls336.proto getINCRV(B) serial1 0")
}
##
## Read the input type information.
## NOTE: the last part of the record name is hard coded into protocol file.
##
record(bi, "KM36:TST:LS:INTYPE1") {
field(DESC, "Read Input Type Params")
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_1")
field(INP, "@ls336.proto getINTYPE(B,KM36:TST:LS:INTYPE1) serial1 0")
field(SCAN, "5 second")
}
##
## Read the rest of the input type params.
## NOTE: the last part of the record names are hard coded into protocol file.
##
record(mbbi, "KM36:TST:LS:INTYPE1_S") {
field(DESC, "Sensor Type")
field(ZRST, "Disabled")
field(ZRVL, "0")
field(ONST, "Diode")
field(ONVL, "1")
field(TWST, "Platinum RTD")
field(TWVL, "2")
field(THST, "NTC RTD")
field(THVL, "3")
field(FRST, "Thermocouple")
field(FRVL, "4")
field(FVST, "Capacitance")
field(FVVL, "5")
}
record(bi, "KM36:TST:LS:INTYPE1_AR") {
field(DESC, "Auto Range")
field(ZNAM, "Off")
field(ONAM, "On")
}
record(mbbi, "KM36:TST:LS:INTYPE1_R") {
field(DESC, "Range")
field(ZRST, "10 Ohm / 2.5V / 50mV")
field(ZRVL, "0")
field(ONST, "30 Ohm / 10V")
field(ONVL, "1")
field(TWST, "100 Ohm")
field(TWVL, "2")
field(THST, "300 Ohm")
field(THVL, "3")
field(FRST, "1 KOhm")
field(FRVL, "4")
field(FVST, "3 KOhm")
field(FVVL, "5")
field(SXST, "10 KOhm")
field(SXVL, "6")
field(SVST, "30 KOhm")
field(SVVL, "7")
field(EIST, "100 KOhm")
field(EIVL, "8")
}
record(bi, "KM36:TST:LS:INTYPE1_C") {
field(DESC, "Compensation")
field(ZNAM, "Off")
field(ONAM, "On")
}
record(mbbi, "KM36:TST:LS:INTYPE1_U") {
field(DESC, "Units")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Kelvin")
field(ONVL, "1")
field(TWST, "Celcius")
field(TWVL, "2")
field(THST, "Sensor")
field(THVL, "3")
}
# Template to provide the records required for an input.
# This makes use of the macros required by lakeshore336.template
# but also requires macros to specify the input channel and index.
# The index is to provide a way for the developer to use a different
# channel naming scheme.
#
# For some commands, I hard coded the last part of the record names into
# the protocol file. This seems the easiest way to deal with commands
# will lots of params returned back, and avoid problematic long INP fields.
# For the ZONE commands I used waveforms and subarrays, but that is not as simple.
#
# Macros:
# INPUT - A to D, or D1 to D5
# INDEX - Index to use for the input channel PV name and DESC (eg. 0 to 3)
# DISABLE - PV name to use for SDIS
##
## Alarm summary record for input
## This summarizes the software limits on the temperature readings,
## the alarm status reading from the controller and the input reading status.
##
record(calc, "KM36:TST:LS:ALARM2_SUMMARY_CALC") {
field(INPA, "KM36:TST:LS:KRDG2 CP MS")
field(INPB, "KM36:TST:LS:ALARM2_HIGH CP MS")
field(INPC, "KM36:TST:LS:ALARM2_LOW CP MS")
field(INPD, "KM36:TST:LS:RDGST2 CP MS")
field(CALC, "A")
field(FLNK, "KM36:TST:LS:ALARM2_SUMMARY_CALC2")
field(SDIS, "KM36:TST:LS:DISABLE_2")
}
record(calcout, "KM36:TST:LS:ALARM2_SUMMARY_CALC2") {
field(INPA, "KM36:TST:LS:ALARM2_SUMMARY_CALC.STAT")
field(CALC, "A!=0?1:0")
field(DOPT, "Use CALC")
field(OOPT, "Every Time")
field(OUT, "KM36:TST:LS:ALARM2_SUMMARY PP")
}
record(bi, "KM36:TST:LS:ALARM2_SUMMARY") {
field(ZNAM, "No Alarm")
field(ONAM, "Alarm")
field(OSV, "MAJOR")
field(PINI, "YES")
field(VAL, "0")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## If we disable polling this input, disable the alarm
##
record(calcout, "KM36:TST:LS:ALARM2_SUMMARY_DISABLE") {
field(INPA, "KM36:TST:LS:DISABLE_2 CP")
field(CALC, "A==1?0:1")
field(DOPT, "Use CALC")
field(OOPT, "When Zero")
field(OUT, "KM36:TST:LS:ALARM2_SUMMARY.VAL PP")
}
##
## Read the temperature on channel 2 in Kelvin.
##
record(ai, "KM36:TST:LS:KRDG2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_2")
field(DESC, "Channel 2 Temperature")
field(INP, "@ls336.proto getKRDG(C) serial1 0")
field(SCAN, "1 second")
field(PREC, "3")
field(EGU, "K")
field(HHSV,"MAJOR")
field(HSV, "MINOR")
field(LSV, "MINOR")
field(LLSV,"MAJOR")
field(HYST,"1.0")
field(HIHI,"1000")
field(HIGH,"1000")
field(LOW,"-1")
field(LOLO,"-1")
field(ADEL, "1")
field(MDEL, "0")
info(autosaveFields, "HIHI HIGH LOW LOLO ADEL MDEL")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the raw voltage on channel 2.
##
record(ai, "KM36:TST:LS:SRDG2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_2")
field(INP, "@ls336.proto getSRDG(C) serial1 0")
field(SCAN, "1 second")
field(PREC, "3")
field(EGU, "V")
field(ADEL, "1")
field(MDEL, "0")
}
##
## Set sensor 2 name
##
record(stringout, "KM36:TST:LS:INNAME_S2") {
field(DESC, "Input 2 Name")
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setINNAME(C) serial1 0")
field(FLNK, "KM36:TST:LS:INNAME2.PROC CA")
}
##
## Read input sensor 2 name
##
record(stringin, "KM36:TST:LS:INNAME2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(INP, "@ls336.proto getINNAME(C) serial1 0")
field(PINI, "YES")
field(SCAN, "Passive")
}
##
## Read the high alarm status for input 2.
## This also populates ALARM2_LOW
##
record(bi, "KM36:TST:LS:ALARM2_HIGH") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_2")
field(INP, "@ls336.proto getALARMST(C,KM36:TST:LS:ALARM2_LOW) serial1 0")
field(SCAN, "5 second")
field(ZNAM, "Off")
field(ONAM, "On")
field(OSV, "MAJOR")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the low alarm status for input 2
##
record(bi, "KM36:TST:LS:ALARM2_LOW") {
field(DTYP, "Soft Channel")
field(ZNAM, "Off")
field(ONAM, "On")
field(OSV, "MAJOR")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the alarm parameters.
## NOTE: the last part of the record name is hard coded into protocol file.
##
record(bi, "KM36:TST:LS:ALARM2") {
field(DESC, "Read Alarm Params")
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_2")
field(INP, "@ls336.proto getALARM(C,KM36:TST:LS:ALARM2) serial1 0")
field(SCAN, "5 second")
}
##
## Read the rest of the alarm params.
## NOTE: the last part of the record names are hard coded into protocol file.
##
record(bi, "KM36:TST:LS:ALARM2_ONOFF") {
field(DESC, "Alarm Enabled")
field(ZNAM, "Disabled")
field(ONAM, "Enabled")
}
record(ai, "KM36:TST:LS:ALARM2_HIGHVAL") {
field(DESC, "Alarm High Value")
field(EGU, "K")
}
record(ai, "KM36:TST:LS:ALARM2_LOWVAL") {
field(DESC, "Alarm Low Value")
field(EGU, "K")
}
record(ai, "KM36:TST:LS:ALARM2_DB") {
field(DESC, "Alarm Deadband")
field(EGU, "K")
}
record(bi, "KM36:TST:LS:ALARM2_LE") {
field(DESC, "Alarm Latch Enable")
field(ZNAM, "Non Latching")
field(ONAM, "Latching")
}
record(bi, "KM36:TST:LS:ALARM2_AU") {
field(DESC, "Alarm Audible")
field(ZNAM, "Quiet")
field(ONAM, "Audible")
}
record(bi, "KM36:TST:LS:ALARM2_VIS") {
field(DESC, "Alarm Visible")
field(ZNAM, "Non Visible")
field(ONAM, "Visible")
}
##
## Read the input reading status
##
record(mbbi, "KM36:TST:LS:RDGST2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_2")
field(ZRST, "Valid")
field(ZRVL, "0")
field(ONST, "Invalid")
field(ONVL, "1")
field(TWST, "Temp Under")
field(TWVL, "16")
field(THST, "Temp Over")
field(THVL, "32")
field(FRST, "Sensor Zero")
field(FRVL, "64")
field(FVST, "Sensor Over")
field(FVVL, "128")
field(ONSV, "MAJOR")
field(TWSV, "MAJOR")
field(THSV, "MAJOR")
field(FRSV, "MAJOR")
field(FVSV, "MAJOR")
field(SCAN, "5 second")
field(INP, "@ls336.proto getRDGST(C) serial1 0")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the input curve number
##
record(longin, "KM36:TST:LS:INCRV2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_2")
field(SCAN, "5 second")
field(INP, "@ls336.proto getINCRV(C) serial1 0")
}
##
## Read the input type information.
## NOTE: the last part of the record name is hard coded into protocol file.
##
record(bi, "KM36:TST:LS:INTYPE2") {
field(DESC, "Read Input Type Params")
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_2")
field(INP, "@ls336.proto getINTYPE(C,KM36:TST:LS:INTYPE2) serial1 0")
field(SCAN, "5 second")
}
##
## Read the rest of the input type params.
## NOTE: the last part of the record names are hard coded into protocol file.
##
record(mbbi, "KM36:TST:LS:INTYPE2_S") {
field(DESC, "Sensor Type")
field(ZRST, "Disabled")
field(ZRVL, "0")
field(ONST, "Diode")
field(ONVL, "1")
field(TWST, "Platinum RTD")
field(TWVL, "2")
field(THST, "NTC RTD")
field(THVL, "3")
field(FRST, "Thermocouple")
field(FRVL, "4")
field(FVST, "Capacitance")
field(FVVL, "5")
}
record(bi, "KM36:TST:LS:INTYPE2_AR") {
field(DESC, "Auto Range")
field(ZNAM, "Off")
field(ONAM, "On")
}
record(mbbi, "KM36:TST:LS:INTYPE2_R") {
field(DESC, "Range")
field(ZRST, "10 Ohm / 2.5V / 50mV")
field(ZRVL, "0")
field(ONST, "30 Ohm / 10V")
field(ONVL, "1")
field(TWST, "100 Ohm")
field(TWVL, "2")
field(THST, "300 Ohm")
field(THVL, "3")
field(FRST, "1 KOhm")
field(FRVL, "4")
field(FVST, "3 KOhm")
field(FVVL, "5")
field(SXST, "10 KOhm")
field(SXVL, "6")
field(SVST, "30 KOhm")
field(SVVL, "7")
field(EIST, "100 KOhm")
field(EIVL, "8")
}
record(bi, "KM36:TST:LS:INTYPE2_C") {
field(DESC, "Compensation")
field(ZNAM, "Off")
field(ONAM, "On")
}
record(mbbi, "KM36:TST:LS:INTYPE2_U") {
field(DESC, "Units")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Kelvin")
field(ONVL, "1")
field(TWST, "Celcius")
field(TWVL, "2")
field(THST, "Sensor")
field(THVL, "3")
}
# Template to provide the records required for an input.
# This makes use of the macros required by lakeshore336.template
# but also requires macros to specify the input channel and index.
# The index is to provide a way for the developer to use a different
# channel naming scheme.
#
# For some commands, I hard coded the last part of the record names into
# the protocol file. This seems the easiest way to deal with commands
# will lots of params returned back, and avoid problematic long INP fields.
# For the ZONE commands I used waveforms and subarrays, but that is not as simple.
#
# Macros:
# INPUT - A to D, or D1 to D5
# INDEX - Index to use for the input channel PV name and DESC (eg. 0 to 3)
# DISABLE - PV name to use for SDIS
##
## Alarm summary record for input
## This summarizes the software limits on the temperature readings,
## the alarm status reading from the controller and the input reading status.
##
record(calc, "KM36:TST:LS:ALARM3_SUMMARY_CALC") {
field(INPA, "KM36:TST:LS:KRDG3 CP MS")
field(INPB, "KM36:TST:LS:ALARM3_HIGH CP MS")
field(INPC, "KM36:TST:LS:ALARM3_LOW CP MS")
field(INPD, "KM36:TST:LS:RDGST3 CP MS")
field(CALC, "A")
field(FLNK, "KM36:TST:LS:ALARM3_SUMMARY_CALC2")
field(SDIS, "KM36:TST:LS:DISABLE_3")
}
record(calcout, "KM36:TST:LS:ALARM3_SUMMARY_CALC2") {
field(INPA, "KM36:TST:LS:ALARM3_SUMMARY_CALC.STAT")
field(CALC, "A!=0?1:0")
field(DOPT, "Use CALC")
field(OOPT, "Every Time")
field(OUT, "KM36:TST:LS:ALARM3_SUMMARY PP")
}
record(bi, "KM36:TST:LS:ALARM3_SUMMARY") {
field(ZNAM, "No Alarm")
field(ONAM, "Alarm")
field(OSV, "MAJOR")
field(PINI, "YES")
field(VAL, "0")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## If we disable polling this input, disable the alarm
##
record(calcout, "KM36:TST:LS:ALARM3_SUMMARY_DISABLE") {
field(INPA, "KM36:TST:LS:DISABLE_3 CP")
field(CALC, "A==1?0:1")
field(DOPT, "Use CALC")
field(OOPT, "When Zero")
field(OUT, "KM36:TST:LS:ALARM3_SUMMARY.VAL PP")
}
##
## Read the temperature on channel 3 in Kelvin.
##
record(ai, "KM36:TST:LS:KRDG3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_3")
field(DESC, "Channel 3 Temperature")
field(INP, "@ls336.proto getKRDG(D) serial1 0")
field(SCAN, "1 second")
field(PREC, "3")
field(EGU, "K")
field(HHSV,"MAJOR")
field(HSV, "MINOR")
field(LSV, "MINOR")
field(LLSV,"MAJOR")
field(HYST,"1.0")
field(HIHI,"1000")
field(HIGH,"1000")
field(LOW,"-1")
field(LOLO,"-1")
field(ADEL, "1")
field(MDEL, "0")
info(autosaveFields, "HIHI HIGH LOW LOLO ADEL MDEL")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the raw voltage on channel 3.
##
record(ai, "KM36:TST:LS:SRDG3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_3")
field(INP, "@ls336.proto getSRDG(D) serial1 0")
field(SCAN, "1 second")
field(PREC, "3")
field(EGU, "V")
field(ADEL, "1")
field(MDEL, "0")
}
##
## Set sensor 3 name
##
record(stringout, "KM36:TST:LS:INNAME_S3") {
field(DESC, "Input 3 Name")
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setINNAME(D) serial1 0")
field(FLNK, "KM36:TST:LS:INNAME3.PROC CA")
}
##
## Read input sensor 3 name
##
record(stringin, "KM36:TST:LS:INNAME3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(INP, "@ls336.proto getINNAME(D) serial1 0")
field(PINI, "YES")
field(SCAN, "Passive")
}
##
## Read the high alarm status for input 3.
## This also populates ALARM3_LOW
##
record(bi, "KM36:TST:LS:ALARM3_HIGH") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_3")
field(INP, "@ls336.proto getALARMST(D,KM36:TST:LS:ALARM3_LOW) serial1 0")
field(SCAN, "5 second")
field(ZNAM, "Off")
field(ONAM, "On")
field(OSV, "MAJOR")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the low alarm status for input 3
##
record(bi, "KM36:TST:LS:ALARM3_LOW") {
field(DTYP, "Soft Channel")
field(ZNAM, "Off")
field(ONAM, "On")
field(OSV, "MAJOR")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the alarm parameters.
## NOTE: the last part of the record name is hard coded into protocol file.
##
record(bi, "KM36:TST:LS:ALARM3") {
field(DESC, "Read Alarm Params")
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_3")
field(INP, "@ls336.proto getALARM(D,KM36:TST:LS:ALARM3) serial1 0")
field(SCAN, "5 second")
}
##
## Read the rest of the alarm params.
## NOTE: the last part of the record names are hard coded into protocol file.
##
record(bi, "KM36:TST:LS:ALARM3_ONOFF") {
field(DESC, "Alarm Enabled")
field(ZNAM, "Disabled")
field(ONAM, "Enabled")
}
record(ai, "KM36:TST:LS:ALARM3_HIGHVAL") {
field(DESC, "Alarm High Value")
field(EGU, "K")
}
record(ai, "KM36:TST:LS:ALARM3_LOWVAL") {
field(DESC, "Alarm Low Value")
field(EGU, "K")
}
record(ai, "KM36:TST:LS:ALARM3_DB") {
field(DESC, "Alarm Deadband")
field(EGU, "K")
}
record(bi, "KM36:TST:LS:ALARM3_LE") {
field(DESC, "Alarm Latch Enable")
field(ZNAM, "Non Latching")
field(ONAM, "Latching")
}
record(bi, "KM36:TST:LS:ALARM3_AU") {
field(DESC, "Alarm Audible")
field(ZNAM, "Quiet")
field(ONAM, "Audible")
}
record(bi, "KM36:TST:LS:ALARM3_VIS") {
field(DESC, "Alarm Visible")
field(ZNAM, "Non Visible")
field(ONAM, "Visible")
}
##
## Read the input reading status
##
record(mbbi, "KM36:TST:LS:RDGST3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_3")
field(ZRST, "Valid")
field(ZRVL, "0")
field(ONST, "Invalid")
field(ONVL, "1")
field(TWST, "Temp Under")
field(TWVL, "16")
field(THST, "Temp Over")
field(THVL, "32")
field(FRST, "Sensor Zero")
field(FRVL, "64")
field(FVST, "Sensor Over")
field(FVVL, "128")
field(ONSV, "MAJOR")
field(TWSV, "MAJOR")
field(THSV, "MAJOR")
field(FRSV, "MAJOR")
field(FVSV, "MAJOR")
field(SCAN, "5 second")
field(INP, "@ls336.proto getRDGST(D) serial1 0")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the input curve number
##
record(longin, "KM36:TST:LS:INCRV3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_3")
field(SCAN, "5 second")
field(INP, "@ls336.proto getINCRV(D) serial1 0")
}
##
## Read the input type information.
## NOTE: the last part of the record name is hard coded into protocol file.
##
record(bi, "KM36:TST:LS:INTYPE3") {
field(DESC, "Read Input Type Params")
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_3")
field(INP, "@ls336.proto getINTYPE(D,KM36:TST:LS:INTYPE3) serial1 0")
field(SCAN, "5 second")
}
##
## Read the rest of the input type params.
## NOTE: the last part of the record names are hard coded into protocol file.
##
record(mbbi, "KM36:TST:LS:INTYPE3_S") {
field(DESC, "Sensor Type")
field(ZRST, "Disabled")
field(ZRVL, "0")
field(ONST, "Diode")
field(ONVL, "1")
field(TWST, "Platinum RTD")
field(TWVL, "2")
field(THST, "NTC RTD")
field(THVL, "3")
field(FRST, "Thermocouple")
field(FRVL, "4")
field(FVST, "Capacitance")
field(FVVL, "5")
}
record(bi, "KM36:TST:LS:INTYPE3_AR") {
field(DESC, "Auto Range")
field(ZNAM, "Off")
field(ONAM, "On")
}
record(mbbi, "KM36:TST:LS:INTYPE3_R") {
field(DESC, "Range")
field(ZRST, "10 Ohm / 2.5V / 50mV")
field(ZRVL, "0")
field(ONST, "30 Ohm / 10V")
field(ONVL, "1")
field(TWST, "100 Ohm")
field(TWVL, "2")
field(THST, "300 Ohm")
field(THVL, "3")
field(FRST, "1 KOhm")
field(FRVL, "4")
field(FVST, "3 KOhm")
field(FVVL, "5")
field(SXST, "10 KOhm")
field(SXVL, "6")
field(SVST, "30 KOhm")
field(SVVL, "7")
field(EIST, "100 KOhm")
field(EIVL, "8")
}
record(bi, "KM36:TST:LS:INTYPE3_C") {
field(DESC, "Compensation")
field(ZNAM, "Off")
field(ONAM, "On")
}
record(mbbi, "KM36:TST:LS:INTYPE3_U") {
field(DESC, "Units")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Kelvin")
field(ONVL, "1")
field(TWST, "Celcius")
field(TWVL, "2")
field(THST, "Sensor")
field(THVL, "3")
}
################################################################
################################################################
# Include 3062 option
################################################################
# This file provides records to read inputs D1 to D5
# that are provided by the 3062 option. This option card
# can be used with both the 336 and 350. By default these
# records are disabled (there is a record to control this).
# This file can be included in the lakeshore336.template
# so does not need to be instantiated separately. It will
# make use of the macros used in lakeshore336.template.
# Seperate polling records to control which inputs we are
# reading. If an input is not being polled, it won't
# affect the top level lakeshore alarm.
record(bo, "KM36:TST:LS:DISABLE_D2") {
field(DESC, "Disable D2 polling")
field(PINI, "YES")
field(VAL, "1")
field(OMSL, "supervisory")
field(ZNAM, "Enabled")
field(ONAM, "Disabled")
field(ZSV, "NO_ALARM")
field(OSV, "MINOR")
info(autosaveFields, "VAL")
}
record(bo, "KM36:TST:LS:DISABLE_D3") {
field(DESC, "Disable D3 polling")
field(PINI, "YES")
field(VAL, "1")
field(OMSL, "supervisory")
field(ZNAM, "Enabled")
field(ONAM, "Disabled")
field(ZSV, "NO_ALARM")
field(OSV, "MINOR")
info(autosaveFields, "VAL")
}
record(bo, "KM36:TST:LS:DISABLE_D4") {
field(DESC, "Disable D4 polling")
field(PINI, "YES")
field(VAL, "1")
field(OMSL, "supervisory")
field(ZNAM, "Enabled")
field(ONAM, "Disabled")
field(ZSV, "NO_ALARM")
field(OSV, "MINOR")
info(autosaveFields, "VAL")
}
record(bo, "KM36:TST:LS:DISABLE_D5") {
field(DESC, "Disable D5 polling")
field(PINI, "YES")
field(VAL, "1")
field(OMSL, "supervisory")
field(ZNAM, "Enabled")
field(ONAM, "Disabled")
field(ZSV, "NO_ALARM")
field(OSV, "MINOR")
info(autosaveFields, "VAL")
}
# Template to provide the records required for an input.
# This makes use of the macros required by lakeshore336.template
# but also requires macros to specify the input channel and index.
# The index is to provide a way for the developer to use a different
# channel naming scheme.
#
# For some commands, I hard coded the last part of the record names into
# the protocol file. This seems the easiest way to deal with commands
# will lots of params returned back, and avoid problematic long INP fields.
# For the ZONE commands I used waveforms and subarrays, but that is not as simple.
#
# Macros:
# INPUT - A to D, or D1 to D5
# INDEX - Index to use for the input channel PV name and DESC (eg. 0 to 3)
# DISABLE - PV name to use for SDIS
##
## Alarm summary record for input
## This summarizes the software limits on the temperature readings,
## the alarm status reading from the controller and the input reading status.
##
record(calc, "KM36:TST:LS:ALARMD2_SUMMARY_CALC") {
field(INPA, "KM36:TST:LS:KRDGD2 CP MS")
field(INPB, "KM36:TST:LS:ALARMD2_HIGH CP MS")
field(INPC, "KM36:TST:LS:ALARMD2_LOW CP MS")
field(INPD, "KM36:TST:LS:RDGSTD2 CP MS")
field(CALC, "A")
field(FLNK, "KM36:TST:LS:ALARMD2_SUMMARY_CALC2")
field(SDIS, "KM36:TST:LS:DISABLE_D2")
}
record(calcout, "KM36:TST:LS:ALARMD2_SUMMARY_CALC2") {
field(INPA, "KM36:TST:LS:ALARMD2_SUMMARY_CALC.STAT")
field(CALC, "A!=0?1:0")
field(DOPT, "Use CALC")
field(OOPT, "Every Time")
field(OUT, "KM36:TST:LS:ALARMD2_SUMMARY PP")
}
record(bi, "KM36:TST:LS:ALARMD2_SUMMARY") {
field(ZNAM, "No Alarm")
field(ONAM, "Alarm")
field(OSV, "MAJOR")
field(PINI, "YES")
field(VAL, "0")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## If we disable polling this input, disable the alarm
##
record(calcout, "KM36:TST:LS:ALARMD2_SUMMARY_DISABLE") {
field(INPA, "KM36:TST:LS:DISABLE_D2 CP")
field(CALC, "A==1?0:1")
field(DOPT, "Use CALC")
field(OOPT, "When Zero")
field(OUT, "KM36:TST:LS:ALARMD2_SUMMARY.VAL PP")
}
##
## Read the temperature on channel D2 in Kelvin.
##
record(ai, "KM36:TST:LS:KRDGD2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_D2")
field(DESC, "Channel D2 Temperature")
field(INP, "@ls336.proto getKRDG(D2) serial1 0")
field(SCAN, "1 second")
field(PREC, "3")
field(EGU, "K")
field(HHSV,"MAJOR")
field(HSV, "MINOR")
field(LSV, "MINOR")
field(LLSV,"MAJOR")
field(HYST,"1.0")
field(HIHI,"1000")
field(HIGH,"1000")
field(LOW,"-1")
field(LOLO,"-1")
field(ADEL, "1")
field(MDEL, "0")
info(autosaveFields, "HIHI HIGH LOW LOLO ADEL MDEL")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the raw voltage on channel D2.
##
record(ai, "KM36:TST:LS:SRDGD2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_D2")
field(INP, "@ls336.proto getSRDG(D2) serial1 0")
field(SCAN, "1 second")
field(PREC, "3")
field(EGU, "V")
field(ADEL, "1")
field(MDEL, "0")
}
##
## Set sensor D2 name
##
record(stringout, "KM36:TST:LS:INNAME_SD2") {
field(DESC, "Input D2 Name")
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setINNAME(D2) serial1 0")
field(FLNK, "KM36:TST:LS:INNAMED2.PROC CA")
}
##
## Read input sensor D2 name
##
record(stringin, "KM36:TST:LS:INNAMED2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(INP, "@ls336.proto getINNAME(D2) serial1 0")
field(PINI, "YES")
field(SCAN, "Passive")
}
##
## Read the high alarm status for input D2.
## This also populates ALARMD2_LOW
##
record(bi, "KM36:TST:LS:ALARMD2_HIGH") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_D2")
field(INP, "@ls336.proto getALARMST(D2,KM36:TST:LS:ALARMD2_LOW) serial1 0")
field(SCAN, "5 second")
field(ZNAM, "Off")
field(ONAM, "On")
field(OSV, "MAJOR")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the low alarm status for input D2
##
record(bi, "KM36:TST:LS:ALARMD2_LOW") {
field(DTYP, "Soft Channel")
field(ZNAM, "Off")
field(ONAM, "On")
field(OSV, "MAJOR")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the alarm parameters.
## NOTE: the last part of the record name is hard coded into protocol file.
##
record(bi, "KM36:TST:LS:ALARMD2") {
field(DESC, "Read Alarm Params")
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_D2")
field(INP, "@ls336.proto getALARM(D2,KM36:TST:LS:ALARMD2) serial1 0")
field(SCAN, "5 second")
}
##
## Read the rest of the alarm params.
## NOTE: the last part of the record names are hard coded into protocol file.
##
record(bi, "KM36:TST:LS:ALARMD2_ONOFF") {
field(DESC, "Alarm Enabled")
field(ZNAM, "Disabled")
field(ONAM, "Enabled")
}
record(ai, "KM36:TST:LS:ALARMD2_HIGHVAL") {
field(DESC, "Alarm High Value")
field(EGU, "K")
}
record(ai, "KM36:TST:LS:ALARMD2_LOWVAL") {
field(DESC, "Alarm Low Value")
field(EGU, "K")
}
record(ai, "KM36:TST:LS:ALARMD2_DB") {
field(DESC, "Alarm Deadband")
field(EGU, "K")
}
record(bi, "KM36:TST:LS:ALARMD2_LE") {
field(DESC, "Alarm Latch Enable")
field(ZNAM, "Non Latching")
field(ONAM, "Latching")
}
record(bi, "KM36:TST:LS:ALARMD2_AU") {
field(DESC, "Alarm Audible")
field(ZNAM, "Quiet")
field(ONAM, "Audible")
}
record(bi, "KM36:TST:LS:ALARMD2_VIS") {
field(DESC, "Alarm Visible")
field(ZNAM, "Non Visible")
field(ONAM, "Visible")
}
##
## Read the input reading status
##
record(mbbi, "KM36:TST:LS:RDGSTD2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_D2")
field(ZRST, "Valid")
field(ZRVL, "0")
field(ONST, "Invalid")
field(ONVL, "1")
field(TWST, "Temp Under")
field(TWVL, "16")
field(THST, "Temp Over")
field(THVL, "32")
field(FRST, "Sensor Zero")
field(FRVL, "64")
field(FVST, "Sensor Over")
field(FVVL, "128")
field(ONSV, "MAJOR")
field(TWSV, "MAJOR")
field(THSV, "MAJOR")
field(FRSV, "MAJOR")
field(FVSV, "MAJOR")
field(SCAN, "5 second")
field(INP, "@ls336.proto getRDGST(D2) serial1 0")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the input curve number
##
record(longin, "KM36:TST:LS:INCRVD2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_D2")
field(SCAN, "5 second")
field(INP, "@ls336.proto getINCRV(D2) serial1 0")
}
##
## Read the input type information.
## NOTE: the last part of the record name is hard coded into protocol file.
##
record(bi, "KM36:TST:LS:INTYPED2") {
field(DESC, "Read Input Type Params")
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_D2")
field(INP, "@ls336.proto getINTYPE(D2,KM36:TST:LS:INTYPED2) serial1 0")
field(SCAN, "5 second")
}
##
## Read the rest of the input type params.
## NOTE: the last part of the record names are hard coded into protocol file.
##
record(mbbi, "KM36:TST:LS:INTYPED2_S") {
field(DESC, "Sensor Type")
field(ZRST, "Disabled")
field(ZRVL, "0")
field(ONST, "Diode")
field(ONVL, "1")
field(TWST, "Platinum RTD")
field(TWVL, "2")
field(THST, "NTC RTD")
field(THVL, "3")
field(FRST, "Thermocouple")
field(FRVL, "4")
field(FVST, "Capacitance")
field(FVVL, "5")
}
record(bi, "KM36:TST:LS:INTYPED2_AR") {
field(DESC, "Auto Range")
field(ZNAM, "Off")
field(ONAM, "On")
}
record(mbbi, "KM36:TST:LS:INTYPED2_R") {
field(DESC, "Range")
field(ZRST, "10 Ohm / 2.5V / 50mV")
field(ZRVL, "0")
field(ONST, "30 Ohm / 10V")
field(ONVL, "1")
field(TWST, "100 Ohm")
field(TWVL, "2")
field(THST, "300 Ohm")
field(THVL, "3")
field(FRST, "1 KOhm")
field(FRVL, "4")
field(FVST, "3 KOhm")
field(FVVL, "5")
field(SXST, "10 KOhm")
field(SXVL, "6")
field(SVST, "30 KOhm")
field(SVVL, "7")
field(EIST, "100 KOhm")
field(EIVL, "8")
}
record(bi, "KM36:TST:LS:INTYPED2_C") {
field(DESC, "Compensation")
field(ZNAM, "Off")
field(ONAM, "On")
}
record(mbbi, "KM36:TST:LS:INTYPED2_U") {
field(DESC, "Units")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Kelvin")
field(ONVL, "1")
field(TWST, "Celcius")
field(TWVL, "2")
field(THST, "Sensor")
field(THVL, "3")
}
# Template to provide the records required for an input.
# This makes use of the macros required by lakeshore336.template
# but also requires macros to specify the input channel and index.
# The index is to provide a way for the developer to use a different
# channel naming scheme.
#
# For some commands, I hard coded the last part of the record names into
# the protocol file. This seems the easiest way to deal with commands
# will lots of params returned back, and avoid problematic long INP fields.
# For the ZONE commands I used waveforms and subarrays, but that is not as simple.
#
# Macros:
# INPUT - A to D, or D1 to D5
# INDEX - Index to use for the input channel PV name and DESC (eg. 0 to 3)
# DISABLE - PV name to use for SDIS
##
## Alarm summary record for input
## This summarizes the software limits on the temperature readings,
## the alarm status reading from the controller and the input reading status.
##
record(calc, "KM36:TST:LS:ALARMD3_SUMMARY_CALC") {
field(INPA, "KM36:TST:LS:KRDGD3 CP MS")
field(INPB, "KM36:TST:LS:ALARMD3_HIGH CP MS")
field(INPC, "KM36:TST:LS:ALARMD3_LOW CP MS")
field(INPD, "KM36:TST:LS:RDGSTD3 CP MS")
field(CALC, "A")
field(FLNK, "KM36:TST:LS:ALARMD3_SUMMARY_CALC2")
field(SDIS, "KM36:TST:LS:DISABLE_D3")
}
record(calcout, "KM36:TST:LS:ALARMD3_SUMMARY_CALC2") {
field(INPA, "KM36:TST:LS:ALARMD3_SUMMARY_CALC.STAT")
field(CALC, "A!=0?1:0")
field(DOPT, "Use CALC")
field(OOPT, "Every Time")
field(OUT, "KM36:TST:LS:ALARMD3_SUMMARY PP")
}
record(bi, "KM36:TST:LS:ALARMD3_SUMMARY") {
field(ZNAM, "No Alarm")
field(ONAM, "Alarm")
field(OSV, "MAJOR")
field(PINI, "YES")
field(VAL, "0")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## If we disable polling this input, disable the alarm
##
record(calcout, "KM36:TST:LS:ALARMD3_SUMMARY_DISABLE") {
field(INPA, "KM36:TST:LS:DISABLE_D3 CP")
field(CALC, "A==1?0:1")
field(DOPT, "Use CALC")
field(OOPT, "When Zero")
field(OUT, "KM36:TST:LS:ALARMD3_SUMMARY.VAL PP")
}
##
## Read the temperature on channel D3 in Kelvin.
##
record(ai, "KM36:TST:LS:KRDGD3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_D3")
field(DESC, "Channel D3 Temperature")
field(INP, "@ls336.proto getKRDG(D3) serial1 0")
field(SCAN, "1 second")
field(PREC, "3")
field(EGU, "K")
field(HHSV,"MAJOR")
field(HSV, "MINOR")
field(LSV, "MINOR")
field(LLSV,"MAJOR")
field(HYST,"1.0")
field(HIHI,"1000")
field(HIGH,"1000")
field(LOW,"-1")
field(LOLO,"-1")
field(ADEL, "1")
field(MDEL, "0")
info(autosaveFields, "HIHI HIGH LOW LOLO ADEL MDEL")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the raw voltage on channel D3.
##
record(ai, "KM36:TST:LS:SRDGD3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_D3")
field(INP, "@ls336.proto getSRDG(D3) serial1 0")
field(SCAN, "1 second")
field(PREC, "3")
field(EGU, "V")
field(ADEL, "1")
field(MDEL, "0")
}
##
## Set sensor D3 name
##
record(stringout, "KM36:TST:LS:INNAME_SD3") {
field(DESC, "Input D3 Name")
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setINNAME(D3) serial1 0")
field(FLNK, "KM36:TST:LS:INNAMED3.PROC CA")
}
##
## Read input sensor D3 name
##
record(stringin, "KM36:TST:LS:INNAMED3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(INP, "@ls336.proto getINNAME(D3) serial1 0")
field(PINI, "YES")
field(SCAN, "Passive")
}
##
## Read the high alarm status for input D3.
## This also populates ALARMD3_LOW
##
record(bi, "KM36:TST:LS:ALARMD3_HIGH") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_D3")
field(INP, "@ls336.proto getALARMST(D3,KM36:TST:LS:ALARMD3_LOW) serial1 0")
field(SCAN, "5 second")
field(ZNAM, "Off")
field(ONAM, "On")
field(OSV, "MAJOR")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the low alarm status for input D3
##
record(bi, "KM36:TST:LS:ALARMD3_LOW") {
field(DTYP, "Soft Channel")
field(ZNAM, "Off")
field(ONAM, "On")
field(OSV, "MAJOR")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the alarm parameters.
## NOTE: the last part of the record name is hard coded into protocol file.
##
record(bi, "KM36:TST:LS:ALARMD3") {
field(DESC, "Read Alarm Params")
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_D3")
field(INP, "@ls336.proto getALARM(D3,KM36:TST:LS:ALARMD3) serial1 0")
field(SCAN, "5 second")
}
##
## Read the rest of the alarm params.
## NOTE: the last part of the record names are hard coded into protocol file.
##
record(bi, "KM36:TST:LS:ALARMD3_ONOFF") {
field(DESC, "Alarm Enabled")
field(ZNAM, "Disabled")
field(ONAM, "Enabled")
}
record(ai, "KM36:TST:LS:ALARMD3_HIGHVAL") {
field(DESC, "Alarm High Value")
field(EGU, "K")
}
record(ai, "KM36:TST:LS:ALARMD3_LOWVAL") {
field(DESC, "Alarm Low Value")
field(EGU, "K")
}
record(ai, "KM36:TST:LS:ALARMD3_DB") {
field(DESC, "Alarm Deadband")
field(EGU, "K")
}
record(bi, "KM36:TST:LS:ALARMD3_LE") {
field(DESC, "Alarm Latch Enable")
field(ZNAM, "Non Latching")
field(ONAM, "Latching")
}
record(bi, "KM36:TST:LS:ALARMD3_AU") {
field(DESC, "Alarm Audible")
field(ZNAM, "Quiet")
field(ONAM, "Audible")
}
record(bi, "KM36:TST:LS:ALARMD3_VIS") {
field(DESC, "Alarm Visible")
field(ZNAM, "Non Visible")
field(ONAM, "Visible")
}
##
## Read the input reading status
##
record(mbbi, "KM36:TST:LS:RDGSTD3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_D3")
field(ZRST, "Valid")
field(ZRVL, "0")
field(ONST, "Invalid")
field(ONVL, "1")
field(TWST, "Temp Under")
field(TWVL, "16")
field(THST, "Temp Over")
field(THVL, "32")
field(FRST, "Sensor Zero")
field(FRVL, "64")
field(FVST, "Sensor Over")
field(FVVL, "128")
field(ONSV, "MAJOR")
field(TWSV, "MAJOR")
field(THSV, "MAJOR")
field(FRSV, "MAJOR")
field(FVSV, "MAJOR")
field(SCAN, "5 second")
field(INP, "@ls336.proto getRDGST(D3) serial1 0")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the input curve number
##
record(longin, "KM36:TST:LS:INCRVD3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_D3")
field(SCAN, "5 second")
field(INP, "@ls336.proto getINCRV(D3) serial1 0")
}
##
## Read the input type information.
## NOTE: the last part of the record name is hard coded into protocol file.
##
record(bi, "KM36:TST:LS:INTYPED3") {
field(DESC, "Read Input Type Params")
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_D3")
field(INP, "@ls336.proto getINTYPE(D3,KM36:TST:LS:INTYPED3) serial1 0")
field(SCAN, "5 second")
}
##
## Read the rest of the input type params.
## NOTE: the last part of the record names are hard coded into protocol file.
##
record(mbbi, "KM36:TST:LS:INTYPED3_S") {
field(DESC, "Sensor Type")
field(ZRST, "Disabled")
field(ZRVL, "0")
field(ONST, "Diode")
field(ONVL, "1")
field(TWST, "Platinum RTD")
field(TWVL, "2")
field(THST, "NTC RTD")
field(THVL, "3")
field(FRST, "Thermocouple")
field(FRVL, "4")
field(FVST, "Capacitance")
field(FVVL, "5")
}
record(bi, "KM36:TST:LS:INTYPED3_AR") {
field(DESC, "Auto Range")
field(ZNAM, "Off")
field(ONAM, "On")
}
record(mbbi, "KM36:TST:LS:INTYPED3_R") {
field(DESC, "Range")
field(ZRST, "10 Ohm / 2.5V / 50mV")
field(ZRVL, "0")
field(ONST, "30 Ohm / 10V")
field(ONVL, "1")
field(TWST, "100 Ohm")
field(TWVL, "2")
field(THST, "300 Ohm")
field(THVL, "3")
field(FRST, "1 KOhm")
field(FRVL, "4")
field(FVST, "3 KOhm")
field(FVVL, "5")
field(SXST, "10 KOhm")
field(SXVL, "6")
field(SVST, "30 KOhm")
field(SVVL, "7")
field(EIST, "100 KOhm")
field(EIVL, "8")
}
record(bi, "KM36:TST:LS:INTYPED3_C") {
field(DESC, "Compensation")
field(ZNAM, "Off")
field(ONAM, "On")
}
record(mbbi, "KM36:TST:LS:INTYPED3_U") {
field(DESC, "Units")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Kelvin")
field(ONVL, "1")
field(TWST, "Celcius")
field(TWVL, "2")
field(THST, "Sensor")
field(THVL, "3")
}
# Template to provide the records required for an input.
# This makes use of the macros required by lakeshore336.template
# but also requires macros to specify the input channel and index.
# The index is to provide a way for the developer to use a different
# channel naming scheme.
#
# For some commands, I hard coded the last part of the record names into
# the protocol file. This seems the easiest way to deal with commands
# will lots of params returned back, and avoid problematic long INP fields.
# For the ZONE commands I used waveforms and subarrays, but that is not as simple.
#
# Macros:
# INPUT - A to D, or D1 to D5
# INDEX - Index to use for the input channel PV name and DESC (eg. 0 to 3)
# DISABLE - PV name to use for SDIS
##
## Alarm summary record for input
## This summarizes the software limits on the temperature readings,
## the alarm status reading from the controller and the input reading status.
##
record(calc, "KM36:TST:LS:ALARMD4_SUMMARY_CALC") {
field(INPA, "KM36:TST:LS:KRDGD4 CP MS")
field(INPB, "KM36:TST:LS:ALARMD4_HIGH CP MS")
field(INPC, "KM36:TST:LS:ALARMD4_LOW CP MS")
field(INPD, "KM36:TST:LS:RDGSTD4 CP MS")
field(CALC, "A")
field(FLNK, "KM36:TST:LS:ALARMD4_SUMMARY_CALC2")
field(SDIS, "KM36:TST:LS:DISABLE_D4")
}
record(calcout, "KM36:TST:LS:ALARMD4_SUMMARY_CALC2") {
field(INPA, "KM36:TST:LS:ALARMD4_SUMMARY_CALC.STAT")
field(CALC, "A!=0?1:0")
field(DOPT, "Use CALC")
field(OOPT, "Every Time")
field(OUT, "KM36:TST:LS:ALARMD4_SUMMARY PP")
}
record(bi, "KM36:TST:LS:ALARMD4_SUMMARY") {
field(ZNAM, "No Alarm")
field(ONAM, "Alarm")
field(OSV, "MAJOR")
field(PINI, "YES")
field(VAL, "0")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## If we disable polling this input, disable the alarm
##
record(calcout, "KM36:TST:LS:ALARMD4_SUMMARY_DISABLE") {
field(INPA, "KM36:TST:LS:DISABLE_D4 CP")
field(CALC, "A==1?0:1")
field(DOPT, "Use CALC")
field(OOPT, "When Zero")
field(OUT, "KM36:TST:LS:ALARMD4_SUMMARY.VAL PP")
}
##
## Read the temperature on channel D4 in Kelvin.
##
record(ai, "KM36:TST:LS:KRDGD4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_D4")
field(DESC, "Channel D4 Temperature")
field(INP, "@ls336.proto getKRDG(D4) serial1 0")
field(SCAN, "1 second")
field(PREC, "3")
field(EGU, "K")
field(HHSV,"MAJOR")
field(HSV, "MINOR")
field(LSV, "MINOR")
field(LLSV,"MAJOR")
field(HYST,"1.0")
field(HIHI,"1000")
field(HIGH,"1000")
field(LOW,"-1")
field(LOLO,"-1")
field(ADEL, "1")
field(MDEL, "0")
info(autosaveFields, "HIHI HIGH LOW LOLO ADEL MDEL")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the raw voltage on channel D4.
##
record(ai, "KM36:TST:LS:SRDGD4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_D4")
field(INP, "@ls336.proto getSRDG(D4) serial1 0")
field(SCAN, "1 second")
field(PREC, "3")
field(EGU, "V")
field(ADEL, "1")
field(MDEL, "0")
}
##
## Set sensor D4 name
##
record(stringout, "KM36:TST:LS:INNAME_SD4") {
field(DESC, "Input D4 Name")
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setINNAME(D4) serial1 0")
field(FLNK, "KM36:TST:LS:INNAMED4.PROC CA")
}
##
## Read input sensor D4 name
##
record(stringin, "KM36:TST:LS:INNAMED4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(INP, "@ls336.proto getINNAME(D4) serial1 0")
field(PINI, "YES")
field(SCAN, "Passive")
}
##
## Read the high alarm status for input D4.
## This also populates ALARMD4_LOW
##
record(bi, "KM36:TST:LS:ALARMD4_HIGH") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_D4")
field(INP, "@ls336.proto getALARMST(D4,KM36:TST:LS:ALARMD4_LOW) serial1 0")
field(SCAN, "5 second")
field(ZNAM, "Off")
field(ONAM, "On")
field(OSV, "MAJOR")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the low alarm status for input D4
##
record(bi, "KM36:TST:LS:ALARMD4_LOW") {
field(DTYP, "Soft Channel")
field(ZNAM, "Off")
field(ONAM, "On")
field(OSV, "MAJOR")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the alarm parameters.
## NOTE: the last part of the record name is hard coded into protocol file.
##
record(bi, "KM36:TST:LS:ALARMD4") {
field(DESC, "Read Alarm Params")
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_D4")
field(INP, "@ls336.proto getALARM(D4,KM36:TST:LS:ALARMD4) serial1 0")
field(SCAN, "5 second")
}
##
## Read the rest of the alarm params.
## NOTE: the last part of the record names are hard coded into protocol file.
##
record(bi, "KM36:TST:LS:ALARMD4_ONOFF") {
field(DESC, "Alarm Enabled")
field(ZNAM, "Disabled")
field(ONAM, "Enabled")
}
record(ai, "KM36:TST:LS:ALARMD4_HIGHVAL") {
field(DESC, "Alarm High Value")
field(EGU, "K")
}
record(ai, "KM36:TST:LS:ALARMD4_LOWVAL") {
field(DESC, "Alarm Low Value")
field(EGU, "K")
}
record(ai, "KM36:TST:LS:ALARMD4_DB") {
field(DESC, "Alarm Deadband")
field(EGU, "K")
}
record(bi, "KM36:TST:LS:ALARMD4_LE") {
field(DESC, "Alarm Latch Enable")
field(ZNAM, "Non Latching")
field(ONAM, "Latching")
}
record(bi, "KM36:TST:LS:ALARMD4_AU") {
field(DESC, "Alarm Audible")
field(ZNAM, "Quiet")
field(ONAM, "Audible")
}
record(bi, "KM36:TST:LS:ALARMD4_VIS") {
field(DESC, "Alarm Visible")
field(ZNAM, "Non Visible")
field(ONAM, "Visible")
}
##
## Read the input reading status
##
record(mbbi, "KM36:TST:LS:RDGSTD4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_D4")
field(ZRST, "Valid")
field(ZRVL, "0")
field(ONST, "Invalid")
field(ONVL, "1")
field(TWST, "Temp Under")
field(TWVL, "16")
field(THST, "Temp Over")
field(THVL, "32")
field(FRST, "Sensor Zero")
field(FRVL, "64")
field(FVST, "Sensor Over")
field(FVVL, "128")
field(ONSV, "MAJOR")
field(TWSV, "MAJOR")
field(THSV, "MAJOR")
field(FRSV, "MAJOR")
field(FVSV, "MAJOR")
field(SCAN, "5 second")
field(INP, "@ls336.proto getRDGST(D4) serial1 0")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the input curve number
##
record(longin, "KM36:TST:LS:INCRVD4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_D4")
field(SCAN, "5 second")
field(INP, "@ls336.proto getINCRV(D4) serial1 0")
}
##
## Read the input type information.
## NOTE: the last part of the record name is hard coded into protocol file.
##
record(bi, "KM36:TST:LS:INTYPED4") {
field(DESC, "Read Input Type Params")
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_D4")
field(INP, "@ls336.proto getINTYPE(D4,KM36:TST:LS:INTYPED4) serial1 0")
field(SCAN, "5 second")
}
##
## Read the rest of the input type params.
## NOTE: the last part of the record names are hard coded into protocol file.
##
record(mbbi, "KM36:TST:LS:INTYPED4_S") {
field(DESC, "Sensor Type")
field(ZRST, "Disabled")
field(ZRVL, "0")
field(ONST, "Diode")
field(ONVL, "1")
field(TWST, "Platinum RTD")
field(TWVL, "2")
field(THST, "NTC RTD")
field(THVL, "3")
field(FRST, "Thermocouple")
field(FRVL, "4")
field(FVST, "Capacitance")
field(FVVL, "5")
}
record(bi, "KM36:TST:LS:INTYPED4_AR") {
field(DESC, "Auto Range")
field(ZNAM, "Off")
field(ONAM, "On")
}
record(mbbi, "KM36:TST:LS:INTYPED4_R") {
field(DESC, "Range")
field(ZRST, "10 Ohm / 2.5V / 50mV")
field(ZRVL, "0")
field(ONST, "30 Ohm / 10V")
field(ONVL, "1")
field(TWST, "100 Ohm")
field(TWVL, "2")
field(THST, "300 Ohm")
field(THVL, "3")
field(FRST, "1 KOhm")
field(FRVL, "4")
field(FVST, "3 KOhm")
field(FVVL, "5")
field(SXST, "10 KOhm")
field(SXVL, "6")
field(SVST, "30 KOhm")
field(SVVL, "7")
field(EIST, "100 KOhm")
field(EIVL, "8")
}
record(bi, "KM36:TST:LS:INTYPED4_C") {
field(DESC, "Compensation")
field(ZNAM, "Off")
field(ONAM, "On")
}
record(mbbi, "KM36:TST:LS:INTYPED4_U") {
field(DESC, "Units")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Kelvin")
field(ONVL, "1")
field(TWST, "Celcius")
field(TWVL, "2")
field(THST, "Sensor")
field(THVL, "3")
}
# Template to provide the records required for an input.
# This makes use of the macros required by lakeshore336.template
# but also requires macros to specify the input channel and index.
# The index is to provide a way for the developer to use a different
# channel naming scheme.
#
# For some commands, I hard coded the last part of the record names into
# the protocol file. This seems the easiest way to deal with commands
# will lots of params returned back, and avoid problematic long INP fields.
# For the ZONE commands I used waveforms and subarrays, but that is not as simple.
#
# Macros:
# INPUT - A to D, or D1 to D5
# INDEX - Index to use for the input channel PV name and DESC (eg. 0 to 3)
# DISABLE - PV name to use for SDIS
##
## Alarm summary record for input
## This summarizes the software limits on the temperature readings,
## the alarm status reading from the controller and the input reading status.
##
record(calc, "KM36:TST:LS:ALARMD5_SUMMARY_CALC") {
field(INPA, "KM36:TST:LS:KRDGD5 CP MS")
field(INPB, "KM36:TST:LS:ALARMD5_HIGH CP MS")
field(INPC, "KM36:TST:LS:ALARMD5_LOW CP MS")
field(INPD, "KM36:TST:LS:RDGSTD5 CP MS")
field(CALC, "A")
field(FLNK, "KM36:TST:LS:ALARMD5_SUMMARY_CALC2")
field(SDIS, "KM36:TST:LS:DISABLE_D5")
}
record(calcout, "KM36:TST:LS:ALARMD5_SUMMARY_CALC2") {
field(INPA, "KM36:TST:LS:ALARMD5_SUMMARY_CALC.STAT")
field(CALC, "A!=0?1:0")
field(DOPT, "Use CALC")
field(OOPT, "Every Time")
field(OUT, "KM36:TST:LS:ALARMD5_SUMMARY PP")
}
record(bi, "KM36:TST:LS:ALARMD5_SUMMARY") {
field(ZNAM, "No Alarm")
field(ONAM, "Alarm")
field(OSV, "MAJOR")
field(PINI, "YES")
field(VAL, "0")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## If we disable polling this input, disable the alarm
##
record(calcout, "KM36:TST:LS:ALARMD5_SUMMARY_DISABLE") {
field(INPA, "KM36:TST:LS:DISABLE_D5 CP")
field(CALC, "A==1?0:1")
field(DOPT, "Use CALC")
field(OOPT, "When Zero")
field(OUT, "KM36:TST:LS:ALARMD5_SUMMARY.VAL PP")
}
##
## Read the temperature on channel D5 in Kelvin.
##
record(ai, "KM36:TST:LS:KRDGD5") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_D5")
field(DESC, "Channel D5 Temperature")
field(INP, "@ls336.proto getKRDG(D5) serial1 0")
field(SCAN, "1 second")
field(PREC, "3")
field(EGU, "K")
field(HHSV,"MAJOR")
field(HSV, "MINOR")
field(LSV, "MINOR")
field(LLSV,"MAJOR")
field(HYST,"1.0")
field(HIHI,"1000")
field(HIGH,"1000")
field(LOW,"-1")
field(LOLO,"-1")
field(ADEL, "1")
field(MDEL, "0")
info(autosaveFields, "HIHI HIGH LOW LOLO ADEL MDEL")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the raw voltage on channel D5.
##
record(ai, "KM36:TST:LS:SRDGD5") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_D5")
field(INP, "@ls336.proto getSRDG(D5) serial1 0")
field(SCAN, "1 second")
field(PREC, "3")
field(EGU, "V")
field(ADEL, "1")
field(MDEL, "0")
}
##
## Set sensor D5 name
##
record(stringout, "KM36:TST:LS:INNAME_SD5") {
field(DESC, "Input D5 Name")
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setINNAME(D5) serial1 0")
field(FLNK, "KM36:TST:LS:INNAMED5.PROC CA")
}
##
## Read input sensor D5 name
##
record(stringin, "KM36:TST:LS:INNAMED5") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(INP, "@ls336.proto getINNAME(D5) serial1 0")
field(PINI, "YES")
field(SCAN, "Passive")
}
##
## Read the high alarm status for input D5.
## This also populates ALARMD5_LOW
##
record(bi, "KM36:TST:LS:ALARMD5_HIGH") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_D5")
field(INP, "@ls336.proto getALARMST(D5,KM36:TST:LS:ALARMD5_LOW) serial1 0")
field(SCAN, "5 second")
field(ZNAM, "Off")
field(ONAM, "On")
field(OSV, "MAJOR")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the low alarm status for input D5
##
record(bi, "KM36:TST:LS:ALARMD5_LOW") {
field(DTYP, "Soft Channel")
field(ZNAM, "Off")
field(ONAM, "On")
field(OSV, "MAJOR")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the alarm parameters.
## NOTE: the last part of the record name is hard coded into protocol file.
##
record(bi, "KM36:TST:LS:ALARMD5") {
field(DESC, "Read Alarm Params")
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_D5")
field(INP, "@ls336.proto getALARM(D5,KM36:TST:LS:ALARMD5) serial1 0")
field(SCAN, "5 second")
}
##
## Read the rest of the alarm params.
## NOTE: the last part of the record names are hard coded into protocol file.
##
record(bi, "KM36:TST:LS:ALARMD5_ONOFF") {
field(DESC, "Alarm Enabled")
field(ZNAM, "Disabled")
field(ONAM, "Enabled")
}
record(ai, "KM36:TST:LS:ALARMD5_HIGHVAL") {
field(DESC, "Alarm High Value")
field(EGU, "K")
}
record(ai, "KM36:TST:LS:ALARMD5_LOWVAL") {
field(DESC, "Alarm Low Value")
field(EGU, "K")
}
record(ai, "KM36:TST:LS:ALARMD5_DB") {
field(DESC, "Alarm Deadband")
field(EGU, "K")
}
record(bi, "KM36:TST:LS:ALARMD5_LE") {
field(DESC, "Alarm Latch Enable")
field(ZNAM, "Non Latching")
field(ONAM, "Latching")
}
record(bi, "KM36:TST:LS:ALARMD5_AU") {
field(DESC, "Alarm Audible")
field(ZNAM, "Quiet")
field(ONAM, "Audible")
}
record(bi, "KM36:TST:LS:ALARMD5_VIS") {
field(DESC, "Alarm Visible")
field(ZNAM, "Non Visible")
field(ONAM, "Visible")
}
##
## Read the input reading status
##
record(mbbi, "KM36:TST:LS:RDGSTD5") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_D5")
field(ZRST, "Valid")
field(ZRVL, "0")
field(ONST, "Invalid")
field(ONVL, "1")
field(TWST, "Temp Under")
field(TWVL, "16")
field(THST, "Temp Over")
field(THVL, "32")
field(FRST, "Sensor Zero")
field(FRVL, "64")
field(FVST, "Sensor Over")
field(FVVL, "128")
field(ONSV, "MAJOR")
field(TWSV, "MAJOR")
field(THSV, "MAJOR")
field(FRSV, "MAJOR")
field(FVSV, "MAJOR")
field(SCAN, "5 second")
field(INP, "@ls336.proto getRDGST(D5) serial1 0")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the input curve number
##
record(longin, "KM36:TST:LS:INCRVD5") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_D5")
field(SCAN, "5 second")
field(INP, "@ls336.proto getINCRV(D5) serial1 0")
}
##
## Read the input type information.
## NOTE: the last part of the record name is hard coded into protocol file.
##
record(bi, "KM36:TST:LS:INTYPED5") {
field(DESC, "Read Input Type Params")
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_D5")
field(INP, "@ls336.proto getINTYPE(D5,KM36:TST:LS:INTYPED5) serial1 0")
field(SCAN, "5 second")
}
##
## Read the rest of the input type params.
## NOTE: the last part of the record names are hard coded into protocol file.
##
record(mbbi, "KM36:TST:LS:INTYPED5_S") {
field(DESC, "Sensor Type")
field(ZRST, "Disabled")
field(ZRVL, "0")
field(ONST, "Diode")
field(ONVL, "1")
field(TWST, "Platinum RTD")
field(TWVL, "2")
field(THST, "NTC RTD")
field(THVL, "3")
field(FRST, "Thermocouple")
field(FRVL, "4")
field(FVST, "Capacitance")
field(FVVL, "5")
}
record(bi, "KM36:TST:LS:INTYPED5_AR") {
field(DESC, "Auto Range")
field(ZNAM, "Off")
field(ONAM, "On")
}
record(mbbi, "KM36:TST:LS:INTYPED5_R") {
field(DESC, "Range")
field(ZRST, "10 Ohm / 2.5V / 50mV")
field(ZRVL, "0")
field(ONST, "30 Ohm / 10V")
field(ONVL, "1")
field(TWST, "100 Ohm")
field(TWVL, "2")
field(THST, "300 Ohm")
field(THVL, "3")
field(FRST, "1 KOhm")
field(FRVL, "4")
field(FVST, "3 KOhm")
field(FVVL, "5")
field(SXST, "10 KOhm")
field(SXVL, "6")
field(SVST, "30 KOhm")
field(SVVL, "7")
field(EIST, "100 KOhm")
field(EIVL, "8")
}
record(bi, "KM36:TST:LS:INTYPED5_C") {
field(DESC, "Compensation")
field(ZNAM, "Off")
field(ONAM, "On")
}
record(mbbi, "KM36:TST:LS:INTYPED5_U") {
field(DESC, "Units")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Kelvin")
field(ONVL, "1")
field(TWST, "Celcius")
field(TWVL, "2")
field(THST, "Sensor")
field(THVL, "3")
}
################################################################
# Now include the loop dependant records, for outputs 1, 2, 3 and 4.
# The common records are in lakeshore336output.template.
################################################################
#substitute "TOLERANCE=1"
# This is included in lakeshore336.template
# This template is for the common functionality shared by all 4 outputs.
#
# There is some logic in this database to provide put_callback functionality
# for setting the temperature and waiting for it to be in range. The input
# sensor PV name used for the in-window calculation changes depending on
# the input sensor selected. In order for this to work it requires the following
# macros:
#
# INPUTA - Sensor 1 PV name
# INPUTB - Sensor 2 PV name
# INPUTC - Sensor 3 PV name
# INPUTD - Sensor 4 PV name
# INPUTD2 - Sensor D2 PV name
# INPUTD3 - Sensor D3 PV name
# INPUTD4 - Sensor D4 PV name
# INPUTD5 - Sensor D5 PV name
# TOLERANCE (optional - defaults to 1)
#
# The input link names must fit into a stringout record for this to work.
# The above link names default to a dummy record.
################################################################
# Read records
################################################################
##
## Record holding the output number
##
record(stringout, "KM36:TST:LS:OUTPUT1") {
field(DTYP, "Soft Channel")
field(VAL, "1")
field(PINI, "YES")
}
##
## Read the setpoint temperature.
##
record(ai, "KM36:TST:LS:SETP1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getSETP(1) serial1 0")
field(SCAN, "1 second")
field(PREC, "3")
field(EGU, "K")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the setpoint limit
##
##
## Read the ramp parameter. This also populates the ramp status KM36:TST:LS:RAMPST1,
##
record(ai, "KM36:TST:LS:RAMP1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getRAMP(1,KM36:TST:LS:RAMPST1) serial1 0")
field(SCAN, "5 second")
field(PREC, "3")
field(EGU, "K/min")
}
##
## Read the ramp status parameter.
##
## 0=off
## 1=on
##
record(bi, "KM36:TST:LS:RAMPST1") {
field(DTYP, "Soft Channel")
field(ZNAM, "Off")
field(ONAM, "On")
}
##
## Read the range parameter (the heater output power range).
## This is output specific and is defined in another file.
##
record(mbbi, "KM36:TST:LS:RANGE1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(ZRVL, "0")
field(ONVL, "1")
field(TWVL, "2")
field(THVL, "3")
field(FRVL, "4")
field(FVVL, "5")
field(SCAN, "5 second")
field(INP, "@ls336.proto getRANGE(1) serial1 0")
}
##
## Read the mode to use for outmode
## This is output specific and is defined in another file.
##
record(mbbi, "KM36:TST:LS:OMMODE1") {
}
##
## Read the manual output parameter.
##
record(ai, "KM36:TST:LS:MOUT1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getMOUT(1) serial1 0")
field(SCAN, "5 second")
}
##
## Read the PID P parameter. Pass the I and D records into the protocol to read those as well.
##
record(ai, "KM36:TST:LS:P1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getPID(1,KM36:TST:LS:I1,KM36:TST:LS:D1) serial1 0")
field(SCAN, "5 second")
}
##
## Read the PID I parameter.
##
record(ai, "KM36:TST:LS:I1") {
field(DTYP, "Soft Channel")
field(SCAN, "Passive")
}
##
## Read the PID D parameter.
##
record(ai, "KM36:TST:LS:D1") {
field(DTYP, "Soft Channel")
field(SCAN, "Passive")
}
##
## Read the mode to use for outmode.
## This also populates the OMI and OMP records.
## The mbbi strings and values are defined in the output specific templates.
##
record(mbbi, "KM36:TST:LS:OMM1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(ZRVL, "0")
field(ONVL, "1")
field(TWVL, "2")
field(THVL, "3")
field(FRVL, "4")
field(FVVL, "5")
field(SCAN, "5 second")
field(INP, "@ls336.proto getOM(1,KM36:TST:LS:OMI1,KM36:TST:LS:OMP1) serial1 0")
}
##
## Read the input to use for outmode
##
record(mbbi, "KM36:TST:LS:OMI1") {
field(DTYP, "Soft Channel")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
}
##
## Read the power up mode to use for outmode
##
record(mbbi, "KM36:TST:LS:OMP1") {
field(DTYP, "Soft Channel")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "On")
field(ONVL, "1")
}
################################################################
# Write records
################################################################
##
## Set the setpoint temperature.
##
record(ao, "KM36:TST:LS:SETP_S1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(DESC, "Setpoint temperature")
field(OUT, "@ls336.proto setSETP(1) serial1 0")
field(PREC, "3")
field(FLNK, "KM36:TST:LS:SETP_S1_BUSYSET.PROC")
field(EGU, "K")
info(archive, "Monitor, 00:00:01, VAL")
}
###############################################################################
##
## A few records to support put_callback on the setpoint. We use the busy record.
## A temperature window is used. The temperature must be within
## the window, before the callback is done.
##
record(dfanout, "KM36:TST:LS:SETP_S1_BUSYSET")
{
field(VAL, "0")
field(OUTA, "KM36:TST:LS:IN_WINDOW1.VAL PP")
field(FLNK, "KM36:TST:LS:SETP_S1_BUSYSET2")
}
record(dfanout, "KM36:TST:LS:SETP_S1_BUSYSET2")
{
field(VAL, "1")
field(OUTA, "KM36:TST:LS:SETP1.PROC PP")
field(OUTB, "KM36:TST:LS:SETP_S1_BUSY PP")
field(FLNK, "KM36:TST:LS:CALC_IN_WINDOW1")
}
record(busy, "KM36:TST:LS:SETP_S1_BUSY")
{
}
record(calcout, "KM36:TST:LS:CALC_IN_WINDOW1") {
field(PINI, "YES")
field(INPA, "1")
field(INPB, "KM36:TST:LS:DUMMY1.VAL")
field(INPC, "KM36:TST:LS:SETP_S1.VAL")
field(CALC, "((B>=(C-A))&&(B<=(C+A)))?1:0")
field(OOPT, "Every Time")
field(OUT, "KM36:TST:LS:IN_WINDOW1.VAL PP")
field(DOPT, "Use CALC")
field(SCAN, "1 second")
field(PREC, "1")
info(autosaveFields, "A")
info(archive, "Monitor, 00:00:01, A B C VAL")
}
record(bo, "KM36:TST:LS:IN_WINDOW1") {
field(DESC, "Temperature In Window")
field(VAL, "0")
field(PINI, "YES")
field(OMSL, "supervisory")
field(ZNAM, "Not In Window")
field(ONAM, "In Window")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Set busy record 'done' when TIME_WINDOW1=1
##
record(calcout, "KM36:TST:LS:CALC_BUSY_DONE1") {
field(INPA, "KM36:TST:LS:IN_WINDOW1.VAL CP")
field(CALC, "(A=1)?0:1")
field(OOPT, "Every Time")
field(OUT, "KM36:TST:LS:SETP_S1_BUSY.VAL PP")
}
###############################################################################
##
## Dummy record to use for input link name default
##
record(ai, "KM36:TST:LS:DUMMY1") {
}
##
## Monitor KM36:TST:LS:OMI1 to determin which input sensor to use
## to deal with the callback. The below set of records automatically
## switch the input when the 'control input' is changed. They make
## use of the input sensor PV names passed into this template.
##
record(calcout, "KM36:TST:LS:SET_1_INPUTA") {
field(CALC, "A=1")
field(INPA, "KM36:TST:LS:OMI1.VAL CP")
field(DOPT, "Use OCAL")
field(OVAL, "1")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:SET_1_INPUTA_LINK.PROC")
}
record(stringout, "KM36:TST:LS:SET_1_INPUTA_LINK") {
field(VAL, "KM36:TST:LS:KRDG0.VAL CP")
field(OUT, "KM36:TST:LS:CALC_IN_WINDOW1.INPB CA")
}
record(calcout, "KM36:TST:LS:SET_1_INPUTB") {
field(CALC, "A=2")
field(INPA, "KM36:TST:LS:OMI1.VAL CP")
field(DOPT, "Use OCAL")
field(OVAL, "1")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:SET_1_INPUTB_LINK.PROC")
}
record(stringout, "KM36:TST:LS:SET_1_INPUTB_LINK") {
field(VAL, "KM36:TST:LS:KRDG1.VAL CP")
field(OUT, "KM36:TST:LS:CALC_IN_WINDOW1.INPB CA")
}
record(calcout, "KM36:TST:LS:SET_1_INPUTC") {
field(CALC, "A=3")
field(INPA, "KM36:TST:LS:OMI1.VAL CP")
field(DOPT, "Use OCAL")
field(OVAL, "1")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:SET_1_INPUTC_LINK.PROC")
}
record(stringout, "KM36:TST:LS:SET_1_INPUTC_LINK") {
field(VAL, "KM36:TST:LS:KRDG2.VAL CP")
field(OUT, "KM36:TST:LS:CALC_IN_WINDOW1.INPB CA")
}
record(calcout, "KM36:TST:LS:SET_1_INPUTD") {
field(CALC, "A=4")
field(INPA, "KM36:TST:LS:OMI1.VAL CP")
field(DOPT, "Use OCAL")
field(OVAL, "1")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:SET_1_INPUTD_LINK.PROC")
}
record(stringout, "KM36:TST:LS:SET_1_INPUTD_LINK") {
field(VAL, "KM36:TST:LS:KRDG3.VAL CP")
field(OUT, "KM36:TST:LS:CALC_IN_WINDOW1.INPB CA")
}
record(calcout, "KM36:TST:LS:SET_1_INPUTD2") {
field(CALC, "A=5")
field(INPA, "KM36:TST:LS:OMI1.VAL CP")
field(DOPT, "Use OCAL")
field(OVAL, "1")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:SET_1_INPUTD2_LINK.PROC")
}
record(stringout, "KM36:TST:LS:SET_1_INPUTD2_LINK") {
field(VAL, "KM36:TST:LS:KRDGD2.VAL CP")
field(OUT, "KM36:TST:LS:CALC_IN_WINDOW1.INPB CA")
}
record(calcout, "KM36:TST:LS:SET_1_INPUTD3") {
field(CALC, "A=6")
field(INPA, "KM36:TST:LS:OMI1.VAL CP")
field(DOPT, "Use OCAL")
field(OVAL, "1")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:SET_1_INPUTD3_LINK.PROC")
}
record(stringout, "KM36:TST:LS:SET_1_INPUTD3_LINK") {
field(VAL, "KM36:TST:LS:KRDGD3.VAL CP")
field(OUT, "KM36:TST:LS:CALC_IN_WINDOW1.INPB CA")
}
record(calcout, "KM36:TST:LS:SET_1_INPUTD4") {
field(CALC, "A=7")
field(INPA, "KM36:TST:LS:OMI1.VAL CP")
field(DOPT, "Use OCAL")
field(OVAL, "1")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:SET_1_INPUTD4_LINK.PROC")
}
record(stringout, "KM36:TST:LS:SET_1_INPUTD4_LINK") {
field(VAL, "KM36:TST:LS:KRDGD4.VAL CP")
field(OUT, "KM36:TST:LS:CALC_IN_WINDOW1.INPB CA")
}
record(calcout, "KM36:TST:LS:SET_1_INPUTD5") {
field(CALC, "A=8")
field(INPA, "KM36:TST:LS:OMI1.VAL CP")
field(DOPT, "Use OCAL")
field(OVAL, "1")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:SET_1_INPUTD5_LINK.PROC")
}
record(stringout, "KM36:TST:LS:SET_1_INPUTD5_LINK") {
field(VAL, "KM36:TST:LS:KRDGD5.VAL CP")
field(OUT, "KM36:TST:LS:CALC_IN_WINDOW1.INPB CA")
}
##
## Set the range parameter.
## The strings are output specific and is defined in another file.
##
record(mbbo, "KM36:TST:LS:RANGE_S1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setRANGE(1) serial1 0")
field(FLNK, "KM36:TST:LS:RANGE1.PROC CA")
}
##
## Set the ramp rate parameter.
##
## This is the desired temperate increase/decrease rate
## per second when heating/cooling.
##
## The ramp and ramp status parameters are actually one command
## for the lakeshore. Therefore one must pass into this
## record the existing/desired ramp status, as well as the
## desired ramp. This is done automatically by reading the
## PV which holds the current ramp status.
##
record(ao, "KM36:TST:LS:RAMP_S1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setRAMP(KM36:TST:LS:RAMPST1,1) serial1 0")
field(PREC, "3")
field(FLNK, "KM36:TST:LS:RAMP1.PROC CA")
field(EGU, "K/min")
}
##
## Set the ramp status parameter.
##
## 0=off
## 1=on
##
## The ramp and ramp status parameters are actually one command
## for the lakeshore. Therefore one must pass into this
## record the existing/desired ramp, as well as the
## desired ramp status. This is done automatically by reading the
## PV which holds the current ramp value.
##
record(bo, "KM36:TST:LS:RAMPST_S1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setRAMPSTATUS(KM36:TST:LS:RAMP1,1) serial1 0")
field(FLNK, "KM36:TST:LS:RAMP1.PROC CA")
field(ZNAM, "Off")
field(ONAM, "On")
}
##
## Set the manual output value.
##
record(ao, "KM36:TST:LS:MOUT_S1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setMOUT(1) serial1 0")
field(FLNK, "KM36:TST:LS:MOUT1.PROC CA")
}
##
## Set the PID P parameter.
##
record(ao, "KM36:TST:LS:P_S1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setP(1,KM36:TST:LS:I1,KM36:TST:LS:D1) serial1 0")
field(FLNK, "KM36:TST:LS:P1.PROC CA")
}
##
## Set the PID I parameter.
##
record(ao, "KM36:TST:LS:I_S1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setI(KM36:TST:LS:P1,1,KM36:TST:LS:D1) serial1 0")
field(FLNK, "KM36:TST:LS:P1.PROC CA")
}
##
## Set the PID D parameter.
##
record(ao, "KM36:TST:LS:D_S1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setD(KM36:TST:LS:P1,KM36:TST:LS:I1,1) serial1 0")
field(FLNK, "KM36:TST:LS:P1.PROC CA")
}
##
## Set the mode to use for outmode
## The strings are output specific. This is defined in another file.
##
record(mbbo, "KM36:TST:LS:OMM_S1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(ZRVL, "0")
field(ONVL, "1")
field(TWVL, "2")
field(THVL, "3")
field(FRVL, "4")
field(FVVL, "5")
field(OUT, "@ls336.proto setOM(1,KM36:TST:LS:OMI1,KM36:TST:LS:OMP1) serial1 0")
field(FLNK, "KM36:TST:LS:OMM1.PROC CA")
}
##
## Set the input to use for outmode
##
record(mbbo, "KM36:TST:LS:OMI_S1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(OUT, "@ls336.proto setOMI(1,KM36:TST:LS:OMM1,KM36:TST:LS:OMP1) serial1 0")
field(FLNK, "KM36:TST:LS:OMM1.PROC CA")
}
##
## Set the power up mode to use for outmode
##
record(mbbo, "KM36:TST:LS:OMP_S1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "On")
field(ONVL, "1")
field(OUT, "@ls336.proto setOMP(1,KM36:TST:LS:OMM1,KM36:TST:LS:OMI1) serial1 0")
field(FLNK, "KM36:TST:LS:OMM1.PROC CA")
}
##
## Set the type of tuning mode
##
record(mbbo, "KM36:TST:LS:TUNEMODE_S1") {
field(SDIS, "KM36:TST:LS:DISABLE")
field(ZRST, "P Only")
field(ZRVL, "0")
field(ONST, "P and I")
field(ONVL, "1")
field(TWST, "P, I and D")
field(TWVL, "2")
}
##
## Start the tuning process
##
record(ao, "KM36:TST:LS:TUNESTART1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(DESC, "Start the auto tuning")
field(OUT, "@ls336.proto setATUNE(1,KM36:TST:LS:TUNEMODE_S1) serial1 0")
}
##
## Read all ZONE settings
##
record(seq, "KM36:TST:LS:Z:READ1") {
field(DESC, "Read Output 1 ZONE")
field(DOL1, "1")
field(DLY1, "0.1")
field(LNK1, "KM36:TST:LS:Z1:ALL1.PROC")
field(DOL2, "1")
field(DLY2, "0.1")
field(LNK2, "KM36:TST:LS:Z2:ALL1.PROC")
field(DOL3, "1")
field(DLY3, "0.1")
field(LNK3, "KM36:TST:LS:Z3:ALL1.PROC")
field(DOL4, "1")
field(DLY4, "0.1")
field(LNK4, "KM36:TST:LS:Z4:ALL1.PROC")
field(DOL5, "1")
field(DLY5, "0.1")
field(LNK5, "KM36:TST:LS:Z5:ALL1.PROC")
field(DOL6, "1")
field(DLY6, "0.1")
field(LNK6, "KM36:TST:LS:Z6:ALL1.PROC")
field(DOL7, "1")
field(DLY7, "0.1")
field(LNK7, "KM36:TST:LS:Z7:ALL1.PROC")
field(DOL8, "1")
field(DLY8, "0.1")
field(LNK8, "KM36:TST:LS:Z8:ALL1.PROC")
field(DOL9, "1")
field(DLY9, "0.1")
field(LNK9, "KM36:TST:LS:Z9:ALL1.PROC")
field(DOLA, "1")
field(DLYA, "0.1")
field(LNKA, "KM36:TST:LS:Z10:ALL1.PROC")
field(PINI, "YES")
}
###############################################
# This is included in lakeshore336.template
# This template is for outputs 1 and 2, which can provide heater power.
################################################################
# Read records
################################################################
##
## Read the heater output value.
##
record(ai, "KM36:TST:LS:HTR1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getHTR(1) serial1 0")
field(SCAN, "5 second")
field(PREC, "1")
field(EGU, "%")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Define the strings and values for this record.
##
record(mbbi, "KM36:TST:LS:RANGE1") {
field(ZRST, "Off")
field(ONST, "Range1/Low")
field(TWST, "Range2/Medium")
field(THST, "Range3/High")
field(FRST, "Range4")
field(FVST, "Range5")
}
##
## Define the strings and values for this record.
##
record(mbbi, "KM36:TST:LS:OMM1") {
field(ZRST, "Off")
field(ONST, "Closed Loop PID")
field(TWST, "Zone")
field(THST, "Open Loop")
}
##
## Define the strings and values for this record.
##
record(mbbo, "KM36:TST:LS:RANGE_S1") {
field(ZRST, "Off")
field(ONST, "Range1/Low")
field(TWST, "Range2/Medium")
field(THST, "Range3/High")
field(FRST, "Range4")
field(FVST, "Range5")
}
##
## Define the strings and values for this record.
##
record(mbbo, "KM36:TST:LS:OMM_S1") {
field(ZRST, "Off")
field(ONST, "Closed Loop PID")
field(TWST, "Zone")
field(THST, "Open Loop")
}
##
## Read the heater status
##
record(longin, "KM36:TST:LS:HTRST1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(SCAN, "5 second")
field(INP, "@ls336.proto getHTRST(D5) serial1 0")
field(FLNK, "KM36:TST:LS:HTRST1_CALC")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Cache the heater status because this is cleared on a read on the controller.
##
record(calcout, "KM36:TST:LS:HTRST1_CALC") {
field(INPA, "KM36:TST:LS:HTRST1.VAL")
field(CALC, "A!=0?A:0")
field(DOPT, "Use CALC")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:HTRST1_CACHE.RVAL PP")
}
record(mbbi, "KM36:TST:LS:HTRST1_CACHE") {
field(DESC, "Cached HTRST")
field(DTYP, "Raw Soft Channel")
field(ZRST, "No Error")
field(ZRVL, "0")
field(ONST, "Open Load")
field(ONVL, "1")
field(TWST, "Short/Compliance")
field(TWVL, "2")
field(VAL, "0")
field(PINI, "YES")
field(ONSV, "MAJOR")
field(TWSV, "MAJOR")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Provide record to reset the cached value
##
record(bo, "KM36:TST:LS:HTRST1_RESET") {
field(DESC, "Reset Cached HTRST")
field(VAL, "0")
field(OUT, "KM36:TST:LS:HTRST1_CACHE.RVAL PP")
}
###############################################
# Add in ZONE support
###############################################
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z1:ALL1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(1,1) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:UB1:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z1:UB1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z1:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:UB1.PROC")
}
record(ai, "KM36:TST:LS:Z1:UB1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z1:UB1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:P1:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z1:P1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z1:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:P1.PROC")
}
record(ai, "KM36:TST:LS:Z1:P1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z1:P1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:I1:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z1:I1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z1:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:I1.PROC")
}
record(ai, "KM36:TST:LS:Z1:I1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z1:I1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:D1:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z1:D1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z1:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:D1.PROC")
}
record(ai, "KM36:TST:LS:Z1:D1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z1:D1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:MOUT1:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z1:MOUT1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z1:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:MOUT1.PROC")
}
record(ai, "KM36:TST:LS:Z1:MOUT1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z1:MOUT1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:RANGE1:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z1:RANGE1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z1:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:RANGE1.PROC")
}
record(mbbi, "KM36:TST:LS:Z1:RANGE1") {
field(INP, "KM36:TST:LS:Z1:RANGE1:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z1:INPUT1:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z1:INPUT1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z1:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:INPUT1.PROC")
}
record(mbbi, "KM36:TST:LS:Z1:INPUT1") {
field(INP, "KM36:TST:LS:Z1:INPUT1:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z1:RATE1:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z1:RATE1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z1:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:RATE1.PROC")
}
record(ai, "KM36:TST:LS:Z1:RATE1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z1:RATE1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:INITCALC1.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z1:INITCALC1") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z1:INITUB1.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITUB1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z1:UB1.VAL")
field(OUTA, "KM36:TST:LS:Z1:UB_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z1:INITP1.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITP1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z1:P1.VAL")
field(OUTA, "KM36:TST:LS:Z1:P_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z1:INITI1.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITI1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z1:I1.VAL")
field(OUTA, "KM36:TST:LS:Z1:I_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z1:INITD1.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITD1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z1:D1.VAL")
field(OUTA, "KM36:TST:LS:Z1:D_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z1:INITMOUT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITMOUT1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z1:MOUT1.VAL")
field(OUTA, "KM36:TST:LS:Z1:MOUT_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z1:INITRANGE1.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITRANGE1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z1:RANGE1.VAL")
field(OUTA, "KM36:TST:LS:Z1:RANGE_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z1:INITINPUT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITINPUT1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z1:INPUT1.VAL")
field(OUTA, "KM36:TST:LS:Z1:INPUT_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z1:INITRATE1.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITRATE1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z1:RATE1.VAL")
field(OUTA, "KM36:TST:LS:Z1:RATE_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z1:INITCOUNT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITCOUNT1") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z1:INITCALC1.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z1:UB_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z1:P_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z1:I_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z1:D_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z1:MOUT_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z1:RANGE_S1") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z1:INPUT_S1") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z1:RATE_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z1:SET1") {
field(INPA, "KM36:TST:LS:Z1:UB_S1")
field(INPB, "KM36:TST:LS:Z1:P_S1")
field(INPC, "KM36:TST:LS:Z1:I_S1")
field(INPD, "KM36:TST:LS:Z1:D_S1")
field(INPE, "KM36:TST:LS:Z1:MOUT_S1")
field(INPF, "KM36:TST:LS:Z1:RANGE_S1")
field(INPG, "KM36:TST:LS:Z1:INPUT_S1")
field(INPH, "KM36:TST:LS:Z1:RATE_S1")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(1,1) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z1:ALL1.PROC")
}
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z2:ALL1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(1,2) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:UB1:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z2:UB1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:UB1.PROC")
}
record(ai, "KM36:TST:LS:Z2:UB1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:UB1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:P1:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z2:P1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:P1.PROC")
}
record(ai, "KM36:TST:LS:Z2:P1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:P1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:I1:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z2:I1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:I1.PROC")
}
record(ai, "KM36:TST:LS:Z2:I1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:I1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:D1:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z2:D1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:D1.PROC")
}
record(ai, "KM36:TST:LS:Z2:D1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:D1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:MOUT1:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z2:MOUT1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:MOUT1.PROC")
}
record(ai, "KM36:TST:LS:Z2:MOUT1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:MOUT1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:RANGE1:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z2:RANGE1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:RANGE1.PROC")
}
record(mbbi, "KM36:TST:LS:Z2:RANGE1") {
field(INP, "KM36:TST:LS:Z2:RANGE1:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z2:INPUT1:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z2:INPUT1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:INPUT1.PROC")
}
record(mbbi, "KM36:TST:LS:Z2:INPUT1") {
field(INP, "KM36:TST:LS:Z2:INPUT1:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z2:RATE1:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z2:RATE1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:RATE1.PROC")
}
record(ai, "KM36:TST:LS:Z2:RATE1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:RATE1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:INITCALC1.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z2:INITCALC1") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z2:INITUB1.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITUB1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:UB1.VAL")
field(OUTA, "KM36:TST:LS:Z2:UB_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITP1.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITP1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:P1.VAL")
field(OUTA, "KM36:TST:LS:Z2:P_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITI1.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITI1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:I1.VAL")
field(OUTA, "KM36:TST:LS:Z2:I_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITD1.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITD1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:D1.VAL")
field(OUTA, "KM36:TST:LS:Z2:D_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITMOUT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITMOUT1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:MOUT1.VAL")
field(OUTA, "KM36:TST:LS:Z2:MOUT_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITRANGE1.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITRANGE1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:RANGE1.VAL")
field(OUTA, "KM36:TST:LS:Z2:RANGE_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITINPUT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITINPUT1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:INPUT1.VAL")
field(OUTA, "KM36:TST:LS:Z2:INPUT_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITRATE1.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITRATE1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:RATE1.VAL")
field(OUTA, "KM36:TST:LS:Z2:RATE_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITCOUNT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITCOUNT1") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z2:INITCALC1.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z2:UB_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z2:P_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z2:I_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z2:D_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z2:MOUT_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z2:RANGE_S1") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z2:INPUT_S1") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z2:RATE_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z2:SET1") {
field(INPA, "KM36:TST:LS:Z2:UB_S1")
field(INPB, "KM36:TST:LS:Z2:P_S1")
field(INPC, "KM36:TST:LS:Z2:I_S1")
field(INPD, "KM36:TST:LS:Z2:D_S1")
field(INPE, "KM36:TST:LS:Z2:MOUT_S1")
field(INPF, "KM36:TST:LS:Z2:RANGE_S1")
field(INPG, "KM36:TST:LS:Z2:INPUT_S1")
field(INPH, "KM36:TST:LS:Z2:RATE_S1")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(1,2) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z2:ALL1.PROC")
}
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z2:ALL1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(1,2) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:UB1:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z2:UB1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:UB1.PROC")
}
record(ai, "KM36:TST:LS:Z2:UB1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:UB1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:P1:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z2:P1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:P1.PROC")
}
record(ai, "KM36:TST:LS:Z2:P1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:P1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:I1:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z2:I1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:I1.PROC")
}
record(ai, "KM36:TST:LS:Z2:I1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:I1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:D1:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z2:D1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:D1.PROC")
}
record(ai, "KM36:TST:LS:Z2:D1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:D1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:MOUT1:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z2:MOUT1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:MOUT1.PROC")
}
record(ai, "KM36:TST:LS:Z2:MOUT1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:MOUT1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:RANGE1:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z2:RANGE1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:RANGE1.PROC")
}
record(mbbi, "KM36:TST:LS:Z2:RANGE1") {
field(INP, "KM36:TST:LS:Z2:RANGE1:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z2:INPUT1:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z2:INPUT1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:INPUT1.PROC")
}
record(mbbi, "KM36:TST:LS:Z2:INPUT1") {
field(INP, "KM36:TST:LS:Z2:INPUT1:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z2:RATE1:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z2:RATE1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:RATE1.PROC")
}
record(ai, "KM36:TST:LS:Z2:RATE1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:RATE1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:INITCALC1.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z2:INITCALC1") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z2:INITUB1.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITUB1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:UB1.VAL")
field(OUTA, "KM36:TST:LS:Z2:UB_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITP1.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITP1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:P1.VAL")
field(OUTA, "KM36:TST:LS:Z2:P_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITI1.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITI1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:I1.VAL")
field(OUTA, "KM36:TST:LS:Z2:I_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITD1.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITD1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:D1.VAL")
field(OUTA, "KM36:TST:LS:Z2:D_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITMOUT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITMOUT1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:MOUT1.VAL")
field(OUTA, "KM36:TST:LS:Z2:MOUT_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITRANGE1.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITRANGE1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:RANGE1.VAL")
field(OUTA, "KM36:TST:LS:Z2:RANGE_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITINPUT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITINPUT1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:INPUT1.VAL")
field(OUTA, "KM36:TST:LS:Z2:INPUT_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITRATE1.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITRATE1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:RATE1.VAL")
field(OUTA, "KM36:TST:LS:Z2:RATE_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITCOUNT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITCOUNT1") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z2:INITCALC1.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z2:UB_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z2:P_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z2:I_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z2:D_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z2:MOUT_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z2:RANGE_S1") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z2:INPUT_S1") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z2:RATE_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z2:SET1") {
field(INPA, "KM36:TST:LS:Z2:UB_S1")
field(INPB, "KM36:TST:LS:Z2:P_S1")
field(INPC, "KM36:TST:LS:Z2:I_S1")
field(INPD, "KM36:TST:LS:Z2:D_S1")
field(INPE, "KM36:TST:LS:Z2:MOUT_S1")
field(INPF, "KM36:TST:LS:Z2:RANGE_S1")
field(INPG, "KM36:TST:LS:Z2:INPUT_S1")
field(INPH, "KM36:TST:LS:Z2:RATE_S1")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(1,2) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z2:ALL1.PROC")
}
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z3:ALL1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(1,3) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:UB1:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z3:UB1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z3:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:UB1.PROC")
}
record(ai, "KM36:TST:LS:Z3:UB1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z3:UB1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:P1:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z3:P1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z3:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:P1.PROC")
}
record(ai, "KM36:TST:LS:Z3:P1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z3:P1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:I1:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z3:I1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z3:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:I1.PROC")
}
record(ai, "KM36:TST:LS:Z3:I1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z3:I1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:D1:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z3:D1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z3:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:D1.PROC")
}
record(ai, "KM36:TST:LS:Z3:D1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z3:D1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:MOUT1:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z3:MOUT1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z3:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:MOUT1.PROC")
}
record(ai, "KM36:TST:LS:Z3:MOUT1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z3:MOUT1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:RANGE1:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z3:RANGE1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z3:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:RANGE1.PROC")
}
record(mbbi, "KM36:TST:LS:Z3:RANGE1") {
field(INP, "KM36:TST:LS:Z3:RANGE1:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z3:INPUT1:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z3:INPUT1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z3:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:INPUT1.PROC")
}
record(mbbi, "KM36:TST:LS:Z3:INPUT1") {
field(INP, "KM36:TST:LS:Z3:INPUT1:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z3:RATE1:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z3:RATE1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z3:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:RATE1.PROC")
}
record(ai, "KM36:TST:LS:Z3:RATE1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z3:RATE1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:INITCALC1.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z3:INITCALC1") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z3:INITUB1.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITUB1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z3:UB1.VAL")
field(OUTA, "KM36:TST:LS:Z3:UB_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z3:INITP1.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITP1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z3:P1.VAL")
field(OUTA, "KM36:TST:LS:Z3:P_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z3:INITI1.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITI1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z3:I1.VAL")
field(OUTA, "KM36:TST:LS:Z3:I_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z3:INITD1.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITD1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z3:D1.VAL")
field(OUTA, "KM36:TST:LS:Z3:D_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z3:INITMOUT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITMOUT1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z3:MOUT1.VAL")
field(OUTA, "KM36:TST:LS:Z3:MOUT_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z3:INITRANGE1.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITRANGE1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z3:RANGE1.VAL")
field(OUTA, "KM36:TST:LS:Z3:RANGE_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z3:INITINPUT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITINPUT1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z3:INPUT1.VAL")
field(OUTA, "KM36:TST:LS:Z3:INPUT_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z3:INITRATE1.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITRATE1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z3:RATE1.VAL")
field(OUTA, "KM36:TST:LS:Z3:RATE_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z3:INITCOUNT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITCOUNT1") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z3:INITCALC1.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z3:UB_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z3:P_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z3:I_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z3:D_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z3:MOUT_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z3:RANGE_S1") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z3:INPUT_S1") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z3:RATE_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z3:SET1") {
field(INPA, "KM36:TST:LS:Z3:UB_S1")
field(INPB, "KM36:TST:LS:Z3:P_S1")
field(INPC, "KM36:TST:LS:Z3:I_S1")
field(INPD, "KM36:TST:LS:Z3:D_S1")
field(INPE, "KM36:TST:LS:Z3:MOUT_S1")
field(INPF, "KM36:TST:LS:Z3:RANGE_S1")
field(INPG, "KM36:TST:LS:Z3:INPUT_S1")
field(INPH, "KM36:TST:LS:Z3:RATE_S1")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(1,3) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z3:ALL1.PROC")
}
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z4:ALL1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(1,4) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:UB1:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z4:UB1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z4:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:UB1.PROC")
}
record(ai, "KM36:TST:LS:Z4:UB1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z4:UB1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:P1:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z4:P1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z4:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:P1.PROC")
}
record(ai, "KM36:TST:LS:Z4:P1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z4:P1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:I1:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z4:I1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z4:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:I1.PROC")
}
record(ai, "KM36:TST:LS:Z4:I1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z4:I1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:D1:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z4:D1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z4:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:D1.PROC")
}
record(ai, "KM36:TST:LS:Z4:D1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z4:D1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:MOUT1:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z4:MOUT1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z4:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:MOUT1.PROC")
}
record(ai, "KM36:TST:LS:Z4:MOUT1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z4:MOUT1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:RANGE1:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z4:RANGE1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z4:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:RANGE1.PROC")
}
record(mbbi, "KM36:TST:LS:Z4:RANGE1") {
field(INP, "KM36:TST:LS:Z4:RANGE1:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z4:INPUT1:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z4:INPUT1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z4:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:INPUT1.PROC")
}
record(mbbi, "KM36:TST:LS:Z4:INPUT1") {
field(INP, "KM36:TST:LS:Z4:INPUT1:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z4:RATE1:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z4:RATE1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z4:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:RATE1.PROC")
}
record(ai, "KM36:TST:LS:Z4:RATE1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z4:RATE1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:INITCALC1.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z4:INITCALC1") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z4:INITUB1.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITUB1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z4:UB1.VAL")
field(OUTA, "KM36:TST:LS:Z4:UB_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z4:INITP1.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITP1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z4:P1.VAL")
field(OUTA, "KM36:TST:LS:Z4:P_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z4:INITI1.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITI1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z4:I1.VAL")
field(OUTA, "KM36:TST:LS:Z4:I_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z4:INITD1.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITD1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z4:D1.VAL")
field(OUTA, "KM36:TST:LS:Z4:D_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z4:INITMOUT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITMOUT1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z4:MOUT1.VAL")
field(OUTA, "KM36:TST:LS:Z4:MOUT_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z4:INITRANGE1.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITRANGE1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z4:RANGE1.VAL")
field(OUTA, "KM36:TST:LS:Z4:RANGE_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z4:INITINPUT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITINPUT1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z4:INPUT1.VAL")
field(OUTA, "KM36:TST:LS:Z4:INPUT_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z4:INITRATE1.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITRATE1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z4:RATE1.VAL")
field(OUTA, "KM36:TST:LS:Z4:RATE_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z4:INITCOUNT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITCOUNT1") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z4:INITCALC1.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z4:UB_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z4:P_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z4:I_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z4:D_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z4:MOUT_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z4:RANGE_S1") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z4:INPUT_S1") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z4:RATE_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z4:SET1") {
field(INPA, "KM36:TST:LS:Z4:UB_S1")
field(INPB, "KM36:TST:LS:Z4:P_S1")
field(INPC, "KM36:TST:LS:Z4:I_S1")
field(INPD, "KM36:TST:LS:Z4:D_S1")
field(INPE, "KM36:TST:LS:Z4:MOUT_S1")
field(INPF, "KM36:TST:LS:Z4:RANGE_S1")
field(INPG, "KM36:TST:LS:Z4:INPUT_S1")
field(INPH, "KM36:TST:LS:Z4:RATE_S1")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(1,4) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z4:ALL1.PROC")
}
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z5:ALL1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(1,5) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:UB1:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z5:UB1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z5:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:UB1.PROC")
}
record(ai, "KM36:TST:LS:Z5:UB1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z5:UB1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:P1:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z5:P1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z5:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:P1.PROC")
}
record(ai, "KM36:TST:LS:Z5:P1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z5:P1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:I1:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z5:I1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z5:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:I1.PROC")
}
record(ai, "KM36:TST:LS:Z5:I1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z5:I1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:D1:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z5:D1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z5:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:D1.PROC")
}
record(ai, "KM36:TST:LS:Z5:D1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z5:D1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:MOUT1:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z5:MOUT1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z5:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:MOUT1.PROC")
}
record(ai, "KM36:TST:LS:Z5:MOUT1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z5:MOUT1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:RANGE1:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z5:RANGE1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z5:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:RANGE1.PROC")
}
record(mbbi, "KM36:TST:LS:Z5:RANGE1") {
field(INP, "KM36:TST:LS:Z5:RANGE1:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z5:INPUT1:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z5:INPUT1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z5:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:INPUT1.PROC")
}
record(mbbi, "KM36:TST:LS:Z5:INPUT1") {
field(INP, "KM36:TST:LS:Z5:INPUT1:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z5:RATE1:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z5:RATE1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z5:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:RATE1.PROC")
}
record(ai, "KM36:TST:LS:Z5:RATE1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z5:RATE1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:INITCALC1.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z5:INITCALC1") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z5:INITUB1.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITUB1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z5:UB1.VAL")
field(OUTA, "KM36:TST:LS:Z5:UB_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z5:INITP1.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITP1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z5:P1.VAL")
field(OUTA, "KM36:TST:LS:Z5:P_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z5:INITI1.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITI1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z5:I1.VAL")
field(OUTA, "KM36:TST:LS:Z5:I_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z5:INITD1.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITD1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z5:D1.VAL")
field(OUTA, "KM36:TST:LS:Z5:D_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z5:INITMOUT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITMOUT1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z5:MOUT1.VAL")
field(OUTA, "KM36:TST:LS:Z5:MOUT_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z5:INITRANGE1.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITRANGE1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z5:RANGE1.VAL")
field(OUTA, "KM36:TST:LS:Z5:RANGE_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z5:INITINPUT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITINPUT1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z5:INPUT1.VAL")
field(OUTA, "KM36:TST:LS:Z5:INPUT_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z5:INITRATE1.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITRATE1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z5:RATE1.VAL")
field(OUTA, "KM36:TST:LS:Z5:RATE_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z5:INITCOUNT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITCOUNT1") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z5:INITCALC1.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z5:UB_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z5:P_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z5:I_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z5:D_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z5:MOUT_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z5:RANGE_S1") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z5:INPUT_S1") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z5:RATE_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z5:SET1") {
field(INPA, "KM36:TST:LS:Z5:UB_S1")
field(INPB, "KM36:TST:LS:Z5:P_S1")
field(INPC, "KM36:TST:LS:Z5:I_S1")
field(INPD, "KM36:TST:LS:Z5:D_S1")
field(INPE, "KM36:TST:LS:Z5:MOUT_S1")
field(INPF, "KM36:TST:LS:Z5:RANGE_S1")
field(INPG, "KM36:TST:LS:Z5:INPUT_S1")
field(INPH, "KM36:TST:LS:Z5:RATE_S1")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(1,5) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z5:ALL1.PROC")
}
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z6:ALL1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(1,6) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:UB1:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z6:UB1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z6:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:UB1.PROC")
}
record(ai, "KM36:TST:LS:Z6:UB1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z6:UB1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:P1:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z6:P1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z6:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:P1.PROC")
}
record(ai, "KM36:TST:LS:Z6:P1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z6:P1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:I1:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z6:I1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z6:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:I1.PROC")
}
record(ai, "KM36:TST:LS:Z6:I1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z6:I1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:D1:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z6:D1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z6:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:D1.PROC")
}
record(ai, "KM36:TST:LS:Z6:D1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z6:D1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:MOUT1:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z6:MOUT1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z6:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:MOUT1.PROC")
}
record(ai, "KM36:TST:LS:Z6:MOUT1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z6:MOUT1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:RANGE1:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z6:RANGE1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z6:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:RANGE1.PROC")
}
record(mbbi, "KM36:TST:LS:Z6:RANGE1") {
field(INP, "KM36:TST:LS:Z6:RANGE1:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z6:INPUT1:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z6:INPUT1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z6:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:INPUT1.PROC")
}
record(mbbi, "KM36:TST:LS:Z6:INPUT1") {
field(INP, "KM36:TST:LS:Z6:INPUT1:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z6:RATE1:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z6:RATE1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z6:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:RATE1.PROC")
}
record(ai, "KM36:TST:LS:Z6:RATE1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z6:RATE1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:INITCALC1.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z6:INITCALC1") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z6:INITUB1.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITUB1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z6:UB1.VAL")
field(OUTA, "KM36:TST:LS:Z6:UB_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z6:INITP1.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITP1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z6:P1.VAL")
field(OUTA, "KM36:TST:LS:Z6:P_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z6:INITI1.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITI1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z6:I1.VAL")
field(OUTA, "KM36:TST:LS:Z6:I_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z6:INITD1.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITD1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z6:D1.VAL")
field(OUTA, "KM36:TST:LS:Z6:D_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z6:INITMOUT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITMOUT1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z6:MOUT1.VAL")
field(OUTA, "KM36:TST:LS:Z6:MOUT_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z6:INITRANGE1.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITRANGE1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z6:RANGE1.VAL")
field(OUTA, "KM36:TST:LS:Z6:RANGE_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z6:INITINPUT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITINPUT1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z6:INPUT1.VAL")
field(OUTA, "KM36:TST:LS:Z6:INPUT_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z6:INITRATE1.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITRATE1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z6:RATE1.VAL")
field(OUTA, "KM36:TST:LS:Z6:RATE_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z6:INITCOUNT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITCOUNT1") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z6:INITCALC1.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z6:UB_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z6:P_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z6:I_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z6:D_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z6:MOUT_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z6:RANGE_S1") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z6:INPUT_S1") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z6:RATE_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z6:SET1") {
field(INPA, "KM36:TST:LS:Z6:UB_S1")
field(INPB, "KM36:TST:LS:Z6:P_S1")
field(INPC, "KM36:TST:LS:Z6:I_S1")
field(INPD, "KM36:TST:LS:Z6:D_S1")
field(INPE, "KM36:TST:LS:Z6:MOUT_S1")
field(INPF, "KM36:TST:LS:Z6:RANGE_S1")
field(INPG, "KM36:TST:LS:Z6:INPUT_S1")
field(INPH, "KM36:TST:LS:Z6:RATE_S1")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(1,6) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z6:ALL1.PROC")
}
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z7:ALL1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(1,7) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:UB1:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z7:UB1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z7:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:UB1.PROC")
}
record(ai, "KM36:TST:LS:Z7:UB1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z7:UB1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:P1:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z7:P1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z7:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:P1.PROC")
}
record(ai, "KM36:TST:LS:Z7:P1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z7:P1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:I1:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z7:I1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z7:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:I1.PROC")
}
record(ai, "KM36:TST:LS:Z7:I1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z7:I1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:D1:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z7:D1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z7:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:D1.PROC")
}
record(ai, "KM36:TST:LS:Z7:D1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z7:D1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:MOUT1:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z7:MOUT1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z7:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:MOUT1.PROC")
}
record(ai, "KM36:TST:LS:Z7:MOUT1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z7:MOUT1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:RANGE1:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z7:RANGE1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z7:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:RANGE1.PROC")
}
record(mbbi, "KM36:TST:LS:Z7:RANGE1") {
field(INP, "KM36:TST:LS:Z7:RANGE1:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z7:INPUT1:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z7:INPUT1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z7:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:INPUT1.PROC")
}
record(mbbi, "KM36:TST:LS:Z7:INPUT1") {
field(INP, "KM36:TST:LS:Z7:INPUT1:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z7:RATE1:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z7:RATE1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z7:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:RATE1.PROC")
}
record(ai, "KM36:TST:LS:Z7:RATE1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z7:RATE1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:INITCALC1.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z7:INITCALC1") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z7:INITUB1.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITUB1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z7:UB1.VAL")
field(OUTA, "KM36:TST:LS:Z7:UB_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z7:INITP1.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITP1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z7:P1.VAL")
field(OUTA, "KM36:TST:LS:Z7:P_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z7:INITI1.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITI1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z7:I1.VAL")
field(OUTA, "KM36:TST:LS:Z7:I_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z7:INITD1.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITD1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z7:D1.VAL")
field(OUTA, "KM36:TST:LS:Z7:D_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z7:INITMOUT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITMOUT1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z7:MOUT1.VAL")
field(OUTA, "KM36:TST:LS:Z7:MOUT_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z7:INITRANGE1.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITRANGE1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z7:RANGE1.VAL")
field(OUTA, "KM36:TST:LS:Z7:RANGE_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z7:INITINPUT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITINPUT1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z7:INPUT1.VAL")
field(OUTA, "KM36:TST:LS:Z7:INPUT_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z7:INITRATE1.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITRATE1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z7:RATE1.VAL")
field(OUTA, "KM36:TST:LS:Z7:RATE_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z7:INITCOUNT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITCOUNT1") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z7:INITCALC1.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z7:UB_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z7:P_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z7:I_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z7:D_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z7:MOUT_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z7:RANGE_S1") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z7:INPUT_S1") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z7:RATE_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z7:SET1") {
field(INPA, "KM36:TST:LS:Z7:UB_S1")
field(INPB, "KM36:TST:LS:Z7:P_S1")
field(INPC, "KM36:TST:LS:Z7:I_S1")
field(INPD, "KM36:TST:LS:Z7:D_S1")
field(INPE, "KM36:TST:LS:Z7:MOUT_S1")
field(INPF, "KM36:TST:LS:Z7:RANGE_S1")
field(INPG, "KM36:TST:LS:Z7:INPUT_S1")
field(INPH, "KM36:TST:LS:Z7:RATE_S1")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(1,7) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z7:ALL1.PROC")
}
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z8:ALL1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(1,8) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:UB1:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z8:UB1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z8:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:UB1.PROC")
}
record(ai, "KM36:TST:LS:Z8:UB1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z8:UB1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:P1:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z8:P1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z8:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:P1.PROC")
}
record(ai, "KM36:TST:LS:Z8:P1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z8:P1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:I1:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z8:I1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z8:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:I1.PROC")
}
record(ai, "KM36:TST:LS:Z8:I1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z8:I1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:D1:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z8:D1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z8:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:D1.PROC")
}
record(ai, "KM36:TST:LS:Z8:D1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z8:D1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:MOUT1:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z8:MOUT1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z8:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:MOUT1.PROC")
}
record(ai, "KM36:TST:LS:Z8:MOUT1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z8:MOUT1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:RANGE1:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z8:RANGE1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z8:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:RANGE1.PROC")
}
record(mbbi, "KM36:TST:LS:Z8:RANGE1") {
field(INP, "KM36:TST:LS:Z8:RANGE1:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z8:INPUT1:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z8:INPUT1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z8:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:INPUT1.PROC")
}
record(mbbi, "KM36:TST:LS:Z8:INPUT1") {
field(INP, "KM36:TST:LS:Z8:INPUT1:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z8:RATE1:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z8:RATE1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z8:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:RATE1.PROC")
}
record(ai, "KM36:TST:LS:Z8:RATE1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z8:RATE1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:INITCALC1.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z8:INITCALC1") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z8:INITUB1.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITUB1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z8:UB1.VAL")
field(OUTA, "KM36:TST:LS:Z8:UB_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z8:INITP1.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITP1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z8:P1.VAL")
field(OUTA, "KM36:TST:LS:Z8:P_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z8:INITI1.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITI1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z8:I1.VAL")
field(OUTA, "KM36:TST:LS:Z8:I_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z8:INITD1.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITD1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z8:D1.VAL")
field(OUTA, "KM36:TST:LS:Z8:D_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z8:INITMOUT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITMOUT1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z8:MOUT1.VAL")
field(OUTA, "KM36:TST:LS:Z8:MOUT_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z8:INITRANGE1.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITRANGE1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z8:RANGE1.VAL")
field(OUTA, "KM36:TST:LS:Z8:RANGE_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z8:INITINPUT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITINPUT1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z8:INPUT1.VAL")
field(OUTA, "KM36:TST:LS:Z8:INPUT_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z8:INITRATE1.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITRATE1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z8:RATE1.VAL")
field(OUTA, "KM36:TST:LS:Z8:RATE_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z8:INITCOUNT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITCOUNT1") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z8:INITCALC1.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z8:UB_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z8:P_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z8:I_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z8:D_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z8:MOUT_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z8:RANGE_S1") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z8:INPUT_S1") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z8:RATE_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z8:SET1") {
field(INPA, "KM36:TST:LS:Z8:UB_S1")
field(INPB, "KM36:TST:LS:Z8:P_S1")
field(INPC, "KM36:TST:LS:Z8:I_S1")
field(INPD, "KM36:TST:LS:Z8:D_S1")
field(INPE, "KM36:TST:LS:Z8:MOUT_S1")
field(INPF, "KM36:TST:LS:Z8:RANGE_S1")
field(INPG, "KM36:TST:LS:Z8:INPUT_S1")
field(INPH, "KM36:TST:LS:Z8:RATE_S1")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(1,8) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z8:ALL1.PROC")
}
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z9:ALL1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(1,9) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:UB1:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z9:UB1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z9:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:UB1.PROC")
}
record(ai, "KM36:TST:LS:Z9:UB1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z9:UB1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:P1:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z9:P1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z9:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:P1.PROC")
}
record(ai, "KM36:TST:LS:Z9:P1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z9:P1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:I1:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z9:I1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z9:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:I1.PROC")
}
record(ai, "KM36:TST:LS:Z9:I1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z9:I1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:D1:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z9:D1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z9:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:D1.PROC")
}
record(ai, "KM36:TST:LS:Z9:D1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z9:D1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:MOUT1:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z9:MOUT1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z9:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:MOUT1.PROC")
}
record(ai, "KM36:TST:LS:Z9:MOUT1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z9:MOUT1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:RANGE1:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z9:RANGE1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z9:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:RANGE1.PROC")
}
record(mbbi, "KM36:TST:LS:Z9:RANGE1") {
field(INP, "KM36:TST:LS:Z9:RANGE1:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z9:INPUT1:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z9:INPUT1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z9:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:INPUT1.PROC")
}
record(mbbi, "KM36:TST:LS:Z9:INPUT1") {
field(INP, "KM36:TST:LS:Z9:INPUT1:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z9:RATE1:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z9:RATE1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z9:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:RATE1.PROC")
}
record(ai, "KM36:TST:LS:Z9:RATE1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z9:RATE1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:INITCALC1.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z9:INITCALC1") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z9:INITUB1.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITUB1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z9:UB1.VAL")
field(OUTA, "KM36:TST:LS:Z9:UB_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z9:INITP1.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITP1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z9:P1.VAL")
field(OUTA, "KM36:TST:LS:Z9:P_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z9:INITI1.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITI1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z9:I1.VAL")
field(OUTA, "KM36:TST:LS:Z9:I_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z9:INITD1.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITD1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z9:D1.VAL")
field(OUTA, "KM36:TST:LS:Z9:D_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z9:INITMOUT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITMOUT1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z9:MOUT1.VAL")
field(OUTA, "KM36:TST:LS:Z9:MOUT_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z9:INITRANGE1.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITRANGE1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z9:RANGE1.VAL")
field(OUTA, "KM36:TST:LS:Z9:RANGE_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z9:INITINPUT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITINPUT1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z9:INPUT1.VAL")
field(OUTA, "KM36:TST:LS:Z9:INPUT_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z9:INITRATE1.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITRATE1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z9:RATE1.VAL")
field(OUTA, "KM36:TST:LS:Z9:RATE_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z9:INITCOUNT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITCOUNT1") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z9:INITCALC1.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z9:UB_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z9:P_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z9:I_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z9:D_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z9:MOUT_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z9:RANGE_S1") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z9:INPUT_S1") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z9:RATE_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z9:SET1") {
field(INPA, "KM36:TST:LS:Z9:UB_S1")
field(INPB, "KM36:TST:LS:Z9:P_S1")
field(INPC, "KM36:TST:LS:Z9:I_S1")
field(INPD, "KM36:TST:LS:Z9:D_S1")
field(INPE, "KM36:TST:LS:Z9:MOUT_S1")
field(INPF, "KM36:TST:LS:Z9:RANGE_S1")
field(INPG, "KM36:TST:LS:Z9:INPUT_S1")
field(INPH, "KM36:TST:LS:Z9:RATE_S1")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(1,9) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z9:ALL1.PROC")
}
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z10:ALL1") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(1,10) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:UB1:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z10:UB1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:UB1.PROC")
}
record(ai, "KM36:TST:LS:Z10:UB1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:UB1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:P1:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z10:P1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:P1.PROC")
}
record(ai, "KM36:TST:LS:Z10:P1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:P1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:I1:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z10:I1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:I1.PROC")
}
record(ai, "KM36:TST:LS:Z10:I1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:I1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:D1:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z10:D1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:D1.PROC")
}
record(ai, "KM36:TST:LS:Z10:D1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:D1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:MOUT1:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z10:MOUT1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:MOUT1.PROC")
}
record(ai, "KM36:TST:LS:Z10:MOUT1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:MOUT1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:RANGE1:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z10:RANGE1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:RANGE1.PROC")
}
record(mbbi, "KM36:TST:LS:Z10:RANGE1") {
field(INP, "KM36:TST:LS:Z10:RANGE1:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z10:INPUT1:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z10:INPUT1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:INPUT1.PROC")
}
record(mbbi, "KM36:TST:LS:Z10:INPUT1") {
field(INP, "KM36:TST:LS:Z10:INPUT1:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z10:RATE1:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z10:RATE1:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL1.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:RATE1.PROC")
}
record(ai, "KM36:TST:LS:Z10:RATE1") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:RATE1:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:INITCALC1.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z10:INITCALC1") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z10:INITUB1.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITUB1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:UB1.VAL")
field(OUTA, "KM36:TST:LS:Z10:UB_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITP1.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITP1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:P1.VAL")
field(OUTA, "KM36:TST:LS:Z10:P_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITI1.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITI1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:I1.VAL")
field(OUTA, "KM36:TST:LS:Z10:I_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITD1.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITD1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:D1.VAL")
field(OUTA, "KM36:TST:LS:Z10:D_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITMOUT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITMOUT1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:MOUT1.VAL")
field(OUTA, "KM36:TST:LS:Z10:MOUT_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITRANGE1.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITRANGE1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:RANGE1.VAL")
field(OUTA, "KM36:TST:LS:Z10:RANGE_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITINPUT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITINPUT1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:INPUT1.VAL")
field(OUTA, "KM36:TST:LS:Z10:INPUT_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITRATE1.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITRATE1") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:RATE1.VAL")
field(OUTA, "KM36:TST:LS:Z10:RATE_S1.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITCOUNT1.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITCOUNT1") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z10:INITCALC1.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z10:UB_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z10:P_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z10:I_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z10:D_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z10:MOUT_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z10:RANGE_S1") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z10:INPUT_S1") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z10:RATE_S1") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z10:SET1") {
field(INPA, "KM36:TST:LS:Z10:UB_S1")
field(INPB, "KM36:TST:LS:Z10:P_S1")
field(INPC, "KM36:TST:LS:Z10:I_S1")
field(INPD, "KM36:TST:LS:Z10:D_S1")
field(INPE, "KM36:TST:LS:Z10:MOUT_S1")
field(INPF, "KM36:TST:LS:Z10:RANGE_S1")
field(INPG, "KM36:TST:LS:Z10:INPUT_S1")
field(INPH, "KM36:TST:LS:Z10:RATE_S1")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(1,10) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z10:ALL1.PROC")
}
# This is included in lakeshore336.template
# This template is for the common functionality shared by all 4 outputs.
#
# There is some logic in this database to provide put_callback functionality
# for setting the temperature and waiting for it to be in range. The input
# sensor PV name used for the in-window calculation changes depending on
# the input sensor selected. In order for this to work it requires the following
# macros:
#
# INPUTA - Sensor 1 PV name
# INPUTB - Sensor 2 PV name
# INPUTC - Sensor 3 PV name
# INPUTD - Sensor 4 PV name
# INPUTD2 - Sensor D2 PV name
# INPUTD3 - Sensor D3 PV name
# INPUTD4 - Sensor D4 PV name
# INPUTD5 - Sensor D5 PV name
# TOLERANCE (optional - defaults to 1)
#
# The input link names must fit into a stringout record for this to work.
# The above link names default to a dummy record.
################################################################
# Read records
################################################################
##
## Record holding the output number
##
record(stringout, "KM36:TST:LS:OUTPUT2") {
field(DTYP, "Soft Channel")
field(VAL, "2")
field(PINI, "YES")
}
##
## Read the setpoint temperature.
##
record(ai, "KM36:TST:LS:SETP2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getSETP(2) serial1 0")
field(SCAN, "1 second")
field(PREC, "3")
field(EGU, "K")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the setpoint limit
##
##
## Read the ramp parameter. This also populates the ramp status KM36:TST:LS:RAMPST2,
##
record(ai, "KM36:TST:LS:RAMP2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getRAMP(2,KM36:TST:LS:RAMPST2) serial1 0")
field(SCAN, "5 second")
field(PREC, "3")
field(EGU, "K/min")
}
##
## Read the ramp status parameter.
##
## 0=off
## 1=on
##
record(bi, "KM36:TST:LS:RAMPST2") {
field(DTYP, "Soft Channel")
field(ZNAM, "Off")
field(ONAM, "On")
}
##
## Read the range parameter (the heater output power range).
## This is output specific and is defined in another file.
##
record(mbbi, "KM36:TST:LS:RANGE2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(ZRVL, "0")
field(ONVL, "1")
field(TWVL, "2")
field(THVL, "3")
field(FRVL, "4")
field(FVVL, "5")
field(SCAN, "5 second")
field(INP, "@ls336.proto getRANGE(2) serial1 0")
}
##
## Read the mode to use for outmode
## This is output specific and is defined in another file.
##
record(mbbi, "KM36:TST:LS:OMMODE2") {
}
##
## Read the manual output parameter.
##
record(ai, "KM36:TST:LS:MOUT2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getMOUT(2) serial1 0")
field(SCAN, "5 second")
}
##
## Read the PID P parameter. Pass the I and D records into the protocol to read those as well.
##
record(ai, "KM36:TST:LS:P2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getPID(2,KM36:TST:LS:I2,KM36:TST:LS:D2) serial1 0")
field(SCAN, "5 second")
}
##
## Read the PID I parameter.
##
record(ai, "KM36:TST:LS:I2") {
field(DTYP, "Soft Channel")
field(SCAN, "Passive")
}
##
## Read the PID D parameter.
##
record(ai, "KM36:TST:LS:D2") {
field(DTYP, "Soft Channel")
field(SCAN, "Passive")
}
##
## Read the mode to use for outmode.
## This also populates the OMI and OMP records.
## The mbbi strings and values are defined in the output specific templates.
##
record(mbbi, "KM36:TST:LS:OMM2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(ZRVL, "0")
field(ONVL, "1")
field(TWVL, "2")
field(THVL, "3")
field(FRVL, "4")
field(FVVL, "5")
field(SCAN, "5 second")
field(INP, "@ls336.proto getOM(2,KM36:TST:LS:OMI2,KM36:TST:LS:OMP2) serial1 0")
}
##
## Read the input to use for outmode
##
record(mbbi, "KM36:TST:LS:OMI2") {
field(DTYP, "Soft Channel")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
}
##
## Read the power up mode to use for outmode
##
record(mbbi, "KM36:TST:LS:OMP2") {
field(DTYP, "Soft Channel")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "On")
field(ONVL, "1")
}
################################################################
# Write records
################################################################
##
## Set the setpoint temperature.
##
record(ao, "KM36:TST:LS:SETP_S2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(DESC, "Setpoint temperature")
field(OUT, "@ls336.proto setSETP(2) serial1 0")
field(PREC, "3")
field(FLNK, "KM36:TST:LS:SETP_S2_BUSYSET.PROC")
field(EGU, "K")
info(archive, "Monitor, 00:00:01, VAL")
}
###############################################################################
##
## A few records to support put_callback on the setpoint. We use the busy record.
## A temperature window is used. The temperature must be within
## the window, before the callback is done.
##
record(dfanout, "KM36:TST:LS:SETP_S2_BUSYSET")
{
field(VAL, "0")
field(OUTA, "KM36:TST:LS:IN_WINDOW2.VAL PP")
field(FLNK, "KM36:TST:LS:SETP_S2_BUSYSET2")
}
record(dfanout, "KM36:TST:LS:SETP_S2_BUSYSET2")
{
field(VAL, "1")
field(OUTA, "KM36:TST:LS:SETP2.PROC PP")
field(OUTB, "KM36:TST:LS:SETP_S2_BUSY PP")
field(FLNK, "KM36:TST:LS:CALC_IN_WINDOW2")
}
record(busy, "KM36:TST:LS:SETP_S2_BUSY")
{
}
record(calcout, "KM36:TST:LS:CALC_IN_WINDOW2") {
field(PINI, "YES")
field(INPA, "1")
field(INPB, "KM36:TST:LS:DUMMY2.VAL")
field(INPC, "KM36:TST:LS:SETP_S2.VAL")
field(CALC, "((B>=(C-A))&&(B<=(C+A)))?1:0")
field(OOPT, "Every Time")
field(OUT, "KM36:TST:LS:IN_WINDOW2.VAL PP")
field(DOPT, "Use CALC")
field(SCAN, "1 second")
field(PREC, "1")
info(autosaveFields, "A")
info(archive, "Monitor, 00:00:01, A B C VAL")
}
record(bo, "KM36:TST:LS:IN_WINDOW2") {
field(DESC, "Temperature In Window")
field(VAL, "0")
field(PINI, "YES")
field(OMSL, "supervisory")
field(ZNAM, "Not In Window")
field(ONAM, "In Window")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Set busy record 'done' when TIME_WINDOW2=1
##
record(calcout, "KM36:TST:LS:CALC_BUSY_DONE2") {
field(INPA, "KM36:TST:LS:IN_WINDOW2.VAL CP")
field(CALC, "(A=1)?0:1")
field(OOPT, "Every Time")
field(OUT, "KM36:TST:LS:SETP_S2_BUSY.VAL PP")
}
###############################################################################
##
## Dummy record to use for input link name default
##
record(ai, "KM36:TST:LS:DUMMY2") {
}
##
## Monitor KM36:TST:LS:OMI2 to determin which input sensor to use
## to deal with the callback. The below set of records automatically
## switch the input when the 'control input' is changed. They make
## use of the input sensor PV names passed into this template.
##
record(calcout, "KM36:TST:LS:SET_2_INPUTA") {
field(CALC, "A=1")
field(INPA, "KM36:TST:LS:OMI2.VAL CP")
field(DOPT, "Use OCAL")
field(OVAL, "1")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:SET_2_INPUTA_LINK.PROC")
}
record(stringout, "KM36:TST:LS:SET_2_INPUTA_LINK") {
field(VAL, "KM36:TST:LS:KRDG0.VAL CP")
field(OUT, "KM36:TST:LS:CALC_IN_WINDOW2.INPB CA")
}
record(calcout, "KM36:TST:LS:SET_2_INPUTB") {
field(CALC, "A=2")
field(INPA, "KM36:TST:LS:OMI2.VAL CP")
field(DOPT, "Use OCAL")
field(OVAL, "1")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:SET_2_INPUTB_LINK.PROC")
}
record(stringout, "KM36:TST:LS:SET_2_INPUTB_LINK") {
field(VAL, "KM36:TST:LS:KRDG1.VAL CP")
field(OUT, "KM36:TST:LS:CALC_IN_WINDOW2.INPB CA")
}
record(calcout, "KM36:TST:LS:SET_2_INPUTC") {
field(CALC, "A=3")
field(INPA, "KM36:TST:LS:OMI2.VAL CP")
field(DOPT, "Use OCAL")
field(OVAL, "1")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:SET_2_INPUTC_LINK.PROC")
}
record(stringout, "KM36:TST:LS:SET_2_INPUTC_LINK") {
field(VAL, "KM36:TST:LS:KRDG2.VAL CP")
field(OUT, "KM36:TST:LS:CALC_IN_WINDOW2.INPB CA")
}
record(calcout, "KM36:TST:LS:SET_2_INPUTD") {
field(CALC, "A=4")
field(INPA, "KM36:TST:LS:OMI2.VAL CP")
field(DOPT, "Use OCAL")
field(OVAL, "1")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:SET_2_INPUTD_LINK.PROC")
}
record(stringout, "KM36:TST:LS:SET_2_INPUTD_LINK") {
field(VAL, "KM36:TST:LS:KRDG3.VAL CP")
field(OUT, "KM36:TST:LS:CALC_IN_WINDOW2.INPB CA")
}
record(calcout, "KM36:TST:LS:SET_2_INPUTD2") {
field(CALC, "A=5")
field(INPA, "KM36:TST:LS:OMI2.VAL CP")
field(DOPT, "Use OCAL")
field(OVAL, "1")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:SET_2_INPUTD2_LINK.PROC")
}
record(stringout, "KM36:TST:LS:SET_2_INPUTD2_LINK") {
field(VAL, "KM36:TST:LS:KRDGD2.VAL CP")
field(OUT, "KM36:TST:LS:CALC_IN_WINDOW2.INPB CA")
}
record(calcout, "KM36:TST:LS:SET_2_INPUTD3") {
field(CALC, "A=6")
field(INPA, "KM36:TST:LS:OMI2.VAL CP")
field(DOPT, "Use OCAL")
field(OVAL, "1")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:SET_2_INPUTD3_LINK.PROC")
}
record(stringout, "KM36:TST:LS:SET_2_INPUTD3_LINK") {
field(VAL, "KM36:TST:LS:KRDGD3.VAL CP")
field(OUT, "KM36:TST:LS:CALC_IN_WINDOW2.INPB CA")
}
record(calcout, "KM36:TST:LS:SET_2_INPUTD4") {
field(CALC, "A=7")
field(INPA, "KM36:TST:LS:OMI2.VAL CP")
field(DOPT, "Use OCAL")
field(OVAL, "1")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:SET_2_INPUTD4_LINK.PROC")
}
record(stringout, "KM36:TST:LS:SET_2_INPUTD4_LINK") {
field(VAL, "KM36:TST:LS:KRDGD4.VAL CP")
field(OUT, "KM36:TST:LS:CALC_IN_WINDOW2.INPB CA")
}
record(calcout, "KM36:TST:LS:SET_2_INPUTD5") {
field(CALC, "A=8")
field(INPA, "KM36:TST:LS:OMI2.VAL CP")
field(DOPT, "Use OCAL")
field(OVAL, "1")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:SET_2_INPUTD5_LINK.PROC")
}
record(stringout, "KM36:TST:LS:SET_2_INPUTD5_LINK") {
field(VAL, "KM36:TST:LS:KRDGD5.VAL CP")
field(OUT, "KM36:TST:LS:CALC_IN_WINDOW2.INPB CA")
}
##
## Set the range parameter.
## The strings are output specific and is defined in another file.
##
record(mbbo, "KM36:TST:LS:RANGE_S2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setRANGE(2) serial1 0")
field(FLNK, "KM36:TST:LS:RANGE2.PROC CA")
}
##
## Set the ramp rate parameter.
##
## This is the desired temperate increase/decrease rate
## per second when heating/cooling.
##
## The ramp and ramp status parameters are actually one command
## for the lakeshore. Therefore one must pass into this
## record the existing/desired ramp status, as well as the
## desired ramp. This is done automatically by reading the
## PV which holds the current ramp status.
##
record(ao, "KM36:TST:LS:RAMP_S2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setRAMP(KM36:TST:LS:RAMPST2,2) serial1 0")
field(PREC, "3")
field(FLNK, "KM36:TST:LS:RAMP2.PROC CA")
field(EGU, "K/min")
}
##
## Set the ramp status parameter.
##
## 0=off
## 1=on
##
## The ramp and ramp status parameters are actually one command
## for the lakeshore. Therefore one must pass into this
## record the existing/desired ramp, as well as the
## desired ramp status. This is done automatically by reading the
## PV which holds the current ramp value.
##
record(bo, "KM36:TST:LS:RAMPST_S2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setRAMPSTATUS(KM36:TST:LS:RAMP2,2) serial1 0")
field(FLNK, "KM36:TST:LS:RAMP2.PROC CA")
field(ZNAM, "Off")
field(ONAM, "On")
}
##
## Set the manual output value.
##
record(ao, "KM36:TST:LS:MOUT_S2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setMOUT(2) serial1 0")
field(FLNK, "KM36:TST:LS:MOUT2.PROC CA")
}
##
## Set the PID P parameter.
##
record(ao, "KM36:TST:LS:P_S2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setP(2,KM36:TST:LS:I2,KM36:TST:LS:D2) serial1 0")
field(FLNK, "KM36:TST:LS:P2.PROC CA")
}
##
## Set the PID I parameter.
##
record(ao, "KM36:TST:LS:I_S2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setI(KM36:TST:LS:P2,2,KM36:TST:LS:D2) serial1 0")
field(FLNK, "KM36:TST:LS:P2.PROC CA")
}
##
## Set the PID D parameter.
##
record(ao, "KM36:TST:LS:D_S2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setD(KM36:TST:LS:P2,KM36:TST:LS:I2,2) serial1 0")
field(FLNK, "KM36:TST:LS:P2.PROC CA")
}
##
## Set the mode to use for outmode
## The strings are output specific. This is defined in another file.
##
record(mbbo, "KM36:TST:LS:OMM_S2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(ZRVL, "0")
field(ONVL, "1")
field(TWVL, "2")
field(THVL, "3")
field(FRVL, "4")
field(FVVL, "5")
field(OUT, "@ls336.proto setOM(2,KM36:TST:LS:OMI2,KM36:TST:LS:OMP2) serial1 0")
field(FLNK, "KM36:TST:LS:OMM2.PROC CA")
}
##
## Set the input to use for outmode
##
record(mbbo, "KM36:TST:LS:OMI_S2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(OUT, "@ls336.proto setOMI(2,KM36:TST:LS:OMM2,KM36:TST:LS:OMP2) serial1 0")
field(FLNK, "KM36:TST:LS:OMM2.PROC CA")
}
##
## Set the power up mode to use for outmode
##
record(mbbo, "KM36:TST:LS:OMP_S2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "On")
field(ONVL, "1")
field(OUT, "@ls336.proto setOMP(2,KM36:TST:LS:OMM2,KM36:TST:LS:OMI2) serial1 0")
field(FLNK, "KM36:TST:LS:OMM2.PROC CA")
}
##
## Set the type of tuning mode
##
record(mbbo, "KM36:TST:LS:TUNEMODE_S2") {
field(SDIS, "KM36:TST:LS:DISABLE")
field(ZRST, "P Only")
field(ZRVL, "0")
field(ONST, "P and I")
field(ONVL, "1")
field(TWST, "P, I and D")
field(TWVL, "2")
}
##
## Start the tuning process
##
record(ao, "KM36:TST:LS:TUNESTART2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(DESC, "Start the auto tuning")
field(OUT, "@ls336.proto setATUNE(2,KM36:TST:LS:TUNEMODE_S2) serial1 0")
}
##
## Read all ZONE settings
##
record(seq, "KM36:TST:LS:Z:READ2") {
field(DESC, "Read Output 2 ZONE")
field(DOL1, "1")
field(DLY1, "0.1")
field(LNK1, "KM36:TST:LS:Z1:ALL2.PROC")
field(DOL2, "1")
field(DLY2, "0.1")
field(LNK2, "KM36:TST:LS:Z2:ALL2.PROC")
field(DOL3, "1")
field(DLY3, "0.1")
field(LNK3, "KM36:TST:LS:Z3:ALL2.PROC")
field(DOL4, "1")
field(DLY4, "0.1")
field(LNK4, "KM36:TST:LS:Z4:ALL2.PROC")
field(DOL5, "1")
field(DLY5, "0.1")
field(LNK5, "KM36:TST:LS:Z5:ALL2.PROC")
field(DOL6, "1")
field(DLY6, "0.1")
field(LNK6, "KM36:TST:LS:Z6:ALL2.PROC")
field(DOL7, "1")
field(DLY7, "0.1")
field(LNK7, "KM36:TST:LS:Z7:ALL2.PROC")
field(DOL8, "1")
field(DLY8, "0.1")
field(LNK8, "KM36:TST:LS:Z8:ALL2.PROC")
field(DOL9, "1")
field(DLY9, "0.1")
field(LNK9, "KM36:TST:LS:Z9:ALL2.PROC")
field(DOLA, "1")
field(DLYA, "0.1")
field(LNKA, "KM36:TST:LS:Z10:ALL2.PROC")
field(PINI, "YES")
}
###############################################
# This is included in lakeshore336.template
# This template is for outputs 1 and 2, which can provide heater power.
################################################################
# Read records
################################################################
##
## Read the heater output value.
##
record(ai, "KM36:TST:LS:HTR2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getHTR(2) serial1 0")
field(SCAN, "5 second")
field(PREC, "1")
field(EGU, "%")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Define the strings and values for this record.
##
record(mbbi, "KM36:TST:LS:RANGE2") {
field(ZRST, "Off")
field(ONST, "Range1/Low")
field(TWST, "Range2/Medium")
field(THST, "Range3/High")
field(FRST, "Range4")
field(FVST, "Range5")
}
##
## Define the strings and values for this record.
##
record(mbbi, "KM36:TST:LS:OMM2") {
field(ZRST, "Off")
field(ONST, "Closed Loop PID")
field(TWST, "Zone")
field(THST, "Open Loop")
}
##
## Define the strings and values for this record.
##
record(mbbo, "KM36:TST:LS:RANGE_S2") {
field(ZRST, "Off")
field(ONST, "Range1/Low")
field(TWST, "Range2/Medium")
field(THST, "Range3/High")
field(FRST, "Range4")
field(FVST, "Range5")
}
##
## Define the strings and values for this record.
##
record(mbbo, "KM36:TST:LS:OMM_S2") {
field(ZRST, "Off")
field(ONST, "Closed Loop PID")
field(TWST, "Zone")
field(THST, "Open Loop")
}
##
## Read the heater status
##
record(longin, "KM36:TST:LS:HTRST2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(SCAN, "5 second")
field(INP, "@ls336.proto getHTRST(D5) serial1 0")
field(FLNK, "KM36:TST:LS:HTRST2_CALC")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Cache the heater status because this is cleared on a read on the controller.
##
record(calcout, "KM36:TST:LS:HTRST2_CALC") {
field(INPA, "KM36:TST:LS:HTRST2.VAL")
field(CALC, "A!=0?A:0")
field(DOPT, "Use CALC")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:HTRST2_CACHE.RVAL PP")
}
record(mbbi, "KM36:TST:LS:HTRST2_CACHE") {
field(DESC, "Cached HTRST")
field(DTYP, "Raw Soft Channel")
field(ZRST, "No Error")
field(ZRVL, "0")
field(ONST, "Open Load")
field(ONVL, "1")
field(TWST, "Short/Compliance")
field(TWVL, "2")
field(VAL, "0")
field(PINI, "YES")
field(ONSV, "MAJOR")
field(TWSV, "MAJOR")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Provide record to reset the cached value
##
record(bo, "KM36:TST:LS:HTRST2_RESET") {
field(DESC, "Reset Cached HTRST")
field(VAL, "0")
field(OUT, "KM36:TST:LS:HTRST2_CACHE.RVAL PP")
}
###############################################
# Add in ZONE support
###############################################
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z1:ALL2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(2,1) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:UB2:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z1:UB2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z1:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:UB2.PROC")
}
record(ai, "KM36:TST:LS:Z1:UB2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z1:UB2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:P2:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z1:P2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z1:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:P2.PROC")
}
record(ai, "KM36:TST:LS:Z1:P2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z1:P2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:I2:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z1:I2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z1:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:I2.PROC")
}
record(ai, "KM36:TST:LS:Z1:I2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z1:I2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:D2:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z1:D2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z1:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:D2.PROC")
}
record(ai, "KM36:TST:LS:Z1:D2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z1:D2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:MOUT2:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z1:MOUT2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z1:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:MOUT2.PROC")
}
record(ai, "KM36:TST:LS:Z1:MOUT2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z1:MOUT2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:RANGE2:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z1:RANGE2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z1:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:RANGE2.PROC")
}
record(mbbi, "KM36:TST:LS:Z1:RANGE2") {
field(INP, "KM36:TST:LS:Z1:RANGE2:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z1:INPUT2:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z1:INPUT2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z1:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:INPUT2.PROC")
}
record(mbbi, "KM36:TST:LS:Z1:INPUT2") {
field(INP, "KM36:TST:LS:Z1:INPUT2:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z1:RATE2:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z1:RATE2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z1:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:RATE2.PROC")
}
record(ai, "KM36:TST:LS:Z1:RATE2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z1:RATE2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:INITCALC2.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z1:INITCALC2") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z1:INITUB2.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITUB2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z1:UB2.VAL")
field(OUTA, "KM36:TST:LS:Z1:UB_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z1:INITP2.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITP2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z1:P2.VAL")
field(OUTA, "KM36:TST:LS:Z1:P_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z1:INITI2.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITI2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z1:I2.VAL")
field(OUTA, "KM36:TST:LS:Z1:I_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z1:INITD2.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITD2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z1:D2.VAL")
field(OUTA, "KM36:TST:LS:Z1:D_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z1:INITMOUT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITMOUT2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z1:MOUT2.VAL")
field(OUTA, "KM36:TST:LS:Z1:MOUT_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z1:INITRANGE2.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITRANGE2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z1:RANGE2.VAL")
field(OUTA, "KM36:TST:LS:Z1:RANGE_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z1:INITINPUT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITINPUT2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z1:INPUT2.VAL")
field(OUTA, "KM36:TST:LS:Z1:INPUT_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z1:INITRATE2.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITRATE2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z1:RATE2.VAL")
field(OUTA, "KM36:TST:LS:Z1:RATE_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z1:INITCOUNT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITCOUNT2") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z1:INITCALC2.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z1:UB_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z1:P_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z1:I_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z1:D_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z1:MOUT_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z1:RANGE_S2") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z1:INPUT_S2") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z1:RATE_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z1:SET2") {
field(INPA, "KM36:TST:LS:Z1:UB_S2")
field(INPB, "KM36:TST:LS:Z1:P_S2")
field(INPC, "KM36:TST:LS:Z1:I_S2")
field(INPD, "KM36:TST:LS:Z1:D_S2")
field(INPE, "KM36:TST:LS:Z1:MOUT_S2")
field(INPF, "KM36:TST:LS:Z1:RANGE_S2")
field(INPG, "KM36:TST:LS:Z1:INPUT_S2")
field(INPH, "KM36:TST:LS:Z1:RATE_S2")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(2,1) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z1:ALL2.PROC")
}
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z2:ALL2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(2,2) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:UB2:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z2:UB2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:UB2.PROC")
}
record(ai, "KM36:TST:LS:Z2:UB2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:UB2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:P2:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z2:P2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:P2.PROC")
}
record(ai, "KM36:TST:LS:Z2:P2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:P2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:I2:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z2:I2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:I2.PROC")
}
record(ai, "KM36:TST:LS:Z2:I2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:I2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:D2:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z2:D2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:D2.PROC")
}
record(ai, "KM36:TST:LS:Z2:D2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:D2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:MOUT2:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z2:MOUT2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:MOUT2.PROC")
}
record(ai, "KM36:TST:LS:Z2:MOUT2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:MOUT2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:RANGE2:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z2:RANGE2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:RANGE2.PROC")
}
record(mbbi, "KM36:TST:LS:Z2:RANGE2") {
field(INP, "KM36:TST:LS:Z2:RANGE2:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z2:INPUT2:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z2:INPUT2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:INPUT2.PROC")
}
record(mbbi, "KM36:TST:LS:Z2:INPUT2") {
field(INP, "KM36:TST:LS:Z2:INPUT2:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z2:RATE2:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z2:RATE2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:RATE2.PROC")
}
record(ai, "KM36:TST:LS:Z2:RATE2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:RATE2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:INITCALC2.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z2:INITCALC2") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z2:INITUB2.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITUB2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:UB2.VAL")
field(OUTA, "KM36:TST:LS:Z2:UB_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITP2.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITP2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:P2.VAL")
field(OUTA, "KM36:TST:LS:Z2:P_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITI2.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITI2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:I2.VAL")
field(OUTA, "KM36:TST:LS:Z2:I_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITD2.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITD2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:D2.VAL")
field(OUTA, "KM36:TST:LS:Z2:D_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITMOUT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITMOUT2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:MOUT2.VAL")
field(OUTA, "KM36:TST:LS:Z2:MOUT_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITRANGE2.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITRANGE2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:RANGE2.VAL")
field(OUTA, "KM36:TST:LS:Z2:RANGE_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITINPUT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITINPUT2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:INPUT2.VAL")
field(OUTA, "KM36:TST:LS:Z2:INPUT_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITRATE2.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITRATE2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:RATE2.VAL")
field(OUTA, "KM36:TST:LS:Z2:RATE_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITCOUNT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITCOUNT2") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z2:INITCALC2.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z2:UB_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z2:P_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z2:I_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z2:D_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z2:MOUT_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z2:RANGE_S2") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z2:INPUT_S2") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z2:RATE_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z2:SET2") {
field(INPA, "KM36:TST:LS:Z2:UB_S2")
field(INPB, "KM36:TST:LS:Z2:P_S2")
field(INPC, "KM36:TST:LS:Z2:I_S2")
field(INPD, "KM36:TST:LS:Z2:D_S2")
field(INPE, "KM36:TST:LS:Z2:MOUT_S2")
field(INPF, "KM36:TST:LS:Z2:RANGE_S2")
field(INPG, "KM36:TST:LS:Z2:INPUT_S2")
field(INPH, "KM36:TST:LS:Z2:RATE_S2")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(2,2) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z2:ALL2.PROC")
}
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z2:ALL2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(2,2) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:UB2:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z2:UB2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:UB2.PROC")
}
record(ai, "KM36:TST:LS:Z2:UB2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:UB2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:P2:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z2:P2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:P2.PROC")
}
record(ai, "KM36:TST:LS:Z2:P2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:P2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:I2:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z2:I2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:I2.PROC")
}
record(ai, "KM36:TST:LS:Z2:I2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:I2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:D2:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z2:D2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:D2.PROC")
}
record(ai, "KM36:TST:LS:Z2:D2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:D2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:MOUT2:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z2:MOUT2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:MOUT2.PROC")
}
record(ai, "KM36:TST:LS:Z2:MOUT2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:MOUT2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:RANGE2:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z2:RANGE2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:RANGE2.PROC")
}
record(mbbi, "KM36:TST:LS:Z2:RANGE2") {
field(INP, "KM36:TST:LS:Z2:RANGE2:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z2:INPUT2:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z2:INPUT2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:INPUT2.PROC")
}
record(mbbi, "KM36:TST:LS:Z2:INPUT2") {
field(INP, "KM36:TST:LS:Z2:INPUT2:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z2:RATE2:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z2:RATE2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:RATE2.PROC")
}
record(ai, "KM36:TST:LS:Z2:RATE2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:RATE2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:INITCALC2.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z2:INITCALC2") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z2:INITUB2.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITUB2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:UB2.VAL")
field(OUTA, "KM36:TST:LS:Z2:UB_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITP2.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITP2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:P2.VAL")
field(OUTA, "KM36:TST:LS:Z2:P_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITI2.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITI2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:I2.VAL")
field(OUTA, "KM36:TST:LS:Z2:I_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITD2.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITD2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:D2.VAL")
field(OUTA, "KM36:TST:LS:Z2:D_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITMOUT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITMOUT2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:MOUT2.VAL")
field(OUTA, "KM36:TST:LS:Z2:MOUT_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITRANGE2.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITRANGE2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:RANGE2.VAL")
field(OUTA, "KM36:TST:LS:Z2:RANGE_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITINPUT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITINPUT2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:INPUT2.VAL")
field(OUTA, "KM36:TST:LS:Z2:INPUT_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITRATE2.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITRATE2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:RATE2.VAL")
field(OUTA, "KM36:TST:LS:Z2:RATE_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITCOUNT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITCOUNT2") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z2:INITCALC2.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z2:UB_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z2:P_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z2:I_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z2:D_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z2:MOUT_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z2:RANGE_S2") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z2:INPUT_S2") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z2:RATE_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z2:SET2") {
field(INPA, "KM36:TST:LS:Z2:UB_S2")
field(INPB, "KM36:TST:LS:Z2:P_S2")
field(INPC, "KM36:TST:LS:Z2:I_S2")
field(INPD, "KM36:TST:LS:Z2:D_S2")
field(INPE, "KM36:TST:LS:Z2:MOUT_S2")
field(INPF, "KM36:TST:LS:Z2:RANGE_S2")
field(INPG, "KM36:TST:LS:Z2:INPUT_S2")
field(INPH, "KM36:TST:LS:Z2:RATE_S2")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(2,2) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z2:ALL2.PROC")
}
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z3:ALL2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(2,3) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:UB2:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z3:UB2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z3:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:UB2.PROC")
}
record(ai, "KM36:TST:LS:Z3:UB2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z3:UB2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:P2:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z3:P2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z3:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:P2.PROC")
}
record(ai, "KM36:TST:LS:Z3:P2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z3:P2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:I2:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z3:I2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z3:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:I2.PROC")
}
record(ai, "KM36:TST:LS:Z3:I2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z3:I2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:D2:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z3:D2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z3:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:D2.PROC")
}
record(ai, "KM36:TST:LS:Z3:D2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z3:D2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:MOUT2:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z3:MOUT2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z3:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:MOUT2.PROC")
}
record(ai, "KM36:TST:LS:Z3:MOUT2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z3:MOUT2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:RANGE2:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z3:RANGE2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z3:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:RANGE2.PROC")
}
record(mbbi, "KM36:TST:LS:Z3:RANGE2") {
field(INP, "KM36:TST:LS:Z3:RANGE2:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z3:INPUT2:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z3:INPUT2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z3:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:INPUT2.PROC")
}
record(mbbi, "KM36:TST:LS:Z3:INPUT2") {
field(INP, "KM36:TST:LS:Z3:INPUT2:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z3:RATE2:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z3:RATE2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z3:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:RATE2.PROC")
}
record(ai, "KM36:TST:LS:Z3:RATE2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z3:RATE2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:INITCALC2.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z3:INITCALC2") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z3:INITUB2.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITUB2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z3:UB2.VAL")
field(OUTA, "KM36:TST:LS:Z3:UB_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z3:INITP2.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITP2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z3:P2.VAL")
field(OUTA, "KM36:TST:LS:Z3:P_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z3:INITI2.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITI2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z3:I2.VAL")
field(OUTA, "KM36:TST:LS:Z3:I_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z3:INITD2.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITD2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z3:D2.VAL")
field(OUTA, "KM36:TST:LS:Z3:D_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z3:INITMOUT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITMOUT2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z3:MOUT2.VAL")
field(OUTA, "KM36:TST:LS:Z3:MOUT_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z3:INITRANGE2.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITRANGE2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z3:RANGE2.VAL")
field(OUTA, "KM36:TST:LS:Z3:RANGE_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z3:INITINPUT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITINPUT2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z3:INPUT2.VAL")
field(OUTA, "KM36:TST:LS:Z3:INPUT_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z3:INITRATE2.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITRATE2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z3:RATE2.VAL")
field(OUTA, "KM36:TST:LS:Z3:RATE_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z3:INITCOUNT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITCOUNT2") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z3:INITCALC2.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z3:UB_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z3:P_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z3:I_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z3:D_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z3:MOUT_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z3:RANGE_S2") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z3:INPUT_S2") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z3:RATE_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z3:SET2") {
field(INPA, "KM36:TST:LS:Z3:UB_S2")
field(INPB, "KM36:TST:LS:Z3:P_S2")
field(INPC, "KM36:TST:LS:Z3:I_S2")
field(INPD, "KM36:TST:LS:Z3:D_S2")
field(INPE, "KM36:TST:LS:Z3:MOUT_S2")
field(INPF, "KM36:TST:LS:Z3:RANGE_S2")
field(INPG, "KM36:TST:LS:Z3:INPUT_S2")
field(INPH, "KM36:TST:LS:Z3:RATE_S2")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(2,3) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z3:ALL2.PROC")
}
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z4:ALL2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(2,4) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:UB2:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z4:UB2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z4:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:UB2.PROC")
}
record(ai, "KM36:TST:LS:Z4:UB2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z4:UB2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:P2:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z4:P2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z4:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:P2.PROC")
}
record(ai, "KM36:TST:LS:Z4:P2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z4:P2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:I2:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z4:I2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z4:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:I2.PROC")
}
record(ai, "KM36:TST:LS:Z4:I2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z4:I2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:D2:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z4:D2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z4:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:D2.PROC")
}
record(ai, "KM36:TST:LS:Z4:D2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z4:D2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:MOUT2:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z4:MOUT2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z4:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:MOUT2.PROC")
}
record(ai, "KM36:TST:LS:Z4:MOUT2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z4:MOUT2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:RANGE2:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z4:RANGE2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z4:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:RANGE2.PROC")
}
record(mbbi, "KM36:TST:LS:Z4:RANGE2") {
field(INP, "KM36:TST:LS:Z4:RANGE2:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z4:INPUT2:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z4:INPUT2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z4:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:INPUT2.PROC")
}
record(mbbi, "KM36:TST:LS:Z4:INPUT2") {
field(INP, "KM36:TST:LS:Z4:INPUT2:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z4:RATE2:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z4:RATE2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z4:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:RATE2.PROC")
}
record(ai, "KM36:TST:LS:Z4:RATE2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z4:RATE2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:INITCALC2.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z4:INITCALC2") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z4:INITUB2.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITUB2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z4:UB2.VAL")
field(OUTA, "KM36:TST:LS:Z4:UB_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z4:INITP2.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITP2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z4:P2.VAL")
field(OUTA, "KM36:TST:LS:Z4:P_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z4:INITI2.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITI2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z4:I2.VAL")
field(OUTA, "KM36:TST:LS:Z4:I_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z4:INITD2.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITD2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z4:D2.VAL")
field(OUTA, "KM36:TST:LS:Z4:D_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z4:INITMOUT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITMOUT2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z4:MOUT2.VAL")
field(OUTA, "KM36:TST:LS:Z4:MOUT_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z4:INITRANGE2.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITRANGE2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z4:RANGE2.VAL")
field(OUTA, "KM36:TST:LS:Z4:RANGE_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z4:INITINPUT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITINPUT2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z4:INPUT2.VAL")
field(OUTA, "KM36:TST:LS:Z4:INPUT_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z4:INITRATE2.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITRATE2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z4:RATE2.VAL")
field(OUTA, "KM36:TST:LS:Z4:RATE_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z4:INITCOUNT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITCOUNT2") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z4:INITCALC2.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z4:UB_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z4:P_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z4:I_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z4:D_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z4:MOUT_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z4:RANGE_S2") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z4:INPUT_S2") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z4:RATE_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z4:SET2") {
field(INPA, "KM36:TST:LS:Z4:UB_S2")
field(INPB, "KM36:TST:LS:Z4:P_S2")
field(INPC, "KM36:TST:LS:Z4:I_S2")
field(INPD, "KM36:TST:LS:Z4:D_S2")
field(INPE, "KM36:TST:LS:Z4:MOUT_S2")
field(INPF, "KM36:TST:LS:Z4:RANGE_S2")
field(INPG, "KM36:TST:LS:Z4:INPUT_S2")
field(INPH, "KM36:TST:LS:Z4:RATE_S2")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(2,4) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z4:ALL2.PROC")
}
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z5:ALL2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(2,5) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:UB2:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z5:UB2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z5:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:UB2.PROC")
}
record(ai, "KM36:TST:LS:Z5:UB2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z5:UB2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:P2:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z5:P2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z5:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:P2.PROC")
}
record(ai, "KM36:TST:LS:Z5:P2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z5:P2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:I2:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z5:I2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z5:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:I2.PROC")
}
record(ai, "KM36:TST:LS:Z5:I2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z5:I2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:D2:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z5:D2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z5:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:D2.PROC")
}
record(ai, "KM36:TST:LS:Z5:D2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z5:D2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:MOUT2:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z5:MOUT2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z5:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:MOUT2.PROC")
}
record(ai, "KM36:TST:LS:Z5:MOUT2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z5:MOUT2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:RANGE2:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z5:RANGE2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z5:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:RANGE2.PROC")
}
record(mbbi, "KM36:TST:LS:Z5:RANGE2") {
field(INP, "KM36:TST:LS:Z5:RANGE2:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z5:INPUT2:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z5:INPUT2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z5:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:INPUT2.PROC")
}
record(mbbi, "KM36:TST:LS:Z5:INPUT2") {
field(INP, "KM36:TST:LS:Z5:INPUT2:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z5:RATE2:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z5:RATE2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z5:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:RATE2.PROC")
}
record(ai, "KM36:TST:LS:Z5:RATE2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z5:RATE2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:INITCALC2.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z5:INITCALC2") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z5:INITUB2.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITUB2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z5:UB2.VAL")
field(OUTA, "KM36:TST:LS:Z5:UB_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z5:INITP2.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITP2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z5:P2.VAL")
field(OUTA, "KM36:TST:LS:Z5:P_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z5:INITI2.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITI2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z5:I2.VAL")
field(OUTA, "KM36:TST:LS:Z5:I_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z5:INITD2.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITD2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z5:D2.VAL")
field(OUTA, "KM36:TST:LS:Z5:D_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z5:INITMOUT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITMOUT2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z5:MOUT2.VAL")
field(OUTA, "KM36:TST:LS:Z5:MOUT_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z5:INITRANGE2.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITRANGE2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z5:RANGE2.VAL")
field(OUTA, "KM36:TST:LS:Z5:RANGE_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z5:INITINPUT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITINPUT2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z5:INPUT2.VAL")
field(OUTA, "KM36:TST:LS:Z5:INPUT_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z5:INITRATE2.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITRATE2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z5:RATE2.VAL")
field(OUTA, "KM36:TST:LS:Z5:RATE_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z5:INITCOUNT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITCOUNT2") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z5:INITCALC2.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z5:UB_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z5:P_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z5:I_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z5:D_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z5:MOUT_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z5:RANGE_S2") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z5:INPUT_S2") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z5:RATE_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z5:SET2") {
field(INPA, "KM36:TST:LS:Z5:UB_S2")
field(INPB, "KM36:TST:LS:Z5:P_S2")
field(INPC, "KM36:TST:LS:Z5:I_S2")
field(INPD, "KM36:TST:LS:Z5:D_S2")
field(INPE, "KM36:TST:LS:Z5:MOUT_S2")
field(INPF, "KM36:TST:LS:Z5:RANGE_S2")
field(INPG, "KM36:TST:LS:Z5:INPUT_S2")
field(INPH, "KM36:TST:LS:Z5:RATE_S2")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(2,5) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z5:ALL2.PROC")
}
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z6:ALL2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(2,6) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:UB2:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z6:UB2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z6:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:UB2.PROC")
}
record(ai, "KM36:TST:LS:Z6:UB2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z6:UB2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:P2:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z6:P2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z6:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:P2.PROC")
}
record(ai, "KM36:TST:LS:Z6:P2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z6:P2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:I2:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z6:I2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z6:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:I2.PROC")
}
record(ai, "KM36:TST:LS:Z6:I2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z6:I2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:D2:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z6:D2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z6:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:D2.PROC")
}
record(ai, "KM36:TST:LS:Z6:D2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z6:D2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:MOUT2:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z6:MOUT2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z6:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:MOUT2.PROC")
}
record(ai, "KM36:TST:LS:Z6:MOUT2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z6:MOUT2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:RANGE2:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z6:RANGE2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z6:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:RANGE2.PROC")
}
record(mbbi, "KM36:TST:LS:Z6:RANGE2") {
field(INP, "KM36:TST:LS:Z6:RANGE2:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z6:INPUT2:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z6:INPUT2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z6:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:INPUT2.PROC")
}
record(mbbi, "KM36:TST:LS:Z6:INPUT2") {
field(INP, "KM36:TST:LS:Z6:INPUT2:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z6:RATE2:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z6:RATE2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z6:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:RATE2.PROC")
}
record(ai, "KM36:TST:LS:Z6:RATE2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z6:RATE2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:INITCALC2.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z6:INITCALC2") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z6:INITUB2.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITUB2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z6:UB2.VAL")
field(OUTA, "KM36:TST:LS:Z6:UB_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z6:INITP2.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITP2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z6:P2.VAL")
field(OUTA, "KM36:TST:LS:Z6:P_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z6:INITI2.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITI2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z6:I2.VAL")
field(OUTA, "KM36:TST:LS:Z6:I_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z6:INITD2.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITD2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z6:D2.VAL")
field(OUTA, "KM36:TST:LS:Z6:D_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z6:INITMOUT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITMOUT2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z6:MOUT2.VAL")
field(OUTA, "KM36:TST:LS:Z6:MOUT_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z6:INITRANGE2.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITRANGE2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z6:RANGE2.VAL")
field(OUTA, "KM36:TST:LS:Z6:RANGE_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z6:INITINPUT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITINPUT2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z6:INPUT2.VAL")
field(OUTA, "KM36:TST:LS:Z6:INPUT_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z6:INITRATE2.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITRATE2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z6:RATE2.VAL")
field(OUTA, "KM36:TST:LS:Z6:RATE_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z6:INITCOUNT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITCOUNT2") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z6:INITCALC2.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z6:UB_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z6:P_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z6:I_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z6:D_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z6:MOUT_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z6:RANGE_S2") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z6:INPUT_S2") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z6:RATE_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z6:SET2") {
field(INPA, "KM36:TST:LS:Z6:UB_S2")
field(INPB, "KM36:TST:LS:Z6:P_S2")
field(INPC, "KM36:TST:LS:Z6:I_S2")
field(INPD, "KM36:TST:LS:Z6:D_S2")
field(INPE, "KM36:TST:LS:Z6:MOUT_S2")
field(INPF, "KM36:TST:LS:Z6:RANGE_S2")
field(INPG, "KM36:TST:LS:Z6:INPUT_S2")
field(INPH, "KM36:TST:LS:Z6:RATE_S2")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(2,6) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z6:ALL2.PROC")
}
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z7:ALL2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(2,7) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:UB2:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z7:UB2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z7:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:UB2.PROC")
}
record(ai, "KM36:TST:LS:Z7:UB2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z7:UB2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:P2:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z7:P2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z7:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:P2.PROC")
}
record(ai, "KM36:TST:LS:Z7:P2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z7:P2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:I2:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z7:I2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z7:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:I2.PROC")
}
record(ai, "KM36:TST:LS:Z7:I2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z7:I2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:D2:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z7:D2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z7:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:D2.PROC")
}
record(ai, "KM36:TST:LS:Z7:D2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z7:D2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:MOUT2:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z7:MOUT2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z7:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:MOUT2.PROC")
}
record(ai, "KM36:TST:LS:Z7:MOUT2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z7:MOUT2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:RANGE2:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z7:RANGE2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z7:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:RANGE2.PROC")
}
record(mbbi, "KM36:TST:LS:Z7:RANGE2") {
field(INP, "KM36:TST:LS:Z7:RANGE2:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z7:INPUT2:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z7:INPUT2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z7:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:INPUT2.PROC")
}
record(mbbi, "KM36:TST:LS:Z7:INPUT2") {
field(INP, "KM36:TST:LS:Z7:INPUT2:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z7:RATE2:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z7:RATE2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z7:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:RATE2.PROC")
}
record(ai, "KM36:TST:LS:Z7:RATE2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z7:RATE2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:INITCALC2.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z7:INITCALC2") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z7:INITUB2.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITUB2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z7:UB2.VAL")
field(OUTA, "KM36:TST:LS:Z7:UB_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z7:INITP2.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITP2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z7:P2.VAL")
field(OUTA, "KM36:TST:LS:Z7:P_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z7:INITI2.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITI2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z7:I2.VAL")
field(OUTA, "KM36:TST:LS:Z7:I_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z7:INITD2.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITD2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z7:D2.VAL")
field(OUTA, "KM36:TST:LS:Z7:D_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z7:INITMOUT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITMOUT2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z7:MOUT2.VAL")
field(OUTA, "KM36:TST:LS:Z7:MOUT_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z7:INITRANGE2.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITRANGE2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z7:RANGE2.VAL")
field(OUTA, "KM36:TST:LS:Z7:RANGE_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z7:INITINPUT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITINPUT2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z7:INPUT2.VAL")
field(OUTA, "KM36:TST:LS:Z7:INPUT_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z7:INITRATE2.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITRATE2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z7:RATE2.VAL")
field(OUTA, "KM36:TST:LS:Z7:RATE_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z7:INITCOUNT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITCOUNT2") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z7:INITCALC2.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z7:UB_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z7:P_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z7:I_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z7:D_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z7:MOUT_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z7:RANGE_S2") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z7:INPUT_S2") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z7:RATE_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z7:SET2") {
field(INPA, "KM36:TST:LS:Z7:UB_S2")
field(INPB, "KM36:TST:LS:Z7:P_S2")
field(INPC, "KM36:TST:LS:Z7:I_S2")
field(INPD, "KM36:TST:LS:Z7:D_S2")
field(INPE, "KM36:TST:LS:Z7:MOUT_S2")
field(INPF, "KM36:TST:LS:Z7:RANGE_S2")
field(INPG, "KM36:TST:LS:Z7:INPUT_S2")
field(INPH, "KM36:TST:LS:Z7:RATE_S2")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(2,7) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z7:ALL2.PROC")
}
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z8:ALL2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(2,8) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:UB2:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z8:UB2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z8:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:UB2.PROC")
}
record(ai, "KM36:TST:LS:Z8:UB2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z8:UB2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:P2:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z8:P2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z8:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:P2.PROC")
}
record(ai, "KM36:TST:LS:Z8:P2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z8:P2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:I2:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z8:I2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z8:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:I2.PROC")
}
record(ai, "KM36:TST:LS:Z8:I2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z8:I2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:D2:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z8:D2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z8:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:D2.PROC")
}
record(ai, "KM36:TST:LS:Z8:D2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z8:D2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:MOUT2:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z8:MOUT2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z8:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:MOUT2.PROC")
}
record(ai, "KM36:TST:LS:Z8:MOUT2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z8:MOUT2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:RANGE2:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z8:RANGE2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z8:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:RANGE2.PROC")
}
record(mbbi, "KM36:TST:LS:Z8:RANGE2") {
field(INP, "KM36:TST:LS:Z8:RANGE2:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z8:INPUT2:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z8:INPUT2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z8:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:INPUT2.PROC")
}
record(mbbi, "KM36:TST:LS:Z8:INPUT2") {
field(INP, "KM36:TST:LS:Z8:INPUT2:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z8:RATE2:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z8:RATE2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z8:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:RATE2.PROC")
}
record(ai, "KM36:TST:LS:Z8:RATE2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z8:RATE2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:INITCALC2.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z8:INITCALC2") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z8:INITUB2.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITUB2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z8:UB2.VAL")
field(OUTA, "KM36:TST:LS:Z8:UB_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z8:INITP2.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITP2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z8:P2.VAL")
field(OUTA, "KM36:TST:LS:Z8:P_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z8:INITI2.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITI2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z8:I2.VAL")
field(OUTA, "KM36:TST:LS:Z8:I_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z8:INITD2.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITD2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z8:D2.VAL")
field(OUTA, "KM36:TST:LS:Z8:D_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z8:INITMOUT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITMOUT2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z8:MOUT2.VAL")
field(OUTA, "KM36:TST:LS:Z8:MOUT_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z8:INITRANGE2.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITRANGE2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z8:RANGE2.VAL")
field(OUTA, "KM36:TST:LS:Z8:RANGE_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z8:INITINPUT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITINPUT2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z8:INPUT2.VAL")
field(OUTA, "KM36:TST:LS:Z8:INPUT_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z8:INITRATE2.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITRATE2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z8:RATE2.VAL")
field(OUTA, "KM36:TST:LS:Z8:RATE_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z8:INITCOUNT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITCOUNT2") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z8:INITCALC2.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z8:UB_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z8:P_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z8:I_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z8:D_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z8:MOUT_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z8:RANGE_S2") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z8:INPUT_S2") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z8:RATE_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z8:SET2") {
field(INPA, "KM36:TST:LS:Z8:UB_S2")
field(INPB, "KM36:TST:LS:Z8:P_S2")
field(INPC, "KM36:TST:LS:Z8:I_S2")
field(INPD, "KM36:TST:LS:Z8:D_S2")
field(INPE, "KM36:TST:LS:Z8:MOUT_S2")
field(INPF, "KM36:TST:LS:Z8:RANGE_S2")
field(INPG, "KM36:TST:LS:Z8:INPUT_S2")
field(INPH, "KM36:TST:LS:Z8:RATE_S2")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(2,8) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z8:ALL2.PROC")
}
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z9:ALL2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(2,9) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:UB2:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z9:UB2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z9:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:UB2.PROC")
}
record(ai, "KM36:TST:LS:Z9:UB2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z9:UB2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:P2:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z9:P2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z9:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:P2.PROC")
}
record(ai, "KM36:TST:LS:Z9:P2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z9:P2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:I2:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z9:I2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z9:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:I2.PROC")
}
record(ai, "KM36:TST:LS:Z9:I2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z9:I2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:D2:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z9:D2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z9:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:D2.PROC")
}
record(ai, "KM36:TST:LS:Z9:D2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z9:D2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:MOUT2:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z9:MOUT2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z9:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:MOUT2.PROC")
}
record(ai, "KM36:TST:LS:Z9:MOUT2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z9:MOUT2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:RANGE2:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z9:RANGE2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z9:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:RANGE2.PROC")
}
record(mbbi, "KM36:TST:LS:Z9:RANGE2") {
field(INP, "KM36:TST:LS:Z9:RANGE2:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z9:INPUT2:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z9:INPUT2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z9:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:INPUT2.PROC")
}
record(mbbi, "KM36:TST:LS:Z9:INPUT2") {
field(INP, "KM36:TST:LS:Z9:INPUT2:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z9:RATE2:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z9:RATE2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z9:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:RATE2.PROC")
}
record(ai, "KM36:TST:LS:Z9:RATE2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z9:RATE2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:INITCALC2.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z9:INITCALC2") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z9:INITUB2.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITUB2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z9:UB2.VAL")
field(OUTA, "KM36:TST:LS:Z9:UB_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z9:INITP2.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITP2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z9:P2.VAL")
field(OUTA, "KM36:TST:LS:Z9:P_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z9:INITI2.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITI2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z9:I2.VAL")
field(OUTA, "KM36:TST:LS:Z9:I_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z9:INITD2.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITD2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z9:D2.VAL")
field(OUTA, "KM36:TST:LS:Z9:D_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z9:INITMOUT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITMOUT2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z9:MOUT2.VAL")
field(OUTA, "KM36:TST:LS:Z9:MOUT_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z9:INITRANGE2.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITRANGE2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z9:RANGE2.VAL")
field(OUTA, "KM36:TST:LS:Z9:RANGE_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z9:INITINPUT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITINPUT2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z9:INPUT2.VAL")
field(OUTA, "KM36:TST:LS:Z9:INPUT_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z9:INITRATE2.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITRATE2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z9:RATE2.VAL")
field(OUTA, "KM36:TST:LS:Z9:RATE_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z9:INITCOUNT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITCOUNT2") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z9:INITCALC2.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z9:UB_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z9:P_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z9:I_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z9:D_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z9:MOUT_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z9:RANGE_S2") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z9:INPUT_S2") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z9:RATE_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z9:SET2") {
field(INPA, "KM36:TST:LS:Z9:UB_S2")
field(INPB, "KM36:TST:LS:Z9:P_S2")
field(INPC, "KM36:TST:LS:Z9:I_S2")
field(INPD, "KM36:TST:LS:Z9:D_S2")
field(INPE, "KM36:TST:LS:Z9:MOUT_S2")
field(INPF, "KM36:TST:LS:Z9:RANGE_S2")
field(INPG, "KM36:TST:LS:Z9:INPUT_S2")
field(INPH, "KM36:TST:LS:Z9:RATE_S2")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(2,9) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z9:ALL2.PROC")
}
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z10:ALL2") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(2,10) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:UB2:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z10:UB2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:UB2.PROC")
}
record(ai, "KM36:TST:LS:Z10:UB2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:UB2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:P2:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z10:P2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:P2.PROC")
}
record(ai, "KM36:TST:LS:Z10:P2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:P2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:I2:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z10:I2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:I2.PROC")
}
record(ai, "KM36:TST:LS:Z10:I2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:I2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:D2:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z10:D2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:D2.PROC")
}
record(ai, "KM36:TST:LS:Z10:D2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:D2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:MOUT2:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z10:MOUT2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:MOUT2.PROC")
}
record(ai, "KM36:TST:LS:Z10:MOUT2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:MOUT2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:RANGE2:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z10:RANGE2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:RANGE2.PROC")
}
record(mbbi, "KM36:TST:LS:Z10:RANGE2") {
field(INP, "KM36:TST:LS:Z10:RANGE2:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z10:INPUT2:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z10:INPUT2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:INPUT2.PROC")
}
record(mbbi, "KM36:TST:LS:Z10:INPUT2") {
field(INP, "KM36:TST:LS:Z10:INPUT2:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z10:RATE2:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z10:RATE2:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL2.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:RATE2.PROC")
}
record(ai, "KM36:TST:LS:Z10:RATE2") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:RATE2:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:INITCALC2.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z10:INITCALC2") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z10:INITUB2.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITUB2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:UB2.VAL")
field(OUTA, "KM36:TST:LS:Z10:UB_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITP2.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITP2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:P2.VAL")
field(OUTA, "KM36:TST:LS:Z10:P_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITI2.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITI2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:I2.VAL")
field(OUTA, "KM36:TST:LS:Z10:I_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITD2.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITD2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:D2.VAL")
field(OUTA, "KM36:TST:LS:Z10:D_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITMOUT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITMOUT2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:MOUT2.VAL")
field(OUTA, "KM36:TST:LS:Z10:MOUT_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITRANGE2.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITRANGE2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:RANGE2.VAL")
field(OUTA, "KM36:TST:LS:Z10:RANGE_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITINPUT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITINPUT2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:INPUT2.VAL")
field(OUTA, "KM36:TST:LS:Z10:INPUT_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITRATE2.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITRATE2") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:RATE2.VAL")
field(OUTA, "KM36:TST:LS:Z10:RATE_S2.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITCOUNT2.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITCOUNT2") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z10:INITCALC2.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z10:UB_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z10:P_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z10:I_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z10:D_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z10:MOUT_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z10:RANGE_S2") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z10:INPUT_S2") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z10:RATE_S2") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z10:SET2") {
field(INPA, "KM36:TST:LS:Z10:UB_S2")
field(INPB, "KM36:TST:LS:Z10:P_S2")
field(INPC, "KM36:TST:LS:Z10:I_S2")
field(INPD, "KM36:TST:LS:Z10:D_S2")
field(INPE, "KM36:TST:LS:Z10:MOUT_S2")
field(INPF, "KM36:TST:LS:Z10:RANGE_S2")
field(INPG, "KM36:TST:LS:Z10:INPUT_S2")
field(INPH, "KM36:TST:LS:Z10:RATE_S2")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(2,10) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z10:ALL2.PROC")
}
# This is included in lakeshore336.template
# This template is for the common functionality shared by all 4 outputs.
#
# There is some logic in this database to provide put_callback functionality
# for setting the temperature and waiting for it to be in range. The input
# sensor PV name used for the in-window calculation changes depending on
# the input sensor selected. In order for this to work it requires the following
# macros:
#
# INPUTA - Sensor 1 PV name
# INPUTB - Sensor 2 PV name
# INPUTC - Sensor 3 PV name
# INPUTD - Sensor 4 PV name
# INPUTD2 - Sensor D2 PV name
# INPUTD3 - Sensor D3 PV name
# INPUTD4 - Sensor D4 PV name
# INPUTD5 - Sensor D5 PV name
# TOLERANCE (optional - defaults to 1)
#
# The input link names must fit into a stringout record for this to work.
# The above link names default to a dummy record.
################################################################
# Read records
################################################################
##
## Record holding the output number
##
record(stringout, "KM36:TST:LS:OUTPUT3") {
field(DTYP, "Soft Channel")
field(VAL, "3")
field(PINI, "YES")
}
##
## Read the setpoint temperature.
##
record(ai, "KM36:TST:LS:SETP3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getSETP(3) serial1 0")
field(SCAN, "1 second")
field(PREC, "3")
field(EGU, "K")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the setpoint limit
##
##
## Read the ramp parameter. This also populates the ramp status KM36:TST:LS:RAMPST3,
##
record(ai, "KM36:TST:LS:RAMP3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getRAMP(3,KM36:TST:LS:RAMPST3) serial1 0")
field(SCAN, "5 second")
field(PREC, "3")
field(EGU, "K/min")
}
##
## Read the ramp status parameter.
##
## 0=off
## 1=on
##
record(bi, "KM36:TST:LS:RAMPST3") {
field(DTYP, "Soft Channel")
field(ZNAM, "Off")
field(ONAM, "On")
}
##
## Read the range parameter (the heater output power range).
## This is output specific and is defined in another file.
##
record(mbbi, "KM36:TST:LS:RANGE3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(ZRVL, "0")
field(ONVL, "1")
field(TWVL, "2")
field(THVL, "3")
field(FRVL, "4")
field(FVVL, "5")
field(SCAN, "5 second")
field(INP, "@ls336.proto getRANGE(3) serial1 0")
}
##
## Read the mode to use for outmode
## This is output specific and is defined in another file.
##
record(mbbi, "KM36:TST:LS:OMMODE3") {
}
##
## Read the manual output parameter.
##
record(ai, "KM36:TST:LS:MOUT3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getMOUT(3) serial1 0")
field(SCAN, "5 second")
}
##
## Read the PID P parameter. Pass the I and D records into the protocol to read those as well.
##
record(ai, "KM36:TST:LS:P3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getPID(3,KM36:TST:LS:I3,KM36:TST:LS:D3) serial1 0")
field(SCAN, "5 second")
}
##
## Read the PID I parameter.
##
record(ai, "KM36:TST:LS:I3") {
field(DTYP, "Soft Channel")
field(SCAN, "Passive")
}
##
## Read the PID D parameter.
##
record(ai, "KM36:TST:LS:D3") {
field(DTYP, "Soft Channel")
field(SCAN, "Passive")
}
##
## Read the mode to use for outmode.
## This also populates the OMI and OMP records.
## The mbbi strings and values are defined in the output specific templates.
##
record(mbbi, "KM36:TST:LS:OMM3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(ZRVL, "0")
field(ONVL, "1")
field(TWVL, "2")
field(THVL, "3")
field(FRVL, "4")
field(FVVL, "5")
field(SCAN, "5 second")
field(INP, "@ls336.proto getOM(3,KM36:TST:LS:OMI3,KM36:TST:LS:OMP3) serial1 0")
}
##
## Read the input to use for outmode
##
record(mbbi, "KM36:TST:LS:OMI3") {
field(DTYP, "Soft Channel")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
}
##
## Read the power up mode to use for outmode
##
record(mbbi, "KM36:TST:LS:OMP3") {
field(DTYP, "Soft Channel")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "On")
field(ONVL, "1")
}
################################################################
# Write records
################################################################
##
## Set the setpoint temperature.
##
record(ao, "KM36:TST:LS:SETP_S3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(DESC, "Setpoint temperature")
field(OUT, "@ls336.proto setSETP(3) serial1 0")
field(PREC, "3")
field(FLNK, "KM36:TST:LS:SETP_S3_BUSYSET.PROC")
field(EGU, "K")
info(archive, "Monitor, 00:00:01, VAL")
}
###############################################################################
##
## A few records to support put_callback on the setpoint. We use the busy record.
## A temperature window is used. The temperature must be within
## the window, before the callback is done.
##
record(dfanout, "KM36:TST:LS:SETP_S3_BUSYSET")
{
field(VAL, "0")
field(OUTA, "KM36:TST:LS:IN_WINDOW3.VAL PP")
field(FLNK, "KM36:TST:LS:SETP_S3_BUSYSET2")
}
record(dfanout, "KM36:TST:LS:SETP_S3_BUSYSET2")
{
field(VAL, "1")
field(OUTA, "KM36:TST:LS:SETP3.PROC PP")
field(OUTB, "KM36:TST:LS:SETP_S3_BUSY PP")
field(FLNK, "KM36:TST:LS:CALC_IN_WINDOW3")
}
record(busy, "KM36:TST:LS:SETP_S3_BUSY")
{
}
record(calcout, "KM36:TST:LS:CALC_IN_WINDOW3") {
field(PINI, "YES")
field(INPA, "1")
field(INPB, "KM36:TST:LS:DUMMY3.VAL")
field(INPC, "KM36:TST:LS:SETP_S3.VAL")
field(CALC, "((B>=(C-A))&&(B<=(C+A)))?1:0")
field(OOPT, "Every Time")
field(OUT, "KM36:TST:LS:IN_WINDOW3.VAL PP")
field(DOPT, "Use CALC")
field(SCAN, "1 second")
field(PREC, "1")
info(autosaveFields, "A")
info(archive, "Monitor, 00:00:01, A B C VAL")
}
record(bo, "KM36:TST:LS:IN_WINDOW3") {
field(DESC, "Temperature In Window")
field(VAL, "0")
field(PINI, "YES")
field(OMSL, "supervisory")
field(ZNAM, "Not In Window")
field(ONAM, "In Window")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Set busy record 'done' when TIME_WINDOW3=1
##
record(calcout, "KM36:TST:LS:CALC_BUSY_DONE3") {
field(INPA, "KM36:TST:LS:IN_WINDOW3.VAL CP")
field(CALC, "(A=1)?0:1")
field(OOPT, "Every Time")
field(OUT, "KM36:TST:LS:SETP_S3_BUSY.VAL PP")
}
###############################################################################
##
## Dummy record to use for input link name default
##
record(ai, "KM36:TST:LS:DUMMY3") {
}
##
## Monitor KM36:TST:LS:OMI3 to determin which input sensor to use
## to deal with the callback. The below set of records automatically
## switch the input when the 'control input' is changed. They make
## use of the input sensor PV names passed into this template.
##
record(calcout, "KM36:TST:LS:SET_3_INPUTA") {
field(CALC, "A=1")
field(INPA, "KM36:TST:LS:OMI3.VAL CP")
field(DOPT, "Use OCAL")
field(OVAL, "1")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:SET_3_INPUTA_LINK.PROC")
}
record(stringout, "KM36:TST:LS:SET_3_INPUTA_LINK") {
field(VAL, "KM36:TST:LS:KRDG0.VAL CP")
field(OUT, "KM36:TST:LS:CALC_IN_WINDOW3.INPB CA")
}
record(calcout, "KM36:TST:LS:SET_3_INPUTB") {
field(CALC, "A=2")
field(INPA, "KM36:TST:LS:OMI3.VAL CP")
field(DOPT, "Use OCAL")
field(OVAL, "1")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:SET_3_INPUTB_LINK.PROC")
}
record(stringout, "KM36:TST:LS:SET_3_INPUTB_LINK") {
field(VAL, "KM36:TST:LS:KRDG1.VAL CP")
field(OUT, "KM36:TST:LS:CALC_IN_WINDOW3.INPB CA")
}
record(calcout, "KM36:TST:LS:SET_3_INPUTC") {
field(CALC, "A=3")
field(INPA, "KM36:TST:LS:OMI3.VAL CP")
field(DOPT, "Use OCAL")
field(OVAL, "1")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:SET_3_INPUTC_LINK.PROC")
}
record(stringout, "KM36:TST:LS:SET_3_INPUTC_LINK") {
field(VAL, "KM36:TST:LS:KRDG2.VAL CP")
field(OUT, "KM36:TST:LS:CALC_IN_WINDOW3.INPB CA")
}
record(calcout, "KM36:TST:LS:SET_3_INPUTD") {
field(CALC, "A=4")
field(INPA, "KM36:TST:LS:OMI3.VAL CP")
field(DOPT, "Use OCAL")
field(OVAL, "1")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:SET_3_INPUTD_LINK.PROC")
}
record(stringout, "KM36:TST:LS:SET_3_INPUTD_LINK") {
field(VAL, "KM36:TST:LS:KRDG3.VAL CP")
field(OUT, "KM36:TST:LS:CALC_IN_WINDOW3.INPB CA")
}
record(calcout, "KM36:TST:LS:SET_3_INPUTD2") {
field(CALC, "A=5")
field(INPA, "KM36:TST:LS:OMI3.VAL CP")
field(DOPT, "Use OCAL")
field(OVAL, "1")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:SET_3_INPUTD2_LINK.PROC")
}
record(stringout, "KM36:TST:LS:SET_3_INPUTD2_LINK") {
field(VAL, "KM36:TST:LS:KRDGD2.VAL CP")
field(OUT, "KM36:TST:LS:CALC_IN_WINDOW3.INPB CA")
}
record(calcout, "KM36:TST:LS:SET_3_INPUTD3") {
field(CALC, "A=6")
field(INPA, "KM36:TST:LS:OMI3.VAL CP")
field(DOPT, "Use OCAL")
field(OVAL, "1")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:SET_3_INPUTD3_LINK.PROC")
}
record(stringout, "KM36:TST:LS:SET_3_INPUTD3_LINK") {
field(VAL, "KM36:TST:LS:KRDGD3.VAL CP")
field(OUT, "KM36:TST:LS:CALC_IN_WINDOW3.INPB CA")
}
record(calcout, "KM36:TST:LS:SET_3_INPUTD4") {
field(CALC, "A=7")
field(INPA, "KM36:TST:LS:OMI3.VAL CP")
field(DOPT, "Use OCAL")
field(OVAL, "1")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:SET_3_INPUTD4_LINK.PROC")
}
record(stringout, "KM36:TST:LS:SET_3_INPUTD4_LINK") {
field(VAL, "KM36:TST:LS:KRDGD4.VAL CP")
field(OUT, "KM36:TST:LS:CALC_IN_WINDOW3.INPB CA")
}
record(calcout, "KM36:TST:LS:SET_3_INPUTD5") {
field(CALC, "A=8")
field(INPA, "KM36:TST:LS:OMI3.VAL CP")
field(DOPT, "Use OCAL")
field(OVAL, "1")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:SET_3_INPUTD5_LINK.PROC")
}
record(stringout, "KM36:TST:LS:SET_3_INPUTD5_LINK") {
field(VAL, "KM36:TST:LS:KRDGD5.VAL CP")
field(OUT, "KM36:TST:LS:CALC_IN_WINDOW3.INPB CA")
}
##
## Set the range parameter.
## The strings are output specific and is defined in another file.
##
record(mbbo, "KM36:TST:LS:RANGE_S3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setRANGE(3) serial1 0")
field(FLNK, "KM36:TST:LS:RANGE3.PROC CA")
}
##
## Set the ramp rate parameter.
##
## This is the desired temperate increase/decrease rate
## per second when heating/cooling.
##
## The ramp and ramp status parameters are actually one command
## for the lakeshore. Therefore one must pass into this
## record the existing/desired ramp status, as well as the
## desired ramp. This is done automatically by reading the
## PV which holds the current ramp status.
##
record(ao, "KM36:TST:LS:RAMP_S3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setRAMP(KM36:TST:LS:RAMPST3,3) serial1 0")
field(PREC, "3")
field(FLNK, "KM36:TST:LS:RAMP3.PROC CA")
field(EGU, "K/min")
}
##
## Set the ramp status parameter.
##
## 0=off
## 1=on
##
## The ramp and ramp status parameters are actually one command
## for the lakeshore. Therefore one must pass into this
## record the existing/desired ramp, as well as the
## desired ramp status. This is done automatically by reading the
## PV which holds the current ramp value.
##
record(bo, "KM36:TST:LS:RAMPST_S3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setRAMPSTATUS(KM36:TST:LS:RAMP3,3) serial1 0")
field(FLNK, "KM36:TST:LS:RAMP3.PROC CA")
field(ZNAM, "Off")
field(ONAM, "On")
}
##
## Set the manual output value.
##
record(ao, "KM36:TST:LS:MOUT_S3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setMOUT(3) serial1 0")
field(FLNK, "KM36:TST:LS:MOUT3.PROC CA")
}
##
## Set the PID P parameter.
##
record(ao, "KM36:TST:LS:P_S3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setP(3,KM36:TST:LS:I3,KM36:TST:LS:D3) serial1 0")
field(FLNK, "KM36:TST:LS:P3.PROC CA")
}
##
## Set the PID I parameter.
##
record(ao, "KM36:TST:LS:I_S3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setI(KM36:TST:LS:P3,3,KM36:TST:LS:D3) serial1 0")
field(FLNK, "KM36:TST:LS:P3.PROC CA")
}
##
## Set the PID D parameter.
##
record(ao, "KM36:TST:LS:D_S3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setD(KM36:TST:LS:P3,KM36:TST:LS:I3,3) serial1 0")
field(FLNK, "KM36:TST:LS:P3.PROC CA")
}
##
## Set the mode to use for outmode
## The strings are output specific. This is defined in another file.
##
record(mbbo, "KM36:TST:LS:OMM_S3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(ZRVL, "0")
field(ONVL, "1")
field(TWVL, "2")
field(THVL, "3")
field(FRVL, "4")
field(FVVL, "5")
field(OUT, "@ls336.proto setOM(3,KM36:TST:LS:OMI3,KM36:TST:LS:OMP3) serial1 0")
field(FLNK, "KM36:TST:LS:OMM3.PROC CA")
}
##
## Set the input to use for outmode
##
record(mbbo, "KM36:TST:LS:OMI_S3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(OUT, "@ls336.proto setOMI(3,KM36:TST:LS:OMM3,KM36:TST:LS:OMP3) serial1 0")
field(FLNK, "KM36:TST:LS:OMM3.PROC CA")
}
##
## Set the power up mode to use for outmode
##
record(mbbo, "KM36:TST:LS:OMP_S3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "On")
field(ONVL, "1")
field(OUT, "@ls336.proto setOMP(3,KM36:TST:LS:OMM3,KM36:TST:LS:OMI3) serial1 0")
field(FLNK, "KM36:TST:LS:OMM3.PROC CA")
}
##
## Set the type of tuning mode
##
record(mbbo, "KM36:TST:LS:TUNEMODE_S3") {
field(SDIS, "KM36:TST:LS:DISABLE")
field(ZRST, "P Only")
field(ZRVL, "0")
field(ONST, "P and I")
field(ONVL, "1")
field(TWST, "P, I and D")
field(TWVL, "2")
}
##
## Start the tuning process
##
record(ao, "KM36:TST:LS:TUNESTART3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(DESC, "Start the auto tuning")
field(OUT, "@ls336.proto setATUNE(3,KM36:TST:LS:TUNEMODE_S3) serial1 0")
}
##
## Read all ZONE settings
##
record(seq, "KM36:TST:LS:Z:READ3") {
field(DESC, "Read Output 3 ZONE")
field(DOL1, "1")
field(DLY1, "0.1")
field(LNK1, "KM36:TST:LS:Z1:ALL3.PROC")
field(DOL2, "1")
field(DLY2, "0.1")
field(LNK2, "KM36:TST:LS:Z2:ALL3.PROC")
field(DOL3, "1")
field(DLY3, "0.1")
field(LNK3, "KM36:TST:LS:Z3:ALL3.PROC")
field(DOL4, "1")
field(DLY4, "0.1")
field(LNK4, "KM36:TST:LS:Z4:ALL3.PROC")
field(DOL5, "1")
field(DLY5, "0.1")
field(LNK5, "KM36:TST:LS:Z5:ALL3.PROC")
field(DOL6, "1")
field(DLY6, "0.1")
field(LNK6, "KM36:TST:LS:Z6:ALL3.PROC")
field(DOL7, "1")
field(DLY7, "0.1")
field(LNK7, "KM36:TST:LS:Z7:ALL3.PROC")
field(DOL8, "1")
field(DLY8, "0.1")
field(LNK8, "KM36:TST:LS:Z8:ALL3.PROC")
field(DOL9, "1")
field(DLY9, "0.1")
field(LNK9, "KM36:TST:LS:Z9:ALL3.PROC")
field(DOLA, "1")
field(DLYA, "0.1")
field(LNKA, "KM36:TST:LS:Z10:ALL3.PROC")
field(PINI, "YES")
}
###############################################
# This is included in lakeshore336.template
# This is for the analog outputs (3 and 4)
##
## Read the analog output value.
##
record(ai, "KM36:TST:LS:AOUT3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getAOUT(3) serial1 0")
field(SCAN, "5 second")
field(PREC, "1")
field(EGU, "%")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Define the string/values for this record.
##
record(mbbi, "KM36:TST:LS:RANGE3") {
field(ZRST, "Off")
field(ONST, "On")
}
##
## Define the strings and values for this record.
##
record(mbbi, "KM36:TST:LS:OMM3") {
field(ZRST, "Off")
field(ONST, "Closed Loop PID")
field(TWST, "Zone")
field(THST, "Open Loop")
field(FRST, "Monitor Out")
field(FVST, "Warmup Supply")
}
##
## Define the strings and values for this record.
##
record(mbbo, "KM36:TST:LS:RANGE_S3") {
field(ZRST, "Off")
field(ONST, "On")
}
##
## Define the strings and values for this record.
##
record(mbbo, "KM36:TST:LS:OMM_S3") {
field(ZRST, "Off")
field(ONST, "Closed Loop PID")
field(TWST, "Zone")
field(THST, "Open Loop")
field(FRST, "Monitor Out")
field(FVST, "Warmup Supply")
}
###############################################
# Add in ZONE support
###############################################
# This just includes the zone file and overrides the RANGE options
# for the analog control channels.
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z1:ALL3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(3,1) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:UB3:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z1:UB3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z1:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:UB3.PROC")
}
record(ai, "KM36:TST:LS:Z1:UB3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z1:UB3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:P3:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z1:P3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z1:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:P3.PROC")
}
record(ai, "KM36:TST:LS:Z1:P3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z1:P3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:I3:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z1:I3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z1:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:I3.PROC")
}
record(ai, "KM36:TST:LS:Z1:I3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z1:I3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:D3:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z1:D3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z1:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:D3.PROC")
}
record(ai, "KM36:TST:LS:Z1:D3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z1:D3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:MOUT3:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z1:MOUT3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z1:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:MOUT3.PROC")
}
record(ai, "KM36:TST:LS:Z1:MOUT3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z1:MOUT3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:RANGE3:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z1:RANGE3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z1:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:RANGE3.PROC")
}
record(mbbi, "KM36:TST:LS:Z1:RANGE3") {
field(INP, "KM36:TST:LS:Z1:RANGE3:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z1:INPUT3:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z1:INPUT3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z1:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:INPUT3.PROC")
}
record(mbbi, "KM36:TST:LS:Z1:INPUT3") {
field(INP, "KM36:TST:LS:Z1:INPUT3:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z1:RATE3:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z1:RATE3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z1:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:RATE3.PROC")
}
record(ai, "KM36:TST:LS:Z1:RATE3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z1:RATE3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:INITCALC3.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z1:INITCALC3") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z1:INITUB3.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITUB3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z1:UB3.VAL")
field(OUTA, "KM36:TST:LS:Z1:UB_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z1:INITP3.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITP3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z1:P3.VAL")
field(OUTA, "KM36:TST:LS:Z1:P_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z1:INITI3.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITI3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z1:I3.VAL")
field(OUTA, "KM36:TST:LS:Z1:I_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z1:INITD3.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITD3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z1:D3.VAL")
field(OUTA, "KM36:TST:LS:Z1:D_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z1:INITMOUT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITMOUT3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z1:MOUT3.VAL")
field(OUTA, "KM36:TST:LS:Z1:MOUT_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z1:INITRANGE3.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITRANGE3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z1:RANGE3.VAL")
field(OUTA, "KM36:TST:LS:Z1:RANGE_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z1:INITINPUT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITINPUT3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z1:INPUT3.VAL")
field(OUTA, "KM36:TST:LS:Z1:INPUT_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z1:INITRATE3.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITRATE3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z1:RATE3.VAL")
field(OUTA, "KM36:TST:LS:Z1:RATE_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z1:INITCOUNT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITCOUNT3") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z1:INITCALC3.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z1:UB_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z1:P_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z1:I_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z1:D_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z1:MOUT_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z1:RANGE_S3") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z1:INPUT_S3") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z1:RATE_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z1:SET3") {
field(INPA, "KM36:TST:LS:Z1:UB_S3")
field(INPB, "KM36:TST:LS:Z1:P_S3")
field(INPC, "KM36:TST:LS:Z1:I_S3")
field(INPD, "KM36:TST:LS:Z1:D_S3")
field(INPE, "KM36:TST:LS:Z1:MOUT_S3")
field(INPF, "KM36:TST:LS:Z1:RANGE_S3")
field(INPG, "KM36:TST:LS:Z1:INPUT_S3")
field(INPH, "KM36:TST:LS:Z1:RATE_S3")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(3,1) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z1:ALL3.PROC")
}
record(mbbi, "KM36:TST:LS:Z1:RANGE3") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
record(mbbo, "KM36:TST:LS:Z1:RANGE_S3") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
# This just includes the zone file and overrides the RANGE options
# for the analog control channels.
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z2:ALL3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(3,2) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:UB3:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z2:UB3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:UB3.PROC")
}
record(ai, "KM36:TST:LS:Z2:UB3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:UB3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:P3:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z2:P3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:P3.PROC")
}
record(ai, "KM36:TST:LS:Z2:P3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:P3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:I3:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z2:I3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:I3.PROC")
}
record(ai, "KM36:TST:LS:Z2:I3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:I3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:D3:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z2:D3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:D3.PROC")
}
record(ai, "KM36:TST:LS:Z2:D3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:D3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:MOUT3:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z2:MOUT3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:MOUT3.PROC")
}
record(ai, "KM36:TST:LS:Z2:MOUT3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:MOUT3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:RANGE3:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z2:RANGE3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:RANGE3.PROC")
}
record(mbbi, "KM36:TST:LS:Z2:RANGE3") {
field(INP, "KM36:TST:LS:Z2:RANGE3:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z2:INPUT3:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z2:INPUT3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:INPUT3.PROC")
}
record(mbbi, "KM36:TST:LS:Z2:INPUT3") {
field(INP, "KM36:TST:LS:Z2:INPUT3:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z2:RATE3:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z2:RATE3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:RATE3.PROC")
}
record(ai, "KM36:TST:LS:Z2:RATE3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:RATE3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:INITCALC3.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z2:INITCALC3") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z2:INITUB3.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITUB3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:UB3.VAL")
field(OUTA, "KM36:TST:LS:Z2:UB_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITP3.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITP3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:P3.VAL")
field(OUTA, "KM36:TST:LS:Z2:P_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITI3.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITI3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:I3.VAL")
field(OUTA, "KM36:TST:LS:Z2:I_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITD3.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITD3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:D3.VAL")
field(OUTA, "KM36:TST:LS:Z2:D_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITMOUT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITMOUT3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:MOUT3.VAL")
field(OUTA, "KM36:TST:LS:Z2:MOUT_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITRANGE3.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITRANGE3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:RANGE3.VAL")
field(OUTA, "KM36:TST:LS:Z2:RANGE_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITINPUT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITINPUT3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:INPUT3.VAL")
field(OUTA, "KM36:TST:LS:Z2:INPUT_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITRATE3.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITRATE3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:RATE3.VAL")
field(OUTA, "KM36:TST:LS:Z2:RATE_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITCOUNT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITCOUNT3") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z2:INITCALC3.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z2:UB_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z2:P_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z2:I_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z2:D_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z2:MOUT_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z2:RANGE_S3") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z2:INPUT_S3") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z2:RATE_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z2:SET3") {
field(INPA, "KM36:TST:LS:Z2:UB_S3")
field(INPB, "KM36:TST:LS:Z2:P_S3")
field(INPC, "KM36:TST:LS:Z2:I_S3")
field(INPD, "KM36:TST:LS:Z2:D_S3")
field(INPE, "KM36:TST:LS:Z2:MOUT_S3")
field(INPF, "KM36:TST:LS:Z2:RANGE_S3")
field(INPG, "KM36:TST:LS:Z2:INPUT_S3")
field(INPH, "KM36:TST:LS:Z2:RATE_S3")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(3,2) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z2:ALL3.PROC")
}
record(mbbi, "KM36:TST:LS:Z2:RANGE3") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
record(mbbo, "KM36:TST:LS:Z2:RANGE_S3") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
# This just includes the zone file and overrides the RANGE options
# for the analog control channels.
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z2:ALL3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(3,2) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:UB3:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z2:UB3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:UB3.PROC")
}
record(ai, "KM36:TST:LS:Z2:UB3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:UB3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:P3:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z2:P3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:P3.PROC")
}
record(ai, "KM36:TST:LS:Z2:P3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:P3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:I3:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z2:I3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:I3.PROC")
}
record(ai, "KM36:TST:LS:Z2:I3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:I3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:D3:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z2:D3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:D3.PROC")
}
record(ai, "KM36:TST:LS:Z2:D3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:D3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:MOUT3:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z2:MOUT3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:MOUT3.PROC")
}
record(ai, "KM36:TST:LS:Z2:MOUT3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:MOUT3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:RANGE3:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z2:RANGE3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:RANGE3.PROC")
}
record(mbbi, "KM36:TST:LS:Z2:RANGE3") {
field(INP, "KM36:TST:LS:Z2:RANGE3:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z2:INPUT3:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z2:INPUT3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:INPUT3.PROC")
}
record(mbbi, "KM36:TST:LS:Z2:INPUT3") {
field(INP, "KM36:TST:LS:Z2:INPUT3:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z2:RATE3:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z2:RATE3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:RATE3.PROC")
}
record(ai, "KM36:TST:LS:Z2:RATE3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:RATE3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:INITCALC3.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z2:INITCALC3") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z2:INITUB3.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITUB3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:UB3.VAL")
field(OUTA, "KM36:TST:LS:Z2:UB_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITP3.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITP3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:P3.VAL")
field(OUTA, "KM36:TST:LS:Z2:P_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITI3.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITI3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:I3.VAL")
field(OUTA, "KM36:TST:LS:Z2:I_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITD3.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITD3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:D3.VAL")
field(OUTA, "KM36:TST:LS:Z2:D_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITMOUT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITMOUT3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:MOUT3.VAL")
field(OUTA, "KM36:TST:LS:Z2:MOUT_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITRANGE3.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITRANGE3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:RANGE3.VAL")
field(OUTA, "KM36:TST:LS:Z2:RANGE_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITINPUT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITINPUT3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:INPUT3.VAL")
field(OUTA, "KM36:TST:LS:Z2:INPUT_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITRATE3.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITRATE3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:RATE3.VAL")
field(OUTA, "KM36:TST:LS:Z2:RATE_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITCOUNT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITCOUNT3") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z2:INITCALC3.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z2:UB_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z2:P_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z2:I_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z2:D_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z2:MOUT_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z2:RANGE_S3") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z2:INPUT_S3") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z2:RATE_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z2:SET3") {
field(INPA, "KM36:TST:LS:Z2:UB_S3")
field(INPB, "KM36:TST:LS:Z2:P_S3")
field(INPC, "KM36:TST:LS:Z2:I_S3")
field(INPD, "KM36:TST:LS:Z2:D_S3")
field(INPE, "KM36:TST:LS:Z2:MOUT_S3")
field(INPF, "KM36:TST:LS:Z2:RANGE_S3")
field(INPG, "KM36:TST:LS:Z2:INPUT_S3")
field(INPH, "KM36:TST:LS:Z2:RATE_S3")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(3,2) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z2:ALL3.PROC")
}
record(mbbi, "KM36:TST:LS:Z2:RANGE3") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
record(mbbo, "KM36:TST:LS:Z2:RANGE_S3") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
# This just includes the zone file and overrides the RANGE options
# for the analog control channels.
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z3:ALL3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(3,3) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:UB3:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z3:UB3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z3:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:UB3.PROC")
}
record(ai, "KM36:TST:LS:Z3:UB3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z3:UB3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:P3:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z3:P3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z3:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:P3.PROC")
}
record(ai, "KM36:TST:LS:Z3:P3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z3:P3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:I3:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z3:I3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z3:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:I3.PROC")
}
record(ai, "KM36:TST:LS:Z3:I3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z3:I3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:D3:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z3:D3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z3:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:D3.PROC")
}
record(ai, "KM36:TST:LS:Z3:D3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z3:D3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:MOUT3:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z3:MOUT3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z3:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:MOUT3.PROC")
}
record(ai, "KM36:TST:LS:Z3:MOUT3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z3:MOUT3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:RANGE3:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z3:RANGE3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z3:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:RANGE3.PROC")
}
record(mbbi, "KM36:TST:LS:Z3:RANGE3") {
field(INP, "KM36:TST:LS:Z3:RANGE3:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z3:INPUT3:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z3:INPUT3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z3:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:INPUT3.PROC")
}
record(mbbi, "KM36:TST:LS:Z3:INPUT3") {
field(INP, "KM36:TST:LS:Z3:INPUT3:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z3:RATE3:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z3:RATE3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z3:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:RATE3.PROC")
}
record(ai, "KM36:TST:LS:Z3:RATE3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z3:RATE3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:INITCALC3.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z3:INITCALC3") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z3:INITUB3.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITUB3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z3:UB3.VAL")
field(OUTA, "KM36:TST:LS:Z3:UB_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z3:INITP3.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITP3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z3:P3.VAL")
field(OUTA, "KM36:TST:LS:Z3:P_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z3:INITI3.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITI3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z3:I3.VAL")
field(OUTA, "KM36:TST:LS:Z3:I_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z3:INITD3.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITD3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z3:D3.VAL")
field(OUTA, "KM36:TST:LS:Z3:D_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z3:INITMOUT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITMOUT3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z3:MOUT3.VAL")
field(OUTA, "KM36:TST:LS:Z3:MOUT_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z3:INITRANGE3.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITRANGE3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z3:RANGE3.VAL")
field(OUTA, "KM36:TST:LS:Z3:RANGE_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z3:INITINPUT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITINPUT3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z3:INPUT3.VAL")
field(OUTA, "KM36:TST:LS:Z3:INPUT_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z3:INITRATE3.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITRATE3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z3:RATE3.VAL")
field(OUTA, "KM36:TST:LS:Z3:RATE_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z3:INITCOUNT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITCOUNT3") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z3:INITCALC3.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z3:UB_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z3:P_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z3:I_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z3:D_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z3:MOUT_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z3:RANGE_S3") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z3:INPUT_S3") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z3:RATE_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z3:SET3") {
field(INPA, "KM36:TST:LS:Z3:UB_S3")
field(INPB, "KM36:TST:LS:Z3:P_S3")
field(INPC, "KM36:TST:LS:Z3:I_S3")
field(INPD, "KM36:TST:LS:Z3:D_S3")
field(INPE, "KM36:TST:LS:Z3:MOUT_S3")
field(INPF, "KM36:TST:LS:Z3:RANGE_S3")
field(INPG, "KM36:TST:LS:Z3:INPUT_S3")
field(INPH, "KM36:TST:LS:Z3:RATE_S3")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(3,3) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z3:ALL3.PROC")
}
record(mbbi, "KM36:TST:LS:Z3:RANGE3") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
record(mbbo, "KM36:TST:LS:Z3:RANGE_S3") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
# This just includes the zone file and overrides the RANGE options
# for the analog control channels.
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z4:ALL3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(3,4) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:UB3:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z4:UB3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z4:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:UB3.PROC")
}
record(ai, "KM36:TST:LS:Z4:UB3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z4:UB3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:P3:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z4:P3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z4:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:P3.PROC")
}
record(ai, "KM36:TST:LS:Z4:P3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z4:P3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:I3:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z4:I3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z4:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:I3.PROC")
}
record(ai, "KM36:TST:LS:Z4:I3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z4:I3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:D3:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z4:D3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z4:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:D3.PROC")
}
record(ai, "KM36:TST:LS:Z4:D3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z4:D3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:MOUT3:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z4:MOUT3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z4:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:MOUT3.PROC")
}
record(ai, "KM36:TST:LS:Z4:MOUT3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z4:MOUT3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:RANGE3:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z4:RANGE3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z4:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:RANGE3.PROC")
}
record(mbbi, "KM36:TST:LS:Z4:RANGE3") {
field(INP, "KM36:TST:LS:Z4:RANGE3:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z4:INPUT3:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z4:INPUT3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z4:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:INPUT3.PROC")
}
record(mbbi, "KM36:TST:LS:Z4:INPUT3") {
field(INP, "KM36:TST:LS:Z4:INPUT3:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z4:RATE3:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z4:RATE3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z4:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:RATE3.PROC")
}
record(ai, "KM36:TST:LS:Z4:RATE3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z4:RATE3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:INITCALC3.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z4:INITCALC3") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z4:INITUB3.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITUB3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z4:UB3.VAL")
field(OUTA, "KM36:TST:LS:Z4:UB_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z4:INITP3.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITP3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z4:P3.VAL")
field(OUTA, "KM36:TST:LS:Z4:P_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z4:INITI3.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITI3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z4:I3.VAL")
field(OUTA, "KM36:TST:LS:Z4:I_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z4:INITD3.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITD3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z4:D3.VAL")
field(OUTA, "KM36:TST:LS:Z4:D_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z4:INITMOUT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITMOUT3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z4:MOUT3.VAL")
field(OUTA, "KM36:TST:LS:Z4:MOUT_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z4:INITRANGE3.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITRANGE3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z4:RANGE3.VAL")
field(OUTA, "KM36:TST:LS:Z4:RANGE_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z4:INITINPUT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITINPUT3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z4:INPUT3.VAL")
field(OUTA, "KM36:TST:LS:Z4:INPUT_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z4:INITRATE3.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITRATE3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z4:RATE3.VAL")
field(OUTA, "KM36:TST:LS:Z4:RATE_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z4:INITCOUNT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITCOUNT3") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z4:INITCALC3.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z4:UB_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z4:P_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z4:I_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z4:D_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z4:MOUT_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z4:RANGE_S3") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z4:INPUT_S3") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z4:RATE_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z4:SET3") {
field(INPA, "KM36:TST:LS:Z4:UB_S3")
field(INPB, "KM36:TST:LS:Z4:P_S3")
field(INPC, "KM36:TST:LS:Z4:I_S3")
field(INPD, "KM36:TST:LS:Z4:D_S3")
field(INPE, "KM36:TST:LS:Z4:MOUT_S3")
field(INPF, "KM36:TST:LS:Z4:RANGE_S3")
field(INPG, "KM36:TST:LS:Z4:INPUT_S3")
field(INPH, "KM36:TST:LS:Z4:RATE_S3")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(3,4) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z4:ALL3.PROC")
}
record(mbbi, "KM36:TST:LS:Z4:RANGE3") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
record(mbbo, "KM36:TST:LS:Z4:RANGE_S3") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
# This just includes the zone file and overrides the RANGE options
# for the analog control channels.
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z5:ALL3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(3,5) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:UB3:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z5:UB3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z5:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:UB3.PROC")
}
record(ai, "KM36:TST:LS:Z5:UB3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z5:UB3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:P3:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z5:P3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z5:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:P3.PROC")
}
record(ai, "KM36:TST:LS:Z5:P3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z5:P3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:I3:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z5:I3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z5:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:I3.PROC")
}
record(ai, "KM36:TST:LS:Z5:I3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z5:I3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:D3:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z5:D3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z5:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:D3.PROC")
}
record(ai, "KM36:TST:LS:Z5:D3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z5:D3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:MOUT3:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z5:MOUT3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z5:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:MOUT3.PROC")
}
record(ai, "KM36:TST:LS:Z5:MOUT3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z5:MOUT3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:RANGE3:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z5:RANGE3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z5:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:RANGE3.PROC")
}
record(mbbi, "KM36:TST:LS:Z5:RANGE3") {
field(INP, "KM36:TST:LS:Z5:RANGE3:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z5:INPUT3:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z5:INPUT3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z5:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:INPUT3.PROC")
}
record(mbbi, "KM36:TST:LS:Z5:INPUT3") {
field(INP, "KM36:TST:LS:Z5:INPUT3:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z5:RATE3:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z5:RATE3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z5:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:RATE3.PROC")
}
record(ai, "KM36:TST:LS:Z5:RATE3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z5:RATE3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:INITCALC3.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z5:INITCALC3") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z5:INITUB3.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITUB3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z5:UB3.VAL")
field(OUTA, "KM36:TST:LS:Z5:UB_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z5:INITP3.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITP3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z5:P3.VAL")
field(OUTA, "KM36:TST:LS:Z5:P_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z5:INITI3.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITI3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z5:I3.VAL")
field(OUTA, "KM36:TST:LS:Z5:I_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z5:INITD3.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITD3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z5:D3.VAL")
field(OUTA, "KM36:TST:LS:Z5:D_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z5:INITMOUT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITMOUT3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z5:MOUT3.VAL")
field(OUTA, "KM36:TST:LS:Z5:MOUT_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z5:INITRANGE3.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITRANGE3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z5:RANGE3.VAL")
field(OUTA, "KM36:TST:LS:Z5:RANGE_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z5:INITINPUT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITINPUT3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z5:INPUT3.VAL")
field(OUTA, "KM36:TST:LS:Z5:INPUT_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z5:INITRATE3.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITRATE3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z5:RATE3.VAL")
field(OUTA, "KM36:TST:LS:Z5:RATE_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z5:INITCOUNT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITCOUNT3") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z5:INITCALC3.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z5:UB_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z5:P_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z5:I_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z5:D_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z5:MOUT_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z5:RANGE_S3") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z5:INPUT_S3") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z5:RATE_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z5:SET3") {
field(INPA, "KM36:TST:LS:Z5:UB_S3")
field(INPB, "KM36:TST:LS:Z5:P_S3")
field(INPC, "KM36:TST:LS:Z5:I_S3")
field(INPD, "KM36:TST:LS:Z5:D_S3")
field(INPE, "KM36:TST:LS:Z5:MOUT_S3")
field(INPF, "KM36:TST:LS:Z5:RANGE_S3")
field(INPG, "KM36:TST:LS:Z5:INPUT_S3")
field(INPH, "KM36:TST:LS:Z5:RATE_S3")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(3,5) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z5:ALL3.PROC")
}
record(mbbi, "KM36:TST:LS:Z5:RANGE3") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
record(mbbo, "KM36:TST:LS:Z5:RANGE_S3") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
# This just includes the zone file and overrides the RANGE options
# for the analog control channels.
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z6:ALL3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(3,6) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:UB3:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z6:UB3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z6:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:UB3.PROC")
}
record(ai, "KM36:TST:LS:Z6:UB3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z6:UB3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:P3:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z6:P3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z6:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:P3.PROC")
}
record(ai, "KM36:TST:LS:Z6:P3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z6:P3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:I3:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z6:I3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z6:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:I3.PROC")
}
record(ai, "KM36:TST:LS:Z6:I3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z6:I3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:D3:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z6:D3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z6:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:D3.PROC")
}
record(ai, "KM36:TST:LS:Z6:D3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z6:D3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:MOUT3:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z6:MOUT3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z6:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:MOUT3.PROC")
}
record(ai, "KM36:TST:LS:Z6:MOUT3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z6:MOUT3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:RANGE3:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z6:RANGE3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z6:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:RANGE3.PROC")
}
record(mbbi, "KM36:TST:LS:Z6:RANGE3") {
field(INP, "KM36:TST:LS:Z6:RANGE3:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z6:INPUT3:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z6:INPUT3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z6:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:INPUT3.PROC")
}
record(mbbi, "KM36:TST:LS:Z6:INPUT3") {
field(INP, "KM36:TST:LS:Z6:INPUT3:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z6:RATE3:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z6:RATE3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z6:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:RATE3.PROC")
}
record(ai, "KM36:TST:LS:Z6:RATE3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z6:RATE3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:INITCALC3.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z6:INITCALC3") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z6:INITUB3.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITUB3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z6:UB3.VAL")
field(OUTA, "KM36:TST:LS:Z6:UB_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z6:INITP3.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITP3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z6:P3.VAL")
field(OUTA, "KM36:TST:LS:Z6:P_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z6:INITI3.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITI3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z6:I3.VAL")
field(OUTA, "KM36:TST:LS:Z6:I_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z6:INITD3.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITD3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z6:D3.VAL")
field(OUTA, "KM36:TST:LS:Z6:D_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z6:INITMOUT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITMOUT3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z6:MOUT3.VAL")
field(OUTA, "KM36:TST:LS:Z6:MOUT_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z6:INITRANGE3.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITRANGE3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z6:RANGE3.VAL")
field(OUTA, "KM36:TST:LS:Z6:RANGE_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z6:INITINPUT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITINPUT3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z6:INPUT3.VAL")
field(OUTA, "KM36:TST:LS:Z6:INPUT_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z6:INITRATE3.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITRATE3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z6:RATE3.VAL")
field(OUTA, "KM36:TST:LS:Z6:RATE_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z6:INITCOUNT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITCOUNT3") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z6:INITCALC3.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z6:UB_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z6:P_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z6:I_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z6:D_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z6:MOUT_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z6:RANGE_S3") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z6:INPUT_S3") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z6:RATE_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z6:SET3") {
field(INPA, "KM36:TST:LS:Z6:UB_S3")
field(INPB, "KM36:TST:LS:Z6:P_S3")
field(INPC, "KM36:TST:LS:Z6:I_S3")
field(INPD, "KM36:TST:LS:Z6:D_S3")
field(INPE, "KM36:TST:LS:Z6:MOUT_S3")
field(INPF, "KM36:TST:LS:Z6:RANGE_S3")
field(INPG, "KM36:TST:LS:Z6:INPUT_S3")
field(INPH, "KM36:TST:LS:Z6:RATE_S3")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(3,6) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z6:ALL3.PROC")
}
record(mbbi, "KM36:TST:LS:Z6:RANGE3") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
record(mbbo, "KM36:TST:LS:Z6:RANGE_S3") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
# This just includes the zone file and overrides the RANGE options
# for the analog control channels.
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z7:ALL3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(3,7) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:UB3:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z7:UB3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z7:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:UB3.PROC")
}
record(ai, "KM36:TST:LS:Z7:UB3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z7:UB3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:P3:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z7:P3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z7:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:P3.PROC")
}
record(ai, "KM36:TST:LS:Z7:P3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z7:P3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:I3:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z7:I3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z7:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:I3.PROC")
}
record(ai, "KM36:TST:LS:Z7:I3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z7:I3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:D3:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z7:D3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z7:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:D3.PROC")
}
record(ai, "KM36:TST:LS:Z7:D3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z7:D3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:MOUT3:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z7:MOUT3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z7:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:MOUT3.PROC")
}
record(ai, "KM36:TST:LS:Z7:MOUT3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z7:MOUT3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:RANGE3:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z7:RANGE3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z7:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:RANGE3.PROC")
}
record(mbbi, "KM36:TST:LS:Z7:RANGE3") {
field(INP, "KM36:TST:LS:Z7:RANGE3:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z7:INPUT3:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z7:INPUT3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z7:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:INPUT3.PROC")
}
record(mbbi, "KM36:TST:LS:Z7:INPUT3") {
field(INP, "KM36:TST:LS:Z7:INPUT3:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z7:RATE3:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z7:RATE3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z7:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:RATE3.PROC")
}
record(ai, "KM36:TST:LS:Z7:RATE3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z7:RATE3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:INITCALC3.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z7:INITCALC3") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z7:INITUB3.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITUB3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z7:UB3.VAL")
field(OUTA, "KM36:TST:LS:Z7:UB_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z7:INITP3.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITP3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z7:P3.VAL")
field(OUTA, "KM36:TST:LS:Z7:P_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z7:INITI3.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITI3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z7:I3.VAL")
field(OUTA, "KM36:TST:LS:Z7:I_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z7:INITD3.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITD3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z7:D3.VAL")
field(OUTA, "KM36:TST:LS:Z7:D_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z7:INITMOUT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITMOUT3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z7:MOUT3.VAL")
field(OUTA, "KM36:TST:LS:Z7:MOUT_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z7:INITRANGE3.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITRANGE3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z7:RANGE3.VAL")
field(OUTA, "KM36:TST:LS:Z7:RANGE_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z7:INITINPUT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITINPUT3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z7:INPUT3.VAL")
field(OUTA, "KM36:TST:LS:Z7:INPUT_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z7:INITRATE3.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITRATE3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z7:RATE3.VAL")
field(OUTA, "KM36:TST:LS:Z7:RATE_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z7:INITCOUNT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITCOUNT3") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z7:INITCALC3.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z7:UB_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z7:P_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z7:I_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z7:D_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z7:MOUT_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z7:RANGE_S3") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z7:INPUT_S3") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z7:RATE_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z7:SET3") {
field(INPA, "KM36:TST:LS:Z7:UB_S3")
field(INPB, "KM36:TST:LS:Z7:P_S3")
field(INPC, "KM36:TST:LS:Z7:I_S3")
field(INPD, "KM36:TST:LS:Z7:D_S3")
field(INPE, "KM36:TST:LS:Z7:MOUT_S3")
field(INPF, "KM36:TST:LS:Z7:RANGE_S3")
field(INPG, "KM36:TST:LS:Z7:INPUT_S3")
field(INPH, "KM36:TST:LS:Z7:RATE_S3")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(3,7) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z7:ALL3.PROC")
}
record(mbbi, "KM36:TST:LS:Z7:RANGE3") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
record(mbbo, "KM36:TST:LS:Z7:RANGE_S3") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
# This just includes the zone file and overrides the RANGE options
# for the analog control channels.
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z8:ALL3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(3,8) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:UB3:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z8:UB3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z8:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:UB3.PROC")
}
record(ai, "KM36:TST:LS:Z8:UB3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z8:UB3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:P3:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z8:P3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z8:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:P3.PROC")
}
record(ai, "KM36:TST:LS:Z8:P3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z8:P3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:I3:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z8:I3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z8:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:I3.PROC")
}
record(ai, "KM36:TST:LS:Z8:I3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z8:I3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:D3:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z8:D3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z8:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:D3.PROC")
}
record(ai, "KM36:TST:LS:Z8:D3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z8:D3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:MOUT3:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z8:MOUT3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z8:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:MOUT3.PROC")
}
record(ai, "KM36:TST:LS:Z8:MOUT3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z8:MOUT3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:RANGE3:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z8:RANGE3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z8:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:RANGE3.PROC")
}
record(mbbi, "KM36:TST:LS:Z8:RANGE3") {
field(INP, "KM36:TST:LS:Z8:RANGE3:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z8:INPUT3:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z8:INPUT3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z8:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:INPUT3.PROC")
}
record(mbbi, "KM36:TST:LS:Z8:INPUT3") {
field(INP, "KM36:TST:LS:Z8:INPUT3:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z8:RATE3:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z8:RATE3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z8:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:RATE3.PROC")
}
record(ai, "KM36:TST:LS:Z8:RATE3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z8:RATE3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:INITCALC3.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z8:INITCALC3") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z8:INITUB3.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITUB3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z8:UB3.VAL")
field(OUTA, "KM36:TST:LS:Z8:UB_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z8:INITP3.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITP3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z8:P3.VAL")
field(OUTA, "KM36:TST:LS:Z8:P_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z8:INITI3.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITI3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z8:I3.VAL")
field(OUTA, "KM36:TST:LS:Z8:I_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z8:INITD3.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITD3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z8:D3.VAL")
field(OUTA, "KM36:TST:LS:Z8:D_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z8:INITMOUT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITMOUT3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z8:MOUT3.VAL")
field(OUTA, "KM36:TST:LS:Z8:MOUT_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z8:INITRANGE3.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITRANGE3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z8:RANGE3.VAL")
field(OUTA, "KM36:TST:LS:Z8:RANGE_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z8:INITINPUT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITINPUT3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z8:INPUT3.VAL")
field(OUTA, "KM36:TST:LS:Z8:INPUT_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z8:INITRATE3.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITRATE3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z8:RATE3.VAL")
field(OUTA, "KM36:TST:LS:Z8:RATE_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z8:INITCOUNT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITCOUNT3") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z8:INITCALC3.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z8:UB_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z8:P_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z8:I_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z8:D_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z8:MOUT_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z8:RANGE_S3") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z8:INPUT_S3") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z8:RATE_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z8:SET3") {
field(INPA, "KM36:TST:LS:Z8:UB_S3")
field(INPB, "KM36:TST:LS:Z8:P_S3")
field(INPC, "KM36:TST:LS:Z8:I_S3")
field(INPD, "KM36:TST:LS:Z8:D_S3")
field(INPE, "KM36:TST:LS:Z8:MOUT_S3")
field(INPF, "KM36:TST:LS:Z8:RANGE_S3")
field(INPG, "KM36:TST:LS:Z8:INPUT_S3")
field(INPH, "KM36:TST:LS:Z8:RATE_S3")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(3,8) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z8:ALL3.PROC")
}
record(mbbi, "KM36:TST:LS:Z8:RANGE3") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
record(mbbo, "KM36:TST:LS:Z8:RANGE_S3") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
# This just includes the zone file and overrides the RANGE options
# for the analog control channels.
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z9:ALL3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(3,9) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:UB3:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z9:UB3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z9:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:UB3.PROC")
}
record(ai, "KM36:TST:LS:Z9:UB3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z9:UB3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:P3:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z9:P3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z9:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:P3.PROC")
}
record(ai, "KM36:TST:LS:Z9:P3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z9:P3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:I3:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z9:I3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z9:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:I3.PROC")
}
record(ai, "KM36:TST:LS:Z9:I3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z9:I3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:D3:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z9:D3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z9:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:D3.PROC")
}
record(ai, "KM36:TST:LS:Z9:D3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z9:D3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:MOUT3:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z9:MOUT3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z9:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:MOUT3.PROC")
}
record(ai, "KM36:TST:LS:Z9:MOUT3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z9:MOUT3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:RANGE3:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z9:RANGE3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z9:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:RANGE3.PROC")
}
record(mbbi, "KM36:TST:LS:Z9:RANGE3") {
field(INP, "KM36:TST:LS:Z9:RANGE3:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z9:INPUT3:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z9:INPUT3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z9:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:INPUT3.PROC")
}
record(mbbi, "KM36:TST:LS:Z9:INPUT3") {
field(INP, "KM36:TST:LS:Z9:INPUT3:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z9:RATE3:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z9:RATE3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z9:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:RATE3.PROC")
}
record(ai, "KM36:TST:LS:Z9:RATE3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z9:RATE3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:INITCALC3.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z9:INITCALC3") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z9:INITUB3.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITUB3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z9:UB3.VAL")
field(OUTA, "KM36:TST:LS:Z9:UB_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z9:INITP3.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITP3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z9:P3.VAL")
field(OUTA, "KM36:TST:LS:Z9:P_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z9:INITI3.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITI3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z9:I3.VAL")
field(OUTA, "KM36:TST:LS:Z9:I_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z9:INITD3.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITD3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z9:D3.VAL")
field(OUTA, "KM36:TST:LS:Z9:D_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z9:INITMOUT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITMOUT3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z9:MOUT3.VAL")
field(OUTA, "KM36:TST:LS:Z9:MOUT_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z9:INITRANGE3.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITRANGE3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z9:RANGE3.VAL")
field(OUTA, "KM36:TST:LS:Z9:RANGE_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z9:INITINPUT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITINPUT3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z9:INPUT3.VAL")
field(OUTA, "KM36:TST:LS:Z9:INPUT_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z9:INITRATE3.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITRATE3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z9:RATE3.VAL")
field(OUTA, "KM36:TST:LS:Z9:RATE_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z9:INITCOUNT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITCOUNT3") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z9:INITCALC3.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z9:UB_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z9:P_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z9:I_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z9:D_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z9:MOUT_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z9:RANGE_S3") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z9:INPUT_S3") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z9:RATE_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z9:SET3") {
field(INPA, "KM36:TST:LS:Z9:UB_S3")
field(INPB, "KM36:TST:LS:Z9:P_S3")
field(INPC, "KM36:TST:LS:Z9:I_S3")
field(INPD, "KM36:TST:LS:Z9:D_S3")
field(INPE, "KM36:TST:LS:Z9:MOUT_S3")
field(INPF, "KM36:TST:LS:Z9:RANGE_S3")
field(INPG, "KM36:TST:LS:Z9:INPUT_S3")
field(INPH, "KM36:TST:LS:Z9:RATE_S3")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(3,9) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z9:ALL3.PROC")
}
record(mbbi, "KM36:TST:LS:Z9:RANGE3") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
record(mbbo, "KM36:TST:LS:Z9:RANGE_S3") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
# This just includes the zone file and overrides the RANGE options
# for the analog control channels.
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z10:ALL3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(3,10) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:UB3:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z10:UB3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:UB3.PROC")
}
record(ai, "KM36:TST:LS:Z10:UB3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:UB3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:P3:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z10:P3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:P3.PROC")
}
record(ai, "KM36:TST:LS:Z10:P3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:P3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:I3:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z10:I3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:I3.PROC")
}
record(ai, "KM36:TST:LS:Z10:I3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:I3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:D3:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z10:D3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:D3.PROC")
}
record(ai, "KM36:TST:LS:Z10:D3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:D3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:MOUT3:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z10:MOUT3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:MOUT3.PROC")
}
record(ai, "KM36:TST:LS:Z10:MOUT3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:MOUT3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:RANGE3:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z10:RANGE3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:RANGE3.PROC")
}
record(mbbi, "KM36:TST:LS:Z10:RANGE3") {
field(INP, "KM36:TST:LS:Z10:RANGE3:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z10:INPUT3:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z10:INPUT3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:INPUT3.PROC")
}
record(mbbi, "KM36:TST:LS:Z10:INPUT3") {
field(INP, "KM36:TST:LS:Z10:INPUT3:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z10:RATE3:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z10:RATE3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:RATE3.PROC")
}
record(ai, "KM36:TST:LS:Z10:RATE3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:RATE3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:INITCALC3.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z10:INITCALC3") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z10:INITUB3.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITUB3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:UB3.VAL")
field(OUTA, "KM36:TST:LS:Z10:UB_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITP3.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITP3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:P3.VAL")
field(OUTA, "KM36:TST:LS:Z10:P_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITI3.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITI3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:I3.VAL")
field(OUTA, "KM36:TST:LS:Z10:I_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITD3.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITD3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:D3.VAL")
field(OUTA, "KM36:TST:LS:Z10:D_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITMOUT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITMOUT3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:MOUT3.VAL")
field(OUTA, "KM36:TST:LS:Z10:MOUT_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITRANGE3.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITRANGE3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:RANGE3.VAL")
field(OUTA, "KM36:TST:LS:Z10:RANGE_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITINPUT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITINPUT3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:INPUT3.VAL")
field(OUTA, "KM36:TST:LS:Z10:INPUT_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITRATE3.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITRATE3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:RATE3.VAL")
field(OUTA, "KM36:TST:LS:Z10:RATE_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITCOUNT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITCOUNT3") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z10:INITCALC3.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z10:UB_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z10:P_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z10:I_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z10:D_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z10:MOUT_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z10:RANGE_S3") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z10:INPUT_S3") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z10:RATE_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z10:SET3") {
field(INPA, "KM36:TST:LS:Z10:UB_S3")
field(INPB, "KM36:TST:LS:Z10:P_S3")
field(INPC, "KM36:TST:LS:Z10:I_S3")
field(INPD, "KM36:TST:LS:Z10:D_S3")
field(INPE, "KM36:TST:LS:Z10:MOUT_S3")
field(INPF, "KM36:TST:LS:Z10:RANGE_S3")
field(INPG, "KM36:TST:LS:Z10:INPUT_S3")
field(INPH, "KM36:TST:LS:Z10:RATE_S3")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(3,10) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z10:ALL3.PROC")
}
record(mbbi, "KM36:TST:LS:Z10:RANGE3") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
record(mbbo, "KM36:TST:LS:Z10:RANGE_S3") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
# This is included in lakeshore336.template
# This template is for the common functionality shared by all 4 outputs.
#
# There is some logic in this database to provide put_callback functionality
# for setting the temperature and waiting for it to be in range. The input
# sensor PV name used for the in-window calculation changes depending on
# the input sensor selected. In order for this to work it requires the following
# macros:
#
# INPUTA - Sensor 1 PV name
# INPUTB - Sensor 2 PV name
# INPUTC - Sensor 3 PV name
# INPUTD - Sensor 4 PV name
# INPUTD2 - Sensor D2 PV name
# INPUTD3 - Sensor D3 PV name
# INPUTD4 - Sensor D4 PV name
# INPUTD5 - Sensor D5 PV name
# TOLERANCE (optional - defaults to 1)
#
# The input link names must fit into a stringout record for this to work.
# The above link names default to a dummy record.
################################################################
# Read records
################################################################
##
## Record holding the output number
##
record(stringout, "KM36:TST:LS:OUTPUT4") {
field(DTYP, "Soft Channel")
field(VAL, "4")
field(PINI, "YES")
}
##
## Read the setpoint temperature.
##
record(ai, "KM36:TST:LS:SETP4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getSETP(4) serial1 0")
field(SCAN, "1 second")
field(PREC, "3")
field(EGU, "K")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Read the setpoint limit
##
##
## Read the ramp parameter. This also populates the ramp status KM36:TST:LS:RAMPST4,
##
record(ai, "KM36:TST:LS:RAMP4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getRAMP(4,KM36:TST:LS:RAMPST4) serial1 0")
field(SCAN, "5 second")
field(PREC, "3")
field(EGU, "K/min")
}
##
## Read the ramp status parameter.
##
## 0=off
## 1=on
##
record(bi, "KM36:TST:LS:RAMPST4") {
field(DTYP, "Soft Channel")
field(ZNAM, "Off")
field(ONAM, "On")
}
##
## Read the range parameter (the heater output power range).
## This is output specific and is defined in another file.
##
record(mbbi, "KM36:TST:LS:RANGE4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(ZRVL, "0")
field(ONVL, "1")
field(TWVL, "2")
field(THVL, "3")
field(FRVL, "4")
field(FVVL, "5")
field(SCAN, "5 second")
field(INP, "@ls336.proto getRANGE(4) serial1 0")
}
##
## Read the mode to use for outmode
## This is output specific and is defined in another file.
##
record(mbbi, "KM36:TST:LS:OMMODE4") {
}
##
## Read the manual output parameter.
##
record(ai, "KM36:TST:LS:MOUT4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getMOUT(4) serial1 0")
field(SCAN, "5 second")
}
##
## Read the PID P parameter. Pass the I and D records into the protocol to read those as well.
##
record(ai, "KM36:TST:LS:P4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getPID(4,KM36:TST:LS:I4,KM36:TST:LS:D4) serial1 0")
field(SCAN, "5 second")
}
##
## Read the PID I parameter.
##
record(ai, "KM36:TST:LS:I4") {
field(DTYP, "Soft Channel")
field(SCAN, "Passive")
}
##
## Read the PID D parameter.
##
record(ai, "KM36:TST:LS:D4") {
field(DTYP, "Soft Channel")
field(SCAN, "Passive")
}
##
## Read the mode to use for outmode.
## This also populates the OMI and OMP records.
## The mbbi strings and values are defined in the output specific templates.
##
record(mbbi, "KM36:TST:LS:OMM4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(ZRVL, "0")
field(ONVL, "1")
field(TWVL, "2")
field(THVL, "3")
field(FRVL, "4")
field(FVVL, "5")
field(SCAN, "5 second")
field(INP, "@ls336.proto getOM(4,KM36:TST:LS:OMI4,KM36:TST:LS:OMP4) serial1 0")
}
##
## Read the input to use for outmode
##
record(mbbi, "KM36:TST:LS:OMI4") {
field(DTYP, "Soft Channel")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
}
##
## Read the power up mode to use for outmode
##
record(mbbi, "KM36:TST:LS:OMP4") {
field(DTYP, "Soft Channel")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "On")
field(ONVL, "1")
}
################################################################
# Write records
################################################################
##
## Set the setpoint temperature.
##
record(ao, "KM36:TST:LS:SETP_S4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(DESC, "Setpoint temperature")
field(OUT, "@ls336.proto setSETP(4) serial1 0")
field(PREC, "3")
field(FLNK, "KM36:TST:LS:SETP_S4_BUSYSET.PROC")
field(EGU, "K")
info(archive, "Monitor, 00:00:01, VAL")
}
###############################################################################
##
## A few records to support put_callback on the setpoint. We use the busy record.
## A temperature window is used. The temperature must be within
## the window, before the callback is done.
##
record(dfanout, "KM36:TST:LS:SETP_S4_BUSYSET")
{
field(VAL, "0")
field(OUTA, "KM36:TST:LS:IN_WINDOW4.VAL PP")
field(FLNK, "KM36:TST:LS:SETP_S4_BUSYSET2")
}
record(dfanout, "KM36:TST:LS:SETP_S4_BUSYSET2")
{
field(VAL, "1")
field(OUTA, "KM36:TST:LS:SETP4.PROC PP")
field(OUTB, "KM36:TST:LS:SETP_S4_BUSY PP")
field(FLNK, "KM36:TST:LS:CALC_IN_WINDOW4")
}
record(busy, "KM36:TST:LS:SETP_S4_BUSY")
{
}
record(calcout, "KM36:TST:LS:CALC_IN_WINDOW4") {
field(PINI, "YES")
field(INPA, "1")
field(INPB, "KM36:TST:LS:DUMMY4.VAL")
field(INPC, "KM36:TST:LS:SETP_S4.VAL")
field(CALC, "((B>=(C-A))&&(B<=(C+A)))?1:0")
field(OOPT, "Every Time")
field(OUT, "KM36:TST:LS:IN_WINDOW4.VAL PP")
field(DOPT, "Use CALC")
field(SCAN, "1 second")
field(PREC, "1")
info(autosaveFields, "A")
info(archive, "Monitor, 00:00:01, A B C VAL")
}
record(bo, "KM36:TST:LS:IN_WINDOW4") {
field(DESC, "Temperature In Window")
field(VAL, "0")
field(PINI, "YES")
field(OMSL, "supervisory")
field(ZNAM, "Not In Window")
field(ONAM, "In Window")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Set busy record 'done' when TIME_WINDOW4=1
##
record(calcout, "KM36:TST:LS:CALC_BUSY_DONE4") {
field(INPA, "KM36:TST:LS:IN_WINDOW4.VAL CP")
field(CALC, "(A=1)?0:1")
field(OOPT, "Every Time")
field(OUT, "KM36:TST:LS:SETP_S4_BUSY.VAL PP")
}
###############################################################################
##
## Dummy record to use for input link name default
##
record(ai, "KM36:TST:LS:DUMMY4") {
}
##
## Monitor KM36:TST:LS:OMI4 to determin which input sensor to use
## to deal with the callback. The below set of records automatically
## switch the input when the 'control input' is changed. They make
## use of the input sensor PV names passed into this template.
##
record(calcout, "KM36:TST:LS:SET_4_INPUTA") {
field(CALC, "A=1")
field(INPA, "KM36:TST:LS:OMI4.VAL CP")
field(DOPT, "Use OCAL")
field(OVAL, "1")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:SET_4_INPUTA_LINK.PROC")
}
record(stringout, "KM36:TST:LS:SET_4_INPUTA_LINK") {
field(VAL, "KM36:TST:LS:KRDG0.VAL CP")
field(OUT, "KM36:TST:LS:CALC_IN_WINDOW4.INPB CA")
}
record(calcout, "KM36:TST:LS:SET_4_INPUTB") {
field(CALC, "A=2")
field(INPA, "KM36:TST:LS:OMI4.VAL CP")
field(DOPT, "Use OCAL")
field(OVAL, "1")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:SET_4_INPUTB_LINK.PROC")
}
record(stringout, "KM36:TST:LS:SET_4_INPUTB_LINK") {
field(VAL, "KM36:TST:LS:KRDG1.VAL CP")
field(OUT, "KM36:TST:LS:CALC_IN_WINDOW4.INPB CA")
}
record(calcout, "KM36:TST:LS:SET_4_INPUTC") {
field(CALC, "A=3")
field(INPA, "KM36:TST:LS:OMI4.VAL CP")
field(DOPT, "Use OCAL")
field(OVAL, "1")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:SET_4_INPUTC_LINK.PROC")
}
record(stringout, "KM36:TST:LS:SET_4_INPUTC_LINK") {
field(VAL, "KM36:TST:LS:KRDG2.VAL CP")
field(OUT, "KM36:TST:LS:CALC_IN_WINDOW4.INPB CA")
}
record(calcout, "KM36:TST:LS:SET_4_INPUTD") {
field(CALC, "A=4")
field(INPA, "KM36:TST:LS:OMI4.VAL CP")
field(DOPT, "Use OCAL")
field(OVAL, "1")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:SET_4_INPUTD_LINK.PROC")
}
record(stringout, "KM36:TST:LS:SET_4_INPUTD_LINK") {
field(VAL, "KM36:TST:LS:KRDG3.VAL CP")
field(OUT, "KM36:TST:LS:CALC_IN_WINDOW4.INPB CA")
}
record(calcout, "KM36:TST:LS:SET_4_INPUTD2") {
field(CALC, "A=5")
field(INPA, "KM36:TST:LS:OMI4.VAL CP")
field(DOPT, "Use OCAL")
field(OVAL, "1")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:SET_4_INPUTD2_LINK.PROC")
}
record(stringout, "KM36:TST:LS:SET_4_INPUTD2_LINK") {
field(VAL, "KM36:TST:LS:KRDGD2.VAL CP")
field(OUT, "KM36:TST:LS:CALC_IN_WINDOW4.INPB CA")
}
record(calcout, "KM36:TST:LS:SET_4_INPUTD3") {
field(CALC, "A=6")
field(INPA, "KM36:TST:LS:OMI4.VAL CP")
field(DOPT, "Use OCAL")
field(OVAL, "1")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:SET_4_INPUTD3_LINK.PROC")
}
record(stringout, "KM36:TST:LS:SET_4_INPUTD3_LINK") {
field(VAL, "KM36:TST:LS:KRDGD3.VAL CP")
field(OUT, "KM36:TST:LS:CALC_IN_WINDOW4.INPB CA")
}
record(calcout, "KM36:TST:LS:SET_4_INPUTD4") {
field(CALC, "A=7")
field(INPA, "KM36:TST:LS:OMI4.VAL CP")
field(DOPT, "Use OCAL")
field(OVAL, "1")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:SET_4_INPUTD4_LINK.PROC")
}
record(stringout, "KM36:TST:LS:SET_4_INPUTD4_LINK") {
field(VAL, "KM36:TST:LS:KRDGD4.VAL CP")
field(OUT, "KM36:TST:LS:CALC_IN_WINDOW4.INPB CA")
}
record(calcout, "KM36:TST:LS:SET_4_INPUTD5") {
field(CALC, "A=8")
field(INPA, "KM36:TST:LS:OMI4.VAL CP")
field(DOPT, "Use OCAL")
field(OVAL, "1")
field(OOPT, "When Non-zero")
field(OUT, "KM36:TST:LS:SET_4_INPUTD5_LINK.PROC")
}
record(stringout, "KM36:TST:LS:SET_4_INPUTD5_LINK") {
field(VAL, "KM36:TST:LS:KRDGD5.VAL CP")
field(OUT, "KM36:TST:LS:CALC_IN_WINDOW4.INPB CA")
}
##
## Set the range parameter.
## The strings are output specific and is defined in another file.
##
record(mbbo, "KM36:TST:LS:RANGE_S4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setRANGE(4) serial1 0")
field(FLNK, "KM36:TST:LS:RANGE4.PROC CA")
}
##
## Set the ramp rate parameter.
##
## This is the desired temperate increase/decrease rate
## per second when heating/cooling.
##
## The ramp and ramp status parameters are actually one command
## for the lakeshore. Therefore one must pass into this
## record the existing/desired ramp status, as well as the
## desired ramp. This is done automatically by reading the
## PV which holds the current ramp status.
##
record(ao, "KM36:TST:LS:RAMP_S4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setRAMP(KM36:TST:LS:RAMPST4,4) serial1 0")
field(PREC, "3")
field(FLNK, "KM36:TST:LS:RAMP4.PROC CA")
field(EGU, "K/min")
}
##
## Set the ramp status parameter.
##
## 0=off
## 1=on
##
## The ramp and ramp status parameters are actually one command
## for the lakeshore. Therefore one must pass into this
## record the existing/desired ramp, as well as the
## desired ramp status. This is done automatically by reading the
## PV which holds the current ramp value.
##
record(bo, "KM36:TST:LS:RAMPST_S4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setRAMPSTATUS(KM36:TST:LS:RAMP4,4) serial1 0")
field(FLNK, "KM36:TST:LS:RAMP4.PROC CA")
field(ZNAM, "Off")
field(ONAM, "On")
}
##
## Set the manual output value.
##
record(ao, "KM36:TST:LS:MOUT_S4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setMOUT(4) serial1 0")
field(FLNK, "KM36:TST:LS:MOUT4.PROC CA")
}
##
## Set the PID P parameter.
##
record(ao, "KM36:TST:LS:P_S4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setP(4,KM36:TST:LS:I4,KM36:TST:LS:D4) serial1 0")
field(FLNK, "KM36:TST:LS:P4.PROC CA")
}
##
## Set the PID I parameter.
##
record(ao, "KM36:TST:LS:I_S4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setI(KM36:TST:LS:P4,4,KM36:TST:LS:D4) serial1 0")
field(FLNK, "KM36:TST:LS:P4.PROC CA")
}
##
## Set the PID D parameter.
##
record(ao, "KM36:TST:LS:D_S4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(OUT, "@ls336.proto setD(KM36:TST:LS:P4,KM36:TST:LS:I4,4) serial1 0")
field(FLNK, "KM36:TST:LS:P4.PROC CA")
}
##
## Set the mode to use for outmode
## The strings are output specific. This is defined in another file.
##
record(mbbo, "KM36:TST:LS:OMM_S4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(ZRVL, "0")
field(ONVL, "1")
field(TWVL, "2")
field(THVL, "3")
field(FRVL, "4")
field(FVVL, "5")
field(OUT, "@ls336.proto setOM(4,KM36:TST:LS:OMI4,KM36:TST:LS:OMP4) serial1 0")
field(FLNK, "KM36:TST:LS:OMM4.PROC CA")
}
##
## Set the input to use for outmode
##
record(mbbo, "KM36:TST:LS:OMI_S4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(OUT, "@ls336.proto setOMI(4,KM36:TST:LS:OMM4,KM36:TST:LS:OMP4) serial1 0")
field(FLNK, "KM36:TST:LS:OMM4.PROC CA")
}
##
## Set the power up mode to use for outmode
##
record(mbbo, "KM36:TST:LS:OMP_S4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "On")
field(ONVL, "1")
field(OUT, "@ls336.proto setOMP(4,KM36:TST:LS:OMM4,KM36:TST:LS:OMI4) serial1 0")
field(FLNK, "KM36:TST:LS:OMM4.PROC CA")
}
##
## Set the type of tuning mode
##
record(mbbo, "KM36:TST:LS:TUNEMODE_S4") {
field(SDIS, "KM36:TST:LS:DISABLE")
field(ZRST, "P Only")
field(ZRVL, "0")
field(ONST, "P and I")
field(ONVL, "1")
field(TWST, "P, I and D")
field(TWVL, "2")
}
##
## Start the tuning process
##
record(ao, "KM36:TST:LS:TUNESTART4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE")
field(DESC, "Start the auto tuning")
field(OUT, "@ls336.proto setATUNE(4,KM36:TST:LS:TUNEMODE_S4) serial1 0")
}
##
## Read all ZONE settings
##
record(seq, "KM36:TST:LS:Z:READ4") {
field(DESC, "Read Output 4 ZONE")
field(DOL1, "1")
field(DLY1, "0.1")
field(LNK1, "KM36:TST:LS:Z1:ALL4.PROC")
field(DOL2, "1")
field(DLY2, "0.1")
field(LNK2, "KM36:TST:LS:Z2:ALL4.PROC")
field(DOL3, "1")
field(DLY3, "0.1")
field(LNK3, "KM36:TST:LS:Z3:ALL4.PROC")
field(DOL4, "1")
field(DLY4, "0.1")
field(LNK4, "KM36:TST:LS:Z4:ALL4.PROC")
field(DOL5, "1")
field(DLY5, "0.1")
field(LNK5, "KM36:TST:LS:Z5:ALL4.PROC")
field(DOL6, "1")
field(DLY6, "0.1")
field(LNK6, "KM36:TST:LS:Z6:ALL4.PROC")
field(DOL7, "1")
field(DLY7, "0.1")
field(LNK7, "KM36:TST:LS:Z7:ALL4.PROC")
field(DOL8, "1")
field(DLY8, "0.1")
field(LNK8, "KM36:TST:LS:Z8:ALL4.PROC")
field(DOL9, "1")
field(DLY9, "0.1")
field(LNK9, "KM36:TST:LS:Z9:ALL4.PROC")
field(DOLA, "1")
field(DLYA, "0.1")
field(LNKA, "KM36:TST:LS:Z10:ALL4.PROC")
field(PINI, "YES")
}
###############################################
# This is included in lakeshore336.template
# This is for the analog outputs (3 and 4)
##
## Read the analog output value.
##
record(ai, "KM36:TST:LS:AOUT4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getAOUT(4) serial1 0")
field(SCAN, "5 second")
field(PREC, "1")
field(EGU, "%")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Define the string/values for this record.
##
record(mbbi, "KM36:TST:LS:RANGE4") {
field(ZRST, "Off")
field(ONST, "On")
}
##
## Define the strings and values for this record.
##
record(mbbi, "KM36:TST:LS:OMM4") {
field(ZRST, "Off")
field(ONST, "Closed Loop PID")
field(TWST, "Zone")
field(THST, "Open Loop")
field(FRST, "Monitor Out")
field(FVST, "Warmup Supply")
}
##
## Define the strings and values for this record.
##
record(mbbo, "KM36:TST:LS:RANGE_S4") {
field(ZRST, "Off")
field(ONST, "On")
}
##
## Define the strings and values for this record.
##
record(mbbo, "KM36:TST:LS:OMM_S4") {
field(ZRST, "Off")
field(ONST, "Closed Loop PID")
field(TWST, "Zone")
field(THST, "Open Loop")
field(FRST, "Monitor Out")
field(FVST, "Warmup Supply")
}
###############################################
# Add in ZONE support
###############################################
# This just includes the zone file and overrides the RANGE options
# for the analog control channels.
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z1:ALL4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(4,1) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:UB4:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z1:UB4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z1:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:UB4.PROC")
}
record(ai, "KM36:TST:LS:Z1:UB4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z1:UB4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:P4:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z1:P4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z1:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:P4.PROC")
}
record(ai, "KM36:TST:LS:Z1:P4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z1:P4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:I4:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z1:I4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z1:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:I4.PROC")
}
record(ai, "KM36:TST:LS:Z1:I4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z1:I4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:D4:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z1:D4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z1:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:D4.PROC")
}
record(ai, "KM36:TST:LS:Z1:D4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z1:D4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:MOUT4:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z1:MOUT4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z1:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:MOUT4.PROC")
}
record(ai, "KM36:TST:LS:Z1:MOUT4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z1:MOUT4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:RANGE4:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z1:RANGE4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z1:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:RANGE4.PROC")
}
record(mbbi, "KM36:TST:LS:Z1:RANGE4") {
field(INP, "KM36:TST:LS:Z1:RANGE4:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z1:INPUT4:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z1:INPUT4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z1:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:INPUT4.PROC")
}
record(mbbi, "KM36:TST:LS:Z1:INPUT4") {
field(INP, "KM36:TST:LS:Z1:INPUT4:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z1:RATE4:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z1:RATE4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z1:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:RATE4.PROC")
}
record(ai, "KM36:TST:LS:Z1:RATE4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z1:RATE4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z1:INITCALC4.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z1:INITCALC4") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z1:INITUB4.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITUB4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z1:UB4.VAL")
field(OUTA, "KM36:TST:LS:Z1:UB_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z1:INITP4.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITP4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z1:P4.VAL")
field(OUTA, "KM36:TST:LS:Z1:P_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z1:INITI4.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITI4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z1:I4.VAL")
field(OUTA, "KM36:TST:LS:Z1:I_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z1:INITD4.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITD4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z1:D4.VAL")
field(OUTA, "KM36:TST:LS:Z1:D_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z1:INITMOUT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITMOUT4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z1:MOUT4.VAL")
field(OUTA, "KM36:TST:LS:Z1:MOUT_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z1:INITRANGE4.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITRANGE4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z1:RANGE4.VAL")
field(OUTA, "KM36:TST:LS:Z1:RANGE_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z1:INITINPUT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITINPUT4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z1:INPUT4.VAL")
field(OUTA, "KM36:TST:LS:Z1:INPUT_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z1:INITRATE4.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITRATE4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z1:RATE4.VAL")
field(OUTA, "KM36:TST:LS:Z1:RATE_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z1:INITCOUNT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z1:INITCOUNT4") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z1:INITCALC4.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z1:UB_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z1:P_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z1:I_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z1:D_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z1:MOUT_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z1:RANGE_S4") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z1:INPUT_S4") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z1:RATE_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z1:SET4") {
field(INPA, "KM36:TST:LS:Z1:UB_S4")
field(INPB, "KM36:TST:LS:Z1:P_S4")
field(INPC, "KM36:TST:LS:Z1:I_S4")
field(INPD, "KM36:TST:LS:Z1:D_S4")
field(INPE, "KM36:TST:LS:Z1:MOUT_S4")
field(INPF, "KM36:TST:LS:Z1:RANGE_S4")
field(INPG, "KM36:TST:LS:Z1:INPUT_S4")
field(INPH, "KM36:TST:LS:Z1:RATE_S4")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(4,1) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z1:ALL4.PROC")
}
record(mbbi, "KM36:TST:LS:Z1:RANGE4") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
record(mbbo, "KM36:TST:LS:Z1:RANGE_S4") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
# This just includes the zone file and overrides the RANGE options
# for the analog control channels.
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z2:ALL4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(4,2) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:UB4:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z2:UB4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:UB4.PROC")
}
record(ai, "KM36:TST:LS:Z2:UB4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:UB4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:P4:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z2:P4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:P4.PROC")
}
record(ai, "KM36:TST:LS:Z2:P4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:P4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:I4:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z2:I4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:I4.PROC")
}
record(ai, "KM36:TST:LS:Z2:I4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:I4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:D4:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z2:D4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:D4.PROC")
}
record(ai, "KM36:TST:LS:Z2:D4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:D4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:MOUT4:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z2:MOUT4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:MOUT4.PROC")
}
record(ai, "KM36:TST:LS:Z2:MOUT4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:MOUT4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:RANGE4:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z2:RANGE4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:RANGE4.PROC")
}
record(mbbi, "KM36:TST:LS:Z2:RANGE4") {
field(INP, "KM36:TST:LS:Z2:RANGE4:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z2:INPUT4:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z2:INPUT4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:INPUT4.PROC")
}
record(mbbi, "KM36:TST:LS:Z2:INPUT4") {
field(INP, "KM36:TST:LS:Z2:INPUT4:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z2:RATE4:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z2:RATE4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:RATE4.PROC")
}
record(ai, "KM36:TST:LS:Z2:RATE4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:RATE4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:INITCALC4.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z2:INITCALC4") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z2:INITUB4.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITUB4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:UB4.VAL")
field(OUTA, "KM36:TST:LS:Z2:UB_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITP4.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITP4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:P4.VAL")
field(OUTA, "KM36:TST:LS:Z2:P_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITI4.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITI4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:I4.VAL")
field(OUTA, "KM36:TST:LS:Z2:I_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITD4.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITD4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:D4.VAL")
field(OUTA, "KM36:TST:LS:Z2:D_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITMOUT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITMOUT4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:MOUT4.VAL")
field(OUTA, "KM36:TST:LS:Z2:MOUT_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITRANGE4.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITRANGE4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:RANGE4.VAL")
field(OUTA, "KM36:TST:LS:Z2:RANGE_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITINPUT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITINPUT4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:INPUT4.VAL")
field(OUTA, "KM36:TST:LS:Z2:INPUT_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITRATE4.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITRATE4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:RATE4.VAL")
field(OUTA, "KM36:TST:LS:Z2:RATE_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITCOUNT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITCOUNT4") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z2:INITCALC4.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z2:UB_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z2:P_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z2:I_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z2:D_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z2:MOUT_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z2:RANGE_S4") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z2:INPUT_S4") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z2:RATE_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z2:SET4") {
field(INPA, "KM36:TST:LS:Z2:UB_S4")
field(INPB, "KM36:TST:LS:Z2:P_S4")
field(INPC, "KM36:TST:LS:Z2:I_S4")
field(INPD, "KM36:TST:LS:Z2:D_S4")
field(INPE, "KM36:TST:LS:Z2:MOUT_S4")
field(INPF, "KM36:TST:LS:Z2:RANGE_S4")
field(INPG, "KM36:TST:LS:Z2:INPUT_S4")
field(INPH, "KM36:TST:LS:Z2:RATE_S4")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(4,2) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z2:ALL4.PROC")
}
record(mbbi, "KM36:TST:LS:Z2:RANGE4") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
record(mbbo, "KM36:TST:LS:Z2:RANGE_S4") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
# This just includes the zone file and overrides the RANGE options
# for the analog control channels.
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z2:ALL4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(4,2) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:UB4:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z2:UB4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:UB4.PROC")
}
record(ai, "KM36:TST:LS:Z2:UB4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:UB4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:P4:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z2:P4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:P4.PROC")
}
record(ai, "KM36:TST:LS:Z2:P4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:P4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:I4:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z2:I4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:I4.PROC")
}
record(ai, "KM36:TST:LS:Z2:I4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:I4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:D4:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z2:D4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:D4.PROC")
}
record(ai, "KM36:TST:LS:Z2:D4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:D4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:MOUT4:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z2:MOUT4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:MOUT4.PROC")
}
record(ai, "KM36:TST:LS:Z2:MOUT4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:MOUT4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:RANGE4:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z2:RANGE4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:RANGE4.PROC")
}
record(mbbi, "KM36:TST:LS:Z2:RANGE4") {
field(INP, "KM36:TST:LS:Z2:RANGE4:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z2:INPUT4:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z2:INPUT4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:INPUT4.PROC")
}
record(mbbi, "KM36:TST:LS:Z2:INPUT4") {
field(INP, "KM36:TST:LS:Z2:INPUT4:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z2:RATE4:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z2:RATE4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z2:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:RATE4.PROC")
}
record(ai, "KM36:TST:LS:Z2:RATE4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z2:RATE4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z2:INITCALC4.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z2:INITCALC4") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z2:INITUB4.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITUB4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:UB4.VAL")
field(OUTA, "KM36:TST:LS:Z2:UB_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITP4.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITP4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:P4.VAL")
field(OUTA, "KM36:TST:LS:Z2:P_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITI4.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITI4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:I4.VAL")
field(OUTA, "KM36:TST:LS:Z2:I_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITD4.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITD4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:D4.VAL")
field(OUTA, "KM36:TST:LS:Z2:D_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITMOUT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITMOUT4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:MOUT4.VAL")
field(OUTA, "KM36:TST:LS:Z2:MOUT_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITRANGE4.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITRANGE4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:RANGE4.VAL")
field(OUTA, "KM36:TST:LS:Z2:RANGE_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITINPUT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITINPUT4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:INPUT4.VAL")
field(OUTA, "KM36:TST:LS:Z2:INPUT_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITRATE4.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITRATE4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z2:RATE4.VAL")
field(OUTA, "KM36:TST:LS:Z2:RATE_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z2:INITCOUNT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z2:INITCOUNT4") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z2:INITCALC4.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z2:UB_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z2:P_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z2:I_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z2:D_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z2:MOUT_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z2:RANGE_S4") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z2:INPUT_S4") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z2:RATE_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z2:SET4") {
field(INPA, "KM36:TST:LS:Z2:UB_S4")
field(INPB, "KM36:TST:LS:Z2:P_S4")
field(INPC, "KM36:TST:LS:Z2:I_S4")
field(INPD, "KM36:TST:LS:Z2:D_S4")
field(INPE, "KM36:TST:LS:Z2:MOUT_S4")
field(INPF, "KM36:TST:LS:Z2:RANGE_S4")
field(INPG, "KM36:TST:LS:Z2:INPUT_S4")
field(INPH, "KM36:TST:LS:Z2:RATE_S4")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(4,2) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z2:ALL4.PROC")
}
record(mbbi, "KM36:TST:LS:Z2:RANGE4") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
record(mbbo, "KM36:TST:LS:Z2:RANGE_S4") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
# This just includes the zone file and overrides the RANGE options
# for the analog control channels.
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z3:ALL4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(4,3) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:UB4:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z3:UB4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z3:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:UB4.PROC")
}
record(ai, "KM36:TST:LS:Z3:UB4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z3:UB4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:P4:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z3:P4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z3:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:P4.PROC")
}
record(ai, "KM36:TST:LS:Z3:P4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z3:P4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:I4:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z3:I4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z3:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:I4.PROC")
}
record(ai, "KM36:TST:LS:Z3:I4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z3:I4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:D4:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z3:D4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z3:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:D4.PROC")
}
record(ai, "KM36:TST:LS:Z3:D4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z3:D4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:MOUT4:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z3:MOUT4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z3:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:MOUT4.PROC")
}
record(ai, "KM36:TST:LS:Z3:MOUT4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z3:MOUT4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:RANGE4:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z3:RANGE4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z3:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:RANGE4.PROC")
}
record(mbbi, "KM36:TST:LS:Z3:RANGE4") {
field(INP, "KM36:TST:LS:Z3:RANGE4:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z3:INPUT4:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z3:INPUT4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z3:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:INPUT4.PROC")
}
record(mbbi, "KM36:TST:LS:Z3:INPUT4") {
field(INP, "KM36:TST:LS:Z3:INPUT4:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z3:RATE4:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z3:RATE4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z3:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:RATE4.PROC")
}
record(ai, "KM36:TST:LS:Z3:RATE4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z3:RATE4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z3:INITCALC4.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z3:INITCALC4") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z3:INITUB4.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITUB4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z3:UB4.VAL")
field(OUTA, "KM36:TST:LS:Z3:UB_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z3:INITP4.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITP4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z3:P4.VAL")
field(OUTA, "KM36:TST:LS:Z3:P_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z3:INITI4.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITI4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z3:I4.VAL")
field(OUTA, "KM36:TST:LS:Z3:I_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z3:INITD4.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITD4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z3:D4.VAL")
field(OUTA, "KM36:TST:LS:Z3:D_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z3:INITMOUT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITMOUT4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z3:MOUT4.VAL")
field(OUTA, "KM36:TST:LS:Z3:MOUT_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z3:INITRANGE4.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITRANGE4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z3:RANGE4.VAL")
field(OUTA, "KM36:TST:LS:Z3:RANGE_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z3:INITINPUT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITINPUT4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z3:INPUT4.VAL")
field(OUTA, "KM36:TST:LS:Z3:INPUT_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z3:INITRATE4.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITRATE4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z3:RATE4.VAL")
field(OUTA, "KM36:TST:LS:Z3:RATE_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z3:INITCOUNT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z3:INITCOUNT4") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z3:INITCALC4.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z3:UB_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z3:P_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z3:I_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z3:D_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z3:MOUT_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z3:RANGE_S4") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z3:INPUT_S4") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z3:RATE_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z3:SET4") {
field(INPA, "KM36:TST:LS:Z3:UB_S4")
field(INPB, "KM36:TST:LS:Z3:P_S4")
field(INPC, "KM36:TST:LS:Z3:I_S4")
field(INPD, "KM36:TST:LS:Z3:D_S4")
field(INPE, "KM36:TST:LS:Z3:MOUT_S4")
field(INPF, "KM36:TST:LS:Z3:RANGE_S4")
field(INPG, "KM36:TST:LS:Z3:INPUT_S4")
field(INPH, "KM36:TST:LS:Z3:RATE_S4")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(4,3) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z3:ALL4.PROC")
}
record(mbbi, "KM36:TST:LS:Z3:RANGE4") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
record(mbbo, "KM36:TST:LS:Z3:RANGE_S4") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
# This just includes the zone file and overrides the RANGE options
# for the analog control channels.
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z4:ALL4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(4,4) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:UB4:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z4:UB4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z4:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:UB4.PROC")
}
record(ai, "KM36:TST:LS:Z4:UB4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z4:UB4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:P4:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z4:P4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z4:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:P4.PROC")
}
record(ai, "KM36:TST:LS:Z4:P4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z4:P4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:I4:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z4:I4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z4:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:I4.PROC")
}
record(ai, "KM36:TST:LS:Z4:I4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z4:I4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:D4:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z4:D4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z4:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:D4.PROC")
}
record(ai, "KM36:TST:LS:Z4:D4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z4:D4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:MOUT4:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z4:MOUT4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z4:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:MOUT4.PROC")
}
record(ai, "KM36:TST:LS:Z4:MOUT4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z4:MOUT4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:RANGE4:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z4:RANGE4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z4:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:RANGE4.PROC")
}
record(mbbi, "KM36:TST:LS:Z4:RANGE4") {
field(INP, "KM36:TST:LS:Z4:RANGE4:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z4:INPUT4:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z4:INPUT4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z4:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:INPUT4.PROC")
}
record(mbbi, "KM36:TST:LS:Z4:INPUT4") {
field(INP, "KM36:TST:LS:Z4:INPUT4:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z4:RATE4:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z4:RATE4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z4:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:RATE4.PROC")
}
record(ai, "KM36:TST:LS:Z4:RATE4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z4:RATE4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z4:INITCALC4.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z4:INITCALC4") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z4:INITUB4.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITUB4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z4:UB4.VAL")
field(OUTA, "KM36:TST:LS:Z4:UB_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z4:INITP4.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITP4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z4:P4.VAL")
field(OUTA, "KM36:TST:LS:Z4:P_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z4:INITI4.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITI4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z4:I4.VAL")
field(OUTA, "KM36:TST:LS:Z4:I_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z4:INITD4.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITD4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z4:D4.VAL")
field(OUTA, "KM36:TST:LS:Z4:D_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z4:INITMOUT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITMOUT4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z4:MOUT4.VAL")
field(OUTA, "KM36:TST:LS:Z4:MOUT_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z4:INITRANGE4.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITRANGE4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z4:RANGE4.VAL")
field(OUTA, "KM36:TST:LS:Z4:RANGE_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z4:INITINPUT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITINPUT4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z4:INPUT4.VAL")
field(OUTA, "KM36:TST:LS:Z4:INPUT_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z4:INITRATE4.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITRATE4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z4:RATE4.VAL")
field(OUTA, "KM36:TST:LS:Z4:RATE_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z4:INITCOUNT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z4:INITCOUNT4") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z4:INITCALC4.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z4:UB_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z4:P_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z4:I_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z4:D_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z4:MOUT_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z4:RANGE_S4") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z4:INPUT_S4") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z4:RATE_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z4:SET4") {
field(INPA, "KM36:TST:LS:Z4:UB_S4")
field(INPB, "KM36:TST:LS:Z4:P_S4")
field(INPC, "KM36:TST:LS:Z4:I_S4")
field(INPD, "KM36:TST:LS:Z4:D_S4")
field(INPE, "KM36:TST:LS:Z4:MOUT_S4")
field(INPF, "KM36:TST:LS:Z4:RANGE_S4")
field(INPG, "KM36:TST:LS:Z4:INPUT_S4")
field(INPH, "KM36:TST:LS:Z4:RATE_S4")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(4,4) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z4:ALL4.PROC")
}
record(mbbi, "KM36:TST:LS:Z4:RANGE4") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
record(mbbo, "KM36:TST:LS:Z4:RANGE_S4") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
# This just includes the zone file and overrides the RANGE options
# for the analog control channels.
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z5:ALL4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(4,5) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:UB4:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z5:UB4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z5:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:UB4.PROC")
}
record(ai, "KM36:TST:LS:Z5:UB4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z5:UB4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:P4:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z5:P4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z5:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:P4.PROC")
}
record(ai, "KM36:TST:LS:Z5:P4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z5:P4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:I4:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z5:I4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z5:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:I4.PROC")
}
record(ai, "KM36:TST:LS:Z5:I4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z5:I4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:D4:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z5:D4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z5:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:D4.PROC")
}
record(ai, "KM36:TST:LS:Z5:D4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z5:D4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:MOUT4:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z5:MOUT4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z5:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:MOUT4.PROC")
}
record(ai, "KM36:TST:LS:Z5:MOUT4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z5:MOUT4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:RANGE4:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z5:RANGE4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z5:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:RANGE4.PROC")
}
record(mbbi, "KM36:TST:LS:Z5:RANGE4") {
field(INP, "KM36:TST:LS:Z5:RANGE4:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z5:INPUT4:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z5:INPUT4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z5:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:INPUT4.PROC")
}
record(mbbi, "KM36:TST:LS:Z5:INPUT4") {
field(INP, "KM36:TST:LS:Z5:INPUT4:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z5:RATE4:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z5:RATE4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z5:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:RATE4.PROC")
}
record(ai, "KM36:TST:LS:Z5:RATE4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z5:RATE4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z5:INITCALC4.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z5:INITCALC4") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z5:INITUB4.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITUB4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z5:UB4.VAL")
field(OUTA, "KM36:TST:LS:Z5:UB_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z5:INITP4.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITP4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z5:P4.VAL")
field(OUTA, "KM36:TST:LS:Z5:P_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z5:INITI4.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITI4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z5:I4.VAL")
field(OUTA, "KM36:TST:LS:Z5:I_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z5:INITD4.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITD4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z5:D4.VAL")
field(OUTA, "KM36:TST:LS:Z5:D_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z5:INITMOUT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITMOUT4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z5:MOUT4.VAL")
field(OUTA, "KM36:TST:LS:Z5:MOUT_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z5:INITRANGE4.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITRANGE4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z5:RANGE4.VAL")
field(OUTA, "KM36:TST:LS:Z5:RANGE_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z5:INITINPUT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITINPUT4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z5:INPUT4.VAL")
field(OUTA, "KM36:TST:LS:Z5:INPUT_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z5:INITRATE4.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITRATE4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z5:RATE4.VAL")
field(OUTA, "KM36:TST:LS:Z5:RATE_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z5:INITCOUNT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z5:INITCOUNT4") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z5:INITCALC4.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z5:UB_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z5:P_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z5:I_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z5:D_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z5:MOUT_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z5:RANGE_S4") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z5:INPUT_S4") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z5:RATE_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z5:SET4") {
field(INPA, "KM36:TST:LS:Z5:UB_S4")
field(INPB, "KM36:TST:LS:Z5:P_S4")
field(INPC, "KM36:TST:LS:Z5:I_S4")
field(INPD, "KM36:TST:LS:Z5:D_S4")
field(INPE, "KM36:TST:LS:Z5:MOUT_S4")
field(INPF, "KM36:TST:LS:Z5:RANGE_S4")
field(INPG, "KM36:TST:LS:Z5:INPUT_S4")
field(INPH, "KM36:TST:LS:Z5:RATE_S4")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(4,5) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z5:ALL4.PROC")
}
record(mbbi, "KM36:TST:LS:Z5:RANGE4") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
record(mbbo, "KM36:TST:LS:Z5:RANGE_S4") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
# This just includes the zone file and overrides the RANGE options
# for the analog control channels.
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z6:ALL4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(4,6) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:UB4:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z6:UB4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z6:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:UB4.PROC")
}
record(ai, "KM36:TST:LS:Z6:UB4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z6:UB4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:P4:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z6:P4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z6:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:P4.PROC")
}
record(ai, "KM36:TST:LS:Z6:P4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z6:P4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:I4:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z6:I4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z6:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:I4.PROC")
}
record(ai, "KM36:TST:LS:Z6:I4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z6:I4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:D4:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z6:D4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z6:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:D4.PROC")
}
record(ai, "KM36:TST:LS:Z6:D4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z6:D4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:MOUT4:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z6:MOUT4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z6:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:MOUT4.PROC")
}
record(ai, "KM36:TST:LS:Z6:MOUT4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z6:MOUT4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:RANGE4:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z6:RANGE4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z6:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:RANGE4.PROC")
}
record(mbbi, "KM36:TST:LS:Z6:RANGE4") {
field(INP, "KM36:TST:LS:Z6:RANGE4:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z6:INPUT4:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z6:INPUT4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z6:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:INPUT4.PROC")
}
record(mbbi, "KM36:TST:LS:Z6:INPUT4") {
field(INP, "KM36:TST:LS:Z6:INPUT4:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z6:RATE4:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z6:RATE4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z6:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:RATE4.PROC")
}
record(ai, "KM36:TST:LS:Z6:RATE4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z6:RATE4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z6:INITCALC4.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z6:INITCALC4") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z6:INITUB4.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITUB4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z6:UB4.VAL")
field(OUTA, "KM36:TST:LS:Z6:UB_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z6:INITP4.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITP4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z6:P4.VAL")
field(OUTA, "KM36:TST:LS:Z6:P_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z6:INITI4.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITI4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z6:I4.VAL")
field(OUTA, "KM36:TST:LS:Z6:I_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z6:INITD4.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITD4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z6:D4.VAL")
field(OUTA, "KM36:TST:LS:Z6:D_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z6:INITMOUT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITMOUT4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z6:MOUT4.VAL")
field(OUTA, "KM36:TST:LS:Z6:MOUT_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z6:INITRANGE4.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITRANGE4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z6:RANGE4.VAL")
field(OUTA, "KM36:TST:LS:Z6:RANGE_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z6:INITINPUT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITINPUT4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z6:INPUT4.VAL")
field(OUTA, "KM36:TST:LS:Z6:INPUT_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z6:INITRATE4.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITRATE4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z6:RATE4.VAL")
field(OUTA, "KM36:TST:LS:Z6:RATE_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z6:INITCOUNT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z6:INITCOUNT4") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z6:INITCALC4.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z6:UB_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z6:P_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z6:I_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z6:D_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z6:MOUT_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z6:RANGE_S4") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z6:INPUT_S4") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z6:RATE_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z6:SET4") {
field(INPA, "KM36:TST:LS:Z6:UB_S4")
field(INPB, "KM36:TST:LS:Z6:P_S4")
field(INPC, "KM36:TST:LS:Z6:I_S4")
field(INPD, "KM36:TST:LS:Z6:D_S4")
field(INPE, "KM36:TST:LS:Z6:MOUT_S4")
field(INPF, "KM36:TST:LS:Z6:RANGE_S4")
field(INPG, "KM36:TST:LS:Z6:INPUT_S4")
field(INPH, "KM36:TST:LS:Z6:RATE_S4")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(4,6) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z6:ALL4.PROC")
}
record(mbbi, "KM36:TST:LS:Z6:RANGE4") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
record(mbbo, "KM36:TST:LS:Z6:RANGE_S4") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
# This just includes the zone file and overrides the RANGE options
# for the analog control channels.
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z7:ALL4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(4,7) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:UB4:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z7:UB4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z7:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:UB4.PROC")
}
record(ai, "KM36:TST:LS:Z7:UB4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z7:UB4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:P4:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z7:P4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z7:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:P4.PROC")
}
record(ai, "KM36:TST:LS:Z7:P4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z7:P4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:I4:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z7:I4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z7:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:I4.PROC")
}
record(ai, "KM36:TST:LS:Z7:I4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z7:I4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:D4:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z7:D4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z7:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:D4.PROC")
}
record(ai, "KM36:TST:LS:Z7:D4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z7:D4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:MOUT4:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z7:MOUT4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z7:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:MOUT4.PROC")
}
record(ai, "KM36:TST:LS:Z7:MOUT4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z7:MOUT4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:RANGE4:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z7:RANGE4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z7:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:RANGE4.PROC")
}
record(mbbi, "KM36:TST:LS:Z7:RANGE4") {
field(INP, "KM36:TST:LS:Z7:RANGE4:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z7:INPUT4:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z7:INPUT4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z7:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:INPUT4.PROC")
}
record(mbbi, "KM36:TST:LS:Z7:INPUT4") {
field(INP, "KM36:TST:LS:Z7:INPUT4:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z7:RATE4:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z7:RATE4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z7:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:RATE4.PROC")
}
record(ai, "KM36:TST:LS:Z7:RATE4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z7:RATE4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z7:INITCALC4.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z7:INITCALC4") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z7:INITUB4.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITUB4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z7:UB4.VAL")
field(OUTA, "KM36:TST:LS:Z7:UB_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z7:INITP4.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITP4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z7:P4.VAL")
field(OUTA, "KM36:TST:LS:Z7:P_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z7:INITI4.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITI4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z7:I4.VAL")
field(OUTA, "KM36:TST:LS:Z7:I_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z7:INITD4.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITD4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z7:D4.VAL")
field(OUTA, "KM36:TST:LS:Z7:D_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z7:INITMOUT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITMOUT4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z7:MOUT4.VAL")
field(OUTA, "KM36:TST:LS:Z7:MOUT_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z7:INITRANGE4.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITRANGE4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z7:RANGE4.VAL")
field(OUTA, "KM36:TST:LS:Z7:RANGE_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z7:INITINPUT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITINPUT4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z7:INPUT4.VAL")
field(OUTA, "KM36:TST:LS:Z7:INPUT_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z7:INITRATE4.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITRATE4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z7:RATE4.VAL")
field(OUTA, "KM36:TST:LS:Z7:RATE_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z7:INITCOUNT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z7:INITCOUNT4") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z7:INITCALC4.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z7:UB_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z7:P_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z7:I_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z7:D_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z7:MOUT_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z7:RANGE_S4") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z7:INPUT_S4") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z7:RATE_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z7:SET4") {
field(INPA, "KM36:TST:LS:Z7:UB_S4")
field(INPB, "KM36:TST:LS:Z7:P_S4")
field(INPC, "KM36:TST:LS:Z7:I_S4")
field(INPD, "KM36:TST:LS:Z7:D_S4")
field(INPE, "KM36:TST:LS:Z7:MOUT_S4")
field(INPF, "KM36:TST:LS:Z7:RANGE_S4")
field(INPG, "KM36:TST:LS:Z7:INPUT_S4")
field(INPH, "KM36:TST:LS:Z7:RATE_S4")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(4,7) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z7:ALL4.PROC")
}
record(mbbi, "KM36:TST:LS:Z7:RANGE4") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
record(mbbo, "KM36:TST:LS:Z7:RANGE_S4") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
# This just includes the zone file and overrides the RANGE options
# for the analog control channels.
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z8:ALL4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(4,8) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:UB4:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z8:UB4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z8:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:UB4.PROC")
}
record(ai, "KM36:TST:LS:Z8:UB4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z8:UB4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:P4:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z8:P4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z8:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:P4.PROC")
}
record(ai, "KM36:TST:LS:Z8:P4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z8:P4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:I4:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z8:I4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z8:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:I4.PROC")
}
record(ai, "KM36:TST:LS:Z8:I4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z8:I4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:D4:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z8:D4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z8:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:D4.PROC")
}
record(ai, "KM36:TST:LS:Z8:D4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z8:D4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:MOUT4:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z8:MOUT4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z8:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:MOUT4.PROC")
}
record(ai, "KM36:TST:LS:Z8:MOUT4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z8:MOUT4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:RANGE4:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z8:RANGE4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z8:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:RANGE4.PROC")
}
record(mbbi, "KM36:TST:LS:Z8:RANGE4") {
field(INP, "KM36:TST:LS:Z8:RANGE4:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z8:INPUT4:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z8:INPUT4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z8:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:INPUT4.PROC")
}
record(mbbi, "KM36:TST:LS:Z8:INPUT4") {
field(INP, "KM36:TST:LS:Z8:INPUT4:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z8:RATE4:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z8:RATE4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z8:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:RATE4.PROC")
}
record(ai, "KM36:TST:LS:Z8:RATE4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z8:RATE4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z8:INITCALC4.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z8:INITCALC4") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z8:INITUB4.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITUB4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z8:UB4.VAL")
field(OUTA, "KM36:TST:LS:Z8:UB_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z8:INITP4.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITP4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z8:P4.VAL")
field(OUTA, "KM36:TST:LS:Z8:P_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z8:INITI4.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITI4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z8:I4.VAL")
field(OUTA, "KM36:TST:LS:Z8:I_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z8:INITD4.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITD4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z8:D4.VAL")
field(OUTA, "KM36:TST:LS:Z8:D_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z8:INITMOUT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITMOUT4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z8:MOUT4.VAL")
field(OUTA, "KM36:TST:LS:Z8:MOUT_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z8:INITRANGE4.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITRANGE4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z8:RANGE4.VAL")
field(OUTA, "KM36:TST:LS:Z8:RANGE_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z8:INITINPUT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITINPUT4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z8:INPUT4.VAL")
field(OUTA, "KM36:TST:LS:Z8:INPUT_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z8:INITRATE4.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITRATE4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z8:RATE4.VAL")
field(OUTA, "KM36:TST:LS:Z8:RATE_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z8:INITCOUNT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z8:INITCOUNT4") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z8:INITCALC4.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z8:UB_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z8:P_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z8:I_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z8:D_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z8:MOUT_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z8:RANGE_S4") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z8:INPUT_S4") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z8:RATE_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z8:SET4") {
field(INPA, "KM36:TST:LS:Z8:UB_S4")
field(INPB, "KM36:TST:LS:Z8:P_S4")
field(INPC, "KM36:TST:LS:Z8:I_S4")
field(INPD, "KM36:TST:LS:Z8:D_S4")
field(INPE, "KM36:TST:LS:Z8:MOUT_S4")
field(INPF, "KM36:TST:LS:Z8:RANGE_S4")
field(INPG, "KM36:TST:LS:Z8:INPUT_S4")
field(INPH, "KM36:TST:LS:Z8:RATE_S4")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(4,8) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z8:ALL4.PROC")
}
record(mbbi, "KM36:TST:LS:Z8:RANGE4") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
record(mbbo, "KM36:TST:LS:Z8:RANGE_S4") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
# This just includes the zone file and overrides the RANGE options
# for the analog control channels.
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z9:ALL4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(4,9) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:UB4:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z9:UB4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z9:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:UB4.PROC")
}
record(ai, "KM36:TST:LS:Z9:UB4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z9:UB4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:P4:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z9:P4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z9:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:P4.PROC")
}
record(ai, "KM36:TST:LS:Z9:P4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z9:P4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:I4:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z9:I4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z9:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:I4.PROC")
}
record(ai, "KM36:TST:LS:Z9:I4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z9:I4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:D4:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z9:D4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z9:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:D4.PROC")
}
record(ai, "KM36:TST:LS:Z9:D4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z9:D4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:MOUT4:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z9:MOUT4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z9:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:MOUT4.PROC")
}
record(ai, "KM36:TST:LS:Z9:MOUT4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z9:MOUT4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:RANGE4:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z9:RANGE4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z9:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:RANGE4.PROC")
}
record(mbbi, "KM36:TST:LS:Z9:RANGE4") {
field(INP, "KM36:TST:LS:Z9:RANGE4:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z9:INPUT4:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z9:INPUT4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z9:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:INPUT4.PROC")
}
record(mbbi, "KM36:TST:LS:Z9:INPUT4") {
field(INP, "KM36:TST:LS:Z9:INPUT4:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z9:RATE4:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z9:RATE4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z9:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:RATE4.PROC")
}
record(ai, "KM36:TST:LS:Z9:RATE4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z9:RATE4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z9:INITCALC4.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z9:INITCALC4") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z9:INITUB4.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITUB4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z9:UB4.VAL")
field(OUTA, "KM36:TST:LS:Z9:UB_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z9:INITP4.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITP4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z9:P4.VAL")
field(OUTA, "KM36:TST:LS:Z9:P_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z9:INITI4.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITI4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z9:I4.VAL")
field(OUTA, "KM36:TST:LS:Z9:I_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z9:INITD4.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITD4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z9:D4.VAL")
field(OUTA, "KM36:TST:LS:Z9:D_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z9:INITMOUT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITMOUT4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z9:MOUT4.VAL")
field(OUTA, "KM36:TST:LS:Z9:MOUT_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z9:INITRANGE4.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITRANGE4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z9:RANGE4.VAL")
field(OUTA, "KM36:TST:LS:Z9:RANGE_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z9:INITINPUT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITINPUT4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z9:INPUT4.VAL")
field(OUTA, "KM36:TST:LS:Z9:INPUT_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z9:INITRATE4.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITRATE4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z9:RATE4.VAL")
field(OUTA, "KM36:TST:LS:Z9:RATE_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z9:INITCOUNT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z9:INITCOUNT4") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z9:INITCALC4.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z9:UB_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z9:P_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z9:I_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z9:D_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z9:MOUT_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z9:RANGE_S4") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z9:INPUT_S4") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z9:RATE_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z9:SET4") {
field(INPA, "KM36:TST:LS:Z9:UB_S4")
field(INPB, "KM36:TST:LS:Z9:P_S4")
field(INPC, "KM36:TST:LS:Z9:I_S4")
field(INPD, "KM36:TST:LS:Z9:D_S4")
field(INPE, "KM36:TST:LS:Z9:MOUT_S4")
field(INPF, "KM36:TST:LS:Z9:RANGE_S4")
field(INPG, "KM36:TST:LS:Z9:INPUT_S4")
field(INPH, "KM36:TST:LS:Z9:RATE_S4")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(4,9) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z9:ALL4.PROC")
}
record(mbbi, "KM36:TST:LS:Z9:RANGE4") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
record(mbbo, "KM36:TST:LS:Z9:RANGE_S4") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
# This just includes the zone file and overrides the RANGE options
# for the analog control channels.
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z10:ALL4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(4,10) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:UB4:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z10:UB4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:UB4.PROC")
}
record(ai, "KM36:TST:LS:Z10:UB4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:UB4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:P4:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z10:P4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:P4.PROC")
}
record(ai, "KM36:TST:LS:Z10:P4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:P4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:I4:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z10:I4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:I4.PROC")
}
record(ai, "KM36:TST:LS:Z10:I4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:I4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:D4:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z10:D4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:D4.PROC")
}
record(ai, "KM36:TST:LS:Z10:D4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:D4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:MOUT4:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z10:MOUT4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:MOUT4.PROC")
}
record(ai, "KM36:TST:LS:Z10:MOUT4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:MOUT4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:RANGE4:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z10:RANGE4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:RANGE4.PROC")
}
record(mbbi, "KM36:TST:LS:Z10:RANGE4") {
field(INP, "KM36:TST:LS:Z10:RANGE4:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z10:INPUT4:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z10:INPUT4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:INPUT4.PROC")
}
record(mbbi, "KM36:TST:LS:Z10:INPUT4") {
field(INP, "KM36:TST:LS:Z10:INPUT4:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z10:RATE4:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z10:RATE4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:RATE4.PROC")
}
record(ai, "KM36:TST:LS:Z10:RATE4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:RATE4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:INITCALC4.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z10:INITCALC4") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z10:INITUB4.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITUB4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:UB4.VAL")
field(OUTA, "KM36:TST:LS:Z10:UB_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITP4.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITP4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:P4.VAL")
field(OUTA, "KM36:TST:LS:Z10:P_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITI4.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITI4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:I4.VAL")
field(OUTA, "KM36:TST:LS:Z10:I_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITD4.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITD4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:D4.VAL")
field(OUTA, "KM36:TST:LS:Z10:D_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITMOUT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITMOUT4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:MOUT4.VAL")
field(OUTA, "KM36:TST:LS:Z10:MOUT_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITRANGE4.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITRANGE4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:RANGE4.VAL")
field(OUTA, "KM36:TST:LS:Z10:RANGE_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITINPUT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITINPUT4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:INPUT4.VAL")
field(OUTA, "KM36:TST:LS:Z10:INPUT_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITRATE4.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITRATE4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:RATE4.VAL")
field(OUTA, "KM36:TST:LS:Z10:RATE_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITCOUNT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITCOUNT4") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z10:INITCALC4.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z10:UB_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z10:P_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z10:I_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z10:D_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z10:MOUT_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z10:RANGE_S4") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z10:INPUT_S4") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z10:RATE_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z10:SET4") {
field(INPA, "KM36:TST:LS:Z10:UB_S4")
field(INPB, "KM36:TST:LS:Z10:P_S4")
field(INPC, "KM36:TST:LS:Z10:I_S4")
field(INPD, "KM36:TST:LS:Z10:D_S4")
field(INPE, "KM36:TST:LS:Z10:MOUT_S4")
field(INPF, "KM36:TST:LS:Z10:RANGE_S4")
field(INPG, "KM36:TST:LS:Z10:INPUT_S4")
field(INPH, "KM36:TST:LS:Z10:RATE_S4")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(4,10) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z10:ALL4.PROC")
}
record(mbbi, "KM36:TST:LS:Z10:RANGE4") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
record(mbbo, "KM36:TST:LS:Z10:RANGE_S4") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
# This just includes the zone file and overrides the RANGE options
# for the analog control channels.
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z10:ALL3") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(3,10) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:UB3:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z10:UB3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:UB3.PROC")
}
record(ai, "KM36:TST:LS:Z10:UB3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:UB3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:P3:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z10:P3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:P3.PROC")
}
record(ai, "KM36:TST:LS:Z10:P3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:P3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:I3:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z10:I3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:I3.PROC")
}
record(ai, "KM36:TST:LS:Z10:I3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:I3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:D3:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z10:D3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:D3.PROC")
}
record(ai, "KM36:TST:LS:Z10:D3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:D3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:MOUT3:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z10:MOUT3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:MOUT3.PROC")
}
record(ai, "KM36:TST:LS:Z10:MOUT3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:MOUT3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:RANGE3:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z10:RANGE3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:RANGE3.PROC")
}
record(mbbi, "KM36:TST:LS:Z10:RANGE3") {
field(INP, "KM36:TST:LS:Z10:RANGE3:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z10:INPUT3:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z10:INPUT3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:INPUT3.PROC")
}
record(mbbi, "KM36:TST:LS:Z10:INPUT3") {
field(INP, "KM36:TST:LS:Z10:INPUT3:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z10:RATE3:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z10:RATE3:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL3.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:RATE3.PROC")
}
record(ai, "KM36:TST:LS:Z10:RATE3") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:RATE3:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:INITCALC3.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z10:INITCALC3") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z10:INITUB3.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITUB3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:UB3.VAL")
field(OUTA, "KM36:TST:LS:Z10:UB_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITP3.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITP3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:P3.VAL")
field(OUTA, "KM36:TST:LS:Z10:P_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITI3.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITI3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:I3.VAL")
field(OUTA, "KM36:TST:LS:Z10:I_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITD3.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITD3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:D3.VAL")
field(OUTA, "KM36:TST:LS:Z10:D_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITMOUT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITMOUT3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:MOUT3.VAL")
field(OUTA, "KM36:TST:LS:Z10:MOUT_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITRANGE3.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITRANGE3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:RANGE3.VAL")
field(OUTA, "KM36:TST:LS:Z10:RANGE_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITINPUT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITINPUT3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:INPUT3.VAL")
field(OUTA, "KM36:TST:LS:Z10:INPUT_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITRATE3.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITRATE3") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:RATE3.VAL")
field(OUTA, "KM36:TST:LS:Z10:RATE_S3.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITCOUNT3.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITCOUNT3") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z10:INITCALC3.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z10:UB_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z10:P_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z10:I_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z10:D_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z10:MOUT_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z10:RANGE_S3") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z10:INPUT_S3") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z10:RATE_S3") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z10:SET3") {
field(INPA, "KM36:TST:LS:Z10:UB_S3")
field(INPB, "KM36:TST:LS:Z10:P_S3")
field(INPC, "KM36:TST:LS:Z10:I_S3")
field(INPD, "KM36:TST:LS:Z10:D_S3")
field(INPE, "KM36:TST:LS:Z10:MOUT_S3")
field(INPF, "KM36:TST:LS:Z10:RANGE_S3")
field(INPG, "KM36:TST:LS:Z10:INPUT_S3")
field(INPH, "KM36:TST:LS:Z10:RATE_S3")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(3,10) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z10:ALL3.PROC")
}
record(mbbi, "KM36:TST:LS:Z10:RANGE3") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
record(mbbo, "KM36:TST:LS:Z10:RANGE_S3") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
# This just includes the zone file and overrides the RANGE options
# for the analog control channels.
#######################################
#
# Template to support reading and setting
# controller ZONE parameters. It reads the ZONE
# parameters into an array, then uses subArrays to
# extract each parameter.
#
# This template is used by the output template
# and it needs the following macros:
#
# ZONE: zone number
# OUT: output number
#
#######################################
##
## Read the ZONE setting into an array (8 values)
##
record(waveform, "KM36:TST:LS:Z10:ALL4") {
field(DTYP, "stream")
field(SDIS, "KM36:TST:LS:DISABLE_POLL")
field(INP, "@ls336.proto getZONE(4,10) serial1 0")
field(SCAN, "Passive")
field(NELM, "8")
field(FTVL, "DOUBLE")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:UB4:ARRAY.PROC")
}
##
## Read the ZONE upper boundary setting.
##
record(subArray, "KM36:TST:LS:Z10:UB4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "0")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:UB4.PROC")
}
record(ai, "KM36:TST:LS:Z10:UB4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:UB4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:P4:ARRAY.PROC")
}
##
## Read the ZONE P setting.
##
record(subArray, "KM36:TST:LS:Z10:P4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "1")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:P4.PROC")
}
record(ai, "KM36:TST:LS:Z10:P4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:P4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:I4:ARRAY.PROC")
}
##
## Read the ZONE I setting.
##
record(subArray, "KM36:TST:LS:Z10:I4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "2")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:I4.PROC")
}
record(ai, "KM36:TST:LS:Z10:I4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:I4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:D4:ARRAY.PROC")
}
##
## Read the ZONE D setting.
##
record(subArray, "KM36:TST:LS:Z10:D4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "3")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:D4.PROC")
}
record(ai, "KM36:TST:LS:Z10:D4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:D4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:MOUT4:ARRAY.PROC")
}
##
## Read the ZONE MOUT setting.
##
record(subArray, "KM36:TST:LS:Z10:MOUT4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "4")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:MOUT4.PROC")
}
record(ai, "KM36:TST:LS:Z10:MOUT4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:MOUT4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:RANGE4:ARRAY.PROC")
}
##
## Read the ZONE RANGE setting.
##
record(subArray, "KM36:TST:LS:Z10:RANGE4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "5")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:RANGE4.PROC")
}
record(mbbi, "KM36:TST:LS:Z10:RANGE4") {
field(INP, "KM36:TST:LS:Z10:RANGE4:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(FLNK, "KM36:TST:LS:Z10:INPUT4:ARRAY.PROC")
}
##
## Read the ZONE INPUT setting.
##
record(subArray, "KM36:TST:LS:Z10:INPUT4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "6")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:INPUT4.PROC")
}
record(mbbi, "KM36:TST:LS:Z10:INPUT4") {
field(INP, "KM36:TST:LS:Z10:INPUT4:ARRAY.VAL")
field(SCAN, "Passive")
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(FLNK, "KM36:TST:LS:Z10:RATE4:ARRAY.PROC")
}
##
## Read the ZONE RATE setting.
##
record(subArray, "KM36:TST:LS:Z10:RATE4:ARRAY") {
field(SCAN, "Passive")
field(FTVL, "DOUBLE")
field(INP, "KM36:TST:LS:Z10:ALL4.VAL MS")
field(MALM, "8")
field(NELM, "1")
field(INDX, "7")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:RATE4.PROC")
}
record(ai, "KM36:TST:LS:Z10:RATE4") {
field(SCAN, "Passive")
field(INP, "KM36:TST:LS:Z10:RATE4:ARRAY.VAL MS")
field(PREC, "1")
field(FLNK, "KM36:TST:LS:Z10:INITCALC4.PROC")
}
##############################################################
##
## Populate the write records below with the current values.
## Only do this once at startup.
##
###############################################################
record(calcout, "KM36:TST:LS:Z10:INITCALC4") {
field(INPA, "0")
field(CALC, "A")
field(VAL, "0")
field(DOPT, "Use OCAL")
field(OOPT, "When Zero")
field(OCAL, "1")
field(OUT, "KM36:TST:LS:Z10:INITUB4.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITUB4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:UB4.VAL")
field(OUTA, "KM36:TST:LS:Z10:UB_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITP4.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITP4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:P4.VAL")
field(OUTA, "KM36:TST:LS:Z10:P_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITI4.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITI4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:I4.VAL")
field(OUTA, "KM36:TST:LS:Z10:I_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITD4.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITD4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:D4.VAL")
field(OUTA, "KM36:TST:LS:Z10:D_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITMOUT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITMOUT4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:MOUT4.VAL")
field(OUTA, "KM36:TST:LS:Z10:MOUT_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITRANGE4.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITRANGE4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:RANGE4.VAL")
field(OUTA, "KM36:TST:LS:Z10:RANGE_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITINPUT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITINPUT4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:INPUT4.VAL")
field(OUTA, "KM36:TST:LS:Z10:INPUT_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITRATE4.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITRATE4") {
field(OMSL, "closed_loop")
field(DOL, "KM36:TST:LS:Z10:RATE4.VAL")
field(OUTA, "KM36:TST:LS:Z10:RATE_S4.VAL PP")
field(FLNK, "KM36:TST:LS:Z10:INITCOUNT4.PROC")
}
record(dfanout, "KM36:TST:LS:Z10:INITCOUNT4") {
field(DOL, "1")
field(OUTA, "KM36:TST:LS:Z10:INITCALC4.A")
}
#############################################
# Write records. There is a calcout record to
# do the actual write.
#############################################
##
## Set the ZONE upper boundary setting.
##
record(ao, "KM36:TST:LS:Z10:UB_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE P setting.
##
record(ao, "KM36:TST:LS:Z10:P_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE I setting.
##
record(ao, "KM36:TST:LS:Z10:I_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE D setting.
##
record(ao, "KM36:TST:LS:Z10:D_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE MOUT setting.
##
record(ao, "KM36:TST:LS:Z10:MOUT_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RANGE setting.
##
record(mbbo, "KM36:TST:LS:Z10:RANGE_S4") {
field(SCAN, "Passive")
field(ZRST, "Off")
field(ZRVL, "0")
field(ONST, "Range1/Low")
field(ONVL, "1")
field(TWST, "Range2/Medium")
field(TWVL, "2")
field(THST, "Range3/High")
field(THVL, "3")
field(FRST, "Range4")
field(FRVL, "4")
field(FVST, "Range5")
field(FVVL, "5")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE INPUT setting.
##
record(mbbo, "KM36:TST:LS:Z10:INPUT_S4") {
field(ZRST, "None")
field(ZRVL, "0")
field(ONST, "Input A")
field(ONVL, "1")
field(TWST, "Input B")
field(TWVL, "2")
field(THST, "Input C")
field(THVL, "3")
field(FRST, "Input D")
field(FRVL, "4")
field(FVST, "Input D2")
field(FVVL, "5")
field(SXST, "Input D3")
field(SXVL, "6")
field(SVST, "Input D4")
field(SVVL, "7")
field(EIST, "Input D5")
field(EIVL, "8")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Set the ZONE RATE setting.
##
record(ao, "KM36:TST:LS:Z10:RATE_S4") {
field(SCAN, "Passive")
field(PREC, "1")
field(SDIS, "KM36:TST:LS:DISABLE")
}
##
## Record to write the ZONE parameters.
##
record(calcout, "KM36:TST:LS:Z10:SET4") {
field(INPA, "KM36:TST:LS:Z10:UB_S4")
field(INPB, "KM36:TST:LS:Z10:P_S4")
field(INPC, "KM36:TST:LS:Z10:I_S4")
field(INPD, "KM36:TST:LS:Z10:D_S4")
field(INPE, "KM36:TST:LS:Z10:MOUT_S4")
field(INPF, "KM36:TST:LS:Z10:RANGE_S4")
field(INPG, "KM36:TST:LS:Z10:INPUT_S4")
field(INPH, "KM36:TST:LS:Z10:RATE_S4")
field(CALC, "0")
field(DTYP, "stream")
field(OUT, "@ls336.proto setZONE(4,10) serial1 0")
field(SDIS, "KM36:TST:LS:DISABLE")
field(FLNK, "KM36:TST:LS:Z10:ALL4.PROC")
}
record(mbbi, "KM36:TST:LS:Z10:RANGE4") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
record(mbbo, "KM36:TST:LS:Z10:RANGE_S4") {
field(ZRST, "Off")
field(ONST, "On")
field(TWST, "")
field(THST, "")
field(FRST, "")
field(FVST, "")
}
################################################################
# Records dealing with alarm handling
##
## Disable top level alarm handling
##
record(bo, "KM36:TST:LS:DISABLE_ALARM") {
field(DESC, "Disable Alarms")
field(PINI, "YES")
field(VAL, "0")
field(OMSL, "supervisory")
field(ZNAM, "Alarm Enabled")
field(ONAM, "Alarm Disabled")
field(ZSV, "NO_ALARM")
field(OSV, "MINOR")
field(FLNK, "KM36:TST:LS:ALARM_SUMMARY_CALC")
info(autosaveFields, "VAL")
}
#record(bo, "KM36:TST:LS:DISABLE_ALARM_CALC") {
# field(DESC, "Disable Alarms Calc")
# field(VAL, "1")
# field(OUT, "KM36:TST:LS:ALARM_SUMMARY_CALC.DISA PP")
# field(FLNK, "KM36:TST:LS:ALARM_SUMMARY_CALC2")
#}
##
## If we disable the alarm handling, clear the alarm status
##
record(calcout, "KM36:TST:LS:DISABLE_ALARM_SETZERO") {
field(INPA, "KM36:TST:LS:DISABLE_ALARM CP")
field(CALC, "A==1?0:1")
field(DOPT, "Use CALC")
field(OOPT, "When Zero")
field(OUT, "KM36:TST:LS:ALARM_SUMMARY.VAL PP")
}
record(calc, "KM36:TST:LS:ALARM_SUMMARY_CALC") {
field(INPA, "KM36:TST:LS:ALARM0_SUMMARY CP MS")
field(INPB, "KM36:TST:LS:ALARM1_SUMMARY CP MS")
field(INPC, "KM36:TST:LS:ALARM2_SUMMARY CP MS")
field(INPD, "KM36:TST:LS:ALARM3_SUMMARY CP MS")
field(INPE, "KM36:TST:LS:ALARMD2_SUMMARY CP MS")
field(INPF, "KM36:TST:LS:ALARMD3_SUMMARY CP MS")
field(INPG, "KM36:TST:LS:ALARMD4_SUMMARY CP MS")
field(INPH, "KM36:TST:LS:ALARMD5_SUMMARY CP MS")
field(INPI, "KM36:TST:LS:HTRST1_CACHE CP MS")
field(INPJ, "KM36:TST:LS:HTRST2_CACHE CP MS")
field(CALC, "A")
field(FLNK, "KM36:TST:LS:ALARM_SUMMARY_CALC2")
field(SDIS, "KM36:TST:LS:DISABLE_ALARM")
}
record(calcout, "KM36:TST:LS:ALARM_SUMMARY_CALC2") {
field(INPA, "KM36:TST:LS:ALARM_SUMMARY_CALC.STAT")
field(CALC, "A!=0?1:0")
field(DOPT, "Use CALC")
field(OOPT, "Every Time")
field(OUT, "KM36:TST:LS:ALARM_SUMMARY PP")
}
##
## Top level alarm summary record.
## This summarizes the input alarm summary record
## along with the two main output heater status records
## which are on loop 1 and 2.
##
record(bi, "KM36:TST:LS:ALARM_SUMMARY") {
field(ZNAM, "No Alarm")
field(ONAM, "Alarm")
field(OSV, "MAJOR")
field(PINI, "YES")
field(VAL, "0")
info(archive, "Monitor, 00:00:01, VAL")
}
##
## Generic Asyn record for reading parameters.
##
record(asyn,"KM36:TST:LS:ASYN")
{
field(DTYP,"asynRecordDevice")
field(PORT,"serial1")
field(ADDR,"0")
field(OMAX,"1024")
field(IMAX,"1024")
field(OEOS,"\r\n")
field(IEOS,"\r\n")
}