BMS HIL 自动化测试框架方案(基于 CANoe + C# + Excel)

一、方案技术栈总览

组件 选型 作用
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 配置

使用 EPPlusClosedXML 读取所有工作表,构建测试对象模型。

复制代码
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,支持复杂故障注入
自动化流程完整 前置→触发→采集→判定→日志→报告,全自动循环
内容充实 详细到代码示例、工作表结构、流程图,可直接落地
相关推荐
祀爱1 小时前
定时任务之BackgroundService的详细教程
后端·c#·asp.net
AgentOPC1 小时前
Cerebras WSE-3 vs Nvidia H100/H200/B200:详细技术对比——谁才是 AI 时代真正的“芯片之王“
开发语言·人工智能·nvidia
qq_2518364571 小时前
基于java 汽车检修管理系统设计与实现 论文
java·开发语言·汽车
lbaihao1 小时前
LLVM Cpu0 调用规则解析
开发语言·前端·python·llvm
基德爆肝c语言1 小时前
Qt系统相关
开发语言·qt
redaijufeng1 小时前
C/C++程序从编译到链接的过程
c语言·开发语言·c++
木子墨5161 小时前
系统设计面试 | 实现一个限流器:滑动窗口 → 令牌桶 → 漏桶
java·开发语言·数据结构·数据库·面试·职场和发展
Byte Wizard2 小时前
C语言指针深入浅出6
c语言·开发语言
知识分享小能手2 小时前
R语言入门学习教程,从入门到精通,R语言数据处理与清洗 (9)
开发语言·学习·r语言