BMS Monitor

BMS Monitor 是一款面向 Windows 平台的电池管理系统 CAN 实时监控软件,配合兼容周立功 ControlCAN.dll 的 USBCAN-II 设备使用。

软件以只听模式接入 CAN 总线,不主动发送报文,适用于 BMS 调试、实车数据观察和电芯状态检查。

主要功能

  • 250 / 500 kbit/s 波特率切换
  • CAN1 / CAN2 通道选择
  • 实时显示总电压、总电流和 SOC
  • 显示 16 路单体电压及最高/最低值
  • 显示 10 路温度及最高/最低实际温度
  • 显示 BMS 工作状态和故障信息
  • 实时查看原始 CAN 报文
  • 最多保留最近 1000 帧,限制长期运行的内存占用

技术路径

1. CAN 硬件接入

程序通过 P/Invoke 调用原生 ControlCAN.dll 接口:

VCI_OpenDevice
    ↓
VCI_InitCAN
    ↓
VCI_StartCAN
    ↓
VCI_Receive
    ↓
VCI_ResetCAN
    ↓
VCI_CloseDevice

CAN 初始化采用硬件只听模式 Mode = 1。应用没有声明 VCI_Transmit,不会主动向 CAN 总线发送数据。

2. 波特率配置

波特率 Timing0 Timing1
250 kbit/s 0x01 0x1C
500 kbit/s 0x00 0x1C

连接时根据界面选择生成对应的 CAN 初始化参数。

3. 异步报文接收

连接成功后,后台任务循环调用 VCI_Receive,将原生数据转换为 CanFrame,再通过事件切换回 WPF UI 线程更新界面。

每次最多读取 100 帧,接收等待时间为 50ms,兼顾实时性和 CPU 占用。

4. 实际 CAN 协议

CAN ID 数据内容
0x140 总电压、总电流、故障和工作状态
0x150 电芯 1–4
0x151 电芯 5–8
0x153 电芯 9–12
0x154 电芯 13–16
0x156 温度数据

同时保留对文档扩展帧 0x186040F3 和 0x186140F3 的兼容解析。

5. 单体电压解析

每个单体电压占用两个字节,采用大端格式,数值单位为 0.1mV:

原始值 = Byte[n] × 256 + Byte[n+1]
单体电压 = 原始值 ÷ 10000

例如:

98 F3 → 0x98F3 → 39155 → 3.9155V

0xFFFE 和 0xFFFF 视为未接或无效通道,不参与最大值和最小值计算。

6. 温度处理

0x156 的前 8 个字节对应 8 路实际温度:

温度 = 原始字节 - 40

0xFF 表示无效温度。界面显示 10 路温采,最高、最低温度只根据前 8 路实际温采计算。

7. SOC 计算

当前版本根据总电压进行线性估算:

SOC = 当前总电压 ÷ 68V × 100%

结果四舍五入为整数,并限制在 0–100% 之间。

8. 软件架构

WPF 界面层
├── 实时监控
├── 电流 I
├── 电芯与温度
└── CAN 原始报文

协议解析层
├── BmsProtocolParser
└── BmsSnapshot

CAN 通信层
├── ICanReceiver
├── ControlCanReceiver
├── ControlCanNative
└── CanFrame
  • ControlCanNative:声明原生 CAN 接口和数据结构
  • ControlCanReceiver:管理设备连接和后台接收
  • BmsProtocolParser:识别 CAN ID 并解析数据
  • BmsSnapshot:保存当前 BMS 状态
  • MainWindow:展示数据并响应用户操作

技术栈

  • C# / .NET 8
  • WPF
  • P/Invoke
  • ControlCAN SDK
  • xUnit
  • Windows x86

采用 x86 构建是为了匹配当前使用的 32 位 ControlCAN.dll。

界面主题

界面采用 CrystalDiskInfo 式的紧凑信息布局,并融入永雏塔菲的粉紫配色、头像、低透明度全窗背景、主题视觉与桃心/星星状态元素。总电流与电压、SOC 等核心数据集中在概览页。主题图片取自永雏塔菲的哔哩哔哩官方空间。

使用

  1. 安装 CAN 盒厂商驱动。
  2. 连接 CANH/CANL,并确认总线终端电阻。
  3. 启动程序,选择通道和波特率。
  4. 点击“连接”开始监听。

项目已包含 x86 ControlCAN.dll 以及运行所需的 kerneldlls 文件。

构建与测试

dotnet build BmsMonitor.App/BmsMonitor.App.csproj -c Release -p:Platform=x86
dotnet test BmsMonitor.Tests/BmsMonitor.Tests.csproj -c Release -p:Platform=x86

安全边界

本项目只包含打开、初始化、启动、接收、复位和关闭 API,不包含任何 CAN 报文发送或参数配置功能。

S
Description
拓瑜BMS上位机
Readme
1.6 MiB
2026-10-01 21:49:16 +08:00
Languages
C# 100%