[KEKB Bunch Feedback Group]

アドバンテスト製R3172スペクトラムアナライザ用EPICS Device Support(R314-ASYN対応版)


by とびやま まこと(Makoto Tobiyama)/KEKB ビームモニターグループ

警告
以下の記述に関しては、意図する、しないに関わらず多くの誤り、誤解が含まれていると思われますので、決して信用してはいけません。これを信じて起きた損害に関しては、当方は一切責任を持ちません。


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

1.はじめに

R3172+OPT20+OPT27+OPT74は株式会社アドバンテスト製の9kHz〜26.5GHzの周波数領域を カバーするポータブル・スペクトラムアナライザです。この広範囲において最高分解能 30Hz(OPT27)、残留FM20Hzp-p、測波帯雑音-100dBc/Hz(OPT27、10kHzオフセット)という 高度な基本性能を有しています。OPT74トラッキングジェネレーターは、100kHzから3GHzまで掃引可能です。

現時点(2014年)で製造中止からすでに時間が経っていますが、まだ修理不能の連絡は 頂いていません(少なくとも2012年に修理は可能でした--所有しているR3172及びR3132のほとんどが トラッキング同期がとれなくなってしまった。もちろん修理費は高額になって破産しかけました)。

2.サポートする機能

R3172は非常に多くの機能を持っており、それぞれGP-IB経由で コントロールする事ができます。このデバイスサポートでは、 ベータトロンチューン測定に必要最低限な機能をサポートしています。

3.EPICS環境

本デバイスサポートは、EPICS R314.12.1-CSA及びASYN4-21環境下で開発したものです。 EPICSそのものに対する説明、入門出家入道遁世については専門家に帰依するなり、 コントロールグループのページをご参照なさるなりしてください。KEK所内限定で 入門サイトもあります。 (2007年度にやった内容なので、すでにちょっと古いですが、一応R314ベースの 説明になっています)。

動作確認は、CentOS 6.5(64bit)上のEPICS R314.12.1-CSA + ASYN4-21、Agilentの LAN-GPIBで行っています。

4.コードの概要

R313(VxWORKS用)に対して以下の変更を行っています。 全体のコードは以下の通りです。 ADVANTEST殿のSpectrum Analyzerは トレースデータは「測定値」ではなく、画面上のトレースポジションを出力する 伝統があります。さらに恐れ入ったことに縦軸は1792から14592という 大変不思議な値となります。以前のデバイスサポートと同じく、waveformには この値を直接出力しますが、使い物になるデータのためにはdBm単位への変換が 必要です。今回は、この変換をaSubレコードを使って行っています。

aSubレコードのフィールドには以下の特徴があります。

このレコードのプログラム(wavADSA.c)は以下の様になります。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <dbDefs.h>
#include <registryFunction.h>
#include <subRecord.h>
#include <aSubRecord.h>
#include <epicsExport.h>

int wavADSADebug;

static long wavADSAInit(aSubRecord *precord)
{

  if (wavADSADebug)
    printf("Record %s called wavADSAInit(%p)\n",
precord->name, (void*) precord);
return 0;} static long wavADSAProcess(aSubRecord *precord) { short i; int count=1001; short *raw1; int *bin; double *cin; int getscale; double getref; static double conv_fac1, conv_fac2; static float trace[1001]; static double xdb[8]={10.0, 5.0, 2.0, 1.0, 10.0, 10.0,10.0, 10.0}; raw1 = (short *)precord->a; bin = (int *)precord->b; cin = (double *)precord->c; getscale = (bin[0]); getref = cin[0]; conv_fac1 = 10.0*xdb[getscale]/12800.0; conv_fac2 = getref - 10.0*xdb[getscale]; for (i=0;i<count;i++) { trace[i]=(raw1[i]-1792)*conv_fac1+conv_fac2; // fprintf(stdout,"i =%d data%f\r",i,trace[i]); } memcpy(precord->vala, trace, count*sizeof(float)); precord->neva = count; precord->nova = count; return 0; } epicsExportAddress(int, wavADSADebug); epicsRegisterFunction(wavADSAInit); epicsRegisterFunction(wavADSAProcess);
使い方として といった注意があります。また、dbdファイルの作成、登録 も必要で、wabADSA.dbdは
variable(wavADSADebug)
function(wavADSAInit)
function(wavADSAProcess)
といった形になります。

データベース側では、GETTRACE:AのFLNKをこのレコード(RAWTODBM)にしておき、

record(waveform,"$(USER):GETTRACE:A") {


field(FLNK,"$(USER):RAWTODBM")

}
RAWTODBM自体は以下の様に
record(aSub, "$(USER):RAWTODBM"){  field(INAM,"wavADSAInit")
  field(SNAM,"wavADSAProcess")
  field(INPA,"$(USER):GETTRACE:A")
  field(NOA,1001)
  field(INPB,"$(USER):GETYSCALE")
  field(NOB,1)
  field(INPC,"$(USER):GETREF")
  field(NOC,1)
  field(EFLG, "ALWAYS")
  field(FTA,"SHORT")
  field(FTB,"LONG")
  field(FTC,"DOUBLE")
  field(FTVA,"FLOAT")
  field(FLNK,"$(USER):FAN1")
  field(OUTA,"$(USER):SPECTRUM:A")
  field(NOVA,1001)
}
の様な形でINPA、INPB、INPC及びOUTA、そしてそれぞれの要素の propertyを指定する形になります。FLNKはfanoutでマーカー操作 とSpectrum更新を行う形です。

dbdファイルの中で次のように本体機能を定義します。

#R3172 dbd list
device(ai,GPIB_IO,devAiR3172Gpib,"R3172")
device(ao,GPIB_IO,devAoR3172Gpib,"R3172")
device(bi,GPIB_IO,devBiR3172Gpib,"R3172")
device(bo,GPIB_IO,devBoR3172Gpib,"R3172")
device(stringin,GPIB_IO,devSiR3172Gpib,"R3172")
device(stringout,GPIB_IO,devSoR3172Gpib,"R3172")
device(longin,GPIB_IO,devLiR3172Gpib,"R3172")
device(longout,GPIB_IO,devLoR3172Gpib,"R3172")
device(mbbi,GPIB_IO,devMbbiR3172Gpib,"R3172")
device(mbbo,GPIB_IO,devMbboR3172Gpib,"R3172")
device(waveform,GPIB_IO,devWfR3172Gpib,"R3172")

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

このデバイスサポートで使うデータベースの例を示します。
DTYPRecordSignalNameFunctionRemarks
R3172ao0$(USER):SETCF中心周波数設定
R3172ai1$(USER):GETCF中心周波数読み取り
R3172ao2$(USER):SETSTARTFスタート周波数設定
R3172ai3$(USER):GETSTARTFスタート周波数読み取り
R3172ao4$(USER):SETSTOPFストップ周波数設定
R3172ai5$(USER):GETSTOPFストップ周波数読み取り
R3172ao6$(USER):SETCFSTEP周波数ステップ設定やっぱり要りますか?
R3172ao7$(USER):SETCFSTEP:AUTO周波数ステップ自動本当に?
R3172ai8$(USER):GETCFSTEP周波数ステップ読み取り
R3172ao9$(USER):SETSPANスパン周波数設定
R3172ai10$(USER):GETSPANスパン周波数読み取り
R3172ao11$(USER):SETRBWRBW設定
R3172ao12$(USER):SETRBW:AUTORBW自動
R3172ai13$(USER):GETRBWRBW読み取り
R3172ao14$(USER):SETVBWVBW設定
R3172ao15$(USER):SETVBW:AUTOVBW自動
R3172ai16$(USER):GETVBWVBW読み取り
R3172ao17$(USER):SETSWEEPsweep設定
R3172ao18$(USER):SETSWEEP:AUTOsweep自動
R3172ai19$(USER):GETSWEEPVBW読み取り
R3172ao20$(USER):SETATattenuator設定
R3172ao21$(USER):SETAT:AUTOattenuator自動
R3172ai22$(USER):GETATattenuator読み取り
R3172ao23$(USER):SETCPL:AUTOcoupling auto
R3172ao24$(USER):SETYSCALEY軸設定10,5,2,1のみ受け付ける(mbboにしろよ!)
R3172mbbi25$(USER):GETYSCALEY軸読み出し0=10dB,1=5dB,2=2dB,3=1dB
R3172ao26$(USER):SETREFreference level設定
R3172ai27$(USER):GETREFreference level読み取り
R3172ao28$(USER):SETTGPWRTG power設定
R3172ao29$(USER):SETTGPWR:ONTG on
R3172ao30$(USER):SETTGPWR:OFFTG off
R3172ai31$(USER):GETTGPWRTG power読み取り
R3172ao32$(USER):SETTGCAL:AUTOTGトラッキング自動調整
R3172so33$(USER):TITLETITLE設定LON/たいとる/としてくだされ
R3172so34$(USER):TITLE:OFFTITLE off
R3172waveform35$(USER):GETTRACE:Aシングルスイープ、SRQオンしてトレースA転送1001点、1792から14592の値になる
R3172waveform36$(USER):GETTRACE:BトレースB転送1001点、1792から14592の値になる
R3172ao37$(USER):SETTRIG:SINGLEシングルショットトリガー
R3172ao38$(USER):SETTRIG:STARTトリガースタート
R3172ao39$(USER):SETTRIG:CONTフリーラン
R3172ao40$(USER):SETTRACE:CLEARAトレースAクリアいらん
R3172ao41$(USER):SETTRACE:CLEARBトレースBクリア不要
R3172ao42$(USER):SETMARKER:PEAKマーカーをpeakに
R3172ao43$(USER):SETMARKER:ONマーカーON
R3172ao44$(USER):SETMARKER:OFFマーカーをOFF要らんかも
R3172ao45$(USER):SETMARKER:DELTAマーカーをdelta modeに
R3172ao46$(USER):SETMARKER:NORMALマーカーをnormal modeに
R3172ai47$(USER):GETMARKER:FREQマーカー周波数読み取り
R3172ai48$(USER):GETMARKER:AMPマーカーamplitude読み取り
R3172ao49$(USER):SETSA:INITSA初期化やめて
R3172ao50$(USER):SETVEW:WRITEAA write?
R3172ao51$(USER):SETVEW:WRITEBB write?
R3172ao52$(USER):SETVEW:VIEWAA view?
R3172ao53$(USER):SETVEW:VIEWBB view?
R3172ao54$(USER):SETVEW:MAXAA maxhold?
R3172ao55$(USER):SETVEW:MAXBB maxhold?
R3172longout56$(USER):SETAVGAA avarage回数設定
R3172ao57$(USER):SETVEW:AVGA:STARTA Average start
R3172ao58$(USER):SETVEW:AVGA:STOPA Average stop
R3172ao59$(USER):SOFTINITStatus clear役に立たないかも
R3172longout60$(USER):SETAVGBB avarage回数設定
R3172ao61$(USER):SETVEW:AVGB:STARTB Average start
R3172ao62$(USER):SETVEW:AVGB:STOPB Average stop
R3172longout63$(USER):SETTGMANTGトラッキングマニュアル調整
R3172so64$(USER):SRQONSRQ ON掃引終了時だけにSRQ出る
R3172so65$(USER):SRQOFFSRQ OFF
R3172so66$(USER):SRQRECステータスバイトクリアSRQ後このレコードが起動される
R3172so67$(USER):SETTRACE501横軸501点にしないで
R3172so68$(USER):SETTRACE1001横軸1001点初期状態
R3172mbbi69$(USER):GETTRACE:NUM横軸点数0=501,1=1001
R3172so70$(USER):SETHISENSE:ONHi Sense On
R3172so71$(USER):SETHISENSE:OFFHi Sense OFF
R3172mbbi72$(USER):GETSENSESense Mode0=OFF,1=ON
SoftwaveformN/A$(USER):SPECTRUM:AトレースAの値シーケンサが変換
SoftwaveformN/A$(USER):SPECTRUM:BトレースBの値シーケンサが変換
SoftbiN/A$(USER):TRACE:SELSPECTRUMAB変換選択0ならA、その他はB
SoftcalcN/A$(USER):SWTRIGスイープ終了トリガシーケンサ使用
データベースファイル本体例は以下をご参照ください。 MakefileにdevR3172Gpib.c、devR3172Gpib.dbd、wavADSA.c、wavADSA.dbdを登録、 make clean, makeでinstallします。

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

通常通り設定します。
dbLoadRecords("db/FB_SAA2.db","USER=FBH:AD, ADDR=A4")

vxi11Configure("L0","172.19.xx.xxx",0,0.0,"gpib0",0,0)

7.おわりに

Advantest R3172 (R3132)スペクトラムアナライザ用ASYN対応版GP-IBデバイスサポート を紹介しました。
Makoto Tobiyama
24/Feb/2014

Return to FB Home Page...