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: | asyn reading to waveform records |
From: | Rod Nussbaumer <[email protected]> |
To: | epics Techtalk <[email protected]> |
Date: | Wed, 01 Feb 2012 11:18:22 -0800 |
Hi All.As a fallback alternative to my earlier problem reading oscilloscope waveforms with StreamDevice (and to potentially reveal something about the original problem), I am trying to use asyn to read the waveform into a waveform record directly (without the aid of StreamDevice).
If I use the waveform record with FTVL=UCHAR or FTVL=CHAR, and DTYP=asynOctetRead, I am able to acquire the scope binary-formatted data into the waveform record, and I seem to be able to get the performance that I require. However, this method gives me byte oriented data, and the 'scope is sending 16-bit signed data. So, I tried using the FTVL=SHORT, or FTVL=USHORT and DTYP set to any of the 'asynIntXXArrayWfIn' data types. This results in iocInit reporting :
devAsynInt16Array::initCommon, TEST:SCOPE1:CURVE find asynInt16Array interface failed
Some combinations of FTVL & DTYP fail with messages like:
devAsynInt8Array::initCommon, TEST:SCOPE1:CURVE field type must be SIGNED_TYPE or UNSIGNED_TYPE
My application dbd file contains:
device(waveform,INST_IO,asynWfOctetCmdResponse,"asynOctetCmdResponse") device(waveform,INST_IO,asynWfOctetWriteRead,"asynOctetWriteRead") device(waveform,INST_IO,asynWfOctetRead,"asynOctetRead") device(waveform,INST_IO,asynWfOctetWrite,"asynOctetWrite") device(waveform,INST_IO,asynInt8ArrayWfIn,"asynInt8ArrayIn") device(waveform,INST_IO,asynInt8ArrayWfOut,"asynInt8ArrayOut") device(waveform,INST_IO,asynInt16ArrayWfIn,"asynInt16ArrayIn") device(waveform,INST_IO,asynInt16ArrayWfOut,"asynInt16ArrayOut") device(waveform,INST_IO,asynInt32ArrayWfIn,"asynInt32ArrayIn") device(waveform,INST_IO,asynInt32ArrayWfOut,"asynInt32ArrayOut") device(waveform,INST_IO,asynFloat32ArrayWfIn,"asynFloat32ArrayIn") device(waveform,INST_IO,asynFloat32ArrayWfOut,"asynFloat32ArrayOut") device(waveform,INST_IO,asynFloat64ArrayWfIn,"asynFloat64ArrayIn") device(waveform,INST_IO,asynFloat64ArrayWfOut,"asynFloat64ArrayOut")
As yet another possible fallback, is there a way to coerce the byte-oriented data that I acquire to be 16-bit word data, perhaps using a subarray record in some obscure way? I probably do need to use a subarray record anyway, as there is a 6-byte header on the waveform, which I need to drop.
For the record, this is EPICS 3.14.11 and Asyn R4-13 on x86 Linux. Thanks. Rod Nussbaumer ISAC Controls, TRIUMF Vancouver, Canada.