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 2025 | 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 2025 |
<== Date ==> | <== Thread ==> |
---|
Subject: | Questions about channel access C API programming |
From: | Abdalla Ahmad via Tech-talk <[email protected]> |
To: | "[email protected]" <[email protected]> |
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 |
#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") } */