wiki:epics/streamdevice/example1

Version 1 (modified by obina, 12 years ago) (diff)

--

Application作成; Socket I/O

KEITHLEY 2701を例に; EPICS R3.14.9での作業ログ(R3.14.12以降では不要の部分もあり)

作業ディレクトリ作成

pfrproc2:~ % mkdir /users/obina/epics/app/Keith2701
pfrproc2:~ % cd /users/obina/epics/app/Keith2701

テンプレートとしてiocを使用。

pfrproc2:Keith2701 % makeBaseApp.pl -t ioc keith2701

pfrproc2:Keith2701 % makeBaseApp.pl -i -t ioc keith2701
The following target architectures are available in base:
    linux-x86
    linux-x86_64
What architecture do you want to use? linux-x86_64
The following applications are available:
    keith2701
What application should the IOC(s) boot?
The default uses the IOC's name, even if not listed above.
Application name?
pfrproc2:Keith2701 % vi configure/RELEASE

SNCSEQ=$(EPICS_BASE)/../modules/soft/seq/2.0.11
ASYN=$(EPICS_BASE)/../modules/soft/asyn/4-11
STREAM=$(EPICS_BASE)/../modules/soft/stream/2-5

この段階でエラーが出ないかどうか確認

pfrproc2:Keith2701 % make

問題無ければ、いちど全て削除する

pfrproc2:Keith2701 % make distclean

srcディレクトリで作業

pfrproc2:Keith2701 % cd keith2701App/src/

dbdファイル作成(Socket I/Oのみならば、Serial...とvxi11...の2行は不要だが、ついでに書いてしまう)

pfrproc2:src % vi K2701.dbd
registrar(drvAsynIPPortRegisterCommands)
registrar(drvAsynSerialPortRegisterCommands)
registrar(vxi11RegisterCommands)

Makefile編集; 順序に注意。stream.dbdより前にaai,aaoを追加すること。(R3.14.12では不要になる)

pfrproc2:src % vi Makefile

keith2701_DBD += base.dbd
keith2701_DBD += aaiRecord.dbd
keith2701_DBD += aaoRecord.dbd
keith2701_DBD += asyn.dbd
keith2701_DBD += stream.dbd
keith2701_DBD += K2701.dbd

keith2701_LIBS += asyn
keith2701_LIBS += stream

プロトコルファイル作成

pfrproc2:src % cd ../Db/
pfrproc2:Db % vi K2701.proto

Terminator = CR LF;
#
getIDN {
    out "*IDN?";   in "%39c";
}

Dbファイル作成

pfrproc2:Db % vi test.db

record(stringin, "obina:idn")
{
    field(DESC, "get IDN")
    field(DTYP, "stream")
    field(INP,  "@K2701.proto getidn PS1")
}

同じディレクトリのMakefileに
DB += test.db
を追加

application top で makeをかける

pfrproc2:Db % cd ../..
pfrproc2:Keith2701 % make

startup script編集

pfrproc2:Keith2701 % cd iocBoot/iockeith2701
pfrproc2:iockeith2701 % vi st.cmd

dbLoadRecords("db/test.db")
epicsEnvSet("STREAM_PROTOCOL_PATH", ".:../../keith2701App/Db")
drvAsynIPPortConfigure ("PS1", "172.28.8.244:1394")

pfrproc2:iockeith2701 % chmod +x st.cmd
pfrproc2:iockeith2701 % ./st.cmd


epics> dbpf obina:idn.PROC 1
DBR_UCHAR:          1         0x1
epics> 2012/05/09 00:58:24.682 PS1 obina:idn: 16 bytes surplus input "0912,A09  /A02  "
2012/05/09 00:58:24.682 PS1 obina:idn: after 40 bytes "... INC.,MODEL 2701,111"

stringinは40文字までだが、Keithleyが返してくる文字列が長いのでエラーが出るが気にしない。

eepics> dbpr obina:idn
ASG:                DESC: get IDN       DISA: 0             DISP: 0
DISV: 1             NAME: obina:idn     SEVR: INVALID       STAT: CALC
SVAL:               TPRO: 0
VAL: KEITHLEY INSTRUMENTS INC.,MODEL 2701,11