Experimental Physics and Industrial Control System
|
On 3/5/19 8:08 AM, Abdalla Ahmad via Tech-talk wrote:
The attached C file is a snippet from a Qt project. In the project there was a function that writes values to many PVs in a loop. What was happening is that some PVs do not get their new value updated immediately but after 3 or 4 seconds.
The code shows a similar behavior, two consecutive "ca_put" calls, and the same behavior occurs. I double-checked the database (included in the comments) but there is nothing wrong. I tried to use ca_context_ or ca_task_ but the project crashes maybe because
the QE framework is already handling low-level CA. What am I missing here?
If you want to minimize the time between the two puts, you should reorganize the code so all the name searches happen first and get resolved, then do both puts together, more like this:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <cadef.h>
int main()
{
srand(time(0));
double v1 = ((rand() % 100) / 10.0) * 1E-7;
double v2 = ((rand() % 100) / 10.0);
chid pvID1;
chid pvID2;
ca_task_initialize();
ca_search("Analog_1", &pvID1);
ca_search("Analog_2", &pvID2);
ca_pend_io(1.0);
ca_put(DBR_DOUBLE, pvID1, &v2);
ca_put(DBR_DOUBLE, pvID2, &v2);
ca_flush();
ca_task_exit();
}
Of course this code won't behave quite the same as your version if the Analog_2 record isn't available, and it really should be checking the status values returned by all CA routines to detect those kinds of problems. If you don't do that your control
system is likely to be very brittle, meaning that when something minor goes wrong (such as a name search taking longer to complete than the 1 second you are allowing because the load on your network has increased since you tested the code) the knock-on effects
could bring down your whole control system.
For code that needs to be event driven like I suspect most Qt applications are, you probably shouldn't be using the basic API routines
ca_search() and ca_pend_io() either, but should switch to the event-driven API routines that take callback routines that are called when the operation completes.
- Andrew
--
Arguing for surveillance because you have nothing to hide is no
different than making the claim, "I don't care about freedom of
speech because I have nothing to say." -- Edward Snowdon
|
- Replies:
- RE: Questions about channel access C API programming Abdalla Ahmad via Tech-talk
- References:
- Questions about channel access C API programming Abdalla Ahmad via Tech-talk
- Navigate by Date:
- Prev:
Re: Questions about channel access C API programming Wang Xiaoqiang via Tech-talk
- Next:
CA and CS-studio configuration Kacper Kłys via Tech-talk
- 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:
Re: Questions about channel access C API programming Wang Xiaoqiang via Tech-talk
- Next:
RE: Questions about channel access C API programming Abdalla Ahmad via Tech-talk
- 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
|
ANJ, 06 Mar 2019 |
·
Home
·
News
·
About
·
Base
·
Modules
·
Extensions
·
Distributions
·
Download
·
·
Search
·
EPICS V4
·
IRMIS
·
Talk
·
Bugs
·
Documents
·
Links
·
Licensing
·
|