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  <20192020  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  <20192020  2021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: Re: Stream device - parsing array of pairs of floats
From: "Johnson, Andrew N. via Tech-talk" <[email protected]>
To: Joao Afonso <[email protected]>, "[email protected]" <[email protected]>
Date: Fri, 15 Feb 2019 16:36:26 +0000
Hi Joao,

On 2/14/19 11:35 AM, Joao Afonso via Tech-talk wrote:
> I have a string returned by a device, representing an array where each
> element is a pair <time, value>:
>
> - each pair is separated by "|": <timestamp>|<value>
> - each element of the array separated by ","
> - all values are floats
> - the timestamp increment may not be linear (that is why it needs to
> be recorded)
>
> Example
> 0.1000|0.1230000E+00,0.2000|0.4560000E+00,0.3000|0.7890000E+00, [...]
>
> Is it possible to parse this using stream device (into two waveform
> records)?
> Or do I have to use something more powerful such as asynDriver?
> I have seen several examples, but only with using simple type
> elements, not like this.
>
> As a followup, is it possible to do the inverse, merging two waveform
> records into a string?
Dirk has discussed parsing this directly using StreamDevice, but there
is another option which might be easier: Parse all of the elements into
a single waveform record, then use an aSub record to split that waveform
into two separate arrays. The aSub is a version of the subroutine record
type that has multiple input and output fields and links for which you
provide your own C function to perform any data processing that you need
to do.

You can pull in the array from the streamDevice waveform record with one
input link, split up the data inside your code and place it into a
couple of the output fields configured as double arrays. You could even
take the input as a string (char array) instead of having StreamDevice
parse it into doubles for you if performance is important.

This approach can also be used for your inverse requirement, merging
multiple input arrays into one output array, and in this case it might
be easier to generate a string (char array) directly.

HTH,

- Andrew

-- 
Arguing for surveillance because you have nothing to hide is no
different than making the claim, "I don't care about freedom of
speech because I have nothing to say." -- Edward Snowdon


Replies:
RE: Stream device - parsing array of pairs of floats Joao Afonso via Tech-talk
References:
Stream device - parsing array of pairs of floats Joao Afonso via Tech-talk

Navigate by Date:
Prev: areaDetector training at the EPICS Collaboration Meeting Mark Rivers via Tech-talk
Next: RE: How to detect AsynIPPort disconnect? 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  <20192020  2021  2022  2023  2024 
Navigate by Thread:
Prev: Re: Stream device - parsing array of pairs of floats Dirk Zimoch via Tech-talk
Next: RE: Stream device - parsing array of pairs of floats Joao Afonso 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  <20192020  2021  2022  2023  2024 
ANJ, 19 Feb 2019 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·