Синхронизация платы NI ® Frame Grabber и сбора данных

В этом примере показано, как синхронизировать начало сбора изображений и данных с помощью 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 платы сбора данных необходимо установить правильную линию и полярность на захватчике системы координат. В сложение необходимо определить, какое событие grabber системы координат будет управлять RTSI- линии. Вы можете увидеть список событий, которые доступны, посмотрев на свойства источника конкретного устройства, которые заканчиваются на «DriveLine» и «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';

Глядя на выход выше, можно увидеть, что полярность для события сбора в прогресс уже установлена на '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