ということでGenICamの二回目、ひとつ小ネタを挟んだので前回はこちら。
今回はGenICamの構成要素のひとつで有るGenApiについて見ていきます。
ちなみに前回のダウンロードページ にGenApi2.0の仕様書(pdf)が有ります。
GenICamTM GenApi Standard Document 2.0 (PDF)
タイトルはGenApiですが、リンク先のファイル名はGenICam_Standard...なので、
やはりGenICamの中身は、ほとんどGenApiと考えて良さそう、普通に使う分には、
どっちがどうなっているとか、特に意識する必要も無いですけど。
では例によって、この仕様書から抜粋して調べていきましょう。
カメラの各種設定
前回、GenApiはカメラの各種設定に関する規定です、と言いました、
カメラに何か設定したい場合、ユーザーはプログラムからGenApiを介して
アクセスすることが出来ます、下図は先ほどの仕様書の6ページ目より。
例えばカメラのGainを42に設定したい場合、ユーザーは
Camera.Gain = 42;
とプログラムすると、GenApiがそれを実際のカメラの情報に置き換えてくれます、
このカメラのGainのレジスタのアドレスが0x815だとすると、
TransportLayer.WriteRegister( 0x0815, 0x2A, 2 ); // address, data, length;
みたいな感じです、当然カメラの型番やメーカーでアドレス等は全て異なりますが、
ユーザー側から見ると、どれでも同じCamera.Gainを使うだけで良い、ということ。
これがGenICamを使う最大のメリットですね。
この仕組みをどうやって実現するかというと、カメラ毎に設定情報を記述した
XMLファイルを持つことが決められています、次はそのファイルについて。
Camera Description File
設定情報を記述したXMLファイルを、規格ではCamera Description Fileと呼びます、
実際にはGenICam XMLファイルとか、単にXMLファイルと呼ぶことが多いです。
通常このファイルはカメラ内に保存されており、GenICam対応のSDKを起動すると、
カメラから読み取ってPC内の所定フォルダ(SDKで異なる) に保存してくれます、
なのでカメラを使う側では、XMLファイルの処理を意識する必要は有りません。
万が一このファイルが読めなかったりすると、SDK側でエラーになります。
(以前IMAQdxのネタで書いたエラーや、カメラが全く認識されない等)
ファイルの中身ですが、規格書の8ページに有った簡単なサンプルを抜粋します、
先ほどのCamera.Gainの記述ですね、<IntReg Name="Gain" >の辺りを参照。
- <IntReg Name="Gain"> レジスタの値がInteger、名称が”Gain”
- <ToolTip> このコマンド(Gain)に関する簡単な説明
- <Address> レジスタの番地 (この例では0x815)
- <Length> レジスタ長
- <AccessMode> "RW"なのでレジスタは読み書き可能
- <pPort> レジスタはデバイスのPortをアクセスする
- <Sign> Unsignedなので、このレジスタは正の値のみ
- <Endianess> データ並び順 このレジスタはBigEndian
こんな感じで、カメラのコマンド(設定項目)毎に情報が記述されています。
また先頭の<RegisterDescriotion>の部分には、機種名、メーカー名、
XMLファイルのバージョン、スキーマ定義などが書かれています。
このファイルは(当然ながら)各カメラメーカーが作成していますが、
Dalsaなどは一般公開しているので、興味の有る方は見てみて下さい。
GenICam Files - Teledyne DALSA
ところで先ほどの規格書ですが、大半がXMLの記述についての規定です。
カメラメーカーの中の人や、カメラのドライバーソフトを内作する人なら
熟読するでしょうが、それ以外の方は"XMLは上記みたいな内容なんだな”
ぐらい知っておく程度でも充分かと思います。
まとめ
- GenICam対応カメラには、必ず設定情報を記述したXMLファイルが有る。
- GenApiがその内容を下位情報(レジスタ番地等)に展開してくれる。
- ユーザー(プログラム)はGenApiを介してカメラにアクセスする。
ところで、GenICam対応カメラならメーカーやIFの種類に関係無く、
例えばGainならCamera.Gainという同じAPIでアクセス出来ますよ。
というのは非常に便利なのですが、これには前提条件がひとつ、
どのメーカーも同じ”Gain”というコマンド名を使う必要が有ります。
どのメーカー/カメラでも共通の名称を使っていきましょう、というのが
SFNC (Standard Features Naming Convention) というGenICamの規定です、
次回はSFNCについて調べてみます。