做车载总线测试的小伙伴谁懂?调试 CAN 总线每次都要打开 CANoe、周立功官方客户端这类重型软件,企业授权费贵、多台工控机部署麻烦,界面堆满无关功能,简单抓包发报文也要点五六层菜单。
做中控、动力 ECU 台架测试,临时要抓整车报文、下发控制指令,来回切换工具,一半时间耗在软件配置上。今天分享一套自研轻量化 CAN 调试上位机,基于 PySide 可视化界面开发,搭配 ZLG USB-CAN 硬件,纯 Python 脚本,低配工控机、笔记本都能跑。
市面工具三大槽点
1. 收费授权:CANoe 单设备授权成本高,小型测试团队批量使用压力大;
2. 臃肿繁杂:几百个菜单功能,只抓报文也要加载庞大内核,低配工控机卡顿;
3. 拓展受限:想对接自动化脚本、定时下发测试帧,需要付费插件或复杂二次开发。
自研上位机核心亮点
✅ 可视化图形界面,下拉一键切换 USBCAN-I / USBCAN-II 硬件
✅ 车载专用波特率内置,250K 车身总线、500 动力总线无需手动计算时序
✅ 定时器自动轮询总线,实时打印十六进制报文日志,所见即所得
✅ 轻量化无授权,Python 环境装好即可拷贝运行,台架多设备随便部署
✅ 高拓展框架:预留发报文、日志导出、报文过滤、对接 Airtest 车载自动化接口
整套工具分为两层,完全解耦,改界面不用动硬件逻辑,新增功能不用重构全部代码:
1、UI 展示层(PySide)
Qt 可视化 UI 文件承载所有页面控件,只负责接收用户点击、下拉选择、展示报文日志,不包含任何硬件读写逻辑。
2、CAN 驱动封装层
统一封装 ZLG 硬件底层操作,把打开设备、初始化通道、收发报文封装成独立函数,屏蔽复杂句柄、结构体,上层 UI 直接调用。
运行环境要求:
Python3.8 及以上 + PySide2 + zlgcan 驱动包 + ZLG USB-CAN 硬件
1. 硬件接线:USB-CAN 设备插电脑,CAN\_H、CAN_L 对接整车 / 台架总线,两端接 120Ω 终端电阻;
2. 打开程序,在上方下拉框选择硬件型号、设备编号;
3. 点击【打开设备】,弹窗提示连接正常;
4. 选择 CAN 通道与对应车载波特率(动力 500K / 车身 250K),点击【启动通道】;
5. 通道开启后,下方日志面板自动刷新总线上所有 ECU 报文,无需手动刷新。
示例日志输出效果:
【接收报文】CAN-ID:0x0320 数据:00 22 56 00 00 00 00 00
【接收报文】CAN-ID:0x0108 数据:12 00 00 78 00 00 00 00
1. 手动下发自定义 CAN 报文:输入 CAN-ID、8 字节十六进制数据,一键下发总线,模拟车窗、空调控制指令;
2. 日志导出功能:一键把全部报文保存为 CSV 文件,用于后续问题复盘;
3. 报文过滤:按 CAN-ID 筛选,只抓取目标 ECU 报文,减少日志干扰;
4. 对接 Airtest 车载自动化:自动化用例中自动下发测试帧,实现台架全流程无人测试。
1. 车载车身、中控、动力台架 / 实车总线调试测试;
2. 测试组工控机多,商用 CAN 软件授权不足;
3. 想学习 Python 硬件交互、车载自动化的测试开发新人;
4. 需要轻量化备用 CAN 调试工具,外出实车便携调试。