使用NI设备获取连续和后台数据
这个例子展示了如何使用非阻塞命令获取模拟输入数据。这允许您在采集期间继续在MATLAB命令窗口中工作。这叫做背景收购.使用前景收购使MATLAB在执行下一个命令之前等待整个采集完成。
创建并配置数据采集对象
使用数据收集
创建DataAcquisition对象和addinput
向其添加一个输入通道。本例使用的是National Instruments®CompactDAQ Chassis NI cDAQ-9178中的NI 9205模块。这是机箱中的模块1。
Dq = daq(“倪”);addinput (dq,“cDAQ1Mod1”,“ai0”,“电压”);dq。比率= 2000;
绘制实时数据,因为它是获得的
在后台采集过程中,DataAcquisition可以使用指定的方式处理所采集的数据ScansAvailableFcn
财产。
dq。ScansAvailableFcn = @(src,evt) plotDataAvailable(src, evt);
设置ScansAvailableFcnCount
缺省情况下,ScansAvailableFcn每秒被调用10次。修改ScansAvailableFcnCount
属性以减少调用频率。当累积的点数超过这个值时,ScansAvailableFcn将被调用。将ScansAvailableFcnCount设置为速率,这将导致每秒调用一次ScansAvailableFcn。
dq。ScansAvailableFcnCount = 2000;
开始后台采集
使用开始
开始后台采集。
开始(dq,“持续时间”秒(5))
不需要执行其他计算,采集设置为在整个5秒内运行。使用暂停
在循环中监视采集期间采集的扫描数。
而dq。运行暂停(0.5)"While循环:扫描已获取= %d\n"dq.NumScansAcquired)结束流(“获取停止,%d扫描已获得\n”, dq.NumScansAcquired);
While循环:已获取扫描次数= 1000
捕获传入数据中的唯一事件
持续获取,直到满足特定条件。在这个例子中,获取直到信号等于或超过1v。
dq。ScansAvailableFcn = @(src,evt) stopWhenEqualsOrExceedsOneV(src, evt);
将数据采集配置为连续采集。监听器检测到1V事件并进行呼叫停止
.
开始(dq,“连续”);
使用暂停
在循环中监视采集期间采集的扫描数。方法显示的状态字符串ScansAvailableFcn
可能出现在while循环显示的最后一个状态字符串之前。
而dq。运行暂停(0.5)"While循环:扫描已获取= %d\n"dq.NumScansAcquired)结束流(“获取已终止,已获取%d个扫描\n”, dq.NumScansAcquired);dq。ScansAvailableFcn = [];
检测到电压超过1V:停止采集While循环:已获取扫描= 2000采集已终止,已获取2000个扫描
函数plotDataAvailable(src, ~) [data, timestamps, ~] = read(src, src.)ScansAvailableFcnCount,“OutputFormat”,“矩阵”);情节(时间戳、数据);结束函数stopWhenEqualsOrExceedsOneV(src, ~) [data, timestamps, ~] = read(src, src.)ScansAvailableFcnCount,“OutputFormat”,“矩阵”);如果Any (data >= 1.0)“检测电压超过1V:停止采集”)明确停止连续收购Src.stop () plot(时间戳,数据)其他的disp (“继续获取数据”)结束结束
While循环:已获取扫描次数= 2200 While循环:已获取扫描次数= 3200 While循环:已获取扫描次数= 4200 While循环:已获取扫描次数= 5200 While循环:已获取扫描次数= 6200 While循环:已获取扫描次数= 7200 While循环:已获取扫描次数= 8200 While循环:已获取扫描次数= 9200 While循环:已获取扫描次数= 10000已获取10000次扫描次数