キーワードから探す

※スペースで区切って複数検索が可能です。

カテゴリで絞り込む

よく検索されるキーワード

ID:497
作成日: 2025/01/23

CoaXPress対応ボードでチャンネル間同期撮像を行いたいです。AIPToolやプログラムで設定するにはどうすればよいですか?

カテゴリ SDK-AcapLib2 AIPTool CoaXPressボード
対象製品   APX-36124 APX-3666

カメラの設定が、ランダムシャッタモード(※)に設定されていることが前提条件となりますが、
以下の方法でチャンネル間で同期撮像を行うことが可能です。

※ボードから出力されるトリガパケット同期して露光するモードです。
以下では、同期元となるチャンネルをマスターチャンネル、同期するチャンネルをスレーブチャンネルとします。


[AIPToolでチャンネル間同期を行う場合]
〇AIPTool設定例

[プログラムでチャンネル間同期を行う場合]
〇プログラム例


[AIPToolでチャンネル間同期を行う場合]
1 Setupボタンをクリックし、「Use the CC?」をYesに設定します。
2 Step3 - CC / Strobe Setupが表示されるのでDetailをクリックします。
エリアセンサとラインセンサで設定が異なるため、以下の表を参考に設定を行ってください。


〇AIPTool設定例

設定項目 マスターチャンネル設定 スレーブチャンネル設定
Use The CC? Yes
Exposure 任意の値を設定します。
ただしCycleより小さい値を設定してください。
Cycle 任意の値を設定します。 以下の条件を満たした値を設定して下さい。
・カメラの制限を超えない範囲で、可能な限り早い周期であること
・マスターチャンネルのCycleより早い周期であること
Sync Ch 0に設定します。 同期するチャンネルに設定します。
マスターチャンネルがCH1の場合、1に設定します。
CC Stop チェックを付けます。


・AIPToolのマスターチャンネル設定例

APX-3324-26_master.png


・AIPToolのスレーブチャンネル設定例

APX-3324-26_slave.png

※スレーブチャンネルは上記設定以外に外部トリガ検出極性を正論理に変更する必要があります。
具体的には以下手順となります。

[手順1]
Use the External Trigger?をTTLに設定します。

[手順2]
PolarityをPositiveに設定します。
CH同期_外部トリガの論理設定

[手順3]
Use the External Trigger?をNoに戻し、最後にApplyボタンをクリックします。
CH同期設定_外部トリガ設定を戻します



〇撮像開始時の注意
各設定が終わり撮像を開始する際、
撮像(Snap/Grab)はスレーブチャンネルから開始してください。

スレーブチャンネル開始後、マスターチャンネルの撮像を開始してください。
マスターチャンネルから撮像すると、
スレーブチャンネルは撮像を開始するまでの画像を取りこぼすことになります。


[プログラムでチャンネル間同期を行う場合]
以下にプログラムでチャンネル間同期を行う場合の例を記述します。
なお、エラー処理は行っていないためご注意ください。

〇プログラム例

HANDLE hDev = NULL;	// ボードのハンドル格納用
int ch_all = 0;		// 全てのch
int ch_1 = 1;		// ch1
int ch_2 = 2;		// ch2
int CCCycle_us = 30000;	// トリガパケット出力周期
int CCWidth_us = 15000;	// トリガパケット出力幅
int nRet = 0;		// 関数戻り値用
int CamType = 0;	// カメラタイプ
ACAPBOARDINFO abi;	// ボード情報構造体

// ボード情報を取得
AcapGetBoardInfo(&abi);

// 全てのch をオープン
hDev = AcapOpen(abi.BOARDINDEX[0].pBoardName, abi.BOARDINDEX[0].nBoardID, ch_all);

// ini ファイルで基本部分の初期設定
nRet = AcapSelectFile(hDev, ch_1, ".¥¥camera_ch1.ini", 0);
nRet = AcapSelectFile(hDev, ch_2, ".¥¥camera_ch2.ini", 0);



//////////////////////////////////////////////////////////////////
// 〇スレーブチャンネルのトリガパケット出力周期設定。
//  APX-36124 / APX-3666:カメラの制限を超えない範囲で、できるだけ短い周期に設定します。
//  また必ずマスターチャンネルのトリガパケット出力周期(ACL_EXP_CYCLE)より早い周期を設定してください。
// 〇外部トリガを使用する場合。
//  APX-36124 / APX-3666:マスターチャンネルのみ外部トリガを入力します。
// 〇トリガパケットを出力する場合、周期も出力幅も1以上に設定しなければいけません。
//  0に設定した場合、トリガパケットが出力されません。
// 〇トリガパケットの周期は出力幅より大きく設定します。
// 〇トリガパケットを出力してから、トリガパケット出力周期期間が終わるまで、
//  次の同期要求を受けられません。
//////////////////////////////////////////////////////////////////


// マスターチャンネルのトリガパケット出力設定
CCCycle_us = 100 * 1000; // 100[ms] CCWidth_us = 20 * 1000; // 20[ms] nRet = AcapSetInfo(hDev, ch_1, ACL_EXP_CYCLE, -1, CCCycle_us); nRet = AcapSetInfo(hDev, ch_1, ACL_EXPOSURE, -1, CCWidth_us); // スレーブチャンネルのトリガパケット出力設定
nRet = AcapSetInfo(hDev, ch_2, ACL_EXPOSURE, -1, CCWidth_us); nRet = AcapSetInfo(hDev, ch_2, ACL_EXP_CYCLE, -1, CCCycle_us - 1000); // トリガパケット出力を有効 nRet = AcapSetInfo(hDev, ch_1, ACL_EXP_EN, -1, 1); nRet = AcapSetInfo(hDev, ch_2, ACL_EXP_EN, -1, 1); ////////////////////////////////////////////////////////////////// // ラインセンサの場合、センサの飽和を避けるため取り込み停止中でもトリガパケットが出力されています。 // この状態でチャンネル間同期を行った場合、 // マスターチャンネルが取り込み停止しているにも関わらず、 // スレーブチャンネルがマスターチャンネルのトリガパケットに同期して、トリガパケットを出力してしまい、 // 先に取込を行ってしまいますので、必ずトリガパケットは停止してください。 ////////////////////////////////////////////////////////////////// // カメラの種類を取得 nRet = AcapGetInfo(hDev, ch_1, ACL_SCAN_SYSTEM, 0, &CamType); if(CamType == 0) { // エリアセンサの場合、ローリングシャッタを有効にします。 nRet = AcapSetInfo(hDev, ch_1, ACL_ROLLING_SHUTTER, -1, 1); nRet = AcapSetInfo(hDev, ch_2, ACL_ROLLING_SHUTTER, -1, 1); }else{ // ラインセンサの場合、取り込み開始前にトリガパケット出力を停止します。
nRet = AcapSetInfo(hDev, ch_1, ACL_CC_STOP, -1, 1); nRet = AcapSetInfo(hDev, ch_2, ACL_CC_STOP, -1, 1); } ////////////////////////////////////////////////////////////////// // AcapSetInfo の第4引数を‐1 にして設定の反映を保留にして置き、 // 全ての設定が終わった後、AcapReflectParam 関数で一括して設定を反映させます。 // (毎回設定の反映を行うと処理時間の無駄が発生します) ////////////////////////////////////////////////////////////////// // スレーブチャンネル(2ch)のマスター(1ch)を設定 nRet = AcapSetInfo(hDev, ch_2, ACL_SYNC_CH, -1, ch_1); // チャンネル間同期を行う場合、外部トリガは無効のまま外部トリガ検出極性を正論理に設定します nRet = AcapSetInfo(hDev, ch_2, ACL_EXT_POL, -1, 1); // 設定を反映 nRet = AcapReflectParam(hDev, ch_1); nRet = AcapReflectParam(hDev, ch_2); ////////////////////////////////////////////////////////////////// // 取り込み開始 ////////////////////////////////////////////////////////////////// // イベント登録(説明用) nRet = AcapSetEvent(hDev, ch_1, ACL_INT_GRABEND, TRUE); nRet = AcapSetEvent(hDev, ch_2, ACL_INT_GRABEND, TRUE); // スレーブチャンネルを先に取込開始しなければならない nRet = AcapGrabStart(hDev, ch_2, 5); // 5 枚 // 100[ms]後にマスターチャンネルの取込を開始(説明用) Sleep(100); nRet = AcapGrabStart(hDev, ch_1, 5); // 5 枚 ////////////////////////////////////////////////////////////////// // 取り込み停止 ////////////////////////////////////////////////////////////////// // ACL_INT_GRABEND(5枚入力完了)待ち if(ACL_RTN_ERROR == AcapWaitEvent(hDev, ch_1, ACL_INT_GRABEND, 10000)) { /* タイムアウトetc */ } if(ACL_RTN_ERROR == AcapWaitEvent(hDev, ch_2, ACL_INT_GRABEND, 10000)) { /* タイムアウトetc */ } // ACL_INT_GRABEND後であれば停止順は自由 nRet = AcapGrabStop(hDev, ch_1); nRet = AcapGrabStop(hDev, ch_2); // 同期取り込みをやめる場合はスレーブ側の設定を解除 nRet = AcapSetInfo(hDev, ch_2, ACL_SYNC_CH, 0, 0);
この内容は参考になりましたか?
ご回答いただきまして、ありがとうございます。
今後の参考にさせていただきます。
ご意見・ご感想、ありがとうございます。

関連するご質問

Now Loading...

Now Loading...