#! Generated by VisualDCT v2.6 record(calc, "$(P)motor_bad") { field(CALC, "A#1") field(INPA, "$(TAC) NPP MS") field(INPB, "$(TPOS) NPP MS") field(INPC, "$(HOME) NPP MS") field(INPD, "$(MOVE) NPP MS") } record(calc, "$(P)condition_bad") { field(CALC, "GC||(F#1&D#1)||(E#1&E#5)?1:0") field(INPA, "$(P)motor_bad PP MS") field(INPB, "$(P)v_min") field(INPC, "$(P)rate_max") field(INPD, "$(AMO_OUT) NPP MS") field(INPE, "$(GONI) NPP MS") field(INPF, "$(AMO) NPP MS") field(INPG, "$(VOLT) NPP MS") field(INPH, "$(RATE) NPP MS") } # Check first time if the values are within allowed limits and the # severity of the record itself is not INVALID. If not, after a few # seconds trigger a second comparison to engage the interlock. record(calcout, "$(P)first_check") { field(DESC, "First temp test") field(SCAN, "2 second") field(CALC, "A#0&&B#0&&D#1?1:0") field(INPA, "$(P)motor_bad PP MS") field(INPB, "$(P)condition_bad PP MS") field(INPD, "$(P)intlk_bypass") field(OUT, "$(P)second_check PP MS") field(OOPT, "When Non-zero") field(DOPT, "Use OCAL") field(OCAL, "1") field(INPL, "$(P)first_check.SEVR PP") } record(ai, "$(P)v_min") { field(VAL, "2000") field(EGU, "V") } record(ai, "$(P)rate_max") { field(VAL, "100000") field(EGU, "Hz") } # Second check. If this PV is processed # and the CALC is TRUE (1) it will set the # interlock status record to 1. record(calcout, "$(P)second_check") { field(DESC, "Second check") field(CALC, "A#0&&B#0&&D#1?1:0") field(INPA, "$(P)motor_bad PP MS") field(INPB, "$(P)condition_bad PP MS") field(INPD, "$(P)intlk_bypass") field(SCAN, "Passive") field(PINI, "NO") field(OUT, "$(P)intlk_status PP MS") field(OOPT, "When Non-zero") field(DOPT, "Use CALC") field(OCAL, "1") field(INPL, "$(P)second_check.SEVR") } # Record to reset the interlock record(bo, "$(P)intlk_reset") { field(DESC, "Reset interlock") field(SCAN, "Passive") field(PINI, "NO") field(UDF, "0") field(VAL, "0") field(OUT, "$(P)intlk_status.VAL PP") } record(bo, "$(P)force_off") { field(DESC, "Force Zero") field(SCAN, "5 second") field(DISV, "0") field(SDIS, "$(P)intlk_status.VAL") field(VAL, "$(SHUT_VAL)") field(OUT, "$(PV_2_ZERO) PP") } # Record to bypass interlock record(bo, "$(P)intlk_bypass") { field(DESC, "Bypass interlock") field(SCAN, "Passive") field(PINI, "YES") field(VAL, "0") field(ZNAM, "NO BYPASS") field(ONAM, "BYPASS") } # Status of the interlock. 1 Means interlock # is engaged, 0 means interlock in not # engaged. record(bo, "$(P)intlk_status") { field(DESC, "Status of Interlock") field(SCAN, "Passive") field(PINI, "YES") field(VAL, "0") field(ZNAM, "Fine") field(ONAM, "Engaged") field(ZSV, "NO_ALARM") field(OSV, "MAJOR") } record(ao, "$(P)intlk_delay") { field(SCAN, "Passive") field(PINI, "YES") field(VAL, "5") field(OUT, "$(P)first_check.ODLY") field(EGU, "sec") }