EPICS Controls 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  <20142015  2016  2017  2018  2019  2020  2021  2022  2023  2024  Index 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  <20142015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: Re: mbboDirect problems
From: Andrew Johnson <[email protected]>
To: Eric Norum <[email protected]>, EPICS mailing list <[email protected]>
Date: Mon, 8 Sep 2014 17:06:52 -0500
Hi Eric,

On 09/08/2014 03:49 PM, Eric Norum wrote:
> I have a number of mbboDirect records like:
> 
> record(mbboDirect, "$(P)$(R)EVR:event12trig") {
>     field(DESC, "Extraction pre-trigger")
>     field(DTYP, "asynUInt32Digital")
>     field(OUT,  "@asynMask($(PORT) 0x30C 0xFF 0)")
>     field(NOBT, "8")
>     field(MASK, "0xFF")
> }

That MASK setting will be over-written, the mbboDirect::init_record()
routine in Base 3.14 always calculates MASK from NOBT. In 3.15 you can
set it yourself if you want to use non-contiguous I/O bits.

> The IOC starts up and reads back the initial value of this record properly.
> The *first* caput to the record (I’ve tried from EDM and from caput)
> writes the readback value again, not the value from the client.
> Subsequent caputs do write the value from the client.  It’s only the
> first operation that uses old data.
> 
> Is this a known problem? 

Have you monitored the values in the B<n> fields as well as the VAL
field during the above process?

The 3.14 versions of the mbb*Direct records were a bit of a mess, which
I have cleaned up for 3.15 but changed their behaviour slightly. The
3.14 versions didn't always convert the current value between B<n> and
VAL, especially after an initial readback or if you changed the value of
OMSL at runtime. Setting OMSL to closed_loop effectively disables the
B<n> fields since reading DOL provides an already-packed bit-set in the
VAL field.

If the device support's init_record() routine returns 0 the record will
shift RVAL by SHFT bits into VAL, but the 3.14 version does not set the
B<n> fields at all from the result. In 3.15 it will set the B<n> fields
if OMSL is supervisory.

In the process() routine the output value gets constructed from the B<n>
fields when OMSL is supervisory. Writing to the B<n> fields calls
special() which also reconstructs VAL from the B<n> fields when OMSL is
supervisory.

I tried to make everything behave sensibly in the 3.15 version, so
changing OMSL causes the record to convert between the B<n> and VAL
fields properly. Mark's changes to the Asyn device support should be
compatible with the 3.15 version of the record.

- Andrew
-- 
Advertising may be described as the science of arresting the human
intelligence long enough to get money from it. -- Stephen Leacock

References:
mbboDirect problems Eric Norum

Navigate by Date:
Prev: RE: mbboDirect problems Mark Rivers
Next: Re: mbboDirect problems Eric Norum
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  <20142015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
Navigate by Thread:
Prev: Re: mbboDirect problems Eric Norum
Next: Question about asyn and offline device Sonya Hoobler
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  <20142015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
ANJ, 17 Dec 2015 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·