Configuring the grabber
Configuration is a very important aspect of any image acquisition program.
- The camera and the frame grabber both have to be configured according to the application requirements.
- The camera configuration must be compatible with the frame grabber configuration, and vice versa.
Configuration basically boils down to a series of set/get operations performed on the grabber modules: the remote device (i.e., the camera), the interface, the device, or the data stream modules.
This program configures the grabber for the so-called RG control mode (asynchronous reset camera control, frame grabber-controlled exposure).
#include <iostream>
#include <EGrabber.h>
const double FPS = 150;
void configure() {
Euresys::EGenTL gentl;
Euresys::EGrabber<> grabber(gentl);
// camera configuration
grabber.setString<Euresys::RemoteModule>("TriggerMode", "On"); // 1
grabber.setString<Euresys::RemoteModule>("TriggerSource", "CXPin"); // 2
grabber.setString<Euresys::RemoteModule>("ExposureMode", "TriggerWidth"); // 3
// frame grabber configuration
grabber.setString<Euresys::DeviceModule>("CameraControlMethod", "RG"); // 4
grabber.setString<Euresys::DeviceModule>("CycleTriggerSource", "Immediate"); // 5
grabber.setFloat<Euresys::DeviceModule>("CycleTargetPeriod", 1e6 / FPS); // 6
}
int main() {
try {
configure();
} catch (const std::exception &e) {
std::cout << "error: " << e.what() << std::endl;
}
}
- Enable triggers on the camera.
- Tell the camera to look for triggers on the CoaXPress link.
- Configure the camera to use the
TriggerWidth
exposure mode. - Set the frame grabber's camera control method to
RG
. In this mode, camera cycles are initiated by the frame grabber, and the exposure duration is also controlled by the frame grabber. - Tell the frame grabber to initiate camera cycles itself (at a rate defined by
CycleTargetPeriod
), without waiting for hardware or software triggers. - Configure the frame rate.
But there is a better way to configure the grabber. Using a script file, the program becomes:
#include <iostream>
#include <EGrabber.h>
void configure() {
Euresys::EGenTL gentl;
Euresys::EGrabber<> grabber(gentl);
grabber.runScript("config.js");
}
int main() {
try {
configure();
} catch (const std::exception &e) {
std::cout << "error: " << e.what() << std::endl;
}
}
and the configuration script is:
var grabber = grabbers[0];
var FPS = 150;
// camera configuration
grabber.RemotePort.set("TriggerMode", "On");
grabber.RemotePort.set("TriggerSource", "CXPin");
grabber.RemotePort.set("ExposureMode", "TriggerWidth");
// frame grabber configuration
grabber.DevicePort.set("CameraControlMethod", "RG");
grabber.DevicePort.set("CycleTriggerSource", "Immediate");
grabber.DevicePort.set("CycleTargetPeriod", 1e6 / FPS);
Using a script file has several advantages:
-
The configuration can be changed without recompiling the application. This allows shorter development cycles, and makes it possible to update the configuration in the lab or in the field.
-
The configuration script can be loaded by the GenICam Browser and the command-line
gentl
tool. This makes is possible to validate the configuration outside of the user application. -
The configuration script can easily be shared by several applications written in different programming languages: C++, C#, VB.NET...
-
The full power of Euresys GenApi scripts is available.