Hi Pavel,
The errors are
coming because it is not linking with the asyn library.
You need to change
this:
<app>_LIBS_vxWorks += asyn
<app>_LIBS_vxWorks += devTDS3000
To this (because
you are using Linux, not vxWorks):
<app>_LIBS += asyn
<app>_LIBS += devTDS3000
Mark
Hello, Nick!
Dear colleagues!
Could you please explain how to use your TDS3000 support for my Tektronix 3054C
(i have only the Ethernet interface)?
I am using the RHEL x86 operating system. I have successfully installed epics
base (R3-14-12-1), extensions (1.7), sequencer (seq-2.1.3), asyn driver support
(asyn4-18), tektronix tds3000 device support (tds3000-2.4) according to the
manual. And they all seem to be working fine.
I think I have some problems with creating an application. I can't understand
how to perform the following:
Using the software
In order to use the support in an application do the following:
Add the following to <top>/configure/RELEASE
TDS3000 = <full path to installation directory>
ASYN = <full path to installation directory>
Add the following to the application Makefile.
<app>_LIBS_vxWorks += asyn
<app>_LIBS_vxWorks += devTDS3000
Add the following to the <app>Include.dbd.
include "devTDS3000.dbd"
Add the following to the Db Makefile.
DB_INSTALLS += $(TDS3000)/db/TDS3000.vdb
My configuration is as follows:
EPICS_HOST_ARCH=linux-x86
EPICS_BASE=/root/applications/epics/R3-14-12-1/base
PATH=$PATH:$EPICS_BASE/bin/$EPICS_HOST_ARCH
SNCSEQ=/root/applications/epics/R3-14-12-1/modules/seq/seq-2.1.3
ASYN=/root/applications/epics/R3-14-12-1/modules/asyn/asyn4-18
TDS3000=/root/applications/epics/R3-14-12-1/modules/instrument/tds3000/tds3000-2.4
apps=$EPICS_BASE/../apps
extensions=$EPICS_BASE/../extensions
1. I have created an application in the apps directory by invoking:
mkdir tronix
cd tronix
$EPICS_BASE/bin/$EPICS_HOST_ARCH/makeBaseApp.pl -t ioc tronix
$EPICS_BASE/bin/$EPICS_HOST_ARCH/makeBaseApp.pl -i -t ioc tronix
2. Then I edited the RELEASE file in CONFIGURE/RELEASE - added 2 lines
(specified the TDS3000 and ASYN paths).
3. After that I built Makefile in apps/tronix/
3. Then I opened the Makefile in the tronixApp folder and added:
tronix_LIBS_vxWorks += asyn
tronix_LIBS_vxWorks += devTDS3000
4. Added include "devTDS3000.dbd" to
apps/tronix/tronixApp/src/O.Common/tronixInclude.dbd.
5. Added "DB_INSTALLS += $(TDS3000)/db/TDS3000.vdb" to the Db
Makefile (apps/tronix/tronixApp/Db/Makefile).
6. Invoked make under "apps/tronix/tronixApp/"
Eventually got the following error:
/usr/bin/g++
-c -D_POSIX_C_SOURCE=199506L -D_POSIX_THREADS
-D_XOPEN_SOURCE=500
-D_X86_ -DUNIX -D_BSD_SOURCE -Dlinux -D_REENTRANT
-O3 -Wall
-m32 -g -MMD -I.
-I../O.Common -I. -I..
-I../../../include/os/Linux -I../../../include
-I/root/applications/epics/R3-14-12-1/modules/seq/seq-2.1.3/include
-I/root/applications/epics/R3-14-12-1/base/include/os/Linux
-I/root/applications/epics/R3-14-12-1/base/include
-I/root/applications/epics/R3-14-12-1/modules/asyn/asyn4-18/include
tronix_registerRecordDeviceDriver.cpp
/usr/bin/g++ -o tronix
-L/root/applications/epics/R3-14-12-1/base/lib/linux-x86 -Wl,-rpath,/root/applications/epics/R3-14-12-1/base/lib/linux-x86
-m32
tronix_registerRecordDeviceDriver.o tronixMain.o -lrecIoc
-lsoftDevIoc -lmiscIoc -lrsrvIoc -ldbtoolsIoc -lasIoc -ldbIoc -lregistryIoc
-ldbStaticIoc -lca -lCom
tronix_registerRecordDeviceDriver.o: In function
`__static_initialization_and_destruction_0':
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:134:
undefined reference to `pvar_rset_asynRSET'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:134:
undefined reference to `pvar_func_asynRecordSizeOffset'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynAiInt32'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynAiInt32Average'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynAiFloat64'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynAiFloat64Average'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_devAiTDS3000Gpib'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynAoInt32'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynAoFloat64'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_devAoTDS3000Gpib'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynBiInt32'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynBiUInt32Digital'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_devBiTDS3000Gpib'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynBoInt32'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynBoUInt32Digital'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_devBoTDS3000Gpib'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynLiInt32'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynLiUInt32Digital'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynLoInt32'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynLoUInt32Digital'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynMbbiInt32'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynMbbiUInt32Digital'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_devMbbiTDS3000Gpib'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynMbbiDirectUInt32Digital'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynMbboInt32'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynMbboUInt32Digital'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_devMbboTDS3000Gpib'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynMbboDirectUInt32Digital'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynSiOctetCmdResponse'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynSiOctetWriteRead'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynSiOctetRead'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_devSiTDS3000Gpib'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynSoOctetWrite'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_devSoTDS3000Gpib'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynWfOctetCmdResponse'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynWfOctetWriteRead'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynWfOctetRead'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynWfOctetWrite'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynInt8ArrayWfIn'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynInt8ArrayWfOut'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynInt16ArrayWfIn'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynInt16ArrayWfOut'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynInt32ArrayWfIn'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynInt32ArrayWfOut'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynFloat32ArrayWfIn'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynFloat32ArrayWfOut'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynFloat64ArrayWfIn'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynFloat64ArrayWfOut'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_devWfTDS3000Gpib'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:405:
undefined reference to `pvar_dset_asynRecordDevice'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:415:
undefined reference to `pvar_drvet_drvAsyn'
tronix_registerRecordDeviceDriver.o: In function
`tronix_registerRecordDeviceDriver':
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:453:
undefined reference to `pvar_func_vxi11RegisterCommands'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:454:
undefined reference to `pvar_func_asynRegister'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:455:
undefined reference to `pvar_func_asynInterposeFlushRegister'
/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86/tronix_registerRecordDeviceDriver.cpp:456:
undefined reference to `pvar_func_asynInterposeEosRegister'
collect2: ld returned 1 exit status
make[2]: *** [tronix] Error 1
make[2]: Leaving directory
`/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src/O.linux-x86'
make[1]: *** [install.linux-x86] Error 2
make[1]: Leaving directory
`/root/applications/epics/R3-14-12-1/apps/tronix/tronixApp/src'
make: *** [src.install] Error 2
Thanks.
Pavel
On Tue, Dec 6, 2011 at 6:41 PM, Eric Norum <[email protected]> wrote:
Nick DiMonte at the APS
has written a nice support package for Tektronix 3000/5000 oscilloscopes.
The same driver works with Network, GPIB, or RS-232 interfaces.
I believe that the screens are still MEDM-only.
http://www.aps.anl.gov/epics/modules/instrument/tds3000/index.html
On Dec 5, 2011, at 11:33 PM, Dirk Zimoch wrote:
> Pavel,
>
> I don't know the TDS 5054, but most oscilloscopes come with GPIB, RS232,
or VXI11 (="GPIB over TCP") network interface and are controlled with
text commands. In that case the combination asynDriver/StreamDevice will do the
job.
>
> http://www.aps.anl.gov/epics/modules/soft/asyn/
> http://epics.web.psi.ch/software/streamdevice/
>
> If you are lucky, someone has already written a StreamDevice protocol file
for it. But if not, it is not difficult.
>
> Here at PSI, we also run EPICS directly on some oscilloscopes. Many
oscilloscopes nowadays use Windows as the operating system and come with an API
to get direct access to the oscilloscope functions. This allows to write an EPICS
device driver. Running the IOC directly on the oscilloscope saves some network
traffic. With an external IOC, the data is first transferred from the
oscilloscope to the IOC (e.g. via VXI11) and then from the IOC to the client
via Channel Access. With an IOC integrated into the oscilloscope, you only have
Channel Access. But writing such a driver is somewhat sophisticated.
>
> Dirk
>
--
Eric Norum
[email protected]
--
Sincerely,
Pavel Maslov, MSc
R&D Institute for Electro-Physical Apparatus
Mobile: +7
(951) 672 22 19
Phone: +7 (812) 461 01 01