Этот пример показывает, как синхронизировать начало изображения и сбор данных, используя Приобретение Изображения Toolbox™, Сбор данных Toolbox™ и NI RTSI способное оборудование.
Часто требуется очень тесная синхронизация двух или более плат сбора данных. Например, можно записать напряжение от аналогового датчика, например тензометра, а также синхронизированное видео во время эксперимента. Для сигнала синхронизации/запуска можно использовать кабель RTSI для надежного соединения между платой сбора данных NI PCI-6229 и устройством захвата кадров PCIe-1430.
С помощью панели инструментов сбора данных создайте объект аналогового ввода для записи напряжения от тензодатчика и настройте параметры для сбора.
% Create the object. d = daq('ni'); % Add one channel for recording the strain. ai = addinput(d,'Dev1','ai0','Voltage'); % Set the sample rate to 10,000 Hz. d.Rate = 10000;
Затем настройте объект DataAcquisition для аппаратно-инициируемого сбора данных с использованием терминала RTSI1 в качестве внешнего источника триггера.
addtrigger(d,'Digital','StartTrigger','External','Dev1/RTSI1'); d.DigitalTriggers(1).Condition = 'RisingEdge';
С помощью панели инструментов получения изображений создайте объект ввода видео для записи видео и настройте параметры для получения и для управления RTSI1 высокой при запуске получения.
% Create the object. vid = videoinput('ni', 2); % Set to acquire approximately one second of frames per trigger. vid.FramesPerTrigger = 30;
Для управления линией RTSI карты сбора данных необходимо установить правильную линию и полярность на захватчике кадра. Кроме того, необходимо определить, какое событие захвата кадров будет управлять линией RTSI. Список доступных событий можно просмотреть, посмотрев на специфичные для устройства свойства исходного кода, которые заканчиваются на «StartLine» и «GroupPolarity»:
% Get the currently selected source. src = getselectedsource(vid); % Display the properties and their possible settings. set(src)
General Settings:
Tag
Device Specific Properties:
AcquisitionDoneDriveLine: [ {none} | external0 | rtsi0 | rtsi1 | rtsi2 | rtsi3 | rtsi4 | rtsi5 | rtsi6 ]
AcquisitionDoneDrivePolarity: [ {activeHigh} | activeLow ]
AcquisitionInProgressDriveLine: [ {none} | external0 | rtsi0 | rtsi1 | rtsi2 | rtsi3 | rtsi4 | rtsi5 | rtsi6 ]
AcquisitionInProgressDrivePolarity: [ {activeHigh} | activeLow ]
ExternalTriggerLineFilter: [ off | {on} ]
FrameDoneDriveLine: [ {none} | external0 | rtsi0 | rtsi1 | rtsi2 | rtsi3 | rtsi4 | rtsi5 | rtsi6 ]
FrameDoneDrivePolarity: [ {activeHigh} | activeLow ]
FrameStartDriveLine: [ {none} | external0 | rtsi0 | rtsi1 | rtsi2 | rtsi3 | rtsi4 | rtsi5 | rtsi6 ]
FrameStartDrivePolarity: [ {activeHigh} | activeLow ]
HSyncDriveLine: [ {none} | external0 | rtsi0 | rtsi1 | rtsi2 | rtsi3 | rtsi4 | rtsi5 | rtsi6 ]
HSyncDrivePolarity: [ {activeHigh} | activeLow ]
RTSITriggerLineFilter: [ off | {on} ]
VSyncDriveLine: [ {none} | external0 | rtsi0 | rtsi1 | rtsi2 | rtsi3 | rtsi4 | rtsi5 | rtsi6 ]
VSyncDrivePolarity: [ {activeHigh} | activeLow ]
В этом случае необходимо повысить уровень линии 1 RTSI, когда выполняется сбор данных. Это гарантирует, что линия будет поднята, как только начнется сбор данных. Для этого необходимо установить для строки диска в процессе сбора данных значение «rtsi1»:
% Set to drive RTSI1 high when the acquisition begins. src.AcquisitionInProgressDriveLine = 'rtsi1';
На приведенных выше выходных данных видно, что полярность для события acquisition in progress уже установлена на «activeHigh», поэтому устанавливать ее не нужно.
Обратите внимание на то, что максимальное количество линий, которыми можно управлять, зависит от оборудования и может варьироваться в зависимости от устройства.
В этот момент устанавливается получение приблизительно одной секунды данных от каждого устройства при запуске устройства получения изображения.
Теперь можно запустить объект аналогового ввода, который по умолчанию получает одну секунду данных. Убедитесь, что он ожидает аппаратного триггера.
start(d) d.WaitingForDigitalTrigger
ans = logical 1
Теперь можно просмотреть сводку объекта ввода видео и увидеть, что он настроен на запуск сразу после запуска.
vid
Summary of Video Input Object Using 'PCIe-1430'.
Acquisition Source(s): Channel 0 is available.
Acquisition Parameters: 'Channel 0' is the current selected source.
30 frames per trigger using the selected source.
'img0_Port0' video data to be logged upon START.
Grabbing first of every 1 frame(s).
Log data to 'memory' on trigger.
Trigger Parameters: 1 'immediate' trigger(s) on START.
Status: Waiting for START.
0 frames acquired since starting.
0 frames available for GETDATA.
При запуске объекта ввода видео он немедленно инициируется и начинает получение. В этот момент захватчик кадра будет посылать сигнал на плату сбора данных по линии 1 RTSI, что приведет к тому, что сбор данных начнется почти синхронно.
start(vid)
% Wait on both objects until you are done acquiring.
wait(vid), wait(d,2)
Если вы сейчас отобразите сводку, вы увидите, что оба устройства получили данные.
d.NumScansAcquired
ans =
10000
и:
vid
Summary of Video Input Object Using 'PCIe-1430'.
Acquisition Source(s): Channel 0 is available.
Acquisition Parameters: 'Channel 0' is the current selected source.
30 frames per trigger using the selected source.
'img0_Port0' video data to be logged upon START.
Grabbing first of every 1 frame(s).
Log data to 'memory' on trigger.
Trigger Parameters: 1 'immediate' trigger(s) on START.
Status: Waiting for START.
30 frames acquired since starting.
30 frames available for GETDATA.
После того как видеовходы и объекты аналогового ввода больше не нужны, удалите их и очистите их и ссылку на источник из рабочей области.
delete(vid) clear vid d src