Hi,
We came across an oddity in our upgrade from base 3.14 to 7.0. We had a few IOCs using database logic similar to:
record(seq, "matt:seq") {
field(SCAN, "1 second")
field(DLY1, "1")
field(DOL1, "0")
field(LNK1, "matt:bo CPP")
field(DLY2, "1")
field(DOL2, "1")
field(LNK2, "matt:bo CPP")
}
record(bo, "matt:bo") {
field(ZNAM, "Zero")
field(ONAM, "One")
}
We know this to be an invalid use of CPP on an output link, and it should be PP instead. We’re in the process of fixing a few database template files.
However, in 3.14 when this database is loaded the CPP is automatically changed to PP, and ‘matt:bo’ is processed as expected:
caget matt:seq.LNK1
matt:seq.LNK1 matt:bo PP NMS
caget matt:seq.LNK2
matt:seq.LNK2 matt:bo PP NMS
So, we never noticed the error until the upgrade. However, in 7.0, it seems to default to NPP instead:
caget matt:seq.LNK1
matt:seq.LNK1 matt:bo NPP NMS
caget matt:seq.LNK2
matt:seq.LNK2 matt:bo NPP NMS
I think the 7.0 version is more correct, forcing the user to fix the database logic. Is the change expected?
I think I see where the changes are in dbStaticLib.c, and it seems like the section dealing with link attributes are re-written at some point in about 2014. In 3.14 it didn’t test for CPP output links, and
it was caught by the PP check instead. In 7.0 it explicitly rejects CPP for output links.
I was testing with 3.14.12.8 and 7.0.9.
Cheers,
Matt