We're upgrading some IOCs to base 3.15.5, and are seeing
some new behavior with self-referential calc records. Here's
a simplified example:
record(ao, "TEST123:AoTest") {
field(HIGH, "5")
field(HIHI, "10")
field(HSV, "MINOR")
field(HHSV, "MAJOR")
field(PINI, "1")
field(FLNK,
"TEST123:CalcTest")
}
record(calc, "TEST123:CalcTest")
{
field(INPA, "TEST123:CalcTest
NPP MS")
field(INPB, "TEST123:AoTest
NPP MS")
field(CALC,
"B<100?(A+1):A")
field(FLNK, "TEST123:AiTest")
}
record(ai, "TEST123:AiTest") {
field(INP,
"TEST123:CalcTest")
field(HIGH, "5")
field(HIHI, "10")
field(HSV, "MINOR")
field(HHSV, "MAJOR")
}
=================================
Notice the "MS" in the calc
record's INPA. We don't yet
know why the original developer did this, and it seems
that it would just cause the record to get stuck in an
alarm state if any input went into an alarm state.
Also notice that the calc record
gets processed by the ao record, so it's not an issue of
anything being undefined.
With base 3.15.5, when the IOC
starts, the calc record has SEVR: INVALID and STAT: LINK.
If I change INPA from "MS" to
"NMS" and restart the IOC, the record has SEVR: NO_ALARM and
STAT: NO_ALARM.
I verified that with base
3.14.11 and 3.14.12 the problem doesn't happen; i.e. the
record has SEVR: NO_ALARM and STAT: NO_ALARM.