一、方案技术栈总览
| 组件 | 选型 | 作用 |
|---|---|---|
| HIL 实时平台 | Vector CANoe(含 VT System 板卡) | 总线仿真、信号激励、故障注入、测试执行 |
| 自动化开发语言 | C#(.NET 6/8) | 控制 CANoe 自动化序列、解析 Excel、生成报告、集成 CI |
| 配置与用例管理 | Excel 文件(.xlsx) | 测试用例、参数配置、判定条件、前置条件等 |
| 模型 | 车辆模型 + 电池负载模型(CAPL / Simulink) | 运行在 CANoe 中,模拟整车工况 |
说明:本方案只涉及 HIL 台架对 BMS 的激励与测量,BMS 产品本身作为黑盒被测对象,台架不包含 产品。
二、Excel 配置方案设计
Excel 作为 唯一外部配置入口,实现测试参数、用例、执行条件的参数化,无需修改 C# 代码或 CANoe 配置即可适配不同测试需求。
2.1 Excel 文件结构
推荐一个工作簿包含以下工作表:
| 工作表名 | 内容 |
|---|---|
| SystemConfig | 全局配置:CAN 通道、VT 板卡映射、硬线信号定义、DBC 文件路径、日志路径 |
| TestCases | 测试用例清单:用例ID、名称、分类(SOC/均衡/故障...)、是否执行、依赖关系 |
| PreConditions | 前置条件参数:初始 SOC、单体电压分布、温度、继电器状态等(按用例ID索引) |
| Triggers | 触发条件参数:触发类型(时间/信号/事件)、具体值、持续时间 |
| CheckItems | 判定条件:期望信号值/报文值、容差、时间窗口、判定逻辑(>、<、区间) |
| FaultInjection | 故障注入配置:故障类型(开路/短路/漂移)、注入时刻、持续时间、恢复方式 |
| Profiles | 工况曲线:时间序列的电流/电压/温度曲线(用于动态测试) |
2.2 示例:TestCases 工作表
| 用例ID | 用例名称 | 分类 | 前置条件ID | 触发ID | 检查ID | 是否执行 | 超时(s) |
|---|---|---|---|---|---|---|---|
| TC001 | SOC估算精度-恒流放电 | SOC | PRE_SOC_01 | TRG_CURRENT_1C | CHK_SOC_ERR_2% | 是 | 3600 |
| TC002 | 过压故障响应 | 故障 | PRE_NORMAL | TRG_OVP_4.25V | CHK_FAULT_OVP | 是 | 10 |
2.3 参数化优势
-
一次编写,多次运行:通过修改 Excel 中的参数(如 SOC 初值、故障阈值)即可实现不同的测试条件。
-
非编程人员可用:测试工程师可直接编辑 Excel 来维护用例。
-
版本控制友好:Excel 文件可纳入 Git,支持变更追溯。
三、CANoe 平台配置与扩展
CANoe 作为 HIL 测试的核心环境,负责:
-
运行车辆模型、负载模型
-
通过 VT System 模拟传感器信号(电压、电流、温度)
-
注入故障(开路、短路、信号偏移)
-
采集 BMS 的 CAN 报文及硬线响应
-
提供 COM/API 接口供 C# 调用
3.1 CANoe 配置要点
| 配置项 | 说明 |
|---|---|
| DBC 文件 | 包含 BMS 通信的所有 CAN 信号及报文定义 |
| Panel 面板 | 可选,用于手动调试,自动化时可隐藏 |
| CAPL 测试模块 | 编写测试序列(Test Module),但主控逻辑交给 C# 更灵活 |
| XML 测试配置文件 | CANoe 的测试配置,包含模型路径、硬件映射 |
| COM Server | 启用 CANoe 的 COM 接口,供 C# 连接和控制 |
3.2 模型集成
-
车辆模型:用 Simulink 或 CAPL 实现,输出实时负载电流需求。
-
负载模型:根据电流需求与电池电压计算功率,反馈给 BMS 信号模拟。
-
两者均运行在 CANoe 的仿真节点中。
四、C# 自动化执行框架
采用 C# 控制台应用程序或 Windows 服务,实现全自动测试流程。
4.1 C# 项目结构
BmsHilAutomation/
├── ExcelReader/ # 读取配置及用例(使用 EPPlus 或 ClosedXML)
├── CanoeController/ # 控制 CANoe 的 COM 接口
├── TestExecutor/ # 测试执行引擎(状态机/循环)
├── ResultChecker/ # 自动判定结果,支持容差及时序
├── Logger/ # 日志记录(文本、CSV、数据库)
├── ReportGenerator/ # 生成 HTML/Excel 报告
├── Program.cs # 主入口
└── appsettings.json # 运行时参数(如 Excel 路径、CANoe 配置路径)
4.2 关键功能实现
4.2.1 控制 CANoe
使用 CANoe 提供的 COM 接口(CANoe.Application)。示例代码片段:
using CANoe;
var canoe = new CANoe.Application();
canoe.Open(@"C:\HIL\BMS_HIL.cfg");
canoe.Measurement.Start();
// 设置系统变量(用于控制模型或故障注入)
canoe.Variable.GetVariable("SysVar::BMS_TestMode").Value = 1;
// 读取 CAN 信号
double soc = (double)canoe.Bus.CAN[1].GetSignal("BMS_SOC").Value;
// 停止测量
canoe.Measurement.Stop();
4.2.2 读取 Excel 配置
使用 EPPlus 或 ClosedXML 读取所有工作表,构建测试对象模型。
var package = new ExcelPackage(new FileInfo("TestConfig.xlsx"));
var testCasesSheet = package.Workbook.Worksheets["TestCases"];
foreach (var row in testCasesSheet.Rows.Skip(2))
{
var testCase = new TestCase
{
Id = row.Cells[1].Text,
PreCondition = GetPreCondition(row.Cells[4].Text),
Trigger = GetTrigger(row.Cells[5].Text),
Check = GetCheckItem(row.Cells[6].Text)
};
// ...
}
4.2.3 测试执行引擎(文字流程图)
[1] 读取 Excel 配置,加载 SystemConfig、TestCases、PreConditions 等
↓
[2] 初始化 CANoe COM 连接,启动测量
↓
[3] 对每个选中的测试用例(是否执行 = 是)循环执行:
3.1 从 Excel 中读取当前用例的前置条件参数
-> 通过 CANoe 系统变量或 VT System 设置
-> 等待 BMS 稳定(检测心跳报文)
3.2 读取触发条件(如阶跃电流值、故障注入类型)
-> 应用触发(如设置负载模型电流、故障继电器闭合)
3.3 启动计时,连续采集信号和 CAN 报文
3.4 达到触发持续时间或条件后,停止采集
3.5 调用结果判定模块:
- 读取期望值(Excel 中的 CheckItems)
- 对比实际采集值(容差、时间窗内有效)
- 记录 PASS/FAIL 及详细偏差
3.6 保存本次用例的日志(传感器显示 U 曲线、故障日志)
3.7 若需要恢复台架,执行清理动作(如断开故障、复位模型)
↓
[4] 所有用例执行完毕,停止 CANoe 测量
↓
[5] 生成测试报告(包含每个用例的结果、关键波形截图、失败原因)
↓
[6] 可选:将结果上传至 CI 系统(Jenkins),并发送通知
4.2.4 结果判定模块
支持多种判断规则:
-
静态值比对:实际值在期望值 ± 容差内
-
时序检查:事件发生时间在预期窗口内(如故障上报 < 100ms)
-
变化率检查:每秒钟变化量不超过阈值
-
CAN 报文 DLC/CRC 检查
-
多信号联合判定(例如继电器关闭且电流 < 0.5A)
所有判定规则均在 Excel 的 CheckItems 工作表中定义,C# 读取后动态解析。
4.3 日志与报告
-
传感器显示 U:在测试过程中,C# 通过 CANoe 采集所有模拟量和 CAN 信号,保存为 CSV 文件(每个用例一个文件),包含时间戳、电压、电流、温度、SOC、故障码等。
-
功能日志:记录每个步骤的开始/结束时间、触发动作、判定结果、异常信息。
-
测试报告 :使用
EPPlus生成带统计图表的 Excel 报告,或使用Markdown/HTML生成美观的网页报告。
五、持续集成(CI)集成方式
-
Jenkins 任务:拉取 Git 仓库中的 Excel 配置和 C# 源代码 → 自动编译 → 执行控制台程序 → 收集报告。
-
命令行启动 :
BmsHilAutomation.exe --config "TestConfig_v2.xlsx" --canoe-cfg "BMS_HIL.cfg" -
失败通知:测试失败时,C# 程序返回非零退出码,Jenkins 捕获后发送邮件/钉钉,并附上失败用例的波形截图。
六、方案优势总结
| 需求点 | 本方案实现 |
|---|---|
| 只用 HIL 台架,无 ASW | 所有激励来自 CANoe 和 VT 板卡,BMS 作为黑盒 |
| Excel 配置 | 用例、参数、判定条件均外置于 Excel,无需重新编译 |
| C# 执行 | 强大的 COM 互操作、多线程、异常处理,易集成 CI |
| CANoe 平台 | 成熟的汽车总线仿真与硬件 I/O,支持复杂故障注入 |
| 自动化流程完整 | 前置→触发→采集→判定→日志→报告,全自动循环 |
| 内容充实 | 详细到代码示例、工作表结构、流程图,可直接落地 |
