Argonne National Laboratory

Experimental Physics and
Industrial Control System

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  <20192020  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  <20192020 
<== Date ==> <== Thread ==>

Subject: RE: Questions about channel access C API programming
From: Abdalla Ahmad via Tech-talk <tech-talk@aps.anl.gov>
To: "Engbretson, Mark S." <engbretson@anl.gov>, "tech-talk@aps.anl.gov" <tech-talk@aps.anl.gov>
Date: Wed, 6 Mar 2019 08:14:18 +0000

Thank you for your input. I think that did the trick, I added a ca_pend_io after the loop (where all the ca_put calls should be done) and I get PV updates as expected. But I kept the ca_pend_io call for each search as it is.

 

Best Regards,

Abdalla.

 

From: Engbretson, Mark S. [mailto:engbretson@anl.gov]
Sent: Tuesday, March 05, 2019 4:43 PM
To: Abdalla Ahmad <abdalla.ahmad@sesame.org.jo>
Subject: RE: Questions about channel access C API programming

 

Typically, a channel access client should perform at the search and connects all at one time so that the network call will be optimized. If you do them one at a time, you have the overhead associated with performing the search and connect over and over and over again, when they could all be done at the same time.

 

So, do all the searches together, followed by the pendio.

 

Repeat when you are writing the values, stack them all up, then do the pendio.

 

From: tech-talk-bounces@aps.anl.gov <tech-talk-bounces@aps.anl.gov> On Behalf Of Abdalla Ahmad via Tech-talk
Sent: Tuesday, March 5, 2019 8:08 AM
To: tech-talk@aps.anl.gov
Subject: Questions about channel access C API programming

 

Hi

 

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?

 

Another two questions came up:

1.       What is the difference between ca_task_initialize and ca_context_create?

2.       What is the difference between request types (DBR_) and field types (DBF_)?

 

P.S.: We are using Base 3.15.6

 

Best Regards,

 

Abdalla Ahmad

Control Engineer

SESAME

Allan, Jordan.

Tel: (+962-5) 3511348 , ext. 265

Fax: (+962-5) 3511423

Mob: (+962-7)88183296

www.sesame.org.jo

 


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 Abdalla Ahmad via Tech-talk
Next: epics-Keithley_648x, drvAsynKeithley648x Heinz Junkes 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  <20192020 
Navigate by Thread:
Prev: Re: Questions about channel access C API programming Johnson, Andrew N. 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  <20192020 
ANJ, 06 Mar 2019 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·