Published: 
PC

これ、ハマるSDKですわ。ちゃんとしたサンプルがVB.Netだけ。

それも1つです。

よく読んでもさっぱりわからない。

とにかくトリガーモードがインターナルとエクスターナルの2種類あり、どういう動作をするかは理解できた。

資料によると、Internal Triggerは05モードを使い、External Triggerは06モードを使う。

資料が2009年のものなので、多分まだ新しいものがあると思えるのだが、はてさて。

05モードは簡単で、イメージ画像を連続して読み込める、簡単に言うと動画モードですかね。こちらは、リアルタイムに受け取れるし、スプールファイルへ出力も可能。更に、サンプルには余計な設定APIを呼ぶようになっているが、不要と思われるものを除くと各種設定値を変更した後の復帰が早くなるオマケ付き。

06モードは、設定値に従って設定数分のイメージ画像等を読み込める。こちらは意外と曲者で、スプール出来るのは最大で95個。95個以上設定してもエラーにならないが、95個以上は取得できない。更には、スプールを使わないと設定数分のイメージを取得できない。

ややこしいのはここから。05モードと06モードを切り替えるのにハード(PCではない)の制限で切り替えるのに500ms位掛かる。これで悩まされたんですよね。10枚の画像を取得するのに、単独だと500ms程度で終わるのに、切り替えを含めると1sec掛かる。この謎を調べるのに半日悩みました。

おまけに、ディレイタイムで設定した時間以内に取得できた画像だけがスプールファイルを出力する。そのディレイタイムも決める基準がないのです。問い合わせてもいろいろ試して最適値を探してくださいとの事。あれれだね。

上記の通り、05と06はそれぞれの組み合わせで使うように書かれいるが、これが違ったんだな。06モードで設定したのちにInternal Triggerのままで画像の取得ができる。これだと05モードと06モード切り替えラグが最小限度になるし、External Triggerを使用するよりも半分程度の時間で取得が可能。

ただし、GetImages()等のAPIを使用すると、まれに指定数分取れないことがある。スプールへ出力すれば問題は発生しないのでこちらを使うのが吉かなと。ただし、専用の高速なHDDかRAMディスクを推奨します。このI/Oもバカに出来ないラグになっちゃいますので。

後は通常画像だと1MB程のサイズになるので動的にアロケーションしやすい様(確保時にエラーにならない様)に、64ビットOSで潤沢なメモリーがあれば更によし。

基本的にはアンマネージドなVC++で使う事をお勧めします。GUIだけC#やVB.Netがいいかもしれません。ちなみに私はMFCでDLLを作成して使ってます。

まあ、自分の覚書なのであれですけど、日本で知ってる人ってどのくらいいるのかな。海外のサイトを検索しても事例が全然見当たらないんだよね。

英語が最高に苦手な私は日本語で質問を書いて、英文に翻訳して頂いてますw

英語が苦手なのに、なんで英文の資料読めてるのか不思議。今までにも、何度も真剣に英語を覚えようと思っているのですが、なかなかうまくいかないものです。もう歳も歳だから、今更感ありありw

でも、あまり一般には使われていない物を使うと、闘志が湧くのはなぜだろう。。。

あ、ちなみにCOBOLが一番嫌いな言語です。