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: Tips for doing conditional logic in EPICS records |
From: | "Mooney, Tim M. via Tech-talk" <tech-talk at aps.anl.gov> |
To: | "tech-talk at aps.anl.gov" <tech-talk at aps.anl.gov>, John Priller <priller at nscl.msu.edu>, "mark_a_davis at comcast.net" <mark_a_davis at comcast.net>, Mark Davis <davism50 at msu.edu> |
Date: | Mon, 27 Apr 2020 16:04:14 +0000 |
Hi Mark,
One way to do conditional execution in an EPICS database is by using the SELM and SELN fields of a seq record. Set SELM to "Specified", and write a number to the SELN field. If you want more than one of several things to happen, you can write "Mask" to SELM,
and write a bitmap value to SELN, specifying which things to do.
Tim Mooney (mooney at anl.gov) (630)252-5417
Beamline Controls Group (www.aps.anl.gov) Advanced Photon Source, Argonne National Lab From: Tech-talk <tech-talk-bounces at aps.anl.gov> on behalf of Mark Davis via Tech-talk <tech-talk at aps.anl.gov>
Sent: Monday, April 27, 2020 10:05 AM To: tech-talk at aps.anl.gov <tech-talk at aps.anl.gov>; John Priller <priller at nscl.msu.edu> Subject: Tips for doing conditional logic in EPICS records Hi all,
I am looking for some tips on the best way to implement logic such as the following using EPICS records: flag = 1; for (each new set of readings) { if (readbackA == fixedVal1) flag = 1; else if (flag == 1) setVal = readbackB; else if (readBackC == fixedVal2) setVal = readbackD; flag = 0; } For the initial setting I figured simply a record that includes the initial value in the VAL field (and PINI set to "Yes"?). The for "loop" would be simply an FLNK in the record (or last in a sequence of records) that gets the new readings, triggering the processing of the the record that handles the 1st if condition (in this case, I have one record that gets them all at once). At that point how to best to proceed is not obvious to me, and there are probably lots of possibilities (A sequence of calcout or scalcout records? Maybe a transform record?) Suggestions? -- Mark Davis NSCL/FRIB Control Systems Software Engineer davism50 at msu.edu |