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 中定义的
- 📝 全面日志记录:
- 提供多级别日志,包括系统事件、设备操作、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。
在运行应用程序之前,请确保您的系统满足以下条件:
- Python 3.x: 推荐使用 Python 3.6 或更高版本。可以从 python.org 下载安装。
- 必需的 Python 库:
打开命令行或终端,运行以下命令安装所需库:
pip install PyQt5 cantools matplotlib numpy configparser
- 周立功 USBCAN 设备: 您需要一个兼容的周立功 USBCAN 设备(例如 USBCAN-II, USBCAN-E-U, USBCAN-2E-U 等型号)。
- 周立功设备驱动和 DLL 文件:
- 驱动安装: 请确保已根据您的 USBCAN 硬件型号,安装了周立功官方提供的最新设备驱动程序。
- DLL 文件: 应用程序需要访问
zlgcan.dll
或ControlCAN.dll
文件。强烈建议将与您 Python 环境位数(32位或64位)相匹配的 DLL 文件直接放置在ZLG_CAN_电流监测工具
项目的根目录下。程序启动时会优先尝试加载zlgcan.dll
,如果失败则尝试加载ControlCAN.dll
。
-
获取源代码: 您可以通过克隆 Git 仓库或直接下载 ZIP 包获取项目源代码。
git clone https://github.com/obsidianplusplus/ZLG_CAN_Current_Monitor.git cd ZLG_CAN_Current_Monitor
-
放置 DLL 文件: 将您从周立功官网或驱动安装包中获取的
zlgcan.dll
或ControlCAN.dll
文件(根据您的设备型号和 Python 位数选择)复制到ZLG_CAN_Current_Monitor
文件夹内。 -
运行应用程序: 在项目根目录下,打开命令行或终端,执行以下命令:
python main.py
程序启动后,您将看到图形用户界面。
-
加载 DBC 文件 📂:
- 点击 "DBC文件路径" 旁的 "浏览..." 按钮,在弹出的文件对话框中选择您的
.dbc
文件。 - 点击 "加载DBC" 按钮。成功加载后,"DBC状态" 将显示 "已加载",并且会尝试显示 DBC 版本信息。
- 提示: 如果未加载 DBC 文件,程序仍能接收原始 CAN 报文,但无法进行解析。
- 点击 "DBC文件路径" 旁的 "浏览..." 按钮,在弹出的文件对话框中选择您的
-
配置设备参数 设定 ⚙️:
- 从 "设备类型" 下拉菜单中选择您使用的周立功 CAN 设备型号 (例如,
USBCAN-II (4)
)。 - 选择正确的 "设备索引" (对于单设备,通常为
0
) 和 "CAN通道" (根据您的连接,通常为0
或1
)。 - 选择与您的 CAN 网络相匹配的 "波特率" (例如,
250000
)。 - "DLL路径" 仅作记录参考,实际加载路径由程序内部逻辑决定。
- 从 "设备类型" 下拉菜单中选择您使用的周立功 CAN 设备型号 (例如,
-
连接和启动 CAN 启动 🟢:
- 点击 "打开设备" 按钮。如果成功连接到 CAN 设备,"设备状态" 将显示 "已连接",并显示设备详细信息。
- 点击 "启动CAN" 按钮。这将初始化并启动选定的 CAN 通道。成功启动后,"通道状态" 将显示 "运行中",应用程序将开始接收和解析 CAN 报文,"实时数据" 和 "数据趋势" 图表将开始更新。
-
监测数据 📈:
- 在 "实时数据" 区域,您将看到霍尔传感器1 (CAN ID 0x3C2 对应
Curr1_Data
) 和霍尔传感器2 (CAN ID 0x3C1 对应Curr2_Data
) 的当前电流值。 - "数据趋势" 图表将实时绘制两个传感器的电流值随时间变化的曲线,方便观察数据变化。
- 在 "实时数据" 区域,您将看到霍尔传感器1 (CAN ID 0x3C2 对应
-
查看日志 📜:
- "系统日志" 区域将显示设备操作、DBC 解析状态以及 CAN 报文接收的详细信息。
- 勾选 "显示原始报文/调试日志" 复选框可以显示更详细的原始 CAN 报文数据和解析过程,这在调试时非常有用。
- 点击 "清空日志" 按钮可以清除日志区域的所有内容。
- 点击 "保存日志" 按钮可以将当前日志内容保存为文本文件。
-
停止和关闭 🛑:
- 点击 "停止接收" 按钮可以停止 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 文件路径不正确,文件损坏,或者 DBC 文件格式不符合
-
接收到报文但无法解析 / 图表无数据 📉:
- 原因: DBC 文件中没有定义收到的 CAN ID 对应的报文,或者定义的信号名称与程序预期不符 (本程序期望
Curr1_Data
和Curr2_Data
)。 - 解决方案: 确保您的 DBC 文件包含 ID 为
0x3C1
和0x3C2
的报文定义,并且报文中包含名为Curr2_Data
(对应 0x3C1) 和Curr1_Data
(对应 0x3C2) 的信号。勾选 "显示原始报文/调试日志" 可以查看原始报文和解析错误信息。
- 原因: DBC 文件中没有定义收到的 CAN ID 对应的报文,或者定义的信号名称与程序预期不符 (本程序期望
-
图表中文显示乱码 ❓:
- 原因: Matplotlib 默认字体不支持中文。
- 解决方案: 程序已内置尝试加载常用的中文字体(如
SimHei
,Microsoft YaHei
),但如果您的系统缺少这些字体,可能仍会乱码。您可以手动安装这些字体,或在setup_matplotlib_fonts
方法中添加您的系统支持的中文字体。
我们计划在未来版本中加入更多功能,包括:
- CAN FD 支持: 扩展支持 CAN FD 报文的接收和解析。
- CAN 报文发送功能: 允许用户自定义并发送 CAN 报文。
- 更灵活的传感器配置: 允许通过配置文件或 UI 动态配置要监测的 CAN ID 和信号。
- 数据导出选项: 支持将接收到的数据导出为 CSV 或其他格式。
- 高级图表功能: 增加图表缩放、平移、数据点标记等交互功能。
- 自动化日志保存: 增加定时或按大小自动保存日志的功能。
本项目采用 MIT 许可证。详见 LICENSE
文件。
如果您有任何问题、建议或需要技术支持,请通过 GitHub Issues 与我们联系。