Используйте демонстрационный адаптер в качестве шаблона для создания пользовательского адаптера, который можно создать, протестируйте, и доступ от тулбокса. Следующие разделы обеспечивают последовательность шагов для модификации адаптера. Примеры в этой теме создают пользовательский адаптер под названием MyAdaptor с ID поставщика my.
В этом разделе описываются шаг, чтобы сделать новый пользовательский адаптер на основе поставленного демонстрационного адаптера. Этот пример изменяет только имена адаптера, поставщика и устройств, без любых функциональных изменений. Вы создаете пользовательский адаптер в локальной папке, затем добавляете папки сборки в путь MATLAB. Этот раздел использует два места папки повсюду:
| Местоположение | Описание |
|---|---|
matlabroot | Местоположение установки MATLAB. Это - MATLAB, используемый и для создания адаптера, и для доступа к адаптеру через сеанс сбора данных. |
C:\adaptors\daqsdk | Локальное расположение файла, где новый адаптер изменяется и создается. |
Создайте область сборки в месте по вашему выбору. Этот пример работает с новой папкой, C:\adaptors\daqsdk. Создайте подпапку здесь под названием src, и в который подпапка под названием daqadaptor.
Скопируйте папку DemoAdaptor с в matlabroot\toolbox\daq\daqsdk\src\daqadaptorC:\adaptors\daqsdk\src\daqadaptor.
В C:\adaptors\daqsdk\src\daqadaptor переименуйте папку DemoAdapter, чтобы быть MyAdaptor.
Перейдите в MyAdaptor и переименуйте три из его файлов согласно следующей таблице:
| Настоящее имя | Новое имя |
|---|---|
custom_demo.cpp | custom_my.cpp |
demoadaptor.cpp | myadaptor.cpp |
demoadaptor.hpp | myadaptor.hpp |
С текстовым редактором измените каждый из трех новых файлов в предыдущей таблице, заменив все случаи текста DemoAdaptor, demoadaptor, DemoDriver и custom_demo.cpp с MyAdaptor, myadaptor, MyDriver и custom_my.cpp, соответственно, сохранив стиль капитализации буквы с каждой заменой.
Далее отредактируйте содержимое 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 возвращать точные данные, вместо того, чтобы вызывать функцию драйвера, чтобы считать данные.
С этими сохраненными модификациями и на месте, вы готовы создать адаптер.
В 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 или позже.
Создайте папку C:\adaptors\daqsdk\+daq и копию в нее папка +demoadaptor, найденная в .matlabroot\toolbox\daq\daqsdk\+daq\+demoadaptor
Перейдите в C:\adaptors\daqsdk\+daq и переименуйте +demoadaptor к +myadaptor.
Перейдите в 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 stdataName 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