CC/7700,CC32を用いた データ収集システム 筑波大学 木村 博美 小松原 哲郎 (c)2007 木村博美 筑波大学
CC/7700 東陽テクニカ社製 アクセス:I/Oポート CAMACサイクル: 制御は簡単 ~6μS (Read/Write) ~4μS (Control) 制御は簡単 (c)2007 木村博美 筑波大学
CC32 Wiener社製 アクセス:メモリーマップ CAMACサイクル: ~2μS 単独使用のみ 制御はやや複雑
OS: FreeBSD Generic kernel (c)2007 木村博美 筑波大学
LAM処理 Signal Wait/wakeup ドライバー内部 ドライバーからsignalで処理ルーチンを起動 前もって指定された処理を実行 (c)2007 木村博美 筑波大学
LAM遅延時間の測定 1~10kHz OSC1 Interrupt Reg. LAM Scaler CLR OSC2 count 1MHz
LAM処理(1) signal ユーザーコード Camac(...); (c)2007 木村博美 筑波大学 LAM CAMACクレート モジュール クレートコントローラ 割り込み デバイス ドライバー 割り込み ハンドラー signal ユーザーコード Camac(...); (c)2007 木村博美 筑波大学
CC/7700 Signalで読み出し Celeron800MHz Celeron2.5GHz 46% 20uS
LAM処理(2) wakeup wait ユーザーコード (c)2007 木村博美 筑波大学 LAM CAMACクレート CAMAC モジュール クレートコントローラ 割り込み デバイス ドライバー 割り込み ハンドラー wakeup wait ユーザーコード (c)2007 木村博美 筑波大学
CC/7700 Waitで読み出し Celeron800MHz Celeron2.5GHz 55% 13uS
LAM処理(3) (c)2007 木村博美 筑波大学 LAM CAMACクレート CAMAC モジュール クレートコントローラ 割り込み コマンド リスト 割り込み ハンドラー データバッファ デバイス ドライバー (c)2007 木村博美 筑波大学
CC/7700 ドライバー内部で取り込み Celeron800MHz Celeron2.5GHz 74% 6.0uS
FreeBSDでデータ収集 ドライバー内部でデータ収集すれば可 LAM毎にコマンドリストを指定 データ収集以外ならsignalも使用可 データはドライバーでバッファリング LAM毎にコマンドリストを指定 ドライバーをリコンパイルさせたくない データ収集以外ならsignalも使用可 (c)2007 木村博美 筑波大学
ソフトウェア構成 データモニタ GUI (c)2007 木村博美 筑波大学 ドライバー CAMAC 本体 ユーザーコード ヒストグラム領域 (共有メモリー) (c)2007 木村博美 筑波大学
ユーザーコード 肝心な動作は全てユーザーコード 初期化 データ収集も処理(ヒストグラミング)も! 2つのテキストファイル .camacファイルにCAMAC命令 .cファイルにCプログラム 初期化 init: -- .camacファイルで定義 init( ) -- .cファイルで定義 (c)2007 木村博美 筑波大学
ユーザーコード RUN STOP run: -- .camac run ( ) -- .c stop: -- .camac
ユーザーコード データ読み出し(LAM処理) データ処理 LAMn: -- .camac ドライバー内部で実行 event ( ) -- .c ドライバーで蓄積されたデータが渡される LAM1: N1,F2,A0 LAM2: N2,F2,A0 (c)2007 木村博美 筑波大学
ユーザーコード データ読み出し以外のLAM処理 LAMn( ) -- .c Signalで配送 int LAM1( ) { Camac(...); return OK; } (c)2007 木村博美 筑波大学
ユーザコードの例 test1.c #include <stdio.h> #include "daqlib.h" static int adc; #define GAIN 4096 /* ADC gain */ int init () /* 初期化 */ { /* ヒストグラム作成 */ adc = hist_new1("adc",GAIN); return OK; } int event (int data[],int n) /* イベント処理 */ hist_add1(adc, data[0]&(GAIN-1)); (c)2007 木村博美 筑波大学
test1.camac #define ADC n3 /* ADC の位置 */ #define READ f2,a0 /* データ読み出しとクリア */ #define INH f24,a0 /* inhibit */ init: /* モジュールの初期化 */ ADC,INH ADC,READ /* このデータは捨てられる */ ADC,f26,a13 /* enable LAM */ run: ADC,READ ADC,f26,a0 /* enable ADC */ stop: /* 割込み処理:ドライバー内部で実行される */ LAM3: /* ADC が N3 にあるので LAM3*/ ADC,READ /* このデータはバッファリングされる*/ (c)2007 木村博美 筑波大学
起動 % daqload test1 test1.c と test1.camac を使用 コンパイル ダイナミックリンク GUIを起動 データモニタを起動 (c)2007 木村博美 筑波大学
GUI RUN/STOP 切り替え ヒストグラム保存 ヒストグラム・クリア ユーザ定義 ボタン ヒストグラム ユーザ定義 一覧 エントリー ログ表示 (c)2007 木村博美 筑波大学
(c)2007 木村博美 筑波大学
DAQの特徴 CAMACモジュールに依存しない CAMACに透過的にアクセス コマンドはdaqloadの1つだけ 柔軟な割り込み処理 ユーザ任せ CAMACに透過的にアクセス コマンドはdaqloadの1つだけ 柔軟な割り込み処理 特権不要 (c)2007 木村博美 筑波大学
Webで公開中 CCDAQ 検索 (c)2007 木村博美 筑波大学