本示例介紹了如何通過一次觸發信號采集三張圖像的定序器編程。為此,需要使用定序器的計數器功能來觸發曝光。
如需了解有關定序器用途的更多詳細信息,請參閱下方的應用說明,其中詳細介紹了定序器的工作原理和功能。
在使用定序器時,可能需要提前設置,以便可視化顯示在什么時間應當發生的事件。在本例中,設置非常簡單:
第一張圖像的采集由硬件觸發(通過“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";
一次觸發采集三張圖像