3. 模拟输入连续采集与波形显示
连续采集与单点采集的本质区别
单点采集每次调用只返回一个瞬时值,采样间隔由软件循环决定,抖动大、易丢点。连续采集则由 DAQmx 在硬件定时基准下自动把样本写入板载/驱动缓冲区,LabVIEW 只需按块读取,因此能获得稳定的采样率和连续波形。本例使用 NI-DAQmx 的 DAQmx Timing 配置为 Continuous Samples,并显式设置采样率与缓冲区大小。
任务配置的关键参数
| 参数 | 示例值 | 作用与注意点 |
|---|---|---|
| 物理通道 | Dev1/ai0:1 | 两通道连续采集,通道间为多路复用扫描 |
| 采样模式 | Continuous Samples | 由采样时钟驱动,任务持续运行直到停止 |
| 采样率 | 1000 Hz | 每通道每秒采样点数,受板卡最高速率限制 |
| 每通道采样数 | 100 | 每次读取的块大小,决定波形刷新粒度 |
| 缓冲区大小 | 1000 样本/通道 | 过小会溢出,过大则延迟增加 |
| 输入范围 | -10 V ~ +10 V | 需与实际信号幅度匹配以充分利用分辨率 |
数据流与缓冲区关系
连续采集的核心是“生产者—消费者”结构:DAQmx 采样引擎是生产者,按采样时钟把数据写入缓冲区;LabVIEW 的读取循环是消费者,按块从缓冲区取走数据。若读取速度长期低于采样速度,缓冲区写满即发生溢出,DAQmx 会报错并丢失数据。因此采样率、块大小与循环处理速度必须匹配。
LabVIEW 程序框图实现
下面给出连续采集 VI 的核心框图逻辑。使用 DAQmx 函数选板中的 DAQmx Create Virtual Channel、DAQmx Timing、DAQmx Start Task、DAQmx Read 和 DAQmx Stop Task。读取采用 Analog 1D Wfm NChan NSamp 模式,直接输出波形数据给波形图。
【程序框图节点顺序】
1. DAQmx Create Virtual Channel.vi
- 物理通道: "Dev1/ai0:1"
- 通道类型: Analog Input Voltage
- 最小值: -10.0 最大值: 10.0
- 接线端配置: RSE(参考单端)
2. DAQmx Timing.vi
- 采样模式: Continuous Samples
- 采样率: 1000.0
- 每通道采样数: 100
- 采样时钟源: 默认板载时钟
3. DAQmx Start Task.vi
4. While 循环(停止按钮控制)
├─ DAQmx Read.vi
│ - 读取类型: Analog 1D Wfm NChan NSamp
│ - 每通道采样数: 100
│ - 超时: 10.0 秒
│ - 输出: 波形数组 → 波形图
└─ 循环延时: 不额外加延时,由 Read 阻塞控制节奏
5. DAQmx Stop Task.vi
6. DAQmx Clear Task.vi
DAQmx Timing 之后调用 DAQmx Configure Input Buffer.vi,设置 buffer size = 1000(每通道样本数)。缓冲区过小会导致高速采样时溢出,过大则增加内存占用和停止响应延迟。
采样率与块大小的匹配验证
连续采集能否稳定运行,取决于读取循环能否在缓冲区写满之前取走数据。设采样率为 fs,每通道块大小为 N,则每块数据产生的时间为 T_block = N / fs。读取循环的单次处理时间必须小于 T_block,否则缓冲区逐渐累积直至溢出。
以本例参数计算:T_block = 100 / 1000 = 0.1 s。也就是说,While 循环每轮必须在 100 ms 内完成读取与显示。若前面板波形图刷新过慢或循环内加入了额外延时,就会触发溢出错误 -200279(尝试读取的样本已不可用)。
-200279:缓冲区溢出。降低采样率、增大块大小、减少循环内处理,或增大缓冲区。-200284:读取超时。检查任务是否已启动、采样时钟是否正常、通道接线是否正确。- 波形图只显示一小段后停止:确认 While 循环停止条件未被误触发,且
DAQmx Read在循环内持续执行。 - 多通道波形错位:确认读取类型为
NChan NSamp,波形数组按通道展开后分别绑定到波形图曲线。
前面板与显示配置
前面板放置一个 Waveform Graph(波形图),用于显示连续波形;放置一个 Stop 按钮控制 While 循环。波形图的 X 轴会自动根据 DAQmx 返回的 t0 和 dt 显示时间,无需手动设置。若需要观察两通道,将波形数组直接连接到波形图即可自动生成两条曲线。
运行验证步骤
- 确认 DAQ 设备在 MAX(Measurement & Automation Explorer)中可识别,通道
Dev1/ai0:1存在。 - 给 ai0 接入一个已知直流电压(如 2.5 V),ai1 接地,运行 VI。
- 观察波形图:ai0 应显示约 2.5 V 的平稳直线,ai1 应显示约 0 V 的直线。
- 将采样率改为 10000 Hz、块大小改为 1000,观察波形刷新是否仍然流畅,确认无溢出错误。
- 点击 Stop 按钮,确认任务停止且无报错,资源被正确释放。