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