キーワードから探す

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

カテゴリで絞り込む

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

ID:491
作成日: 2024/12/18

撮像の開始と停止に時間がかかります。回避する方法はありますか?

カテゴリ SDK-AcapLib2 SDK-TransFlyer
対象製品 CoaXPressボード 全ての10GbEボード 全てのGVIFボード

撮像を開始するとき、ボードはカメラに撮像を開始するためのコマンドを送信しその応答を待つ処理が発生します。
コマンドの応答まで待ち状態となるため、撮像の開始に時間がかかります。

回避する方法として、先にカメラの撮像を開始しておき、撮像の繰り返しはボードのみで行う方法があります。
具体的な設定方法は、SDK毎に異なるためご使用になるSDKの欄をご参照ください。

※※※ 注意事項 ※※※
カメラの撮像を開始した後、パラメータによっては設定の変更を受け付けない場合があります。
カメラの設定を変更する場合、サイズやbit等の設定はカメラの撮像を開始する前に設定してください。

SDK-AcapLib2
SDK-TransFlyer


SDK-AcapLib2
設定ID「ACL_CXP_ACQUISITION_CONTROL」を設定します。
カメラの撮像を開始("AcquisitionStart Execute")した際、コマンドが完了することを"AcquisitionStart IsDone"で確認します。

以下に「ACL_CXP_ACQUISITION_CONTROL」の使用例を示します。
char buffer[64] = { NULL };
int nByte = 0;

// ボードとカメラのAcquisitionStart/Stopを個別に実行できるよう設定
AcapSetInfo(hAcap, ch, ACL_CXP_ACQUISITION_CONTROL, 0, 1);

// カメラへ直接コマンドアクセスするためオープン
AcapSerialOpen(hAcap, ch);

// カメラのAcquisitionを開始
AcapSerialWrite(hAcap, ch, TRUE, (char*)"AcquisitionStart Execute", (char*)"GenICam", NULL);

// Execeuteコマンド完了の確認
AcapSerialWrite(hAcap, ch, TRUE, (char*)"AcquisitionStart IsDone", (char*)"GenICam", NULL);

do {
	// IsDoneのステータスを取得
	AcapSerialRead(hAcap, ch, TRUE, 3000, 64, NULL, buffer, &nByte);
} while (strcmp(buffer, "true") != 0);

while (_kbhit() == 0)
{
	int frameNum = 0, numOfLines = 0, bufferIndex = 0;
	void* pImage = NULL;

	// ボードのAcquisitionを開始
	AcapGrabStart(hAcap, ch, 0);

	// 画像データが取得できるまで待機
	AcapWaitEvent(hAcap, ch, ACL_INT_FRAMEEND, 3000);

	// 画像データのインデックス番号を取得
	AcapGetFrameNo(hAcap, ch, &frameNum, &numOfLines, &bufferIndex);

	// 画像データのバッファアドレスを取得
	AcapGetBufferAddress(hAcap, ch, ACL_IMAGE_PTR, bufferIndex, &pImage);

	// ボードのAcquisitionを停止
	AcapGrabStop(hAcap, ch);
}

// カメラのAcquisitionを停止
AcapSerialWrite(hAcap, ch, TRUE, (char*)"AcquisitionStop Execute", (char*)"GenICam", NULL);

// Execeuteコマンド完了の確認
AcapSerialWrite(hAcap, ch, TRUE, (char*)"AcquisitionStop IsDone", (char*)"GenICam", NULL);

do {
	// IsDoneのステータスを取得
	AcapSerialRead(hAcap, ch, TRUE, 3000, 64, NULL, buffer, &nByte);
} while (strcmp(buffer, "true") != 0);

// ボードとカメラのAcquisitionStart/Stopの設定を元に戻す
AcapSetInfo(hAcap, ch, ACL_CXP_ACQUISITION_CONTROL, 0, 0);


SDK-TransFlyer
ボードに"AcquisitionStartStopCommandAuto"(=Off)を設定します。
カメラの撮像を開始(AcquitionStart)した際、コマンドが完了することを確認するため応答をポーリングします。

以下に"AcquisitionStartStopCommandAuto"の使用例を示します。
ITraImage* pImage = NULL;
bool8_t done = false;

// ボードとカメラのAcquisitionStart/Stopを個別に実行できるよう設定
grabber->SetValue("AcquisitionStartStopCommandAuto", "Off");

// ボードの設定を確定
grabber->GrabPrepared(10);

// カメラのAcquisitionを開始
camera->Execute("AcquisitionStart");

// カメラからAcquisitionを開始した通知を受けるまでポーリング
do {
	camera->IsExecuteDone("AcquisitionStart", &done);
} while (done == false);

while (!_kbhit())
{
	// ボードのAcquisitionを開始
	grabber->Grab();

	// 画像データが取得できるまで待機
	if (grabber->GrabResult(&pImage, 1000) == true)
	{
		// 画像データを取得
		pImage->Data();
	}

	// ボードのAcquisitionを停止
	grabber->GrabStop();
}

// カメラのAcquisitionを停止
camera->Execute("AcquisitionStop");

// カメラからAcquisitionを停止した通知を受けるまでポーリング
do {
	camera->IsExecuteDone("AcquisitionStop", &done);
} while (done == false);

// ボードとカメラのAcquisitionStart/Stopの設定を元に戻す
grabber->SetValue("AcquisitionStartStopCommandAuto", "On");
この内容は参考になりましたか?
ご回答いただきまして、ありがとうございます。
今後の参考にさせていただきます。
ご意見・ご感想、ありがとうございます。

関連するご質問

Now Loading...

Now Loading...