= VXI11 のGPIBアドレス指定 = streamdeviceを使用して LAN/GPIBコンバータ E2050 or E5810 を使用してGPIB機器を制御する際に、GPIBアドレスの指定方法がわからずに苦労したので、例を記述しておく。 == 経緯 == PF-ARにてビームプロファイル計測のために、NDフィルタを制御するGPIB機器をstreamdeviceで制御しようとしたところから話は始まった。[[br]] GPIB機器は シグマ光機 Mark-5A だったが、以前作成した シグマ光機 Mark-1 をLAN/Serialコンバータで制御していたので、ほぼそのままIOCを流用して、VXI11用に修正したものを使用した。[[br]] IOCを起動し、定期的にステータスを取得するコマンドを実行すると、 {{{ 2017/04/27 14:46:37.880981 PS1 TEST:OPT:NDfilter:getPOS1: asynError in write: PS1 write request failed }}} と表示され、コマンドの書き込みができない状態だった。[[br]] E2050->E5810とLAN/GPIBコンバータを変えたり、pythonのVXI11制御パッケージを使ってみたりして、機器が正常に動くことは確認できた。[[br]] IOCでGPIBアドレス設定をする所がないのに気付いて、st.cmdのvxi11Configureをみたが設定項目がない。[[br]] その後、色々と調べてみると、streamdeviceに設定することが分かり、動作することが確認できた。 == 設定例 == 一部を抜粋して例示する。 === protocol file === {{{ Terminator = CR LF; Timeout = 10000; : getPOS { out "Q:"; in "%*c%d:%(\$1)d:%*c%*c%*c"; } }}} === db file === {{{ record(longin, "$(user):getPOS1") { field(DESC, "Get relative position 1") field(DTYP, "stream") field(INP, "@Sigma_MK5A.proto getPOS($(user):getPOS2) $(dev) $(addr)") field(SCAN, "$(scan)") } record(longin, "$(user):getPOS2") { field(DESC, "Get relative position 2") } }}} === st.cmd === {{{ #!../../bin/linux-x86_64/Sigma_MK5A ## You may have to change Sigma_MK5A to something else ## everywhere it appears in this file < envPaths cd ${TOP} epicsEnvSet("USER", "TEST:OPT:NDfilter") epicsEnvSet("DEV", "PS1") epicsEnvSet("ADDR", "10") epicsEnvSet("SCAN", "1 second") ## Register all support components dbLoadDatabase "dbd/Sigma_MK5A.dbd" Sigma_MK5A_registerRecordDeviceDriver pdbbase epicsEnvSet("STREAM_PROTOCOL_PATH", ".:../../Sigma_MK5AApp/Db") ## Load record instances dbLoadRecords "db/Sigma_MK5A.db", "user=$(USER),scan=$(SCAN),dev=$(DEV),addr=$(ADDR)" vxi11Configure($(DEV),"172.xxx.xxx.xxx",0,"0.0","gpib0",0,0) ## Set this to see messages from mySub #var mySubDebug 1 ## Run this to trace the stages of iocInit #traceIocInit cd ${TOP}/iocBoot/${IOC} iocInit }}} ここで一番重要なのは、'''VXI11の場合、GPIBアドレスを記述するのは、DBファイルのINP fieldであり、vxi11Configure ではない'''ことである。[[br]] python等では、vxi11Configure の "gpib0" に "gpib0,10"というように記述するのが普通だが、streamdeviceでは違うらしい。[[br]] == 参照HP == [http://epics.web.psi.ch/software/streamdevice/doc/setup.html User's Guide/Setup/6. Configure the Records]