Experimental Physics and Industrial Control System
Hi Mark,
you might want to look at recGblCheckDeadband() used for ai/ao monitor deadbands.
Ralph did some work to here to avoid being tripped up by non-finite floating point values.
https://github.com/epics-base/epics-base/blob/3.16/src/ioc/db/recGbl.c#L277
Michael
On 11/29/2017 05:56 PM, Mark Rivers wrote:
> Hi Daniel,
>
>
>
> I think this patch to devEpidSoft.c should implement ODEL. Let me know if this works and I will commit it.
>
>
>
> diff --git a/stdApp/src/devEpidSoft.c b/stdApp/src/devEpidSoft.c
>
> index 62c753f..118fb0c 100755
>
> --- a/stdApp/src/devEpidSoft.c
>
> +++ b/stdApp/src/devEpidSoft.c
>
> @@ -41,6 +41,8 @@
>
> * dT(n) Time difference between n-1 and n
>
> */
>
>
>
> +#include <math.h>
>
> +
>
> #include <alarm.h>
>
> #include <dbDefs.h>
>
> #include <dbAccess.h>
>
> @@ -207,7 +209,9 @@ static long do_pid(epidRecord *pepid)
>
> pepid->dt = dt;
>
> pepid->err = e;
>
> pepid->cval = cval;
>
> - pepid->oval = oval;
>
> + if ((pepid->odel != 0) && (fabs(pepid->oval - oval) > pepid->odel)) {
>
> + pepid->oval = oval;
>
> + }
>
> pepid->p = p;
>
> pepid->i = i;
>
> pepid->d = d;
>
>
>
> Mark
>
>
>
>
>
> *From:*[email protected] [mailto:[email protected]] *On Behalf Of *Crisp, Daniel
> *Sent:* Wednesday, November 29, 2017 2:48 PM
> *To:* [email protected]
> *Subject:* EPID bumpless restart
>
>
>
> Hello,
>
>
>
> I'm currently using the EPID record to stabilize a dipole fields. It is reading a magnetic field from a hallprobe controller, and driving a power supply current to match the hallprobe reading to a target value specified by the user.
>
>
>
> 1) How can I make the EPID record perform a ‘bumpless restart’?
>
> Currently, if the power supply set point is significantly changed while the EPID feedback is off, the epid record will drive around the supply wildly once turned back on. I have some channels set up which pause a user’s request to turn on feedback until the ‘<epid_channel>.I’ field can be automatically set with the live value in the supply. And when I monitor the ‘<epid_channel>.I’ value, I see that it in fact does get set, but it then gets overwritten and ignored. What’s the best way of dealing with this?
>
>
>
> 2) How to best implement a deadband? (It appears there was a thread about the ODEL field being present, but not used in the epid support code? Am I wrong? Is this still the case?)
>
> Especially for some magnets that require a less frequent touch, I’d like the epid to only act on the supply when the error reaches a larger percent difference. Specifically, I’d like it to only react to errors in field greater than, say, .01% of the target field. We had tried to simply decrease the KP value enough that resulting P values are less than what can be acted on by the supply (supply doesn’t recognize a difference in set points differing by the 3^rd significant figure), but this isn’t ideal.
>
>
>
> Thank you!
>
> -Dan
>
>
>
- References:
- EPID bumpless restart Crisp, Daniel
- RE: EPID bumpless restart Mark Rivers
- Navigate by Date:
- Prev:
RE: EPID bumpless restart Crisp, Daniel
- Next:
Re: Release or Tags in epics-modules Kevin Peterson
- 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
- Navigate by Thread:
- Prev:
RE: EPID bumpless restart Mark Rivers
- Next:
RE: EPID bumpless restart Crisp, Daniel
- 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