Argonne National Laboratory

Experimental Physics and
Industrial Control System

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

Subject: RE: Array Information
From: johill@lanl.gov (Jeff Hill)
To: <noboru.yamamoto@kek.jp>, <tech-talk@aps.anl.gov>
Date: Tue, 10 Aug 1999 18:30:49 -0600

Hi Noboru,

When channel access connects to the process variable it is provided
with the maximum number of array elements by the "dbAddr" structure
which is filled in by the "cvt_dbaddr" record support routine. As
you have correctly observed the client library will not allow the
client program to send get or put requests for more than this maximum
number of elements, and a new maximum is only discovered when the
client reconnects.

Here is an extract from the cvt_dbaddr() function from the subArray
record:

static long cvt_dbaddr(paddr)
    struct dbAddr *paddr;
{
    if (!psa->udf && psa->nelm > psa->nord)
       paddr->no_elements = psa->nord;
    else
       paddr->no_elements = psa->nelm;
}

So we can see that the NELM and the NORD field are used to provide this
maximum.

Is it possible to just set the maximum value in these fields to be greater
the maximum number of elements that will at any time be used in your
system?

If not I am open to discussing relaxing this restriction so that the
client can send get and put request for more than the maximum provided
at connect time. In this situation the database access layer will be
responsible for detecting, and refusing, out of bounds requests. The primary
drawback will be that client applications that use put and get requests
that do not receive a call back on IO completion may have more trouble
determining which get/put has failed when several get/put(s) occur
together, and the wrong number of elements is specified.

Jeff

>
> on Page93, chap 7,sect5 of EPICS IOC Application Developer's
> Guide,it says,
> "get_array_info() function  returens the CURRENT number of elements and
> the offset of the first value of the
> specified array".
> In other words,  no_elements which get_array_info() return may be
> smaller than the maximu size of this array.
>
> Now, ca library compares requested elements count with privCount field
> of channel structure and
> it rejects request when the requested count is larger than privCount.
> privCount field is updated only when
> channel is (re) connected. i.e. you cannot request loger array data
> than the size of array which get_array_info
> when your channel is connected with the Database.
>
> In our application , the CURRENT number of elements of SubArray records
> can vary time to time.
> However,  application program cannot read an array data longer than the
> element count which is a element count
> at the time channel is connected. It may loose data and its size cannot
> be predictable.
>
> Does anyone encounterd similar problem? Or have you solved this problem?
>
> Ragards,
>
> Noboru Yamaoto
> KEKB control Group
> KEK, JAPAN
>



Replies:
Re: Array Information Noboru Yamamoto
References:
Array Information Noboru Yamamoto

Navigate by Date:
Prev: Staff Positions Bob Dalesio
Next: Re: Array Information Noboru Yamamoto
Index: 1994  1995  1996  1997  1998  <19992000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020 
Navigate by Thread:
Prev: Array Information Noboru Yamamoto
Next: Re: Array Information Noboru Yamamoto
Index: 1994  1995  1996  1997  1998  <19992000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020 
ANJ, 10 Aug 2010 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·