ユーザ用ツール

サイト用ツール


tabuchi:qtxtop

QtXTop : FLIライブラリを利用して CCD カメラ等を使用するための Stars ドライバ 

1. 概要

FLIのライブラリを使用し、FLI のライブラリに認識されるCCDカメラに対して Stars 経由でコマンドを送って制御する為の Strs ドライバです。

2. ダウンロード

  • 2016.02.18 : 実際にX線を使って正しく撮影されているかどうかは確認していません。
    光がない状態で、実装されているコマンドを送って応答が正しいこと、撮影コマンドを送った時内部状態が正しく遷移しデータファイルができること、は確認してあります。
  • 2016.02.19 : 幾つかコマンド追加(Set/GetSeqFileNo, Set/GetUseSeqFNo)。実装を忘れてた GetMode を追加。
  • 2016.02.23 : カメラにシャッターがないので、露光と読み出しを連続で行ってしまうと像が流れる。
    その対策として、Exposure コマンドの中身を3つのコマンド(StartExposure, RBIFlush, DownLoadImage)に分割。
    外部でシャッター制御を行う余地を作った。

3. 履歴

  • 2016.2.18 : この Wiki ページでの公開を開始しました。
  • 2016.2.19 : 更新
  • 2016.2.23 : Exposure を分解した 3つのコマンドを実装。StartExposure, RBIFlush, DownLoadImage
  • 2020.2.26 : 64bit Windows10 で動作確認したバージョンを upload しました。

4. 簡単な説明

4.1 設定ファイル

QtXTop の設定は、同じフォルダに置いた config.cfg に書けます。 次にあげるのは設定ファイル(config.cfg)の内容の例です。

STARS_IP     192.168.11.111  # Stars サーバの IP アドレス
STARS_PORT    6057        # Stars サーバの Port 番号
KEY_FILE_NAME  QtXTop       # Stars のコネクション確立に使う Key ファイルの名前
NAME_ON_STARS  QtXTop       # Stars 上で名乗る自分の名前

CAMERA_NO 0       # PC に FLI ライブラリが認識する複数のカメラがある場合、何番目のカメラを制御するかを指定

4.2 Stars経由でのコマンド

QtXTop は Stars 経由で送られてくる下記のコマンドを認識します。

コマンド名 引数 説明 凡例/応答例
IsBusy    無し 撮影中は 1 そうでなければ 0 を返す  
GetLibVer    無し ライブラリのバージョンを表す文字列を返す  
GetModel    無し モデル名を表す文字列を返す  
GetSerialSTR   無し シリアル番号を表す文字列を返す  
GetHWRev     無し ハードウエアのバージョンを表す数字を返す  
GetPixSize    無し ピクセルサイズを表す 2つの数字を返す  
GetArrayArea   無し デバイスのピクセルサイズ?を表す 4 つの数字を返す 0 0 3448 2574
GetVisArea    無し デバイスの有効サイズ?を表す 4 つの数字を返す 43 46 3369 2550
SetTemp     1つ 温度を設定する(実数、℃)
GetTemp     無し デバイスの CCD温度と、ベース温度を示す2つの数字を返す
GetCCDTemp    無し デバイスの CCD温度を返す
GetBaseTemp    無し デバイスの ベース温度を返す
GetCoolerPWR   無し クーラーパワーの数値を返す
SetBin      3つ bin を設定する。hbin, vbin, rbin の順 デフォルトは全部 1 SetBin 1 1 1
GetBin      無し bin を表す3つの数字を返す。 hbin, vbin, rbin の順 1 1 1
SetRBIFlushes  1つ 何回 RBI Flush を行うかを指定 (デフォルト は 0)
GetRBIFlushes  無し 設定されている RBIFlushes の数字を返す
SetRBIExpTime  1つ RBI Flush に際して露光を行う時間を指定。
デフォルトは 500 (500ミリ秒?)
GetRBIExpTime  無し 設定されている RBIExpTime の数字を返す
SetTDIRate    1つ 本番撮影の際の TDI Rate を指定。デフォルトは 0
GetTDIRate    無し 設定されている TDIRate の数字を返す
SetImages    1つ 連続して何枚イメージを撮影するかの指定。デフォルトは 1
GetImages    無し 設定されている Images の数字を返す。
SetExpTime    1つ 本番撮影の露光時間を指定。デフォルトは 500 (500ミリ秒?)
GetExpTime    無し 設定されている露光時間を返す。
SetInterval    1つ 複数枚イメージを取る際、間を開ける時間。
デフォルトは 0。現在内部では使われていない(無効)。
GetInterval    無し 設定されている Interval を返す。
SetFileName    1つ 撮影されたデータを保存するファイル名の設定。
実際の保存の際には、指定された名前にイメージ番号が加わわります。
GetFileName    無し 設定されているデータファイル名を返す。
Exposure      無し 撮影。即 OK が返ってきます。
撮影が終わったかどうかは IsBusy できくか、EvChangedIsBusy 0 を待つかしてください。
このコマンドを実行する前に設定した
hbin, vbin, rbin, RBIFlushes, RBIExpTime, Images, ExpTime, FileName, TDIRate
の数字/値が使われます。
StartExposure   無し 撮影。即 OK が返ってきます。CCDからのデータ読み出しは行いません。
事前に設定した hbin, vbin, ExpTime, TDIRate の値が使われます。
DownLoadImage 無し 撮影されて CCD 上に残っている像を読みだし、ファイルに書き出します。
事前に設定したFileName が使われます。
RBIFlush       無し 決められた条件で CCD に借りの露光動作とデータの空読みを行います。
撮影前のデバイスクリアの動作?
rbin, RBIFlushes, RBIExpTime の値が使われます。
SetUseSeqFNo    1つ ファイル名に通し番号を付けるかどうか。 1 : Yes, 0 : No。
Yes にすると、SetFileName したファイル名に通し番号がついた名前で保存されます。
GetUseSeqFNo    無し ファイル名に通し番号を付ける設定かどうかを尋ねる。 1 : Yes, 0 : No
SetSeqFileNo    1つ 通し番号の最初の数字を指定。データファイル保存のたびに一つづつ増えます。
GetSeqFileNo    無し 次に使われる通し番号。

4.3 Stars経由で発生するイベント

QtXTop は、下記のイベントを Stars 経由で発生します。

イベント名 説明
EvChangedIsBusy  QtXTop 側から能動的に発生するイベントメッセージ。
撮影が始まるった時点で 1, 終わった時点で 0 が発生。

5. その他、チップス等

5.1 縦横のピクセル数の取得

ファイルから画像を復元するときには、縦横のピクセル数が必要になります。 それは、Stars 経由で GetVisArea を送った時の回答の 4つの数字を x1 y1 x2 y2 とした時、 幅 = x2-x1, 高さ = y2-y1 で求まります。

5.2 画像ファイルの ImageJ での読み込み

ImageJで読む場合は、Import/Raw…から、上記縦横のピクセル数の情報を入力し、 Image type = 16-bit Unsigned、Offset = 0, Little-endian byte orderにチェックを入れると読み込めます。

5.3 ImageJ での画像解析の前に

  1. 撮影と同じ露光時間で測定したダークレベルを差し引く
  2. Process/Filters/Median… Radius = 1.0 pixel(2.0などでも可;数字が大きくなるほど分解能は下がる)

をしておくと、かなり弱い信号まで高いS/N比で見えるようになります。

5.4 画像の回転

FLIGrabで見える画像はカメラで見たそのままですが、保存される.rawファイルは、180°回転像になっています。

6. What to Do

  • 連番のナンバリングは修正すべし
    SetUseSeqFNo 1のとき、連続ファイルの番号は1ずつ増えて、scan_0001-0000.raw, scan_0002-0000.raw, scan_0003-0000.raw …などとなるが、SetImageで連続撮影の指定をした場合、scan_0001-0000.raw, scan_0002-0001.raw,, scan_0003-0002.raw …などとなってしまう。
  • FLIGrabと同時に使っていると、FLIGrab終了時にCCDの冷却が止まってしまう。
    起動時に “SetTemp -20”を自動的に送る、あるいは GetTempで温度を監視するなどの機能があるといいと思います。» 温度変化はイベント化すべし ?

当 web ページとその下のページに関するお問い合わせ等ございましたら、連絡先にご連絡をお願いします。
田渕のページのルート

tabuchi/qtxtop.txt · 最終更新: 2020/08/13 13:09 by mtab