Argonne National Laboratory

Experimental Physics and
Industrial Control System

1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  <20062007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  Index 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  <20062007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017 
<== Date ==> <== Thread ==>

Subject: Re: Sequencer embedded C code question
From: Ned Arnold <nda@aps.anl.gov>
Cc: tech-talk@aps.anl.gov
Date: Thu, 29 Jun 2006 16:01:09 -0500
Wow, that's cool.

Tim Mooney wrote:
Jiro Fujita wrote:
Hello,
This is probably really an elementary question, but we have been
trying to interface an RS-232 device to EPICS soft IOC on Linux.  We
are using EPICS 3.14.8.2 with Asyn 4.6 (devGpib) via serial port.  The
response from the device looks like this:

1+32.23
2-50.01
3+23.98
...
...

It has five channels, reads one value a second, contiunally sending
the message through the serial port (that seems to be a typical thing
here at STAR/BNL).
We need to have the data sorted into five different PVs, based upon
the channel names.  In the end, the example above should look like
this:

channel 1: 32.23
channel 2: -50.01
channel 3: 23.98

Because we need the channel number and the + or - sign in the raw
data, I am taking the data into the IOC as string, having the
sequencer split the channel number, based upon that, we are trying to
put the value into the database.

I'm not sure if this will be any less trouble than the solution you're
already pursuing, because it requires a record that is not part of EPICS base.
But if you happen to have the sCalcout record available, you can do this with
an sCalcout and a dfanout. Here's what the database would look like:


scalc.INAA = <link to input string> # string from serial device
scalc.CALC = "int(aa)" # get channel number
scalc.DOPT = "Use OCAL" # evaluate '.OCAL' expression
scalc.OCAL = "dbl(aa[1,-1])" # get value (skip past channel number)
scalc.OUT = "dfanout.VAL PP" # write value to dfanout


dfanout.SELM = "Specified" # only write to link specified via SELL
dfanout.SELL = "scalc.VAL NPP" # scalc calculated link to use
dfanout.OUTB = <link to channel 1 PV> # if scalc.VAL==1, write to <channel 1 PV>
dfanout.OUTC = <link to channel 2 PV> # ...and so on
dfanout.OUTD = <link to channel 3 PV>
dfanout.OUTE = <link to channel 4 PV>
dfanout.OUTF = <link to channel 5 PV>




Replies:
Re: Sequencer embedded C code question Maren Purves
References:
Sequencer embedded C code question Jiro Fujita
Re: Sequencer embedded C code question Tim Mooney

Navigate by Date:
Prev: Re: Sequencer embedded C code question Tim Mooney
Next: Re: Sequencer embedded C code question Maren Purves
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  <20062007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017 
Navigate by Thread:
Prev: Re: Sequencer embedded C code question Tim Mooney
Next: Re: Sequencer embedded C code question Maren Purves
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  <20062007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017 
ANJ, 02 Sep 2010 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·