IDS Peak comfortSDK, genericSDK, IPL, and AFL developer manuals are external documents. Please contact us if you need them.
All IDS Vision cameras start in continuous freerun mode by default. In this mode, the camera captures image frames continuously with the given frame rate until the acquisition is stopped.
The frame rate limit depends on the bandwidth of the interface, the exposure time, and on the capability of sensor to overlap frames.
Fig. 64: Camera timing in freerun mode with sequential frames
Fig. 65: Camera timing in freerun mode with overlapping frames
Configuration
First make sure, you have chosen the AcquisitionMode "Continuous".
AcquisitionMode = Continuous;
Then de-activate all triggers, most important is the "ExposureStart" trigger.
TriggerSelector = ExposureStart;
TriggerMode = Off;
Set AcquisitionFrameRate to meet your application's speed.
AcquisitionFrameRate = 10.0;
Now the image acquisition is ready to be started. See Preparing image acquisition: create buffer and Starting and stopping image acquisition.
AcquisitionStart();
Alternatives and variations: Load UserSet Default
A simple way to switch to freerun mode is to load the "Default" UserSet.
UserSetSelector = Default;
UserSetLoad();
Set AcquisitionFrameRate to meet your application's speed.
// set a frame rate to 10fps
AcquisitionFrameRate = 10.0;
|
When you load UserSet "Default", all other parameters are set to their default value, too. Therefore use this method before you change any other parameters.
|
Alternatives and variations: Switch between triggered and freerun mode with persistent frame rate
When switching between triggered and freerun mode, AcquisitionFrameRate might be reset. To keep your frame rate persistent, use the AcquisitionFrameRateTarget.
AcquisitionFrameRateTarget = 10.0;
Enable using that target.
AcquisitionFrameRateTargetEnable = True;
Additional information
IDS peak: code examples
// Freerun configurations
peak_status status = peak_Trigger_Enable(hCam, PEAK_FALSE);
if (PEAK_ERROR(status)) { /* Error handling ... */ }
// Set AcquisitionFrameRate to 10fps
status = peak_FrameRate_Set(hCam, 10.0);
if (PEAK_ERROR(status)) { /* Error handling ... */ }
// Next step: start acquisition
// ALTERNATIVE: Load UserSet Default
// Load UserSet "Default"
peak_status status = peak_Camera_ResetToDefaultSettings(hCam);
if (PEAK_ERROR(status)) { /* Error handling ... */ }
// Set AcquisitionFrameRate to 10fps
status = peak_FrameRate_Set(hCam, 10.0);
if (PEAK_ERROR(status)) { /* Error handling ... */ }
// Next step: start acquisition
|
{
// Get RemoteDevice NodeMap
auto nodeMapRemoteDevice = device->RemoteDevice()->NodeMaps().at(0);
// Freerun configurations
nodeMapRemoteDevice->FindNode<peak::core::nodes::EnumerationNode>("AcquisitionMode")->SetCurrentEntry("Continuous");
nodeMapRemoteDevice->FindNode<peak::core::nodes::EnumerationNode>("TriggerSelector")->SetCurrentEntry("ExposureStart");
nodeMapRemoteDevice->FindNode<peak::core::nodes::EnumerationNode>("TriggerMode")->SetCurrentEntry("Off");
// Set AcquisitionFrameRate to 10fps
nodeMapRemoteDevice->FindNode<peak::core::nodes::FloatNode>("AcquisitionFrameRate")->SetValue(10.0);
// Next step: start acquisition
}
catch (const std::exception& e)
{
std::string strError = e.what();
// ...
}
// ALTERNATIVE: Load UserSet Default
try
{
// Get RemoteDevice NodeMap
auto nodeMapRemoteDevice = device->RemoteDevice()->NodeMaps().at(0);
// Load UserSet "Default"
nodeMapRemoteDevice->FindNode<peak::core::nodes::EnumerationNode>("UserSetSelector")->SetCurrentEntry("Default");
nodeMapRemoteDevice->FindNode<peak::core::nodes::CommandNode>("UserSetLoad")->Execute();
// Set AcquisitionFrameRate to 10fps
nodeMapRemoteDevice->FindNode<peak::core::nodes::FloatNode>("AcquisitionFrameRate")->SetValue(10.0);
// Next step: start acquisition
}
catch (const std::exception& e)
{
std::string strError = e.what();
// ...
}
// VARIATON: Switch between triggered and freerun mode with persistent frame rate
try
{
// Get RemoteDevice NodeMap
auto nodeMapRemoteDevice = device->RemoteDevice()->NodeMaps().at(0);
// Freerun configurations
nodeMapRemoteDevice->FindNode<peak::core::nodes::EnumerationNode>("AcquisitionMode")->SetCurrentEntry("Continuous");
nodeMapRemoteDevice->FindNode<peak::core::nodes::EnumerationNode>("TriggerSelector")->SetCurrentEntry("ExposureStart");
nodeMapRemoteDevice->FindNode<peak::core::nodes::EnumerationNode>("TriggerMode")->SetCurrentEntry("Off");
// Trigger mode preparations, e.g. configuration as software trigger
nodeMapRemoteDevice->FindNode<peak::core::nodes::EnumerationNode>("TriggerSource")->SetCurrentEntry("Software");
// Set AcquisitionFrameRateTarget to 10fps and enable it
nodeMapRemoteDevice->FindNode<peak::core::nodes::FloatNode>("AcquisitionFrameRateTarget")->SetValue(10.0);
nodeMapRemoteDevice->FindNode<peak::core::nodes::BooleanNode>("AcquisitionFrameRateTargetEnable")->SetValue(True);
// Next step: start acquisition
// ...
// Stop acquisition
// ...
// Switch to triggered mode as configured before
nodeMapRemoteDevice->FindNode<peak::core::nodes::EnumerationNode>("TriggerSelector")->SetCurrentEntry("ExposureStart");
nodeMapRemoteDevice->FindNode<peak::core::nodes::EnumerationNode>("TriggerMode")->SetCurrentEntry("On");
// Start acquisition
// ...
// Stop acquisition
// ...
// Switch back to freerun mode
nodeMapRemoteDevice->FindNode<peak::core::nodes::EnumerationNode>("TriggerSelector")->SetCurrentEntry("ExposureStart");
nodeMapRemoteDevice->FindNode<peak::core::nodes::EnumerationNode>("TriggerMode")->SetCurrentEntry("Off");
// Start acquisition
// ...
// Stop acquisition
// ...
}
catch (const std::exception& e)
{
std::string strError = e.what();
// ...
}
|