Experimental Physics and
| |||||||||||||||
|
Hi everybody,
Within my Asyn IOC I need sometime to modify some PV from other IOC. I did try to do this using the .db but the task was too complex and I am now trying to setup my own CA client inside Asyn. As I am using Asyn I have also linked all the callback from CA to the one from Asyn... This seems to work more or less but I have some problems with the ca_put. quick resume of what I am doing =========================== --------------- # Part 1 (OK) At the setup of the IOC I call: ca_context_create (ca_enable_preemptive_callback); ... ca_search_and_connect(pvext_write1->name,&(pvext_write1->chan_id),callback_coHaAr,NULL); ca_search_and_connect(pvext_write2->name,&(pvext_write2->chan_id),callback_coHaAr,NULL); ... ca_search_and_connect(pvext_writeN->name,&(pvext_writeN->chan_id),callback_coHaAr,NULL); and at the end of the setup I call ca_flush_io() This work fine and after some seconds I enter callback_coHaAr() for each of the CA created. --------------- # Part 2 Then at some point in my code, changes of value my internal PV, I modify external PV. status=ca_put_callback (DBR_DOUBLE, pvext_write1->chan_id, &(pvext_write1->val.float64),callback_put,pvext_write1); status=ca_put_callback (DBR_DOUBLE, pvext_write2->chan_id, &(pvext_write2->val.float64),callback_put,pvext_write2); .... status=ca_put_callback (DBR_DOUBLE, pvext_writeN->chan_id, &(pvext_writeN->val.float64),callback_put,pvext_writeN); And after all my writes has been put, I call ca_flush_io() And this is when sometime my hook callback_put() is correctly called back (Almost 90% the first time) callback_put() > chid:0x949a3a0 usr:0x94c86a8 (status:x1) But then if I make succesive call, the hook callback_put() might be called back some more time.. and then never However If I shutdown the remote IOC, all my callback appears If only one was missing, I get on my epicConsole: callback_put() > chid:0x95074c8 usr:0x9535860 (status:xc0) If 4 were missing: callback_put() > chid:0x98623f8 usr:0x9890790 (status:xc0) Conclusion =========================== I think I am missing something while mixing the epicsThread of asyn and ca, but I really don't know what to try more and I don't find any good examples of ChannelAccess client with thread.
Best,
| ||||||||||||||
ANJ, 21 Dec 2017 |
·
Home
·
News
·
About
·
Base
·
Modules
·
Extensions
·
Distributions
·
Download
·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing · |