Этот пример показывает, как сохранить данные, полученные в фоновом режиме к файлу. Используйте основанный на сеансе интерфейс, и получает команды неблокирования использования данных об аналоговом входе. Если вы используете устаревший интерфейс, обратитесь к "Регистрации Данных К Диску" в списке примеров Аналогового входа
Создайте сеанс и добавьте два канала аналогового входа с типом измерения Voltage
. Поскольку этот пример использует Национальное устройство сбора данных Instruments® X Series, NI карта PCIe-6363 с ID Dev1
.
d = daq.getDevices; s = daq.createSession('ni'); addAnalogInputChannel(s,'Dev1',0:1, 'Voltage'); s
s = Data acquisition session using National Instruments 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 Dev1 ai0 Voltage (Diff) -10 to +10 Volts 2 ai Dev1 ai1 Voltage (Diff) -10 to +10 Volts
Создайте файл log.bin
и откройте его. Вы запишете полученные данные в этот файл в двоичном формате. Сохраните идентификатор файла в переменной fid1.
fid1 = fopen('log.bin','w');
Когда вы получаете данные в фоновом режиме, можно обеспечить направления сеанса приобретения, чтобы обработать входящие данные, с помощью прослушивателей и событий. Событие DataAvailable
имеет место, когда определенный объем данных доступен сеансу. Прослушиватель может ответить на то событие и инициировать заданную функцию.
Используйте addlistener
, чтобы добавить анонимную функцию в сеанс. Эта функция вызвана каждый раз, когда событие DataAvailable
имеет место и регистрирует полученные данные к файлу. По умолчанию этот прослушиватель называется 10 раз в секунду.
Анонимная функция logData
требует трех входных параметров:
Источник src-
события
Имя event-
события
Идентификатор файла fid1-
для регистрации данных
Когда вы добавляете прослушиватель, указатель на прослушиватель возвращен. Сохраните указатель в переменной lh
и удалите его позже.
lh = addlistener(s,'DataAvailable',@(src, event)logData(src, event, fid1));
Получайте данные постоянно в не блокирующемся режиме.
s.IsContinuous = true; s.startBackground;
Непрерывное фоновое приобретение запускается параллельно с другими операциями на MATLAB®. Можно выполнить команды MATLAB, в то время как приобретение запускается. В целях этого примера моделируйте долгое вычисление путем вызова pause
.
pause(5);
Явным образом вызовите остановку после 5 секунд, чтобы закончить фоновое приобретение и удалить прослушиватель.
Закройте файл журнала.
s.stop; delete(lh); fclose(fid1);
Считайте файл журнала.
Загрузите содержимое файла как 3 матрицы столбца в data
.
Закройте файл журнала.
fid2 = fopen('log.bin','r'); [data,count] = fread(fid2,[3,inf],'double'); fclose(fid2);
Присвойте каждый столбец data
к следующим переменным:
Время t-
Канал ch-
0 и канал 1
Постройте ch
против t
.
t = data(1,:); ch = data(2:3,:); plot(t, ch);
Создайте многострочный функциональный logData
и сохраните в отдельном файле MATLAB.
type logData.m
function logData(src, evt, fid) % Add the time stamp and the data values to data. To write data sequentially, % transpose the matrix. % Copyright 2011 The MathWorks, Inc. data = [evt.TimeStamps, evt.Data]' ; fwrite(fid,data,'double'); end