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  2014  2015  2016  2017  2018  2019  <20202021  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  <20202021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: Re: Calling external program and read return value into record
From: "Mooney, Tim M. via Tech-talk" <tech-talk at aps.anl.gov>
To: "Rivers, Mark L." <rivers at cars.uchicago.edu>, Christian Pauly <pauly at physik.uni-wuppertal.de>
Cc: "tech-talk at aps.anl.gov" <tech-talk at aps.anl.gov>
Date: Fri, 14 Aug 2020 15:33:08 +0000
I'm confused by this, because the DTYP choices I know of for an scalcout record are "Soft Channel" and "stream".
"Soft Channel" is the default, and often the only choice.  If you build the StreamDevice module, you can cause it to include device support for the scalcout record.

Tim Mooney (mooney at anl.gov) (630)252-5417
Beamline Controls Group (www.aps.anl.gov)
Advanced Photon Source, Argonne National Lab


From: Mark Rivers <rivers at cars.uchicago.edu>
Sent: Friday, August 14, 2020 7:41 AM
To: Christian Pauly <pauly at physik.uni-wuppertal.de>
Cc: Mooney, Tim M. <mooney at anl.gov>; tech-talk at aps.anl.gov <tech-talk at aps.anl.gov>
Subject: Re: Calling external program and read return value into record
 
Hi Christian,


> It was a stupid mistake I made, the solution was easy:
> In the record definition of the scalcout record i was missing the
> DTYP "Soft Module"
> field.
> Adding this got it working...


I am confused, adding that DTYP field should not be necessary, I believe it should be the default.


This is an example of a working scalcout record in one of my databases.  Note that it does not specify DTYP.


record(scalcout,"$(P)DP41:$(S):sp_HIHI3") {
        field(CALC,"(A>=4096)&&(A<25536)?1:0")
        field(INPA,"$(P)DP41:$(S):times102.VAL  NPP NMS")
        field(INAA,"$(P)DP41:$(S):spHIHI.SVAL  NPP NMS")
        field(OUT,"$(P)DP41:$(S):sendHIHI_RAM.VAL  PP MS")
        field(OOPT,"When Non-zero")
        field(DOPT,"Use OCAL")
        field(OCAL,"AA+$P('%X',A)")
}

Can you tell me what version of EPICS base and calc you are using?

Perhaps Tim has some ideas?

Mark




________________________________
From: Christian Pauly <pauly at physik.uni-wuppertal.de>
Sent: Friday, August 14, 2020 6:45 AM
To: Mark Rivers
Subject: Re: Calling external program and read return value into record

Hi Marc

Thanks for the answer.

It was a stupid mistake I made, the solution was easy:
In the record definition of the scalcout record i was missing the
DTYP "Soft Module"
field.
Adding this got it working...

Thanks again

Christian


On 8/14/20 1:43 PM, Mark Rivers wrote:
>> "2020/08/14 10:03:51.229277 _main_ CBM:Lauda:AirFlow: Wrong I/O link type CONSTANT"
>
>
> What versions of EPICS base and the calc module are you using?  I can't find that error string in base 3.14.12.6, 3.15.5, or 7.0.4 of base, nor in the master branch of the calc module.
>
>
> Are you sure your application was built with support for the scalcout module, and that there are not other errors before that in the IOC startup output?
>
>
> Mark
>
>
>
> ________________________________
> From: Tech-talk <tech-talk-bounces at aps.anl.gov> on behalf of Christian Pauly via Tech-talk <tech-talk at aps.anl.gov>
> Sent: Friday, August 14, 2020 3:16 AM
> To: tech-talk at aps.anl.gov
> Subject: Calling external program and read return value into record
>
> Hej Folks
>
> Again i am facing the problem to call an external program (to read out a
> sensor), but this time i would like to get the stdout output from this
> program (the sensor value) into a record.
>
>
> I am trying to use the ExecuteDevice module for this, and basically it
> works. Here is what i do:
>
> record(bo,      "$(P)$(R)AirFlowRun")
> {
>     field(SCAN,   "1 second")
>     field(DTYP,   "execute")
>     field(OUT,    "@ReadFlow run")
>     field(FLNK,   "$(P)$(R)AirFlowStr")
> }
>
>
> record(stringin, "$(P)$(R)AirFlowStr")
> {
>     field(DESC,   "Measured Air Flow as String")
>     field(DTYP,   "execute")
>     field(INP,    "@ReadFlow stdout")
>     field(FLNK,   "$(P)$(R)AirFlow")
> }
>
> record(scalcout, "$(P)$(R)AirFlow")
> {
>     field(INAA,   "$(P)$(R)AirFlowStr.VAL")
>     field(CALC,   "AA")
> }
>
> The first record executes the external program, and once done it
> forwards to the second record to readout the stdout output. So far it works.
> Problem: The second record has to be a stringin record, so i have the
> output only as string not as number. record type ai is not supported by
> the EcecuteDevice module.
>
> In order to convert the string into a usable number i am trying to use
> the third "scalcout" record. It should retrieve the string via input
> link, and simply convert it to a float number.
> However: Specifying the input link "INAA" does not work, i get an error
>
> "2020/08/14 10:03:51.229277 _main_ CBM:Lauda:AirFlow: Wrong I/O link
> type CONSTANT"
>
> Acording to the scalcout documentation, it should be possible to use a
> link as input, so i dont get why this is not working...
>
> Or is there an even simpler way to achieve the goal ?
>
>
> As always: Any help or suggestionis very welcome !!
>
> Best regards,
> Christian
>

--
Dr. Christian Pauly
Bergische Universität Wuppertal
Fakultät für Mathematik und Naturwissenschaften -
Physik
Gaußstraße 20, D-42119 Wuppertal
Tel: +49 (0)202 439-2625,
Fax: +49 (0)202 439-2662



References:
Calling external program and read return value into record Christian Pauly via Tech-talk
Re: Calling external program and read return value into record Mark Rivers via Tech-talk
Re: Calling external program and read return value into record Mark Rivers via Tech-talk

Navigate by Date:
Prev: Re: Calling external program and read return value into record Johnson, Andrew N. via Tech-talk
Next: Re: ADViewers: EPICS_NTNDA_VIEWER' does not connect - ADViewers Mark Rivers via Tech-talk
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  <20202021  2022  2023  2024 
Navigate by Thread:
Prev: Re: Calling external program and read return value into record Mark Rivers via Tech-talk
Next: Re: Calling external program and read return value into record Johnson, Andrew N. via Tech-talk
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  <20202021  2022  2023  2024 
ANJ, 14 Aug 2020 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·