A LabVIEW upper-computer module for UART signal acquisition, frame parsing, and real-time waveform display, designed for a lock-in amplifier system.
基于 LabVIEW 的串口上位机程序,用于接收下位机发送的 PCM 数据帧,完成数据解析,并实时显示原始波形。
本项目是锁相放大上位机开发的第一阶段成果,当前已实现:
- 串口连续接收数据
- 按自定义帧格式解析 PCM 数据
- 处理半包 / 粘包 / 连续帧情况
- 实时显示单帧波形与连续波形
- 使用虚拟串口进行联调测试
本项目面向单片机串口数据采集场景,使用 LabVIEW 编写上位机程序。
下位机按照约定的数据帧格式发送 PCM 采样数据,上位机完成串口读取、缓存拼接、帧头帧尾校验、数据区提取以及 int16 解析,并将结果实时显示为波形。
当前版本主要完成“串口接收 PCM 数据并显示原始波形”这一基础功能,为后续实现参考信号生成、锁相乘法、低通滤波和直流量提取打下基础。
- 基于 VISA 串口通信实现数据接收
- 采用缓存区 + 子 VI 解析结构,支持连续字节流处理
- 自定义帧协议解析,支持:
- 帧头检测
- 长度判断
- 帧尾检测
- Payload 提取
- 小端
int16数据还原
- 支持原始波形单帧显示(Graph)
- 支持连续波形滚动显示(Chart)
- 可配合虚拟串口工具进行无下位机调试
- LabVIEW
- NI-VISA
- Virtual Serial Port Driver(虚拟串口测试)
- UartAssist(串口调试与测试数据发送)
当前项目采用如下帧格式:
AA 55 + 长度字段(2字节) + 数据区(2N字节) + 55 AA
说明:
AA 55:帧头,2 字节- 长度字段:2 字节
- 数据区:
N个采样点,每个点为int16,共2N字节 55 AA:帧尾,2 字节
完整帧总长度为:
FrameBytes = 2 + 2 + 2N + 2 = 2N + 6
负责整体流程控制,包括:
- 串口初始化
- 串口字节流读取
- 缓存拼接
- 调用解析子 VI
- 原始波形显示
- 停止后关闭串口
负责单帧解析,包括:
-
查找帧头
AA 55 -
判断数据长度是否足够一整帧
-
检查帧尾
55 AA -
提取数据区 Payload
-
将 2 字节数据还原为一个
I16 -
输出:
Out Buffervalid?Samples I16Frame LengthParse Status
- 打开
main.vi - 选择对应串口号
- 设置波特率、采样率
fs、每帧点数N - 运行 VI
- 下位机发送符合协议的数据帧
- 上位机解析并实时显示波形
本项目可使用虚拟串口工具进行测试:
- 使用 Virtual Serial Port Driver 创建一对虚拟串口(如
COM1和COM2) - LabVIEW 连接其中一个串口
- UartAssist 连接另一个串口
- 在 UartAssist 中以 HEX 模式 发送测试帧
例如,当 N = 2 时,可发送:
AA 55 00 00 01 00 02 00 55 AA
解析结果应为:
Samples I16 = [1, 2]
项目已完成以下测试:
- 未找到帧头测试
- 数据不足一帧测试
- 帧尾错误测试
- 正常帧解析测试
- 正负数
int16数据解析测试 - 虚拟串口连续发送测试
- 连续波形显示测试
测试表明,本程序能够稳定完成串口数据接收、帧结构识别、PCM 数据解析与原始波形显示。
当前版本已完成:
- 串口接收字节流
- PCM 数据帧解析
- 原始波形显示
- 虚拟串口联调测试
当前版本暂未完成:
- 参考信号生成
- 锁相乘法运算
- 低通滤波 / 积分
- 直流分量输出
- 双相锁相与幅值计算
后续将在当前串口接收与原始波形显示的基础上,继续实现锁相放大上位机功能,包括:
- 参考信号生成
- 相敏检波
- 低通滤波
- 直流输出显示
- 原始信号 / 参考信号 / 锁相输出联合显示
本项目当前版本主要用于项目申报 / 上位机功能验证。 如果后续接入真实单片机系统,可进一步完善长度字段校验、异常处理和数据存储功能。
项目作者:LHXB111
如用于课程作业、项目申报或毕业设计,可根据实际情况修改。