我最近刚刚开始使用MATLAB从数据采集板上获取数据,并且需要一个函数来连续地获取数据(即,直到我从函数中取出数据)。为此,我使用32位windows操作系统上的数据采集工具箱。
基于matlab帮助中的文档和这个站点上的一些答案,我发现在我的输入句柄中添加了通道之后,我应该:
这样做对吗?
我的代码如下:
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‘的许多排列。我收到的错误是
`?使用==> acquire_arena_test>AcquireData太多输入参数时出错。
警告:正在禁用TimerFcn回调。若要启用回调,请设置TimerFcn属性。`
提前感谢您的帮助。
发布于 2011-08-31 21:32:49
很抱歉回答了我自己的问题,但我想明白了。毕竟不需要扳机。使用国家仪表板(或者声卡),您只需将LoggingMode更改为“磁盘”,并指定一个文件来保存.daq (数据采集工具箱)文件,以保存与LogFileName一样的文件。如果要使用板上的内存,请将模式更改为磁盘和内存。有用的文件:
http://www.mathworks.com/help/toolbox/daq/f12-16658.html
下面的脚本在暂停期间获取数据,只要您希望它是..。
daqreset;
clear all;
ai = analoginput('nidaq','Dev1');
chans = addchannel(ai,0:6);
set(ai,'SamplesPerTrigger',Inf);
set(ai,'SampleRate',1000)
set(ai,'LogToDiskMode','Overwrite')
set(ai,'LogFileName','log.daq')
set(ai,'LoggingMode', 'disk')
start(ai)
pause()
stop(ai)
data = daqread('log.daq');
delete(ai);请注意,您仍然需要将'SamplesPerTrigger‘设置为Inf,这样才能正常工作。谢谢乔纳斯的帮助。
发布于 2011-08-31 18:29:20
我认为用于设置TimerFcn的语法是错误的。你写
set(ai,'TimerFcn',{@AcquireData,ai});但这意味着您的函数AcquireData将使用树参数调用:AcquireData(ai, event, ai)作为在此解释,这当然会触发错误消息,因为AcquireData函数只接受两个参数。只需将代码更改为
set(ai,'TimerFcn',@AcquireData);它应该可以工作;ai对象将作为第一个参数自动传递(参见上面MATLAB文档的链接)。
https://stackoverflow.com/questions/7257650
复制相似问题