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