# SerialDAQ **Repository Path**: bistu_liuning_admin_admin/SerialDAQ ## Basic Information - **Project Name**: SerialDAQ - **Description**: Qt串口数据采集系统 - 支持1ms高速采集、实时曲线、FFT分析、3D姿态显示 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-02-25 - **Last Updated**: 2026-07-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SerialDAQ - 多线程串口采集系统(C++ / Python / Vue) 基于 Qt 6 / Python / Vue 3 的高性能串口数据采集与可视化系统,支持 1ms 级高速采集不丢数。仓库含三个模块: | 模块 | 路径 | 说明 | |------|------|------| | **C++ 后端** | 根目录 | Qt 无头服务 + WebSocket(ws://127.0.0.1:8765),对接 Vue 大屏 | | **Python 版** | `SerialDAQ_Python/` | PySide6 GUI,多线程串口采集,界面与 Qt C++ 版基本一致 | | **Vue 大屏** | `vue-screen/` | Vue3 科技感数字大屏(ECharts 曲线 + FFT + three.js 3D + KPI) | --- ## 一、C++ 后端(根目录) 无头服务,不再显示 Qt 主窗口,通过 WebSocket 与前端通信。 ### 架构 ``` [硬件串口] → QSerialPort(DaqServer) → SerialReceiveThread(独立线程): 找帧头0x55AA + 帧长切帧 + memcpy float 解析 → DaqServer: 帧率/状态/波形缓冲/20ms 推送节流 + 存储投递 → WsServer(QWebSocketServer :8765): JSON 双向 → Vue 大屏(浏览器) → DataStorageThread(独立线程): 每帧落盘 CSV/DAT/BIN,不丢数 ``` ### 功能 - 高速采集不丢数(接收线程 + 存储线程 + 队列缓冲) - 协议解析:hdntProtocolCore.dll + protocols.json(30+ 协议);IEEE754 用 Qt memcpy 直接解析帧内 float - 字段元数据下发(字段名 + 单位) - 双向控制:前端开关串口 / 切协议 / 启停存储 / 选通道 ### 编译运行 ```powershell # MSVC + CMake(需 vcvarsall + ninja) cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="C:/Qt/6.8.1/msvc2022_64" .. cmake --build . --parallel # 运行前:复制 hdntProtocolCore.dll + protocols/ 到 exe 同目录 SerialPortTool.exe # 启动无头后端,监听 ws://127.0.0.1:8765 ``` Qt 模块:Core/Gui/Widgets/SerialPort/Charts/Concurrent/3D*/**WebSockets/Network** --- ## 二、Python 版(SerialDAQ_Python/) PySide6 + pyserial + pyqtgraph,单程序 Qt GUI,多线程串口采集。 ### 架构 ``` [pyserial] → SerialWorker(QThread): 读取 + 帧切分 + struct.unpack 解析 float │ frame_received 信号 ├──→ MainWindow.on_frame (UI 线程,缓冲,50ms 刷新) └──→ StorageWorker(QThread): 队列落盘 CSV/DAT/BIN ``` ### 功能 - 多线程:串口线程(读取+解析)+ 存储线程(落盘),UI 不卡 - 帧解析:`0x55AA + 帧长 + float×N(小端)+ sum 校验`(与 C++ 版一致) - 界面:串口设置 / 存储 / 曲线(pyqtgraph)/ 数据表格 / 协议选择 / 状态栏 ### 运行 ```bash cd SerialDAQ_Python pip install -r requirements.txt # PySide6 / pyserial / pyqtgraph python main.py ``` ### 文件 ``` SerialDAQ_Python/ ├── main.py # 入口 ├── mainwindow.py # 主窗口(PySide6 界面) ├── serial_worker.py # 串口线程(读取 + 解析) ├── storage_worker.py # 存储线程(CSV/DAT/BIN) └── requirements.txt ``` --- ## 三、Vue 大屏(vue-screen/) Vue3 + Vite + TypeScript,浏览器全屏科技感大屏,对接 C++ 后端 WebSocket。 ### 功能 - 实时多通道曲线(ECharts,动态横坐标,复选框显隐每条曲线) - FFT 频谱(前端 JS FFT,独立 2048 缓冲提密度,通道可选) - 3D 姿态(three.js,Roll/Pitch/Yaw 通道可选) - KPI 数值卡(字段名 + 单位) - 控制面板(串口配置 / 协议 / 存储 / FFT 通道 / 姿态通道) - 科技感主题(深蓝霓虹 + 网格背景 + 毛玻璃 + 发光描边) ### 运行 ```bash cd vue-screen npm install npm run dev # http://localhost:5173 npm run build # 打包到 dist/ ``` --- ## WebSocket 数据协议(C++ ↔ Vue) **下行**:`status` / `frame` / `waveform` / `fieldMeta` / `protocolList` / `portList` **上行**:`scanPorts` / `openPort` / `closePort` / `setProtocol` / `setStorage` / `setChannels` 详见 README 历史版本或 `wsserver.cpp` / `ws.ts`。 ## 数据帧格式(三模块通用) ``` | 帧头(2B) | 帧长(1B) | 浮点数据(4N字节) | 校验(1B) | | 0x55AA | frameLen| float × N | checksum | ``` 校验 = 前述字节累加取低 8 位(sum)。float 小端。 ## 1ms 采集不丢数关键技术 | 手段 | 实现 | |------|------| | 多线程 | 接收线程 + 存储线程独立 | | 生产者-消费者 | 队列 + 互斥锁 + 条件变量 | | 信号槽异步 | Qt::QueuedConnection(C++/Python)| | 存储每帧落盘 | 存储线程队列缓冲 | | 显示节流 | C++ 20ms 批量推送 / Python 50ms UI 刷新 | ## 项目结构 ``` SerialDAQ/(仓库根) ├── main.cpp / daqserver.* / wsserver.* # C++ 无头后端 ├── serialreceivethread.* / datastoragethread.* # C++ 串口/存储线程(复用原版) ├── mainwindow.* / chartwidget.* / fftwidget.* / model3dwidget.* # 原 Qt UI(保留) ├── hdntProtocolCore.dll/.h # 协议解析 DLL ├── protocols/ # 协议配置(protocols.json 聚合) ├── SerialDAQ_Python/ # Python 版 ├── vue-screen/ # Vue 大屏前端 ├── CMakeLists.txt / SerialPortTool.pro └── README.md ``` ## 开源仓库 - **Gitee**: https://gitee.com/bistu_liuning_admin_admin/SerialDAQ ## 许可证 MIT License ## 作者 liuning ## 更新日志 ### v2.1.0 (2026-07-30) - 新增 Python 版(SerialDAQ_Python):PySide6 + pyserial + pyqtgraph 多线程串口采集 - 新增 Vue 大屏前端(vue-screen)上传仓库 - README 整合三模块说明 ### v2.0.0 (2026-07-30) - C++ 重构:Qt 主窗口 UI → 无头后端(DaqServer + WsServer WebSocket) - 新增 Vue 3 科技感数字大屏 - 保留原串口线程 / 协议解析 / 存储线程 ### v1.2.0 (2026-03-07) - 新增 BIN 二进制存储;独立存储线程 CSV/DAT/BIN ### v1.1.0 (2026-03-07) - 协议解析 DLL 集成;协议选择 UI;动态字段 ### v1.0.0 (2026-02-25) - 初始版本:串口采集、存储、绘制、FFT、3D 显示