カテゴリ | |
対象製品 | ※APX-3324A、APX-3326Aはボード間同期撮像の機能が存在しませんのでご注意ください。 |
設定項目 | マスターボード設定 | スレーブボード設定 |
Use The CC? | Yes | |
Exposure | 任意の値を設定します。 ただしCycleより小さい値を設定してください。 |
|
Cycle | 任意の値を設定します。 | 以下の条件を満たした値を設定して下さい。 ・カメラの制限を超えない範囲で、可能な限り早い周期であること ・マスターボードのCycle(CC信号周期)より早い周期であること。 |
Sync LT | チェックは不要です。 | チェックを付けます。 |
CC Stop | チェックを付けます。 | |
Use the External Trigger? | No | TTL |
Mode | 設定不要です。 | CC 1Shot |
設定項目 | マスターボード設定 | スレーブボード設定 |
Use The CC? | Yes | |
Exposure | 任意の値を設定します。 ただしCycleより小さい値を設定してください。 |
|
Cycle | 任意の値を設定します。 | 以下の条件を満たした値を設定して下さい。 ・カメラの制限を超えない範囲で、可能な限り早い周期であること ・マスターボードのCycle(CC信号周期)より早い周期であること。 |
Sync LT | チェックは不要です。 | チェックを付けます。 |
CC Stop | チェックを付けます。 | |
Use the External Trigger? | No | TTL |
Mode ※Step4 | 設定不要です。 | CC 1Shot |
Use the External Encoder? | No | Yes |
Mode ※Step5 | 設定不要です。 | Relative ※Absoluteでは動作しないのでご注意ください。 |
Start Mode | 設定不要です。 | CC 1Shot |
int nBoardID_0 = 0; // ボードID 0
int nBoardID_1 = 1; // ボードID 1
int ch_1 = 1; // ch1
int CCCycle_us = 30000; // CC 出力周期
int CCWidth_us = 15000; // CC 出力幅
int nRet = 0; // 戻り値
int CamType = 0; // カメラタイプ
//マスターボード、スレーブボードをそれぞれオープンします。(ここではAPX-3302を使用します)
HANDLE hDev_Master = AcapOpen("APX-3302", nBoardID_0, ch_1);
HANDLE hDev_Slave = AcapOpen("APX-3302", nBoardID_1, ch_1);
// ini ファイルで基本部分の初期設定
nRet = AcapSelectFile(hDev_Master, ch_1, ".\\camera_ch1.ini", 0);
nRet = AcapSelectFile(hDev_Slave, ch_1, ".\\camera_ch2.ini", 0);
/////////////////////////////////////////////////////////////////////////////////////
//
// ○スレーブボードのCC 出力周期設定は
// カメラの制限を超えない範囲で、できるだけ短い周期に設定します。
// また、必ずマスターボードのCC 出力周期より早い周期を設定してください。
// ○CC 信号を出力する場合、周期も出力幅も1 以上に設定しなければいけません。
// 0 に設定した場合、CC 信号が出力されません。
// ○CC 信号の周期は出力幅より大きく設定します。
// ○CC 信号を出力してから、CC 信号出力周期期間が終わるまで
// 次の同期要求を受けられません。
//
/////////////////////////////////////////////////////////////////////////////////////
// マスターボードのCC 出力設定
CCCycle_us = 100 * 1000; // 100[ms]
CCWidth_us = 20 * 1000; // 20[ms]
nRet = AcapSetInfo(hDev_Master, ch_1, ACL_EXP_CYCLE, -1, CCCycle_us);
nRet = AcapSetInfo(hDev_Master, ch_1, ACL_EXPOSURE, -1, CCWidth_us);
// スレーブボードのCC 出力設定
nRet = AcapSetInfo(hDev_Slave, ch_1, ACL_EXP_CYCLE, -1, (CCCycle_us - 1000));
nRet = AcapSetInfo(hDev_Slave, ch_1, ACL_EXPOSURE, -1, CCWidth_us);
// CC 出力を有効
nRet = AcapSetInfo(hDev_Master, ch_1, ACL_EXP_EN, -1, 1);
nRet = AcapSetInfo(hDev_Slave, ch_1, ACL_EXP_EN, -1, 1);
/////////////////////////////////////////////////////////////////////////////////////
//
// ○ラインセンサの場合、
// センサの飽和を避けるため取り込み停止中でもCC 信号が出力されています。
// この状態でチャンネル間同期を行った場合、
// マスターボードが取り込み停止しているにも関わらず
// スレーブボードがマスターボードのSYNCLT に同期してCC 信号を出力してしまい
// 先に取り込みを行ってしまいますので、必ずCC 信号は停止してください。
//
/////////////////////////////////////////////////////////////////////////////////////
// センサの種類を取得
nRet = AcapGetInfo(hDev_Master, ch_1, ACL_SCAN_SYSTEM, 0, &CamType);
if(CamType == 0){
// エリアセンサと接続している場合、ローリングシャッタを有効にします。
nRet = AcapSetInfo(hDev_Master, ch_1, ACL_ROLLING_SHUTTER, -1, 1);
nRet = AcapSetInfo(hDev_Slave, ch_1, ACL_ROLLING_SHUTTER, -1, 1);
}else{
// ラインセンサと接続している場合、取り込み開始前にCC信号を停止します。
nRet = AcapSetInfo(hDev_Master, ch_1, ACL_CC_STOP, -1, 1);
nRet = AcapSetInfo(hDev_Slave, ch_1, ACL_CC_STOP, -1, 1);
// スレーブボードの外部トリガ(SyncLT)を一致パルスとして使用する
nRet = AcapSetInfo(hDev_Slave, ch_1, ACL_ENC_EN, -1, 1);
nRet = AcapSetInfo(hDev_Slave, ch_1, ACL_ENC_START, -1, 2);
}
/////////////////////////////////////////////////////////////////////////////////////
//
// ○AcapSetInfo の第4 引数を-1 にして設定の反映を保留にしておき、
// 全ての設定が終わった後AcapReflectParam 関数で一括して設定を反映させます。
// (毎回設定の反映を行うと処理時間の無駄が発生します)
//
/////////////////////////////////////////////////////////////////////////////////////
// スレーブボードの外部トリガを有効にする
nRet = AcapSetInfo(hDev_Slave, ch_1, ACL_EXT_EN, -1, 1);
// スレーブボードのCC出力方法を外部トリガによる単発起動にする
nRet = AcapSetInfo(hDev_Slave, ch_1, ACL_EXT_MODE, -1, 0);
// スレーブボードのSyncLTを有効にする
nRet =AcapSetInfo(hDev_Slave, ch_1, ACL_SYNC_LT, -1, 1);
//設定を反映
nRet = AcapReflectParam(hDev_Master, ch_1);
nRet = AcapReflectParam(hDev_Slave, ch_1);
// イベント登録
nRet = AcapSetEvent(hDev_Master, ch_1, ACL_INT_GRABEND, TRUE);
nRet = AcapSetEvent(hDev_Slave, ch_1, ACL_INT_GRABEND, TRUE);
// スレーブボードを先に取込開始
nRet = AcapGrabStart(hDev_Slave, ch_1, 5); // 5 枚
// 次にマスターボードの取り込みを開始
nRet = AcapGrabStart(hDev_Master, ch_1, 5); // 5 枚
// GRABEND(5 枚入力完了)待ち
if(ACL_RTN_ERROR == AcapWaitEvent(hDev_Master, ch_1, ACL_INT_GRABEND, 10000))
{ ;/* タイムアウトetc */ }
if(ACL_RTN_ERROR == AcapWaitEvent(hDev_Slave, ch_1, ACL_INT_GRABEND, 10000))
{ ;/* タイムアウトetc */ }
// GRABEND割り込み後であれば停止順は自由
nRet = AcapGrabStop(hDev_Master, ch_1);
nRet = AcapGrabStop(hDev_Slave, ch_1);
// 同期取込をやめる場合はマスター/スレーブ設定を解除
nRet = AcapSetInfo(hDev_Slave, ch_1, ACL_SYNC_LT, 0, 0);
Now Loading...