Experimental Physics and Industrial Control System
Hi folks,
A colleague of mine has seen the following strange effect:
If a disabled (DISA=1) record is written then monitors do not show the
change. To be exact: If the VAL field of a passive record is modified
multiple times, then a monitor shows only the first change. But if the
record is scanned periodically, or any other field with pp(TRUE) has
been written before, then even the first change is not shown. However, a
caget can confirm that the value has changed.
Even when the record is re-enabled (DISA=0), the monitors do not update
before the record processes the next time.
Other fields than the VAL field are not affected, all of their
modifications are immediately shown by monitors.
So it seems if any attempt has been made to process a disabled record,
then any later modification of the VAL field and only the VAL field does
not trigger a monitor.
Is this the correct behavior? IMHO no. It leads to inconsistent displays
for the same value. As for any other field, people also want to see any
change that someone else makes on the VAL field.
The problem appeared when a epid record had to be configured (KP, KI,
and KD set, as well as the setpoint VAL), before is is activated. Other
displays did not show the modified setpoint. I could confirm that the
problem is not limited to the epid record but affects standard base
record like ao as well.
The code in question seems to be dbPut in dbAccess.c:
/* Propagate monitor events for this field, */
/* unless the field field is VAL and PP is true. */
pfldDes = paddr->pfldDes;
isValueField = dbIsValueField(pfldDes);
if (isValueField) precord->udf = FALSE;
if (precord->mlis.count &&
!(isValueField && pfldDes->process_passive))
db_post_events(precord, paddr->pfield, DBE_VALUE | DBE_LOG);
What about changing this to
if (precord->mlis.count &&
!(isValueField && pfldDes->process_passive &&
precord->disa != precrod->disv))
db_post_events(precord, paddr->pfield, DBE_VALUE | DBE_LOG);
or skip the whole test for VAL and do
if (precord->mlis.count)
db_post_events(precord, paddr->pfield, DBE_VALUE | DBE_LOG);
?
Any opinions?
Dirk
- Replies:
- Re: put to disabled records and monitors Tim Mooney
- Navigate by Date:
- Prev:
Re: Cross-compilation, static build, etc Angus Gratton
- Next:
Re: Keithley 6517B support? Joe Sullivan
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
<2012>
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
- Navigate by Thread:
- Prev:
Location of caTools sources Shankar, Murali
- Next:
Re: put to disabled records and monitors Tim Mooney
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
<2012>
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024