EPICS Home

Experimental Physics and Industrial Control System


 
1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  <20122013  2014  2015  2016  2017  2018  2019  2020  Index 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  <20122013  2014  2015  2016  2017  2018  2019  2020 
<== Date ==> <== Thread ==>

Subject: Re: What is void* puser in ca_create_channel
From: Florian Feldbauer <florian@ep1.ruhr-uni-bochum.de>
To: "Hill, Jeffrey O" <johill@lanl.gov>
Cc: EPICS tech talk <tech-talk@aps.anl.gov>
Date: Mon, 02 Apr 2012 16:04:58 +0200
Hey,

after creating all channels and subscriptions I used ca_flush_io() in my program as mentioned in the talk "Channel Access Client Programming" from Dirk Zimoch at the last
EPICS meeting at PSI.
When I use ca_pend_event() instead, the CA is working.

Best regards,
Florian


On 03/30/2012 04:10 PM, Hill, Jeffrey O wrote:
Just one other question: Can I use the CA methods ca_create_channel and
ca_create_subscription within a c++ class?
Yes, the necessary 'extern"C"' bracketing is in the ca header files so that its C interface can be called from C++.

Any idea based on this few information, or should I post my code?
If the CA client and its IOC are not on the same subnet then you may need to add the IOC's address to the EPICS_CA_ADDR_LIST environment variable for the client. Otherwise, if they are intended to be on the same subnet them make certain that both hosts are configured with the same subnet mask.

There are also some additional suggestions in the troubleshooting section of the CA reference manual.

Jeff

-----Original Message-----
From: Florian Feldbauer [mailto:florian@ep1.ruhr-uni-bochum.de]
Sent: Friday, March 30, 2012 6:29 AM
To: Hill, Jeffrey O
Cc: EPICS tech talk
Subject: Re: What is void* puser in ca_create_channel

Thanks for your answers.

Just one other question: Can I use the CA methods ca_create_channel and
ca_create_subscription within a c++ class?
The project we are working on should use OO techniques.
We need not only an interface to EPICS, but also to a simulation.
So we wanted to have an abstract base class, which is used by the rest
of our project, and  derived classes for the implementation of
the individual "control systems". One derived class would contain the CA
for EPICS and another the interface to our simulation.

I can compile my test program for this object-structure, but I don't get
a conncetion to my EPICS ioc.
The two examples from makeBaseApp.pl are working correctly.

Any idea based on this few information, or should I post my code?

Best regards,
Florian

On 03/29/2012 05:19 PM, Hill, Jeffrey O wrote:
Hi,

The puser pointer you pass to ca_create_channel is saved by the library
with the channel and is later supplied as a puser argument to your channel
connectione state update callback function. There is also a ca function
"void * ca_puser ( CHID )" that will return the puser pointer that was
supplied when the channel was created.
Likewise, the puser pointer you pass to ca_create_subscription is saved
by the library with the subscription and is later supplied as a puser
argument to your subscription update callback function.
How does this parameter have to look like?
Can I use a C-Struct with any member I want to have (even members which
are not for the CA, but for another part of my program)? Are there any
members which are mandatory? (like value or chid)
A pointer to any data structure can be used. The CA library does not in
any way access, or place any restrictions on the content of, this user
application private data structure. The user application is of course
responsible for allocation, initialization, maintenance, and de-allocation
(proper cleanup) of this data structure.
Use of void pointers passed to callbacks is an old technique which is
roughly equivalent to a virtual function in modern software interfaces,
BTW.
HTH, and feel free to send any other questions that you might have, and
I will do my best to answer them.
Jeff

-----Original Message-----
From: tech-talk-bounces@aps.anl.gov [mailto:tech-talk-
bounces@aps.anl.gov]
On Behalf Of Florian Feldbauer
Sent: Thursday, March 29, 2012 4:01 AM
To: EPICS tech talk
Subject: What is void* puser in ca_create_channel

Dear all,

I currently write a CA Client that should monitor all measured
temperatures in my experiment
to regulate the chillers.
This is my first try to program a CA Client, and I have a question
concerning this:

The ca_create_channel and the ca_create_subscription methods both have
a parameter void* puser. How does this parameter have to look like?
Can I use a C-Struct with any member I want to have (even members which
are not
for the CA, but for another part of my program)? Are there any members
which are mandatory? (like value or chid)

In the camonitor.c example generated with makeBaseApp.pl this puser is
just a pointer to a C-Struct containing
a c-string value, the chid and evid of the channel.

Best regards,
Florian

--
-------------------------------------
| Florian Feldbauer                 |
| Ph.D. student                     |
|                                   |
| Institut für Experimentalphysik I |
| Ruhr-Universität Bochum           |
| Universitätsstr. 150              |
| D-44780 Bochum                    |
|                                   |
| Office: NB 2/173                  |
| Phone:  (+49)234 / 32-23538       |
| Fax:    (+49)234 / 32-14170       |
| Web:    http://www.ep1.rub.de     |
-------------------------------------

--
-------------------------------------
| Florian Feldbauer                 |
| Ph.D. student                     |
|                                   |
| Institut für Experimentalphysik I |
| Ruhr-Universität Bochum           |
| Universitätsstr. 150              |
| D-44780 Bochum                    |
|                                   |
| Office: NB 2/173                  |
| Phone:  (+49)234 / 32-23538       |
| Fax:    (+49)234 / 32-14170       |
| Web:    http://www.ep1.rub.de     |
-------------------------------------


--
-------------------------------------
| Florian Feldbauer                 |
| Ph.D. student                     |
|                                   |
| Institut für Experimentalphysik I |
| Ruhr-Universität Bochum           |
| Universitätsstr. 150              |
| D-44780 Bochum                    |
|                                   |
| Office: NB 2/173                  |
| Phone:  (+49)234 / 32-23538       |
| Fax:    (+49)234 / 32-14170       |
| Web:    http://www.ep1.rub.de     |
-------------------------------------


Replies:
RE: What is void* puser in ca_create_channel Hill, Jeffrey O
References:
What is void* puser in ca_create_channel Florian Feldbauer
RE: What is void* puser in ca_create_channel Hill, Jeffrey O
Re: What is void* puser in ca_create_channel Florian Feldbauer
RE: What is void* puser in ca_create_channel Hill, Jeffrey O

Navigate by Date:
Prev: Re: StripTool and History Kasemir, Kay
Next: Re: casStrmClient.cc error: invalid channel identifier Andrew Johnson
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  <20122013  2014  2015  2016  2017  2018  2019  2020 
Navigate by Thread:
Prev: RE: What is void* puser in ca_create_channel Hill, Jeffrey O
Next: RE: What is void* puser in ca_create_channel Hill, Jeffrey O
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  <20122013  2014  2015  2016  2017  2018  2019  2020