wiki:epics/epics/streamdevice/gpib_adress

Version 1 (modified by michkawa, 2 years ago) (diff)

--

VXI11 のGPIBアドレス指定

streamdeviceを使用して LAN/GPIBコンバータ E2050 or E5810 を使用してGPIB機器を制御する際に、GPIBアドレスの指定方法がわからずに苦労したので、例を記述しておく。

経緯

PF-ARにてビームプロファイル計測のために、NDフィルタを制御するGPIB機器をstreamdeviceで制御しようとしたところから話は始まった。
GPIB機器は シグマ光機 Mark-5A だったが、以前作成した シグマ光機 Mark-1 をLAN/Serialコンバータで制御していたので、ほぼそのままIOCを流用して、VXI11用に修正したものを使用した。
IOCを起動し、定期的にステータスを取得するコマンドを実行すると、

2017/04/27 14:46:37.880981 PS1 TEST:OPT:NDfilter:getPOS1: asynError in write: PS1 write request failed

と表示され、コマンドの書き込みができない状態だった。
E2050->E5810とLAN/GPIBコンバータを変えたり、pythonのVXI11制御パッケージを使ってみたりして、機器が正常に動くことは確認できた。
IOCでGPIBアドレス設定をする所がないのに気付いて、st.cmdのvxi11Configureをみたが設定項目がない。
その後、色々と調べてみると、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 ではないことである。
python等では、vxi11Configure の "gpib0" に "gpib0,10"というように記述するのが普通だが、streamdeviceでは違うらしい。

参照HP

User's Guide/Setup/6. Configure the Records