主要内容

使用NI设备获取连续和后台数据

这个例子展示了如何使用非阻塞命令获取模拟输入数据。这允许您在获取期间继续在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);

设置ScansAvailableFcnCount

默认情况下,每秒调用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个扫描