Flow chart of collecter routine 2003/08/05 Ver.1.0 M.Uchida On-board Solarisマシンを使ったBLP用DAQシステムのcollecterに関する処理 のフローチャート。 collecterは主にHSMからデータを受け取りローカルなリングバッファに 書き込むthread (collect_data())、リングバッファの内容を読み込みネット ワークを通してオンラインメインシステム(kasuga1,2)に送る thread(collect_tcp())、ネットワークを通して送られてくるコマンド (start,stop)を処理するthread (collect_cmd())によって構成されている。 void *collect_data(void *arg) ---- 初期化ルーチン ---- 1) VMEデバイスを開く A32D16 for HSM A16D16 for RPB130 A24D16 for LR1151N 2) RPV130の初期化(マッピングとモジュールの初期化) 3) 各HSM(x2)の初期化 4) LR1151N(x2)の初期化 5) HSMをDAQ enableにする hsm_ena() ---- 以後メインループ ---- 6) runの状態を確認 a) RUN_START runが始まった状態 b) RUN_ON runが定常的に続いている c) RUN_STOP runが終了状態に移行 d) RUN_OFF runが止まっている a.1) コメントをrun start blockに書き込む a.2) 状態をRUN_ONに移行する a.3) run start blockをリングバッファに書き込む a.4) HSMをクリアする。 a.5) LR1151Nをクリア a.6) loggerにDAQ startを送る a.7) RPV130のクリア a.8) vetoの解除 rpv_ena() a.9) 6へ戻る b.1) RPV130のビット情報を読み込み(i_buf)、バッファオーバーフローを 確認。なければ(6)へ戻る。 b.2) ローカルバッファの初期化 bzero() b.3) VETO をONにする rpv_dis() b.4) RPV130のCSR(control status register)をクリア rpv_clr() b.5) OVFしたbufferのビットを下げる rpv_dis_buf() b.6) scalerを読み込む b.7) VETOをOFFにする rpv_ena ---- SINGLE BUF OVF b.8.1) / DOUBLE BUF OVF b.8.2) ----- b.8.1.1) OVFしたHSMをdisableする hsm_dis() b.8.1.2) ローカルバッファに読み込む hsm_get2 b.8.1.3) HSMの初期化 hsm_init b.8.1.4) HSMのメモリをクリア b.8.1.5) HSMをenable hsm_ena() b.8.1.6) scalerのデータをローカルバッファの最後に追加 b.8.1.7) リングバッファに書き込む put_rb_data() <--ここでフロー制御 b.8.1.8) OVFしたbufferのビットを上げる rpv_ena_buf() b.8.2.1) HSMをdisableする hsm_dis() b.8.2.2) ローカルバッファに読み込む hsm_get2 b.8.2.3) HSMの初期化 hsm_init b.8.2.4) HSMをenable hsm_ena() b.8.2.5) scalerのデータをローカルバッファの最後に追加 (注意:double OVFの最初のバッファ側のみ) b.8.2.6) リングバッファに書き込む put_rb_data() <--ここでフロー制御 b.8.2.7) OVFしたbufferのビットを上げる rpv_ena_buf() b.8.2.8) b.8.2.1)に戻りもう一方のHSMの内容を処理する。 c.1) VETOをONにする rpv_dis c.2) scalerを読み込む c.3) HSMをdisableする hsm_dis() c.4) ローカルバッファに読み込む hsm_get2 c.5) HSMの初期化 hsm_init c.6) scalerのデータをローカルバッファの最後に追加 c.7) リングバッファに書き込む pur_rb_data() <--ここでフロー制御 c.8) run end blockをリングバッファに書き込む c.9) loggerにDAQ stopを送る c.10) 各変数の初期化 c.11) (6)へ戻る d.1) usloop(1000L) d.2) (6)へ戻る void *collect_tcp(void *arg) 1) リングバッファから1ブロック読み込む。 <-- ここでフロー制御 2) リモートホスト(reviever)に1ブロック転送する。 3) (1)へもどる。 void *collect_cmd(void *arg) 1) リモートホストからのメッセージを受け、妥当なコマンドかどうか確認。 無効のコマンドは無視する。 2.a) BLP_CMD_STARTの場合 runの状態がRUN_OFFであればRUN_STARTに変更する。 2.b) BLP_CMD_STOPの場合 runの状態がRUN_ONであればRUN_STOPに変更する。