My thanks to Ned Arnold, Jim Thomas, Andrew Johnson and
Benjamin Franksen
for their very helpful answers. [And I apologise for
not having put a
subject line on my message, which is going to make this
thread hard to
follow in the archive. I borrowed this subject line
from Ben, since it
seemed the most appropriate.]
As Ned says, things were apparently behaving as
designed. However, I still
regard the discussion of CA links in the Record
Reference Manual in sections
1.3 and 2.2 to be incorrect. Recall that section 1.3
says
Channel Access links, be they between records located
in
different IOCs or between records located in the same
IOC,
cannot be process passive, e.g., they cannot cause
the
record they specify to process when written to or
read from.
This is false as written. You cannot specify PP in the
link, but (borrowing
some words from Ned) the real condition should have been
written as:
Channel Access links, be they between records located
in
different IOCs or between records located in the same
IOC,
cannot be process passive, e.g., the link itself
cannot be
configured to cause the target record to process when
written to or read from. Note, however, that a
Channel Access
output link will cause the target record to process
if the
destination field is defined as "PP" (with the
statement
"pp(TRUE)" in the *.dbd file and so documented under
the
PP column in the record reference manual) and the
record
scan field is set to "Passive". If these two
conditions are
true, the record will process when ANY channel access
client (including sequence programs, CA links, etc)
writes
to that field."
Section 2.2 should be modified similarly.
Although the SNL manual is pretty good, I think it could
be improved
significantly by adding similar text to the discussion
of pvPut and pvGet.
Processing records in the database is such a fundamental
part of EPICS that
I strongly believe that the effects of pvPut and pvGet
should be made
explicit. May I suggest that the pvGet discussion be
amended to include the
text:
Like any other Channel Access input operation that
uses ca_get,
calling pvGet does not cause the assigned record to
process,
and therefore always fetches the current value of the
assigned field.
Similarly, the pvPut discussion might be amended by
including the text:
Like any other Channel Access output operation that
uses ca_put,
calling pvPut will cause the record containing the
assigned field
to process if and only if the destination field is
defined as "PP"
(with the statement "pp(TRUE)" in the *.dbd file and
so documented
under the PP column in the record reference manual)
and the
record scan field is set to "Passive".
It might also be worth stating explicitly whether
pvPutComplete waits for
the record to finish processing, or just for the put
operation to complete
(I am guessing the latter).
Cheers,
Russell O. Redman