本示例介绍了如何通过一次触发信号采集三张图像的定序器编程。为此,需要使用定序器的计数器功能来触发曝光。
如需了解有关定序器用途的更多详细信息,请参阅下方的应用说明,其中详细介绍了定序器的工作原理和功能。
在使用定序器时,可能需要提前设置,以便可视化显示在什么时间应当发生的事件。在本例中,设置非常简单:
第一张图像的采集由硬件触发(通过“Line0”输入实现)——Line0同时触发定序器启动
第一组定序器(Set0)开始配置并触发第二张图像的采集
第二组定序器组(Set1)开始配置并触发第三张图像的采集
// STOP ACQUISITION AND LOAD DEFAULT PARAMETERS
pDevice->GetRemoteNode("AcquisitionStop")->Execute();
pDevice->GetRemoteNode("UserSetSelector")->SetString("Default");
pDevice->GetRemoteNode("UserSetLoad")->Execute();
// CONFIGURING THE TRIGGER INPUT
pDevice->GetRemoteNode("TriggerMode")->SetString("On");
pDevice->GetRemoteNode("TriggerSource")->SetString("Line0");
pDevice->GetRemoteNode("TriggerActivation")->SetString("RisingEdge");
pDevice->GetRemoteNode("TriggerDelay")->SetDouble(0.0);
pDevice->GetRemoteNode("LineSelector")->SetString("Line0");
pDevice->GetRemoteNode("LineInverter")->SetBool(false);
pDevice->GetRemoteNode("LineDebouncerHighTimeAbs")->SetDouble(1.0);
pDevice->GetRemoteNode("LineDebouncerLowTimeAbs")->SetDouble(1.0);
// CONFIGURE GPIO “Line3” as an OUTPUT
pDevice->GetRemoteNode("LineSelector")->SetString("Line3");
pDevice->GetRemoteNode("LineInverter")->SetBool(false);
pDevice->GetRemoteNode("UserOutputSelector")->SetString("UserOutput1");
pDevice->GetRemoteNode("UserOutputValue")->SetBool(false);
pDevice->GetRemoteNode("LineSource")->SetString("UserOutput1");
// SWITCH TO SEQUENCER CONFIG MODE
pDevice->GetRemoteNode("SequencerConfigurationMode")->SetString("On");
// SET 0 (FIRST STEP OF THE SEQUENCE)
pDevice->GetRemoteNode("SequencerSetSelector")->SetInt(0);
pDevice->GetRemoteNode("SequencerSetLoad")->Execute();
pDevice->GetRemoteNode("TriggerMode")->SetString("On");
pDevice->GetRemoteNode("CounterSelector")->SetString("Counter1");
pDevice->GetRemoteNode("CounterEventSource")->SetString("Off");
// Set ExposureTime for Set0
pDevice->GetRemoteNode("ExposureTime")->SetDouble(15000.0);
pDevice->GetRemoteNode("SequencerPathSelector")->SetInt(0);
pDevice->GetRemoteNode("SequencerTriggerSource")->SetString("ExposureActive");
pDevice->GetRemoteNode("SequencerTriggerActivation")->SetString("RisingEdge");
pDevice->GetRemoteNode("SequencerSetNext")->SetInt(1);
pDevice->GetRemoteNode("SequencerSetSave")->Execute();
// SET 1 (SECOND STEP OF THE SEQUENCE)
pDevice->GetRemoteNode("SequencerSetSelector")->SetInt(1);
pDevice->GetRemoteNode("SequencerSetLoad")->Execute();
pDevice->GetRemoteNode("TriggerMode")->SetString("Off");
pDevice->GetRemoteNode("CounterSelector")->SetString("Counter1");
pDevice->GetRemoteNode("CounterEventSource")->SetString("ExposureActive");
pDevice->GetRemoteNode("CounterEventActivation")->SetString("RisingEdge");
pDevice->GetRemoteNode("CounterDuration")->SetInt(2);
pDevice->GetRemoteNode("CounterResetSource")->SetString("Counter1End");
pDevice->GetRemoteNode("CounterResetActivation")->SetString("RisingEdge");
// Set ExposureTime for Set1
pDevice->GetRemoteNode("ExposureTime")->SetDouble(10000.0);
pDevice->GetRemoteNode("SequencerPathSelector")->SetInt(0);
pDevice->GetRemoteNode("SequencerTriggerSource")->SetString("Counter1End");
pDevice->GetRemoteNode("SequencerTriggerActivation")->SetString("RisingEdge");
pDevice->GetRemoteNode("SequencerSetNext")->SetInt(0);
pDevice->GetRemoteNode("SequencerSetSave")->Execute();
pDevice->GetRemoteNode("SequencerSetStart")->SetInt(0);
// SEQUENCER CONFIG END
pDevice->GetRemoteNode("SequencerConfigurationMode")->SetString("Off");
// START CAMERA SEQUENCER
pDevice->GetRemoteNode("SequencerMode")->SetString("On");
pDataStream->StartAcquisitionContinuous();
pDevice->GetRemoteNode("AcquisitionStart")->Execute();
// WAIT FOR TRIGGER TO CAPTURE THREE IMAGES
// STOP CAMERA SEQUENCER
pDevice->GetRemoteNode("AcquisitionStop")->Execute();
pDataStream->StopAcquisition();
pDevice->GetRemoteNode("SequencerMode")->SetString("Off");
// STOP ACQUISITION AND LOAD DEFAULT PARAMETERS
mDevice.RemoteNodeList["AcquisitionStop"].Execute();
mDevice.RemoteNodeList["UserSetSelector"].Value = "Default";
mDevice.RemoteNodeList["UserSetLoad"].Execute();
// CONFIGURING THE TRIGGER INPUT
mDevice.RemoteNodeList["TriggerMode"].Value = "On";
mDevice.RemoteNodeList["TriggerSource"].Value = "Line0";
mDevice.RemoteNodeList["TriggerActivation"].Value = "RisingEdge";
mDevice.RemoteNodeList["TriggerDelay"].Value = (double)0.0;
mDevice.RemoteNodeList["LineSelector"].Value = "Line0";
mDevice.RemoteNodeList["LineInverter"].Value = false;
mDevice.RemoteNodeList["LineDebouncerHighTimeAbs"].Value = (double)1.0;
mDevice.RemoteNodeList["LineDebouncerLowTimeAbs"].Value = (double)1.0;
// CONFIGURE GPIO “Line3” as an OUTPUT
mDevice.RemoteNodeList["LineSelector"].Value = "Line3";
mDevice.RemoteNodeList["LineInverter"].Value = false;
mDevice.RemoteNodeList["UserOutputSelector"].Value = "UserOutput1";
mDevice.RemoteNodeList["UserOutputValue"].Value = false;
mDevice.RemoteNodeList["LineSource"].Value = "UserOutput1";
// SWITCH TO SEQUENCER CONFIG MODE
mDevice.RemoteNodeList["SequencerConfigurationMode"].Value = "On";
// SET 0 (FIRST STEP OF THE SEQUENCE)
mDevice.RemoteNodeList["SequencerSetSelector"].Value = (long)0;
mDevice.RemoteNodeList["SequencerSetLoad"].Execute();
mDevice.RemoteNodeList["TriggerMode"].Value = "On";
mDevice.RemoteNodeList["CounterSelector"].Value = "Counter1";
mDevice.RemoteNodeList["CounterEventSource"].Value = "Off";
// Set ExposureTime for Set0
mDevice.RemoteNodeList["ExposureTime"].Value = (double)15000.0;
mDevice.RemoteNodeList["SequencerPathSelector"].Value = (long)0;
mDevice.RemoteNodeList["SequencerTriggerSource"].Value = "ExposureActive";
mDevice.RemoteNodeList["SequencerTriggerActivation"].Value = "RisingEdge";
mDevice.RemoteNodeList["SequencerSetNext"].Value = (long)1;
mDevice.RemoteNodeList["SequencerSetSave"].Execute();
// SET 1 (SECOND STEP OF THE SEQUENCE)
mDevice.RemoteNodeList["SequencerSetSelector"].Value = (long)1;
mDevice.RemoteNodeList["SequencerSetLoad"].Execute();
mDevice.RemoteNodeList["TriggerMode"].Value = "Off";
mDevice.RemoteNodeList["CounterSelector"].Value = "Counter1";
mDevice.RemoteNodeList["CounterEventSource"].Value = "ExposureActive";
mDevice.RemoteNodeList["CounterEventActivation"].Value = "RisingEdge";
mDevice.RemoteNodeList["CounterDuration"].Value = (long)2;
mDevice.RemoteNodeList["CounterResetSource"].Value = "Counter1End";
mDevice.RemoteNodeList["CounterResetActivation"].Value = "RisingEdge";
// Set ExposureTime for Set1
mDevice.RemoteNodeList["ExposureTime"].Value = (double)10000.0; // 10 msec
mDevice.RemoteNodeList["SequencerPathSelector"].Value = (long)0;
mDevice.RemoteNodeList["SequencerTriggerSource"].Value = "Counter1End";
mDevice.RemoteNodeList["SequencerTriggerActivation"].Value = "RisingEdge";
mDevice.RemoteNodeList["SequencerSetNext"].Value = (long)0;
mDevice.RemoteNodeList["SequencerSetSave"].Execute();
mDevice.RemoteNodeList["SequencerSetStart"].Value = (long)0;
// SEQUENCER CONFIG END
mDevice.RemoteNodeList["SequencerConfigurationMode"].Value = "Off";
// START CAMERA SEQUENCER
mDevice.RemoteNodeList["SequencerMode"].Value = "On";
mDataStream.StartAcquisition();
mDevice.RemoteNodeList["AcquisitionStart"].Execute();
// WAIT FOR TRIGGER TO CAPTURE THREE IMAGES
// STOP CAMERA SEQUENCER
mDevice.RemoteNodeList["AcquisitionStop"].Execute();
mDataStream.StopAcquisition();
mDevice.RemoteNodeList["SequencerMode"].Value = "Off";
一次触发采集三张图像