Я только недавно начал использовать MATLAB для получения данных с платы сбора данных и нуждался в функции для непрерывного сбора данных (т.е. до тех пор, пока я не выйду из функции).Для этого я использую набор инструментов для сбора данных в 32-битной операционной системе Windows.
Основываясь на документации в справке по matlab и на нескольких ответах на этом сайте, я обнаружил, что после добавления каналов в свой вводобработать я должен:
- установить мой 'SamplesPerTrigger' в Inf
- , установить 'TimerPeriod' в какое-то значение, чтобы вызвать 'TimerFcn'
- установить 'TimerFcn'к некоторому обратному вызову подфункции, который добавляет данные к постоянной переменной
Это правильный способ сделать это?
Мой код выглядит следующим образом:
function acquire_arena_test(samprate,daq_device ,device_ID ,channels, saveroot)
setup.SampleRate = samprate;
setup.DAQdevice = {daq_device, device_ID};
setup.AIChannels = channels;
setup.SaveRoot = {saveroot};
ai = analoginput(setup.DAQdevice{1},setup.DAQdevice{2});
addchannel(ai,[setup.AIChannels]);
set(ai,'SamplesPerTrigger',Inf);
set(ai,'TimerPeriod',0.5);
set(ai,'TimerFcn',{@AcquireData,ai});
start(ai);
while(strcmpi(get(ai,'Running'),'On'))
pause(1)
end
stop(ai);
time = datestr(now,30);
save([saveroot time], 'data');
delete(ai);
clear ai;
function AcquireData(hObject, ~)
persistent totalData;
data = getdata(hObject);
if isempty(totalData)
totalData =data;
else
totalData = [totalData; data];
end
Исходный аналоговый вход определенно работает правильно.Я попытался много перестановок для передачи обратного вызова AcquireData к TimerFcn.Я получаю ошибку
`???Ошибка при использовании ==> acqu_arena_test> AcquireData Слишком много входных аргументов.
Предупреждение. Обратный вызов TimerFcn отключен.Чтобы включить обратный вызов, установите свойство TimerFcn.`
Заранее спасибо за любую помощь.