В этом примере показано, как синхронизировать запуск изображения и сбора данных с помощью Image Acquisition Toolbox™, Data Acquisition Toolbox™ и NI RTSI способное оборудование.
Часто необходимо синхронизировать две или больше платы приобретения очень тесно. Например, вы можете записать напряжение от аналогового датчика, такого как прибор деформации, а также синхронизировали видео во время эксперимента. Для сигнала синхронизации/инициирования можно использовать кабель RTSI для надежной связи между картой NI PCI-6229 сбора данных и устройством захвата изображения PCIe-1430.
Используя Data Acquisition Toolbox, создайте объект аналогового входа, чтобы записать напряжение от сортамента деформации и настроить параметры для приобретения.
% 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';
Используя Image Acquisition Toolbox, создайте объект ввода видео записать видео и настроить параметры для приобретения и для управления RTSI1 высоко, когда приобретение запустится.
% Create the object. vid = videoinput('ni', 2); % Set to acquire approximately one second of frames per trigger. vid.FramesPerTrigger = 30;
Для того, чтобы управлять линией карты сбора данных RTSI, необходимо установить правильную линию и полярность на устройстве захвата изображения. Кроме того, необходимо определить, какое событие устройства захвата изображения будет управлять линией RTSI. Вы видите список событий, которые доступны путем рассмотрения специфичных для устройства исходных свойств, которые заканчиваются в “Автомобильной трансмиссии” и “DrivePolarity”:
% 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 ]
В этом случае вы хотите управлять линией RTSI 1 высокое, когда приобретение происходит. Это гарантирует, что линия управляется высоко, как только приобретение начинается. Для этого необходимо установить приобретение в линии диска прогресса к 'rtsi1':
% Set to drive RTSI1 high when the acquisition begins. src.AcquisitionInProgressDriveLine = 'rtsi1';
Смотря на выход выше, вы видите, что полярность для приобретения в событии прогресса уже установлена в 'возбуждаемый высоким уровнем сигнала', таким образом, вы не должны устанавливать его.
Обратите внимание на то, что максимальное количество линий, которыми можно управлять, аппаратно-зависимо и будет возможно варьироваться между устройствами.
В этой точке вы собираетесь получить приблизительно одну секунду данных из каждого устройства, когда устройство получения изображений запущено.
Можно теперь запустить объект аналогового входа, который получает одну секунду данных по умолчанию. Смотрите, что это ожидает аппаратного триггера.
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.
Когда вы запустите объект ввода видео, он будет сразу инициирован и начнет получать. В тот момент устройство захвата изображения отправит сигнал в карту сбора данных через линию RTSI 1, который заставит сбор данных начинаться почти синхронно.
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