[KEKB Bunch Feedback Group]

キーサイトテクノロジ34465A DVM用EPICS Device Supportの製作(Japanese)

by とびやま まこと(Makoto Tobiyama)/KEKB ビームモニターグループ
警告
以下の記述に関しては、意図する、しないに関わらず多くの誤り、誤解が含まれていると思われますので、 決して信用してはいけません。これを信じて起きた損害に関しては、当方は一切責任を持ちません。

If you want to contact with the author, please E-mail to makoto.tobiyama@kek.jp.
目次

1.はじめに

キーサイトテクノロジ34465A DVMは、高速高精度で電圧などのデータを 途切れること無く取得することが出来るデジタルマルチメータです。 インターフェースはLAN/GP-IB/USBとありますが、本件ではLANを使ってEPICSの ASYNドライバーで制御します。34465Aについての説明はご本家のwebで ご確認ください。いつ切れるか分からないリンクは こちらです。 この34465Aは、すでに製造中止になった34410Aの後継機とされており、(営業殿から) SCPIコマンドについて、100%の互換性がある、という触れ込みでした。(もちろん、私は十分 捻くれているので、そのような甘言はそれほどは信用しておりませんでしたが)。

ちなみにカタログを真面目に読むと、34410AのSCPIコマンドと100%の互換性をもつのは唯一の機械は34461Aです。が、 こいつは測定速度が34410Aよりずっと遅く、今回の目的には使えません。34465Aは、 オプション34465A-DIGを つけることで、34410Aより高速なデータ取り込みができるようです。(オプションなしだと 34410Aの半分くらいかと思われます)。ということで、34410Aに用に作った各種コードが そのまま使えることを(話半分)信じて購入し、試験しました。で、結果ですが、やはり 結局ある程度の書き換えは必要でした。いささか無念じゃ。

本DVMはSuperKEKB Damping RingのDCCT高速読み出しに利用します。このため、 とった電圧値を周回電流値に変換し、DCオフセットを除去し、 また入射率、 減衰率、平均、最大、最小電流値などを計算する部分も必要です。これらの部分を aSubレコード、及びEPICSシーケンサで実現して(しようとして)います。

2.サポートするコマンド

本デバイスサポートで使えるコマンドの以下の通りです。
コマンド機能タイプデータベース番号備考
RST;*CLS全機能リセットbo0
DISP OFFディスプレイOFFbo1ほんのわずかデータ取得レートが上がる(ほとんど誤差)
DISP ONディスプレイONbo2本来はmbboで作るべきでしょうね
CONF:VOLT:DCDC電圧測定、固定レンジao3autoレンジだとデータ取得が遅くなる
SENS:VOLT:DC:APERアパーチャー時間設定ao4
SENS:VOLT:ZERO:AUTO OFF自動ゼロ測定OFFbo5autoだとデータ取得が遅くなる
SENS:VOLT:ZERO:AUTO ON自動ゼロ測定ONbo6これも本来ならmbboでつくるべき
TRIG:SOUR IMM内部トリガbo7
TRIG:SOUR EXT外部トリガbo8
TRIG:COUN INFトリガカウント無限大bo9
TRIG:DELトリガ遅延lo10高速化のためには0にセットする
FORM REAL,64;:FORM:BORD SWAPデータ転送フォーマットバイナリ、SWAPbo11SWAPを忘れると呪われる
INITデータ取得開始bo12
SENS:VOLT:DC:NPLC積分時間セットao1334465A-DIGの場合minは0.001 NPLC
R? 8000データ取得waveform14データを取得し、取ったデータはメモリから消去
ABORデータ取得停止bo15データ取得終了。INIT後はABORTしないとコマンドを送れない
データ転送フォーマットですが、FORM REAL, 64;:FORM:BORD SWAPのとき、Rコマンドで送られるデータは以下の形を しています。

# データ長のバイト長 データバイト長 1つめのデータ 2つめのデータ..

標準状態では、IEEE488.2 BINBLOCKフォーマットという、神代の昔のフォーマットで、要はデータがスワップしています。 ので、ふつーの計算機では、FORM:BORD SWAPを指定して、データスワップを指定しないと面倒です。 一度設定すると、不揮発性メモリに記録されて、いちいち設定しなくても良いそうですが。

さて、このバイナリー転送コマンド及びデータフォーマットが、34410Aと互換性がありません。34410A ではreal32(単精度実数)フォーマットで送っていました。34465Aでは、REALを指定すると real64になります。というか、REAL,のあと64以外はコマンドエラーになってしまいます。 当然、デバイスサポート内での変換関数はデータがdoubleだ、ということを考えて作り直す 必要がありますし、waveformのFTVLもいっそFLOATではなくDOUBLE にするのが自然になります。別にDOUBLEにしてもハードで精度が決まっているので、 特に高速にしたときは精度が上がるわけではないのですが。

一般に、34465Aのコマンドで設定値などの読み出しは、メッセージで帰ってきたり(mbbiを使う必要が出てきて ちょい面倒)、複数のパラメータを返したり(waveformで中身を受けて、かつ、aSubなどでさらにばらす必要があり 超面倒)しますので、扱いがとにかく面倒なのでサポートしていません。必要になったら仕方なく実装しますが。

3.EPICS環境

本デバイスサポートは、Linux上のEPICS R314.12.3-CSAサポート版で開発しました。 ホストのOSはCentOS 6.8-64bitです。ASYNは4-23、seqは2.1.11です。

EPICSそのものに対する入門出家入道については徳の高い専門家に帰依するか、 古今東西の古文書、wikiなどを読破する努力が望まれるのでないでしょうか。

4.コードの概要(全体)

全体のコードを以下のリンクに示します。
ソースファイル(dev34465A.c)
また、dbdファイルの中身は
#34465A dbd list
device(ai,GPIB_IO,devAi34465A,"A34465A")
device(ao,GPIB_IO,devAo34465A,"A34465A")
device(bi,GPIB_IO,devBi34465A,"A34465A")
device(bo,GPIB_IO,devBo34465A,"A34465A")
device(stringin,GPIB_IO,devSi34465A,"A34465A")
device(stringout,GPIB_IO,devSo34465A,"A34465A")
device(longin,GPIB_IO,devLi34465A,"A34465A")
device(longout,GPIB_IO,devLo34465A,"A34465A")
device(mbbi,GPIB_IO,devMbbi34465A,"A34465A")
device(mbbo,GPIB_IO,devMbbo34465A,"A34465A")
device(waveform,GPIB_IO,devWf34465A,"A34465A")

です。

変換部などのコードの注意点は、34410A用と同じです。

5.EPICSデータベースサンプル

サンプルファイルは以下を参照してください。 特にリンクなどもありません。

6.aSubレコード

DVMから取得した電圧値を電流値に変換、かつDCオフセットを引き算する 変換です。ソースコードは以下の通りです。
DDRwav.c
なお、dbdファイルは以下の通りです。
variable(DDRwavDebug)
function(DDRwavInit)
function(DDRwavProcess)

7.EPICSシーケンサ

オフセットを引き算したあとのデータから、ビームDecay rate、入射レート、 電流最大値、最小値を 計算するシーケンサを使います。但し、このシーケンサの原型については、 SuperKEKB MRで使用した際余り役に立たなかった、という実績があります ので、もっとまともなものにする必要がるとはわかっています。特に、 DRではビーム蹴り出し、ビームがない時間がそれなりにある、という 条件もありますので、発展途上です。ソースコードは以下の通り です
FDCCT_DR_SRC.stt
なお、dbdファイル(FDCCT_DR_SRC.dbd)は以下の通りです。
registrar(FDCCT_DRRegistrar)

8.スタートアップファイルサンプル

関連部分は以下の様です。
epicsEnvSet(EPICS_CA_MAX_ARRAY_BYTES, 20000000)

dbLoadRecords("db/FDCCT.db","USER=BMD, RING=FAST, L=L0, A=1")

drvAsynIPPortConfigure("L0","172.19.193.*:5025",0,0,0)

dbpf "BMD:FAST:DCV:SET","0.1"
dbpf "BMD:FAST:AZERO:OFF","1"
dbpf "BMD:FAST:TRIG:IMM","1"
dbpf "BMD:FAST:TRIG:COUNT:INF","1"
dbpf "BMD:FAST:TRIG:DELAY","0"
dbpf "BMD:FAST:FORMAT:REAL32","1"
dbpf "BMD:FAST:NPLC","0.006"
dbpf "BMD:FAST:INIT","1"
dbpf "BMD:FAST:DATA.SCAN","11"

dbpf "BMD:FAST:DCCT:THR","0.2"
上記の設定が、34410A時代と互換の設定と思われますが、これでデータロギングを させてwaveformのNORD(実際に入っているデータ数)を見てみると、scan 1秒の設定で 5200〜5700程度で、Agilent 34410A実績の4991〜5030よりはいささか速くなっています。

CSSを使って1秒データを表示するパネルを作ってみました。

9.おわりに

キーサイトテクノロジ殿34465Aマルチメータのデバイスサポートを紹介しました。
Makoto Tobiyama 6/Feb/2017

Return to FB Home Page...