mengineer's blog

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

JAISDKで失敗した話

この何年かずっと、JAISDKというSDKを使っています。

http://www.jai.com/jp/camerasolutions/download/software

先日作ったあるソフトが特定のPC上で動かない!!というクレームで
調査したら、どうやらSDKのバージョンに起因するもよう。

ソフト自体は、ごく簡単なもので、PCに接続したGEカメラの特定Nodeの
値を読み取ってくるだけです、先頭部こんな感じ。

//カメラ検索
myFactory.UpdateCameraList(Jai_FactoryDotNET.CFactory.EDriverType.FilterDriver);
    if (myFactory.CameraList.Count > 0)
    {
        myCamera = myFactory.CameraList[0];
        if (myCamera.Open() != Jai_FactoryWrapper.EFactoryError.Success)
        {
            MessageBox.Show("カメラをOpen出来ません", "カメラOpenエラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return;
        }
        else
        {
動作概要

UpdateCameraList実行で、接続された(ネットワーク上の)カメラを検索し、
見つかった台数がCameraList.Countに入ります、0より大きければカメラ検出成功。

リスト先頭のカメラをOpenして、以降で所望Nodeの設定値を読んでいきます。

不具合現象

このソフトは、JAISDKの最新版(2.1.6)の環境で作りました。
そこだとOKですが、旧バージョンのSDK (1.4.1)の環境だと
J_GenTL_XXXXが見つかりません、という、見覚えない関数名でエラー。

原因

両バージョンのSDKのマニュアルを見比べていくと、1.4.1の方には
J_GenTL系の関数が有りませんでした。(2.6.1には存在する)

これらを使った覚えは無いので、UpdateCameraList実行時に
2.6.1では内部でJ_GenTL系の関数が呼ばれているのだろう、
と推測されます。 (1.4.1では別のが使われていた?)

解決策

SDKのバージョンを1.4.1に戻して、Buildし直したらOK

(結果的に)SDKのバージョンを最新版に上げていたのが失敗!

今回、何か最新版の機能を使っているのなら納得するのですが、
上記の処理自体は1.4.1当時と全く同じ。(ソースファイルも共通)

それが旧バージョンで動かなくなるとは、ちょっと想定外でした。

教訓:無闇に上げるなSDKバージョン。