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: Questions about channel access C API programming
From: Abdalla Ahmad via Tech-talk <tech-talk@aps.anl.gov>
To: "tech-talk@aps.anl.gov" <tech-talk@aps.anl.gov>
Date: Tue, 5 Mar 2019 14:08:12 +0000

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

 

#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_pend_io(1);
    ca_put(DBR_DOUBLE, pvID1, &v2);

    ca_search("Analog_2", &pvID2);
    ca_pend_io(1);
    ca_put(DBR_DOUBLE, pvID2, &v2);
    
    ca_task_exit();
}

/*

record(ai, "Analog_1")
{
    field(PINI, "YES")
    field(VAL, "11.44")
    field(PREC, "2")
}
 
record(ai, "Analog_2")
{
    field(PINI, "YES")
    field(VAL,  "5E-8")
    field(PREC, "2")
}

*/

Replies:
Re: Questions about channel access C API programming Wang Xiaoqiang via Tech-talk
Re: Questions about channel access C API programming Johnson, Andrew N. via Tech-talk

Navigate by Date:
Prev: Re: Basic PVAccess question will.rogers--- via Tech-talk
Next: Re: Basic PVAccess question Marty Kraimer 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: The scope they are using is a Tektronix DPO 4104 Luchini, Kristi L. via Tech-talk
Next: Re: Questions about channel access C API programming Wang Xiaoqiang 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, 05 Mar 2019 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·