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.