【C#】HALCON de 画像処理(カメラ接続)

スポンサーリンク

今回はカメラと接続をしたいと思います。
やはり画像よりもカメラで取得した画像で行なってみたいですよね!!
今回は、【カメラと接続】したいと思います。
よろしくお願いいたします。
今回も前回まで使用しているソフトに対して改造を行っていきたいと思います。

【C#】HALCON de 画像処理(エリア指定) | 育児パパの人生備忘録 (t19488sns.com)

やりたい事の整理

■カメラと接続

カメラと接続するために今回は4つのものを用意しました。

★カメラ(Basler社 acA1600-20gm)
★レンズ(OPTART社 TV-2F-110)
★PoE Hub(tp_link社 TL-SG1005P)
★LANケーブル 2本

構成はこんな感じになります。
【PoE】ってなに?って言う人は最後に補足します。

カメラと接続

使用する関数

下記2つを使用します。

カメラ接続時
  HOperatorSet.OpenFramegrabber(HTuple, HTuple, HTuple, HTuple,
                                  HTuple, HTuple, HTuple, HTuple,
                                  HTuple, HTuple, HTuple, HTuple,
                                  HTuple, HTuple, HTuple, HTuple, out HTuple)カメラ切断時
  HOperatorSet.CloseFramegrabber(HTuple)

接続時はスゴイ量の引数ですが、引かずに頑張りましょう!
※基本的にデフォルト値を使用するようにします。

デザイン

左上に「CheckBox」を配置しました。
コントロールの名前は【chkCamConnect】です。

CheckBoxのValueが
True      :カメラ接続
False     :カメラ切断

上記のようにしたいと思います。

イベントの作成

配置したコントロール(chkCamConnect)をダブルクリックしてください。
すると自動で【chkCamConnect_CheckedChanged】というイベントが作成されます。

このイベントは、
チェックボックスにチェックが付いた時、消えた時に実行されるイベントになります。

そして、条件分岐を作っておきます。

private void chkCamConnect_CheckedChanged(object sender, EventArgs e)
{
    CheckBox chk = (CheckBox)sender;
    chk.Enabled = false;

    if(chk.Checked == true)
    {
        //接続時の処理
    }
    else
    {
        //切断時の処理
    }

    chk.Enabled = false;
}

※以降は接続時の処理/切断時の処理として紹介します。

イベントの処理(カメラ接続とカメラ切断)

変数定義

カメラと接続した際、カメラハンドルを取得します。
カメラハンドルを保持しておく必要があるため、変数を定義します。

※ハンドル(Handle)を割り与えられてた番号[ポインタ]であり、
 例えるなら、
飲食店で順番待ちをしている時にもらう整理券番号みたいなモノである

    HTuple CameraHandle;

接続時の処理

HOperatorSet.OpenFramegrabber()の処理を使って、カメラと接続します。

//接続時の処理
HOperatorSet.OpenFramegrabber(
            "GigEVision2",  // ①デバイス種類
            1,              // ②水平方向解像度( 1:Full 2:Half 3:Quota)
            1,              // ③垂直方向改造度( 1:Full 2:Half 3:Quota)
            0,              // ④画像の高さ( 0:デフォルト)
            0,              // ⑤画像の長さ( 0:デフォルト)
            0,              // ⑥高さ方向の始点オフセット座標[pix]
            0,              // ⑦長さ方向の始点オフセット座標[pix]
            "default",      // ⑧フィールド画像の種類
            8,              // ⑨ピクセルbit数
            "gray",         // ⑩カラーフォーマット
            -1,             // ⑪カメラ固有のパラメータ
            "false",        // ⑫外部トリガーモード    
            "default",      // ⑬カメラ信号の種類(ntcs pal auto defualt)
            "(MACAddress)_(メーカー名)_(Camera型式)",  // ⑭デバイス名 
            -1,             // ⑮ポート名
            -1,             // ⑯ライン名
            out CameraHandle// ⑰カメラハンドル
    );

今回の16個の引数を紹介するのは心が折れるので、変更する可能性がある場所を紹介します。

デバイスの種類 "pylon" or "GigEVision" or "GigEVision2" etc...
 これは通信の種類を設定します。
 MVTecをインストールした後に、
 特に何もしていないのであれば、"GigEVision2"だと思われます。

⑩カラーフォーマット "gray" or "color"
 これは接続するカメラの仕様によって決まります。

⑭デバイス名 "(MACAddress)_(メーカー名)_(カメラ型式)"
 これは接続するカメラによって決まります。
 今回使用したカメラだと下記のようになりました。
 "00305321edb2_Basler_acA160020gm"
 ※GigEVision2の場合です。

この⑭デバイス名の調べ方については、今回自分がした方法を補足として紹介します。

切断時の処理

HOperatorSet.CloseFramegrabber()を使って、カメラ切断をします。

//切断時の処理
if (CameraHandle != null)
{
    HOperatorSet.CloseFramegrabber(CameraHandle);
    CameraHandle = null;
}
else
{
    Console.WriteLine("すでに解放済み");
}

引数には、接続時に取得したカメラハンドルを使います。
そして、念のためカメラハンドルは、解放の意味も込めて、nullにしておきます。

まとめ

全体としては、下記のようになりました。

今回は接続のみを行いました。正直今の段階では、本当に接続できているかわかりませんw
ただエラーは出てないので、接続できているのでしょうw
そこで、次回はカメラに撮像命令を出して、撮像した画像を表示するようにしたいと思います。

補足:PoEとは

PoE(Power Over Ethernet)の頭文字をとったもの。
簡単に言うと、LANケーブルから電源供給も行える技術のことです。
配線はLANケーブルのみとなり、設置する際に電源(コンセント)の位置を気にしなくてよくなります。

補足:デバイス名の調べ方

デバイス名を調べるために、欲しい情報は【MACAddress】【メーカー名】【カメラ型式】です。
これを調べるために、Basler社が無償で提供している『Pylon IP Configurator』を使用します。
Baslerビジョンソフトウェアのダウンロード|Basler (baslerweb.com)

[ Camera Software Suite ] を選択し、必要項目を記入し、インストーラーをダウンロードする。
引き続き、ダウンロード後はインストールを行う。
インストールが完了すると、スタートメニューの中に下記が追加されている。

pylon IP Configuratorを起動すると、下記画面が表示される。

赤枠部分に書かれている内容から、確認する事が可能です。
※StatusがOK以外の場合は通信ができない可能性が高いので、OKである事を確認してください。

コメント

タイトルとURLをコピーしました