| ||||||||
| ||||||||
| ||||||||
|
NBBQでのドライバはCAMAC制御のコアとなる bbgcam というドライバと、データ構造を構築したり、ユーザープログラムとのインターフェイスになる
nbbqdrv というドライバから構成されています。
現在の nbbqdrv
ではパフォーマンスも考慮して、ドライバ内でデータをバッファリングして、まとめてユーザーに受け渡す設計なため、計測の度にソースをある程度書き換える必要があります。
学生実験などの典型的なデータ収集を行なう場合は お手軽セットアップでセットアップすると簡単です。
DAQセットアップの手順
ここでは ~/test/
でNBBQをセットアップする例です。
babaDAQモードかbabarlDAQモードはbbmodules.hで指定します。
基本的にはbabarlDAQモードで使用することを強くお勧めします。
BBDAQ、BBRLに加えてIWADAQ = Iwasa DAQモードを追加しました。データフォーマットがIwasa形式になります。コントローラはbbrlcomかnbbqcomを使ってください。
コントローラの使い方
babaDAQモードならbbdaqcom、
babarlDAQモードならbbrlcomでコントローラを起動します。起動時にBBDAQ or BBRL MODEかが表示されるので、確認して下さい。
babarlDAQと違い、ヘッダー & エンダーはraw
dataには書き込まれません。 (最新のNBBQでは書き込むようにしました)
その代わりに runinfo.txt
というファイルにまとめてRUN情報が書き込まれます。
babaDAQモードでは****.dat、babarlDAQモードでは****.rdf(****はRUN番号) という名前でraw
dataが作られます。
RUN番号を変更したい場合は、runcounter.txtというファイルの数値を書きかえて、コントローラを起動して下さい。(書かれた数値+1が次のRUN番号になります)
すでに同じRUN番号のraw
dataが存在する場合は、データが上書きされてしまうので注意して下さい。
データ収集の途中で強制終了してしまった場合は、runcounter.txt
が正しく更新されていな可能性が高いので要チェックです。
ソースを書き換える
(CAMACの例)
NBBQで一番重要なところです。細かい関数についてはDriverの関数群を参照して下さい。(基本はbabarlDAQと同じです)
VMEの例は下部にあります。
bbmodules.h
#define BBRL /* #define BBDAQ */ #define CAMAC #define CAMACINT #define CC7700 /* #define VME #define VMEINT #define INTLEVEL 3 #define SBS620 */ #define MAXBUFF 0x1e00 #define LAMN 3 #define OPRN 22 #define OPBUSYCL 1
#define BBDAQ か BBRL のどちらかを記述します。
BBDAQだとbabaDAQモードで、BBRLだとbabarlDAQモードになります。
#define
MAXBUFFでバッファリングするサイズ(word単位)を指定します。
例では 0x1e00 = 7680 ですが、最大 0x1f00 =
7936 を越えない程度に指定して下さい。 (16進数でも10進数で書いてもかまいません)
babarlDAQモードではブロックが16kB(0x2000
=
8192word)固定なので、バッファサイズが小さいと無駄なデータが増えるので注意して下さい。
babaDAQではモードではブロックが不定長なので、無駄はありません。
#define
CAMAC でCAMACを使うことを宣言します。
#define VME
でVMEを使うことを宣言します。
#define CAMACINT
でCAMACを割り込みソースにします。(省略可)
#define VMEINT
でVMEを割り込みソースにします。
#define CC7700 だとTOYO CC/7700、#define K2915
でKinetic K3912+K2915を使うことを宣言します。
#define SBS620 でSBS Bit3
618/620を使うことを宣言します。
割り込みソースがCAMACの場合は #define LAMN
でLAMにするモジュールのStation Numberを指定します。
割り込みソースがVMEの場合は #define INTLEVEL
で割り込みレベルを指定します。
なるべくOutput Registerを使ってVETO処理をして下さい。
私の場合は#define
OPRNでOutput RegisterのStation Number、 #define OPBUSYCLでOutput
Registerに書き込む値をセットします。
startup.c
ここではデータ収集開始時の動作を記述します。
void startup(void){ crate_define_lam(LAMN); control_mod(0,LAMN,0,26); write_data(0,OPRN,0,17,OPBUSYCL); }
crate_define_lam(LAMN)でLAMにするモジュールを指定し、
control_mod(0,LAMN,0,26)でLAMにするモジュールに対して
LAMを許可しています。
また、write_data(c,n,a,f,data)を使って、 Output
RegisgerからVETO解除信号を出力しています。
stop.c
データ収集終了時の動作を記述します。
void stop(void){ control_mod(0,LAMN,0,9); control_mod(0,LAMN,0,24); }
control_mod(0,LAMN,0,9)で念のためLAMモジュールをクリアし、
control_mod(0,LAMN,0,24)でLAMを禁止しています。
evt.c
イベントが発生した時の動作を記述します。
void evt(void){ /* for BBRL */ init_event(1); init_segment(1); read_segndata(2,0,3,0,0); end_segment(); init_segment(2); read_segndata(6,0,4,0,0); end_segment(); control_mod(0,3,0,9); control_mod(0,4,0,9); } void evt(void){ /* for BBDAQ */ init_segment(); read_segndata(2,0,3,0,0); end_segment(); control_mod(0,LAMN,0,9); }
babalrDAQではinit_event(1)は約束ごとで、evt.cの先頭に書いて下さい。
(babaDAQモードでは書かないで下さい)
babarlDAQモードでは複数のセグメントが扱えます。 init_segment(segid)
<-> end_segment() の間にセグメントのデータを記述していきます。
evt.c内でcontrol_mod(0,LAMN,0,9)などを使って、必ずLAMモジュールをクリアして下さい。
clear.c
主にVETO解除のために使います。
void clear(void){ write_data(0,OPRN,0,17,OPBUSYCL); }
clear.cではwrite_mod(c,n,a,f,data)を使って、 Output
RegisterでVETO解除信号を送ります。
Output
Registerを使わない場合は、とくに記述する必要はありません。
sca.c
スケーラ情報を収集します。 (babarlDAQモードのみ使えます)
void sca(void){ read_scaler(2,12,0,1); read_scaler(1,12,0,2); control_mod(0,1,0,9); control_mod(0,2,0,9); }
read_scaler(pos,len,c,n);でスケーラモジュールからデータを読み込みます。
posはスケーラの台数で決まります。スケーラが2台ある場合は1台目に2
2台目に1を指定します。1台しかない場合はposは1です。
lenは必ず12にして下さい。
ソースを書き換える (VMEの場合)
VME SBS620とCAEN V785
ADCを使う場合の例を以下にのせておきます。
-- bbmodules.h -- #define BBRL #define MAXBUFF 0x1e00 #define ADCADDR 0x13000000 <- 変えて下さい #define VME #define VMEINT #define INTLEVEL 3 #define SBS620 -- startup.c -- void startup(void){ vme_define_intlevel(INTLEVEL); } -- evt.c -- void evt(void){ init_event(1); init_segment(1); v785_segdata(ADCADDR); end_segment(); } -- stop.c -- void stop(void){ }
Last Update: 2005/4/7
Hidetada Baba
baba @ rarfaxp.riken.jp