{"id":28926782,"url":"https://github.com/obsidianplusplus/zlg_can_current_monitor","last_synced_at":"2025-09-03T08:13:47.088Z","repository":{"id":298775665,"uuid":"1000744672","full_name":"obsidianplusplus/ZLG_CAN_Current_Monitor","owner":"obsidianplusplus","description":"基于 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.","archived":false,"fork":false,"pushed_at":"2025-06-12T09:00:21.000Z","size":2041,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-22T12:12:58.642Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/obsidianplusplus.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-12T08:57:51.000Z","updated_at":"2025-06-12T09:01:13.000Z","dependencies_parsed_at":"2025-06-12T21:59:10.978Z","dependency_job_id":"bf2381d5-1f88-4cb4-85c1-bd966c7c898d","html_url":"https://github.com/obsidianplusplus/ZLG_CAN_Current_Monitor","commit_stats":null,"previous_names":["obsidianplusplus/zlg_can_current_monitor"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/obsidianplusplus/ZLG_CAN_Current_Monitor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/obsidianplusplus%2FZLG_CAN_Current_Monitor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/obsidianplusplus%2FZLG_CAN_Current_Monitor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/obsidianplusplus%2FZLG_CAN_Current_Monitor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/obsidianplusplus%2FZLG_CAN_Current_Monitor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/obsidianplusplus","download_url":"https://codeload.github.com/obsidianplusplus/ZLG_CAN_Current_Monitor/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/obsidianplusplus%2FZLG_CAN_Current_Monitor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273410469,"owners_count":25100522,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-03T02:00:09.631Z","response_time":76,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-06-22T12:12:06.788Z","updated_at":"2025-09-03T08:13:47.036Z","avatar_url":"https://github.com/obsidianplusplus.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ZLG CAN 电流监测工具 ⚡️\n\n## 概述 ✨\n`ZLG_CAN_电流监测工具` 是一个基于 Python 和 PyQt5 的图形用户界面 (GUI) 应用程序，其核心目标是为用户提供一个便捷的平台，通过周立功 USBCAN 系列设备实时监测和可视化霍尔传感器或其他 CAN 总线上的电流数据。本工具能够加载行业标准的 DBC (CAN 数据库) 文件，智能解析原始 CAN 报文，将其转换为有意义的物理值，并以直观的实时曲线图呈现数据变化趋势，同时提供详细的日志记录功能。它特别适用于需要对 CAN 总线上传感器数据进行实时监控、调试和分析的工程师与开发者。\n\n## 核心特性 ✨\n*   **🔌 周立功 USBCAN 设备支持：** 无缝连接并与周立功 USBCAN-II, USBCAN-E-U, USBCAN-2E-U 等系列 CAN 设备进行交互。\n*   **📚 DBC 文件解析：** 支持加载 `.dbc` 格式的 CAN 数据库文件，自动识别并解码 CAN 报文中的信号，将原始数据转换为物理单位值（如 mA）。\n*   **📊 实时数据可视化：**\n    *   在主界面实时显示霍尔传感器电流的瞬时值（例如，DBC 中定义的 `Curr1_Data` 和 `Curr2_Data` 信号）。\n    *   动态绘制电流随时间变化的趋势图，提供直观的数据洞察。\n*   **📝 全面日志记录：**\n    *   提供多级别日志，包括系统事件、设备操作、DBC 解析状态、原始 CAN 报文以及详细的解析后信号数据。\n    *   日志支持滚动显示、清空和保存到文件。\n*   **⚙️ 可配置设备设置：** 允许用户灵活选择设备类型、设备索引、CAN 通道和通讯波特率，以适应不同的硬件和应用场景。\n*   **💾 持久化配置：** 应用程序自动保存并加载上次使用的配置（包括 DBC 文件路径、设备参数等）到 `config.ini` 文件，方便下次使用。\n*   **🚀 响应式用户界面：** 基于 PyQt5 构建，通过将 CAN 数据接收和解析逻辑封装在独立的 `QThread` 工作线程中，确保主 GUI 界面保持流畅和响应，避免卡顿。\n*   **🔍 调试辅助：** 可选择显示原始 CAN 报文和详细的解析过程，便于系统调试和问题排查。\n\n## 架构概览 🏗️\n本工具采用多线程架构设计，以确保用户界面的响应性和稳定性：\n*   **主线程 (Main Thread):** 负责 PyQt5 GUI 的渲染、用户交互和调度。\n*   **CAN 工作线程 (CanWorker - QThread):** 独立于主线程运行，负责与 ZLG DLL 交互，执行 CAN 报文的实时接收、解析和数据存储。它通过 `pyqtSignal` 将解析后的数据和日志信息安全地传递给主线程进行更新。\n*   **ZCAN DLL 封装：** 内部集成了周立功官方 `zlgcan.py` 文件中的 DLL 交互逻辑，直接调用 `ZCAN_OpenDevice`, `ZCAN_InitCAN`, `ZCAN_Receive` 等底层 API。\n\n## 先决条件 🛠️\n\n在运行应用程序之前，请确保您的系统满足以下条件：\n\n1.  **Python 3.x:** 推荐使用 Python 3.6 或更高版本。可以从 [python.org](https://www.python.org/) 下载安装。\n2.  **必需的 Python 库：**\n    打开命令行或终端，运行以下命令安装所需库：\n    ```bash\n    pip install PyQt5 cantools matplotlib numpy configparser\n    ```\n3.  **周立功 USBCAN 设备：** 您需要一个兼容的周立功 USBCAN 设备（例如 USBCAN-II, USBCAN-E-U, USBCAN-2E-U 等型号）。\n4.  **周立功设备驱动和 DLL 文件：**\n    *   **驱动安装：** 请确保已根据您的 USBCAN 硬件型号，安装了周立功官方提供的最新设备驱动程序。\n    *   **DLL 文件：** 应用程序需要访问 `zlgcan.dll` 或 `ControlCAN.dll` 文件。强烈建议将与您 Python 环境位数（32位或64位）相匹配的 DLL 文件直接放置在 `ZLG_CAN_电流监测工具` 项目的根目录下。程序启动时会优先尝试加载 `zlgcan.dll`，如果失败则尝试加载 `ControlCAN.dll`。\n\n## 安装与运行 🚀\n\n1.  **获取源代码：**\n    您可以通过克隆 Git 仓库或直接下载 ZIP 包获取项目源代码。\n    ```bash\n    git clone https://github.com/obsidianplusplus/ZLG_CAN_Current_Monitor.git\n    cd ZLG_CAN_Current_Monitor\n    ```\n    \n2.  **放置 DLL 文件：**\n    将您从周立功官网或驱动安装包中获取的 `zlgcan.dll` 或 `ControlCAN.dll` 文件（根据您的设备型号和 Python 位数选择）复制到 `ZLG_CAN_Current_Monitor` 文件夹内。\n\n3.  **运行应用程序：**\n    在项目根目录下，打开命令行或终端，执行以下命令：\n    ```bash\n    python main.py\n    ```\n    程序启动后，您将看到图形用户界面。\n\n## 使用说明 💡\n\n1.  **加载 DBC 文件 📂:**\n    *   点击 \"DBC文件路径\" 旁的 \"浏览...\" 按钮，在弹出的文件对话框中选择您的 `.dbc` 文件。\n    *   点击 \"加载DBC\" 按钮。成功加载后，\"DBC状态\" 将显示 \"已加载\"，并且会尝试显示 DBC 版本信息。\n    *   **提示：** 如果未加载 DBC 文件，程序仍能接收原始 CAN 报文，但无法进行解析。\n\n2.  **配置设备参数 设定 ⚙️:**\n    *   从 \"设备类型\" 下拉菜单中选择您使用的周立功 CAN 设备型号 (例如，`USBCAN-II (4)`)。\n    *   选择正确的 \"设备索引\" (对于单设备，通常为 `0`) 和 \"CAN通道\" (根据您的连接，通常为 `0` 或 `1`)。\n    *   选择与您的 CAN 网络相匹配的 \"波特率\" (例如，`250000`)。\n    *   \"DLL路径\" 仅作记录参考，实际加载路径由程序内部逻辑决定。\n\n3.  **连接和启动 CAN 启动 🟢:**\n    *   点击 \"打开设备\" 按钮。如果成功连接到 CAN 设备，\"设备状态\" 将显示 \"已连接\"，并显示设备详细信息。\n    *   点击 \"启动CAN\" 按钮。这将初始化并启动选定的 CAN 通道。成功启动后，\"通道状态\" 将显示 \"运行中\"，应用程序将开始接收和解析 CAN 报文，\"实时数据\" 和 \"数据趋势\" 图表将开始更新。\n\n4.  **监测数据 📈:**\n    *   在 \"实时数据\" 区域，您将看到霍尔传感器1 (CAN ID 0x3C2 对应 `Curr1_Data`) 和霍尔传感器2 (CAN ID 0x3C1 对应 `Curr2_Data`) 的当前电流值。\n    *   \"数据趋势\" 图表将实时绘制两个传感器的电流值随时间变化的曲线，方便观察数据变化。\n\n5.  **查看日志 📜:**\n    *   \"系统日志\" 区域将显示设备操作、DBC 解析状态以及 CAN 报文接收的详细信息。\n    *   勾选 \"显示原始报文/调试日志\" 复选框可以显示更详细的原始 CAN 报文数据和解析过程，这在调试时非常有用。\n    *   点击 \"清空日志\" 按钮可以清除日志区域的所有内容。\n    *   点击 \"保存日志\" 按钮可以将当前日志内容保存为文本文件。\n\n6.  **停止和关闭 🛑:**\n    *   点击 \"停止接收\" 按钮可以停止 CAN 报文的接收线程。\n    *   点击 \"关闭设备\" 按钮可以关闭 CAN 设备并释放相关资源。程序退出前会自动提示您是否保存当前配置，并尝试正常关闭设备和线程。\n\n## 常见问题与故障排除 ⚠️\n\n*   **DLL 加载失败 / `OSError: [WinError 126]` ❌:**\n    *   **原因：** `zlgcan.dll` 或 `ControlCAN.dll` 文件未找到，或者 DLL 的位数与 Python 解释器的位数不匹配 (例如，64位 Python 尝试加载32位 DLL)。\n    *   **解决方案：** 确保将正确的 DLL 文件（与您的 Python 环境位数一致）放置在 `main.py` 脚本的同一目录下。同时，请检查是否已正确安装了周立功设备的驱动程序。\n\n*   **\"打开设备失败！错误码: 0\" ❌:**\n    *   **原因：** 设备未正确连接，驱动未安装，或者您选择的 \"设备类型\" 或 \"设备索引\" 不正确。\n    *   **解决方案：** 检查 USB 连接；确保周立功设备驱动已安装；尝试不同的 \"设备索引\" (通常从 0 开始)。\n\n*   **\"初始化CAN通道失败！\" 或 \"启动CAN通道失败！\" ❌:**\n    *   **原因：** 您选择的 CAN 通道可能已被占用，或者波特率设置与设备或网络不匹配。\n    *   **解决方案：** 尝试切换 \"CAN通道\" (0 或 1)；核对 \"波特率\" 设置是否与您的 CAN 网络一致。\n\n*   **DBC 文件加载失败 ❌:**\n    *   **原因：** DBC 文件路径不正确，文件损坏，或者 DBC 文件格式不符合 `cantools` 库的要求。\n    *   **解决方案：** 检查文件路径是否正确；尝试使用其他工具（如 CANalyzer）打开 DBC 文件，确认其有效性。\n\n*   **接收到报文但无法解析 / 图表无数据 📉:**\n    *   **原因：** DBC 文件中没有定义收到的 CAN ID 对应的报文，或者定义的信号名称与程序预期不符 (本程序期望 `Curr1_Data` 和 `Curr2_Data`)。\n    *   **解决方案：** 确保您的 DBC 文件包含 ID 为 `0x3C1` 和 `0x3C2` 的报文定义，并且报文中包含名为 `Curr2_Data` (对应 0x3C1) 和 `Curr1_Data` (对应 0x3C2) 的信号。勾选 \"显示原始报文/调试日志\" 可以查看原始报文和解析错误信息。\n\n*   **图表中文显示乱码 ❓:**\n    *   **原因：** Matplotlib 默认字体不支持中文。\n    *   **解决方案：** 程序已内置尝试加载常用的中文字体（如 `SimHei`, `Microsoft YaHei`），但如果您的系统缺少这些字体，可能仍会乱码。您可以手动安装这些字体，或在 `setup_matplotlib_fonts` 方法中添加您的系统支持的中文字体。\n\n## 未来增强与路线图 🛣️\n我们计划在未来版本中加入更多功能，包括：\n*   **CAN FD 支持：** 扩展支持 CAN FD 报文的接收和解析。\n*   **CAN 报文发送功能：** 允许用户自定义并发送 CAN 报文。\n*   **更灵活的传感器配置：** 允许通过配置文件或 UI 动态配置要监测的 CAN ID 和信号。\n*   **数据导出选项：** 支持将接收到的数据导出为 CSV 或其他格式。\n*   **高级图表功能：** 增加图表缩放、平移、数据点标记等交互功能。\n*   **自动化日志保存：** 增加定时或按大小自动保存日志的功能。\n\n\n## 许可证 📄\n本项目采用 MIT 许可证。详见 `LICENSE` 文件。\n\n## 联系方式 📧\n如果您有任何问题、建议或需要技术支持，请通过 GitHub Issues 与我们联系。\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fobsidianplusplus%2Fzlg_can_current_monitor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fobsidianplusplus%2Fzlg_can_current_monitor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fobsidianplusplus%2Fzlg_can_current_monitor/lists"}