== 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 }}}