https://github.com/obsidianplusplus/zlg_can_current_monitor
基于 Python PyQt5 的 CAN 总线监测工具,利用周立功 USBCAN 设备,实现霍尔传感器电流的实时可视化、DBC 解析及趋势图展示。 | Real-time ZLG USBCAN CAN bus monitor for Hall sensor current, featuring DBC parsing and live plotting in a PyQt5 GUI.
https://github.com/obsidianplusplus/zlg_can_current_monitor
Last synced: 10 months ago
JSON representation
基于 Python PyQt5 的 CAN 总线监测工具,利用周立功 USBCAN 设备,实现霍尔传感器电流的实时可视化、DBC 解析及趋势图展示。 | Real-time ZLG USBCAN CAN bus monitor for Hall sensor current, featuring DBC parsing and live plotting in a PyQt5 GUI.
- Host: GitHub
- URL: https://github.com/obsidianplusplus/zlg_can_current_monitor
- Owner: obsidianplusplus
- Created: 2025-06-12T08:57:51.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-06-12T09:00:21.000Z (about 1 year ago)
- Last Synced: 2025-06-22T12:12:58.642Z (about 1 year ago)
- Language: Python
- Homepage:
- Size: 1.95 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
Awesome Lists containing this project
README
# ZLG CAN 电流监测工具 ⚡️
## 概述 ✨
`ZLG_CAN_电流监测工具` 是一个基于 Python 和 PyQt5 的图形用户界面 (GUI) 应用程序,其核心目标是为用户提供一个便捷的平台,通过周立功 USBCAN 系列设备实时监测和可视化霍尔传感器或其他 CAN 总线上的电流数据。本工具能够加载行业标准的 DBC (CAN 数据库) 文件,智能解析原始 CAN 报文,将其转换为有意义的物理值,并以直观的实时曲线图呈现数据变化趋势,同时提供详细的日志记录功能。它特别适用于需要对 CAN 总线上传感器数据进行实时监控、调试和分析的工程师与开发者。
## 核心特性 ✨
* **🔌 周立功 USBCAN 设备支持:** 无缝连接并与周立功 USBCAN-II, USBCAN-E-U, USBCAN-2E-U 等系列 CAN 设备进行交互。
* **📚 DBC 文件解析:** 支持加载 `.dbc` 格式的 CAN 数据库文件,自动识别并解码 CAN 报文中的信号,将原始数据转换为物理单位值(如 mA)。
* **📊 实时数据可视化:**
* 在主界面实时显示霍尔传感器电流的瞬时值(例如,DBC 中定义的 `Curr1_Data` 和 `Curr2_Data` 信号)。
* 动态绘制电流随时间变化的趋势图,提供直观的数据洞察。
* **📝 全面日志记录:**
* 提供多级别日志,包括系统事件、设备操作、DBC 解析状态、原始 CAN 报文以及详细的解析后信号数据。
* 日志支持滚动显示、清空和保存到文件。
* **⚙️ 可配置设备设置:** 允许用户灵活选择设备类型、设备索引、CAN 通道和通讯波特率,以适应不同的硬件和应用场景。
* **💾 持久化配置:** 应用程序自动保存并加载上次使用的配置(包括 DBC 文件路径、设备参数等)到 `config.ini` 文件,方便下次使用。
* **🚀 响应式用户界面:** 基于 PyQt5 构建,通过将 CAN 数据接收和解析逻辑封装在独立的 `QThread` 工作线程中,确保主 GUI 界面保持流畅和响应,避免卡顿。
* **🔍 调试辅助:** 可选择显示原始 CAN 报文和详细的解析过程,便于系统调试和问题排查。
## 架构概览 🏗️
本工具采用多线程架构设计,以确保用户界面的响应性和稳定性:
* **主线程 (Main Thread):** 负责 PyQt5 GUI 的渲染、用户交互和调度。
* **CAN 工作线程 (CanWorker - QThread):** 独立于主线程运行,负责与 ZLG DLL 交互,执行 CAN 报文的实时接收、解析和数据存储。它通过 `pyqtSignal` 将解析后的数据和日志信息安全地传递给主线程进行更新。
* **ZCAN DLL 封装:** 内部集成了周立功官方 `zlgcan.py` 文件中的 DLL 交互逻辑,直接调用 `ZCAN_OpenDevice`, `ZCAN_InitCAN`, `ZCAN_Receive` 等底层 API。
## 先决条件 🛠️
在运行应用程序之前,请确保您的系统满足以下条件:
1. **Python 3.x:** 推荐使用 Python 3.6 或更高版本。可以从 [python.org](https://www.python.org/) 下载安装。
2. **必需的 Python 库:**
打开命令行或终端,运行以下命令安装所需库:
```bash
pip install PyQt5 cantools matplotlib numpy configparser
```
3. **周立功 USBCAN 设备:** 您需要一个兼容的周立功 USBCAN 设备(例如 USBCAN-II, USBCAN-E-U, USBCAN-2E-U 等型号)。
4. **周立功设备驱动和 DLL 文件:**
* **驱动安装:** 请确保已根据您的 USBCAN 硬件型号,安装了周立功官方提供的最新设备驱动程序。
* **DLL 文件:** 应用程序需要访问 `zlgcan.dll` 或 `ControlCAN.dll` 文件。强烈建议将与您 Python 环境位数(32位或64位)相匹配的 DLL 文件直接放置在 `ZLG_CAN_电流监测工具` 项目的根目录下。程序启动时会优先尝试加载 `zlgcan.dll`,如果失败则尝试加载 `ControlCAN.dll`。
## 安装与运行 🚀
1. **获取源代码:**
您可以通过克隆 Git 仓库或直接下载 ZIP 包获取项目源代码。
```bash
git clone https://github.com/obsidianplusplus/ZLG_CAN_Current_Monitor.git
cd ZLG_CAN_Current_Monitor
```
2. **放置 DLL 文件:**
将您从周立功官网或驱动安装包中获取的 `zlgcan.dll` 或 `ControlCAN.dll` 文件(根据您的设备型号和 Python 位数选择)复制到 `ZLG_CAN_Current_Monitor` 文件夹内。
3. **运行应用程序:**
在项目根目录下,打开命令行或终端,执行以下命令:
```bash
python main.py
```
程序启动后,您将看到图形用户界面。
## 使用说明 💡
1. **加载 DBC 文件 📂:**
* 点击 "DBC文件路径" 旁的 "浏览..." 按钮,在弹出的文件对话框中选择您的 `.dbc` 文件。
* 点击 "加载DBC" 按钮。成功加载后,"DBC状态" 将显示 "已加载",并且会尝试显示 DBC 版本信息。
* **提示:** 如果未加载 DBC 文件,程序仍能接收原始 CAN 报文,但无法进行解析。
2. **配置设备参数 设定 ⚙️:**
* 从 "设备类型" 下拉菜单中选择您使用的周立功 CAN 设备型号 (例如,`USBCAN-II (4)`)。
* 选择正确的 "设备索引" (对于单设备,通常为 `0`) 和 "CAN通道" (根据您的连接,通常为 `0` 或 `1`)。
* 选择与您的 CAN 网络相匹配的 "波特率" (例如,`250000`)。
* "DLL路径" 仅作记录参考,实际加载路径由程序内部逻辑决定。
3. **连接和启动 CAN 启动 🟢:**
* 点击 "打开设备" 按钮。如果成功连接到 CAN 设备,"设备状态" 将显示 "已连接",并显示设备详细信息。
* 点击 "启动CAN" 按钮。这将初始化并启动选定的 CAN 通道。成功启动后,"通道状态" 将显示 "运行中",应用程序将开始接收和解析 CAN 报文,"实时数据" 和 "数据趋势" 图表将开始更新。
4. **监测数据 📈:**
* 在 "实时数据" 区域,您将看到霍尔传感器1 (CAN ID 0x3C2 对应 `Curr1_Data`) 和霍尔传感器2 (CAN ID 0x3C1 对应 `Curr2_Data`) 的当前电流值。
* "数据趋势" 图表将实时绘制两个传感器的电流值随时间变化的曲线,方便观察数据变化。
5. **查看日志 📜:**
* "系统日志" 区域将显示设备操作、DBC 解析状态以及 CAN 报文接收的详细信息。
* 勾选 "显示原始报文/调试日志" 复选框可以显示更详细的原始 CAN 报文数据和解析过程,这在调试时非常有用。
* 点击 "清空日志" 按钮可以清除日志区域的所有内容。
* 点击 "保存日志" 按钮可以将当前日志内容保存为文本文件。
6. **停止和关闭 🛑:**
* 点击 "停止接收" 按钮可以停止 CAN 报文的接收线程。
* 点击 "关闭设备" 按钮可以关闭 CAN 设备并释放相关资源。程序退出前会自动提示您是否保存当前配置,并尝试正常关闭设备和线程。
## 常见问题与故障排除 ⚠️
* **DLL 加载失败 / `OSError: [WinError 126]` ❌:**
* **原因:** `zlgcan.dll` 或 `ControlCAN.dll` 文件未找到,或者 DLL 的位数与 Python 解释器的位数不匹配 (例如,64位 Python 尝试加载32位 DLL)。
* **解决方案:** 确保将正确的 DLL 文件(与您的 Python 环境位数一致)放置在 `main.py` 脚本的同一目录下。同时,请检查是否已正确安装了周立功设备的驱动程序。
* **"打开设备失败!错误码: 0" ❌:**
* **原因:** 设备未正确连接,驱动未安装,或者您选择的 "设备类型" 或 "设备索引" 不正确。
* **解决方案:** 检查 USB 连接;确保周立功设备驱动已安装;尝试不同的 "设备索引" (通常从 0 开始)。
* **"初始化CAN通道失败!" 或 "启动CAN通道失败!" ❌:**
* **原因:** 您选择的 CAN 通道可能已被占用,或者波特率设置与设备或网络不匹配。
* **解决方案:** 尝试切换 "CAN通道" (0 或 1);核对 "波特率" 设置是否与您的 CAN 网络一致。
* **DBC 文件加载失败 ❌:**
* **原因:** DBC 文件路径不正确,文件损坏,或者 DBC 文件格式不符合 `cantools` 库的要求。
* **解决方案:** 检查文件路径是否正确;尝试使用其他工具(如 CANalyzer)打开 DBC 文件,确认其有效性。
* **接收到报文但无法解析 / 图表无数据 📉:**
* **原因:** DBC 文件中没有定义收到的 CAN ID 对应的报文,或者定义的信号名称与程序预期不符 (本程序期望 `Curr1_Data` 和 `Curr2_Data`)。
* **解决方案:** 确保您的 DBC 文件包含 ID 为 `0x3C1` 和 `0x3C2` 的报文定义,并且报文中包含名为 `Curr2_Data` (对应 0x3C1) 和 `Curr1_Data` (对应 0x3C2) 的信号。勾选 "显示原始报文/调试日志" 可以查看原始报文和解析错误信息。
* **图表中文显示乱码 ❓:**
* **原因:** Matplotlib 默认字体不支持中文。
* **解决方案:** 程序已内置尝试加载常用的中文字体(如 `SimHei`, `Microsoft YaHei`),但如果您的系统缺少这些字体,可能仍会乱码。您可以手动安装这些字体,或在 `setup_matplotlib_fonts` 方法中添加您的系统支持的中文字体。
## 未来增强与路线图 🛣️
我们计划在未来版本中加入更多功能,包括:
* **CAN FD 支持:** 扩展支持 CAN FD 报文的接收和解析。
* **CAN 报文发送功能:** 允许用户自定义并发送 CAN 报文。
* **更灵活的传感器配置:** 允许通过配置文件或 UI 动态配置要监测的 CAN ID 和信号。
* **数据导出选项:** 支持将接收到的数据导出为 CSV 或其他格式。
* **高级图表功能:** 增加图表缩放、平移、数据点标记等交互功能。
* **自动化日志保存:** 增加定时或按大小自动保存日志的功能。
## 许可证 📄
本项目采用 MIT 许可证。详见 `LICENSE` 文件。
## 联系方式 📧
如果您有任何问题、建议或需要技术支持,请通过 GitHub Issues 与我们联系。
---