読者です 読者をやめる 読者になる 読者になる

mengineer's blog

ニッチなネタばかりですが。

GenICamの世界その2 GenApiはXMLファイルが肝!

GenICam

ということでGenICamの二回目、ひとつ小ネタを挟んだので前回はこちら。

mengineer.hatenablog.com

今回はGenICamの構成要素のひとつで有るGenApiについて見ていきます。

ちなみに前回のダウンロードページ にGenApi2.0の仕様書(pdf)が有ります。

GenICamTM GenApi Standard Document 2.0 (PDF)

タイトルはGenApiですが、リンク先のファイル名はGenICam_Standard...なので、
やはりGenICamの中身は、ほとんどGenApiと考えて良さそう、普通に使う分には、
どっちがどうなっているとか、特に意識する必要も無いですけど。

では例によって、この仕様書から抜粋して調べていきましょう。

カメラの各種設定

前回、GenApiはカメラの各種設定に関する規定です、と言いました、
カメラに何か設定したい場合、ユーザーはプログラムからGenApiを介して
アクセスすることが出来ます、下図は先ほどの仕様書の6ページ目より。

f:id:mengineer:20160511160855p:plain

例えばカメラの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" >の辺りを参照。

f:id:mengineer:20160511201341p:plain

  • <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について調べてみます。