Создайте свой адаптер из демонстрационного адаптера

Используйте демонстрационный адаптер в качестве шаблона для создания пользовательского адаптера, который можно создать, протестируйте, и доступ от тулбокса. Следующие разделы обеспечивают последовательность шагов для модификации адаптера. Примеры в этой теме создают пользовательский адаптер под названием MyAdaptor с ID поставщика my.

Отредактируйте и создайте свой адаптер

В этом разделе описываются шаг, чтобы сделать новый пользовательский адаптер на основе поставленного демонстрационного адаптера. Этот пример изменяет только имена адаптера, поставщика и устройств, без любых функциональных изменений. Вы создаете пользовательский адаптер в локальной папке, затем добавляете папки сборки в путь MATLAB. Этот раздел использует два места папки повсюду:

Местоположение Описание
matlabrootМестоположение установки MATLAB. Это - MATLAB, используемый и для создания адаптера, и для доступа к адаптеру через сеанс сбора данных.
C:\adaptors\daqsdkЛокальное расположение файла, где новый адаптер изменяется и создается.
  1. Создайте область сборки в месте по вашему выбору. Этот пример работает с новой папкой, C:\adaptors\daqsdk. Создайте подпапку здесь под названием src, и в который подпапка под названием daqadaptor.

  2. Скопируйте папку DemoAdaptor с matlabroot\toolbox\daq\daqsdk\src\daqadaptor в C:\adaptors\daqsdk\src\daqadaptor.

  3. В C:\adaptors\daqsdk\src\daqadaptor переименуйте папку DemoAdapter, чтобы быть MyAdaptor.

    Перейдите в MyAdaptor и переименуйте три из его файлов согласно следующей таблице:

    Настоящее имяНовое имя
    custom_demo.cppcustom_my.cpp
    demoadaptor.cppmyadaptor.cpp
    demoadaptor.hppmyadaptor.hpp
  4. С текстовым редактором измените каждый из трех новых файлов в предыдущей таблице, заменив все случаи текста DemoAdaptor, demoadaptor, DemoDriver и custom_demo.cpp с MyAdaptor, myadaptor, MyDriver и custom_my.cpp, соответственно, сохранив стиль капитализации буквы с каждой заменой.

  5. Далее отредактируйте содержимое myadaptor.cpp как показано в следующей таблице:

    Исходный текстОбновленный текст
    {
        shortName = "MW";
        fullName = "MathWorks";
        driverName = "DemoAdaptor";
    
        return DAQSuccess;
    }
    {
        shortName = "MY";
        fullName = "MyAdaptor";
        driverName = "MyDriver";
    
        return DAQSuccess;
    }
    prefix = "MWDev";
    prefix = "MyDev";
    DAQStatus MyDriver::inputSingleScanImpl(ChannelGroupIndex groupIndex, DataScan &data) const
    {
        deviceManager_->inputSingleScan(groupIndex, data);
        return DAQSuccess;
    }
    
    DAQStatus MyDriver::inputSingleScanImpl(ChannelGroupIndex groupIndex, DataScan &data) const
    {
    //  deviceManager_->inputSingleScan(groupIndex, data);
        data.push_back(1.125);
        data.push_back(2.250);
        return DAQSuccess;
    }
    

    Последняя строка этой таблицы заставляет функцию inputSingleScanImpl возвращать точные данные, вместо того, чтобы вызывать функцию драйвера, чтобы считать данные.

    С этими сохраненными модификациями и на месте, вы готовы создать адаптер.

  6. В MATLAB, выполнение следующая утилита, чтобы создать исполняемый файл MEX для MyAdaptor:

    daq.sdk.utility.mex.buildAdaptor('MyAdaptor','custom_my', ...
      'C:\adaptors\daqsdk\src\daqadaptor\MyAdaptor','C:\adaptors\daqsdk\bin\win64')

    Входные аргументы функции задают имя адаптера, файл исходного кода, местоположение исходного файла, и куда поместить созданный вывод.

    Примечание

    Функция buildAdaptor требует, чтобы ваша система была сконфигурирована с Microsoft® Visual Studio® 2013 или позже.

  7. Создайте папку C:\adaptors\daqsdk\+daq и копию в нее папка +demoadaptor, найденная в matlabroot\toolbox\daq\daqsdk\+daq\+demoadaptor.

  8. Перейдите в C:\adaptors\daqsdk\+daq и переименуйте +demoadaptor к +myadaptor.

  9. Перейдите в C:\adaptors\daqsdk\+daq\+myadaptor и отредактируйте эти два файла MATLAB в той папке:

    Session.m
    VendorInfo.m
    • В обоих из этих файлов замените все случаи текстов DemoAdaptor и demoadaptor с MyAdaptor и myadaptor, соответственно, сохранив стиль капитализации буквы с каждой заменой.

    • В файле VendorInfo используйте символы %, чтобы прокомментировать строки, которые скрывают адаптер, между начинанием и концом удаляют индикаторы. Изменение выглядит так:

      % BEGIN REMOVE
      %   if daq.internal.getOptions().HideDAQSDKAdaptor
      %      throw(MException(message('daqsdk:HardwareInfo:VendorIsHidden', mfilename('class'))));
      %   end
      % END REMOVE
    • Сохраните и закройте файлы.

    Ваш измененный адаптер теперь готов к употреблению.

Используйте свой адаптер на сеансе

Этот пример показывает, как получить доступ к поставщику и устройству, представленному вашим измененным адаптером. Сеанс сбора данных с вашим адаптером позволяет вам добавлять каналы и получать информацию от устройства.

Запустите MATLAB и используйте следующие команды, чтобы сделать ваш адаптер доступным.

addpath 'C:\adaptors\daqsdk\bin\win64'
addpath 'C:\adaptors\daqsdk'

Затем можно получить доступ адаптеру.

v = daq.getVendors
v = 

Number of vendors: 2

index     ID      Operational         Comment         
----- ----------- ----------- ------------------------
1     ni          false       Click here for more info
2     my          true        MyAdaptor

Используйте индекс ID поставщика my, чтобы получить больше информации.

vendor = v(2)
vendor = 

Data acquisition vendor 'MyAdaptor':

            ID: 'my'
      FullName: 'MyAdaptor'
AdaptorVersion: '3.13 (R2018a)'
DriverVersion: '1.0.0'
IsOperational: true

Создайте сеанс для своего устройства.

s = daq.createSession('my')
s = 

Data acquisition session using MyAdaptor hardware:
   Will run for 1 second (1000 scans) at 1000 scans/second.
   No channels have been added.

Добавьте канал аналогового входа в сеанс, сопоставленный с устройством MyDev0, канал ai0.

ch1 = addAnalogInputChannel(s,'MyDev0','ai0','Voltage')
ch1 = 

Data acquisition analog output voltage channel 'ao0' on device 'MyDev0':

TerminalConfig: SingleEnded
          Range: -10 to +10 Volts
           Name: ''
             ID: 'ao0'
         Device: [1x1 daq.sdk.DeviceInfo]
MeasurementType: 'Voltage'

Добавьте второй канал аналогового входа.

ch2 = addAnalogInputChannel(s,'MyDev0','ai1','Voltage');

Просмотрите сеанс, чтобы видеть настройки канала.

s
s = 

Data acquisition session using MyAdaptor hardware:
   Will run for 1 second (1000 scans) at 1000 scans/second.
   Number of channels: 2
      index Type Device Channel MeasurementType      Range       Name
      ----- ---- ------ ------- --------------- ---------------- ----
      1     ai   MyDev0 ai0     Voltage (Diff)  -10 to +10 Volts
      2     ai   MyDev0 ai1     Voltage (Diff)  -10 to +10 Volts
   
Examine the objects so far in the base workspace.
whos
   Name        Size            Bytes  Class                                Attributes

  ch1         1x1                 8  daq.sdk.AnalogInputVoltageChannel              
  ch2         1x1                 8  daq.sdk.AnalogInputVoltageChannel              
  s           1x1                 8  daq.myadaptor.Session                          
  v           1x2                16  daq.VendorInfo                                 
  vendor      1x1                 8  daq.myadaptor.VendorInfo      

С данными в качестве примера, трудно закодированными в адаптер функция inputSingleScanImpl, можно выполнить одно измерение сканирования на каналах сеанса.

data = inputSingleScan(s)
data =

    1.1250    2.2500

Можно также считать входные данные потоковой передачи, в этом случае обеспеченные демонстрационным объектом DAQstream адаптера. Настройка значения по умолчанию сеанса получает 1 000 сканирований за 1 секунду.

stdata = startForeground(s);
whos stdata
  Name           Size            Bytes  Class     Attributes

  stdata      1000x2             16000  double

stdata содержит столбец 1 000 выборок для каждого канала. Просмотрите первые шесть строк.

stdata(1:6,:)
         0    0.2500
    0.2487    0.4987
    0.4818    0.7318
    0.6845    0.9345
    0.8443    1.0943
    0.9511    1.2011

По окончании удаляете сеанс и очищаете объекты.

delete(s)
clear v vendor s ch1 ch2

Смотрите также

Функции

Связанные примеры

Больше о

Для просмотра документации необходимо авторизоваться на сайте