Use the camera's FrameTriggerWait signal when software must issue the next synchronized trigger as soon as overlap readout permits. Do not use the Exposure End event as a trigger-ready indication: exposure can finish while the sensor is still being read.
Select the trigger-ready method
| Method | Next-trigger condition | Engineering decision |
|---|---|---|
| Frame acquisition | The preceding frame has been received | Use when maximum frame rate is unnecessary. Trigger a frame, retrieve it, and then trigger the next frame. |
| Image event | Image transfer has completed | Use when event-driven acquisition meets the required timing. Store the returned image in the handler and signal the consuming task. |
FrameTriggerWait |
The camera reports that another trigger is acceptable | Use for overlap triggering and the earliest supported software-trigger opportunity. |
Why Exposure End is insufficient
Exposure End identifies completion of exposure, not completion of the camera's trigger-recovery interval. The camera may still need time to read the sensor, so issuing another trigger immediately after that event can be too early. With overlap readout enabled, FrameTriggerWait can indicate readiness before the preceding image has been received.
An earlier statement in the evidence said this value could not be polled in software, but the later evidence supplies a concrete method: route FrameTriggerWait to Line1, configure that line as an output, and read its LineStatus. Treat that later configuration and code as the applicable correction.
Configure and poll Line1
- Select
Line1throughLineSelector. - Set
LineModetoOutput. - Set
LineSourcetoFrameTriggerWait. - After each software trigger, poll
LineStatusuntil it becomes true; then issue the next trigger. - Retrieve the preceding frame while preserving the association between each trigger and returned image.
// Configure Line1 as an output.
CEnumerationPtr ptrLineSelector = nodeMap.GetNode("LineSelector");
ptrLineSelector->SetIntValue(
ptrLineSelector->GetEntryByName("Line1")->GetNumericValue());
CEnumerationPtr ptrLineMode = nodeMap.GetNode("LineMode");
ptrLineMode->SetIntValue(
ptrLineMode->GetEntryByName("Output")->GetNumericValue());
// Route trigger readiness to Line1.
CEnumerationPtr ptrLineSource = nodeMap.GetNode("LineSource");
ptrLineSource->SetIntValue(
ptrLineSource->GetEntryByName("FrameTriggerWait")->GetNumericValue());
// Wait until the camera accepts another trigger.
CBooleanPtr ptrLineStatus = nodeMap.GetNode("LineStatus");
bool lineStatus = false;
do {
lineStatus = ptrLineStatus->GetValue();
} while (!lineStatus);
The overlap sequence is: trigger Frame 1, wait for FrameTriggerWait, trigger Frame 2, retrieve Frame 1, wait for readiness again, trigger Frame 3, and retrieve Frame 2. Verify the implementation by confirming that every trigger is accepted and that returned frames remain in the expected order during motion-synchronized operation.
FAQ
Can I trigger the camera again at the Exposure End event?
No. Exposure End can occur before sensor readout has progressed far enough for another trigger. Wait for FrameTriggerWait or use completed image transfer when lower throughput is acceptable.
How do I poll camera trigger-ready status in software?
Configure Line1 as an output, assign FrameTriggerWait to LineSource, and poll LineStatus until it returns true.
Do I need FrameTriggerWait if maximum frame rate is not required?
No. Use the simpler sequence of triggering one frame, retrieving that frame, and then issuing the next trigger if it satisfies the application's synchronization and throughput requirements.