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 | 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 |
<== Date ==> | <== Thread ==> |
---|
Subject: | Re: asyn: what if a driver wants to force callbacks? |
From: | Henrique Almeida <[email protected]> |
To: | [email protected] |
Cc: | "[email protected] Talk" <[email protected]> |
Date: | Thu, 26 May 2016 23:49:53 -0300 |
I don't think so, I had this problem on Wednesday while writing an areaDetector IOC that updates a waveform record whenever a new image is saved. If the same file name is used twice in a row, the second callback does not emit a monitor event. I'm using EPICS base 3.16 and asyn and areaDetector github master branch.
On 5/26/2016 1:52 AM, Torsten Bögershausen wrote:I remember that Mark Rivers had said something about changing it so that a callback would happen for parameters for which the appropriate setXxxParam() function was called, even if the value had not changed. And I THINK that it made it in to one of the more recent versions, but if so, I don't remember which one.
Mark Davis, FRIB/NSCL
To my knowledge,
there is no update.
In our driver, we do it like this:
/* If not moving, trigger a record processing at low rate */
if (!nowMoving) setDoubleParam(pC_->motorPosition_, newPositionInSteps + 1);
setDoubleParam(pC_->motorPosition_, newPositionInSteps);
And I added a test case:
https://github.com/EuropeanSpallationSource/MCAG_Base_Project/blob/master/epics/test/500_DLY-STOP.py
Out of curiosity:
Which kind of device are you using ?
On 25/05/16 23:50, Ford, Christopher wrote:
Hi,
In 2015 there was some discussion on Tech-Talk about how to force a callback for a parameter that had not changed values.
Mark Rivers suggested a work-around, as shown below.
I wonder if anyone has an update on the situation since then? Has any other method appeared? Or did you have success with the work-around?
Thanks,
-Chris Ford, SLAC
On16 Nov 2015 Mark Rivers writes:
If a driver wants to force a callback there is a method that does not require any changes to the base classes, e.g. exposing statusChanged_ as protected or adding a new
isMotorRecordnowFilterButAlwaysProcess_ flag. The driver simply needs to set a parameter to a different value from present and then back to its current value, for example
setDoubleParam(pC_->motorPosition_(position+1.);
setDoubleParam(pC_->motorPosition_(position);
callParamCallbacks();
-- Mark Davis NSCL/FRIB Control Systems Software Engineer [email protected]