Hyowinner的MBD技术论坛

 找回密码
 立即注册
搜索
查看: 209|回复: 0

VCU故障诊断怎么做:从Simulink状态机到DTC和HIL验证

[复制链接]

132

主题

314

帖子

5372

积分

管理员

校长

Rank: 9Rank: 9Rank: 9

积分
5372
QQ
发表于 2026-9-4 15:26:47 | 显示全部楼层 |阅读模式
VCU故障诊断怎么做:从Simulink状态机到DTC和HIL验证

很多刚做 VCU 的同学,容易把“故障诊断”理解成在模型里加几个判断:电压超过阈值就置 1,CAN 报文丢了就报警,踏板不合理就限扭。这样能跑通一个演示,但到项目里很快会出问题:故障误报、恢复条件混乱、DTC 状态和实际降级动作对不上,HIL 测试能复现但开发定位不到根因,诊断仪读出来的结果也解释不清楚。

VCU 的故障诊断本质上不是一个 if-else 模块,而是一条完整链路:输入监控、故障成熟、故障锁存、降级动作、DTC 映射、冻结帧、UDS 读取、清故障、老化恢复、测试追溯。MBD 的价值也不只是把判断条件画成框图,而是把这条链路的时序、状态、接口和验证证据都建清楚。

先放一个结论:一个可交付的 VCU 诊断模型,至少要能回答下面 8 个问题。

1. 这个故障什么时候允许检测,什么时候必须屏蔽?
2. 触发条件是瞬时条件、计数条件,还是持续时间条件?
3. 故障从“怀疑发生”到“确认发生”需要什么成熟策略?
4. 故障确认后,VCU 对扭矩、高压、READY、档位和热管理怎么处理?
5. DTC 状态位、冻结帧和扩展数据由谁维护?
6. 故障消失后,是立即恢复、延时恢复,还是必须下电/清码后恢复?
7. 诊断仪通过 UDS 读到的 DTC,能不能和模型里的故障状态对上?
8. MIL、SIL、HIL、台架和整车验证用的是不是同一套需求和阈值?


截图1:VCU 故障诊断模型不应只停在判断条件,而要覆盖输入监控、成熟判定、降级动作和 DTC 服务链路


一、VCU故障诊断应该分层做

VCU 位于整车控制的协调层,诊断对象很杂:BMS、MCU、OBC、DCDC、VCU 自身供电、钥匙/唤醒、制动、加速踏板、档位、车速、HVIL、继电器、高压互锁、网络管理、热管理请求、整车模式状态等都会影响最终行为。如果把所有判断堆在一个大 Stateflow 里,后期基本不可维护。

工程上更稳的做法,是把诊断拆成几层:

1. 输入监控层:检查原始输入是否可信,例如范围、CRC、alive counter、E2E、timeout、信号初始值、无效值、传感器短路/开路。
2. 合理性诊断层:检查信号之间是否互相矛盾,例如加速踏板双通道差值、制动有效但驱动扭矩请求过高、高压 READY 与继电器反馈不一致、档位和车速不匹配。
3. 成熟与恢复层:把瞬时异常转成稳定故障状态,处理计数、时间滤波、确认、恢复、锁存和清除。
4. 故障仲裁层:多个故障同时出现时,按照安全等级和控制影响决定最终动作,例如禁止上高压、限扭、退出巡航、降级到跛行、请求热管理保护。
5. DTC接口层:把内部故障事件映射到 DTC、UDS status byte、冻结帧、扩展数据、老化计数和 NVM 存储。
6. 验证追溯层:把每个故障对应到需求、模型信号、标定量、测试用例、SIL结果和HIL故障注入结果。

这里要特别注意:故障检测和故障动作最好不要互相缠在一起。检测层只负责判断“这个故障是否成立”;动作层根据故障等级和整车状态决定“现在应该怎么处理”。比如 BMS 通信超时,在停车未上高压时可能只是禁止 READY;在行驶中可能要限扭并请求安全下电;在充电过程中又可能触发充电停止。检测条件相同,动作会随状态不同而变化。

二、不要把“故障发生”和“DTC已存储”混为一谈

VCU 里常见至少有三种状态,不能只用一个 boolean 变量表达。

第一种是 fault present,也就是当前故障条件成立。例如 BMS 报文已经超过 300 ms 没收到,当前确实超时。

第二种是 fault confirmed,也就是经过成熟策略确认故障有效。比如 timeout 条件持续超过 Nset,或者计数器达到阈值。很多降级动作应该以 confirmed 为准,而不是用单个采样点的异常直接触发。

第三种是 DTC stored,也就是故障信息已经进入诊断事件存储。它可能在故障消失后仍然保留,用于售后读取和历史追溯。清故障、老化、操作循环、使能条件都会影响它。

如果这三层混在一起,会出现很典型的问题:实车故障已经恢复,但 DTC 还在,测试工程师认为软件没恢复;或者 DTC 被清掉了,但故障根因仍在,下一次上电又立刻报故障;再或者 torque limit 已经解除,但诊断仪读到 confirmedDTC 还在,整车状态解释不一致。


截图2:推荐把预故障、确认故障、恢复观察、老化清除建成明确状态机,而不是一个简单置位变量


三、成熟策略要和故障物理含义匹配

VCU 诊断里最常见的成熟策略有三类。

1. 时间去抖:异常条件持续超过某个时间才确认,例如 CAN timeout、HVIL 断开、继电器反馈不一致。它适合处理持续性故障。
2. 计数去抖:异常一次加分,正常一次减分,到阈值确认,到恢复阈值清除。它适合处理抖动或噪声较多的输入。
3. 立即确认:某些安全相关故障不应慢慢等,例如行驶中高压互锁断开、严重过流硬件反馈、关键供电掉电。这类故障可以用很短滤波或直接触发硬件/软件保护。

这里没有万能参数。加速踏板双通道不一致,如果确认太快,可能对边沿抖动过敏;如果确认太慢,又可能在真实踏板故障时继续输出扭矩。BMS 通信超时,如果 timeout 太短,网络负载或休眠唤醒阶段容易误报;如果太长,VCU 过久拿不到高压系统状态,安全动作又会滞后。

MBD 模型里建议把下面这些都做成标定量或配置量:

1. 故障检测使能条件,例如 KL15、READY、档位、车速、充电状态、唤醒源、网络管理状态。
2. 故障成立阈值,例如电压范围、踏板差值、互锁输入、alive counter 失效次数。
3. 故障确认时间或计数阈值,例如 T_confirm、N_fail、N_pass。
4. 故障恢复时间或计数阈值,例如 T_heal、N_heal。
5. 降级等级,例如提示、限扭、禁止 READY、请求下高压、禁止再次上高压。
6. 清故障策略,例如诊断仪清除、下电清除、操作循环老化、必须维修后清除。

不要把阈值写死在 Stateflow 转移条件里。早期调试时看起来省事,后期标定、车型差异、供应商联调和法规边界都会逼你返工。

四、典型案例:BMS通信超时怎么建

以 BMS 通信超时为例,很多新人会直接写:
if BMS_Message_Timeout == 1 then Fault_BMS_Comm = 1

这不够。至少要补齐下面几个条件:

1. 使能条件:VCU 已经进入相关操作循环,BMS 节点应该在线,网络管理不处于正常休眠,报文初值已经完成初始化。
2. 检测条件:alive counter 不更新、CRC/E2E 错误连续出现、报文时间戳超过 timeout 阈值,三者要按项目通信协议定义清楚。
3. 成熟策略:例如 10 ms 任务中计数,连续 30 次失败确认,即 300 ms 确认;连续 80 次正常进入恢复观察,即 800 ms 恢复。
4. 替代值:通信丢失后,SOC、母线电压、允许扭矩、高压状态应该保持上一次有效值、使用默认安全值,还是直接判不可用?
5. 降级动作:未上高压时禁止 READY;行驶中限扭并保持可控停车;充电时停止充电请求;维修模式下可能允许特定诊断流程。
6. DTC信息:记录DTC、发生时车速、档位、READY状态、SOC、HV电压、BMS最后一次有效计数、网络状态。
7. 恢复策略:报文恢复后是否自动解除限扭?是否需要 BMS 状态重新可信?是否需要钥匙循环?

这就是为什么通信故障不能只看 timeout flag。VCU 是整车协调控制器,通信丢失后的“控制后果”比故障检测本身更重要。

五、典型案例:加速踏板合理性诊断

加速踏板通常有双通道。常见关系可能是同向比例、反向比例,或者一个通道是另一个通道的固定比例。VCU 不能只看单通道是否在 0-100% 范围内,还要看双通道关系、斜率、卡滞、短路到电源/地、断线、初始化值、ADC 饱和等。

模型里可以按下面顺序处理:

1. 原始 ADC 或 CAN 信号先做范围检查和无效值检查。
2. 两路踏板信号分别做滤波和物理量转换。
3. 检查双通道差值、比例关系和变化方向。
4. 检查制动优先逻辑:制动有效时,驱动扭矩请求是否必须削减。
5. 合理性故障确认后,输出扭矩请求置零或进入受限模式。
6. DTC 记录踏板两路原始值、滤波后值、制动状态、档位和车速。

踏板诊断的坑在于边界工况。比如驾驶员快速踩下踏板时,两路传感器由于滤波和采样时序可能短时间有差;制动开关抖动时,制动优先逻辑可能误触发;上电初始化阶段,踏板原始值还没有稳定,如果立即检测就容易误报。因此使能条件和去抖策略必须跟信号处理链一起设计。

六、VCU诊断和UDS/DEM接口要提前想清楚

很多 MBD 项目在应用层模型里把故障变量做出来了,但后面和基础软件集成时才发现接口没定义清楚:EventId 怎么命名?DTC 编码在哪张表?UDS status byte 由应用层维护还是 DEM 维护?冻结帧由谁采集?清故障时应用层状态是否同步清除?这些问题如果后期才补,模型改动会很大。

建议在模型设计阶段就把接口边界定清楚:

1. 应用层输出的是 event status,例如 passed、failed、prefailed、prepassed,而不是直接操作诊断仪显示内容。
2. DEM 或等效诊断管理模块负责 DTC 存储、状态位、老化、操作循环、冻结帧和扩展数据。
3. DCM 或诊断通信模块负责 UDS 服务,例如 0x19 读取DTC、0x14 清除DTC、0x22 读取DID、0x85 控制DTC设置。
4. 应用层需要接收清故障、诊断会话、操作循环、NVM状态等必要反馈,避免内部锁存状态和诊断事件存储不一致。
5. ODX/诊断数据库、DBC、A2L、模型接口和测试脚本要使用同一套命名和版本管理。

一个简单原则:模型里的故障事件名、诊断数据库里的 EventId、DTC 编码、测试用例名称最好能互相搜索到。否则到系统集成阶段,沟通成本会非常高。

七、MBD模型里容易踩的几个坑

第一,所有故障都放在同一个采样周期。VCU 里有 10 ms 控制量,也有 100 ms 慢诊断量,还有上电/下电/唤醒事件。踏板合理性和扭矩仲裁可能需要快周期,温度和版本校验不需要那么快。采样周期错了,去抖时间和响应时间都会错。

第二,Rate Transition 和 Unit Delay 无意识改变诊断时序。多速率模型里,如果通信信号从 10 ms 进入 100 ms 诊断任务,timeout 计数到底按哪个周期算?故障动作回到 10 ms 扭矩仲裁时,是否多了一拍延迟?这些必须在模型里标清楚。

第三,故障恢复条件比触发条件更随意。很多模型只认真写 set 条件,clear 条件写得很粗。实际项目中,恢复条件往往更关键。比如 HVIL 报警后,是互锁闭合就恢复,还是要高压系统重新完成预充?通信恢复后,是收到一帧就恢复,还是需要连续有效多帧?踏板故障消失后,是否要求踏板回零?

第四,降级动作没有优先级。多个故障同时出现时,后写的逻辑覆盖先写的逻辑,导致严重故障被轻微故障覆盖。建议用明确的 severity 或 action level 做仲裁:提示、限扭、禁止巡航、禁止 READY、请求下高压、锁存维修。

第五,DTC 和控制动作解耦过度。应用层只报一个事件给 DEM,但没有保留当前故障状态给控制策略;或者控制策略已经限扭,但 DTC 还没有成熟。结果就是测试曲线和诊断仪读数对不上。应当定义清楚 prefailed、confirmed、active、stored、latched 分别服务于哪些逻辑。


截图3:HIL故障注入时要同时观察输入异常、DTC确认、扭矩降级和UDS读取结果,不能只看一个故障标志位


八、HIL验证不要只验证“能报故障”

VCU 故障诊断的验证重点不是让故障灯亮起来,而是验证整条链路在正确的时间做正确的事。建议每个故障至少覆盖下面几类用例。

1. 正常不误报:正常上电、正常 READY、正常行驶、正常下电、休眠唤醒、充电唤醒过程中不应误报。
2. 单故障触发:注入一个明确故障,确认故障成熟时间、DTC、冻结帧和降级动作都符合需求。
3. 边界时间:故障持续时间略小于确认阈值不应成熟,略大于确认阈值应成熟。
4. 恢复行为:故障消失后,验证恢复时间、恢复条件、DTC是否仍存储、控制动作是否解除。
5. 清故障行为:诊断仪发 0x14 清码,验证当前故障仍存在时是否允许清除,故障不存在时是否正确清除历史状态。
6. 组合故障:BMS timeout 同时出现 HVIL open,踏板异常同时出现制动有效,验证严重等级和动作优先级。
7. 上下电循环:确认 NVM 存储、老化、操作循环和锁存状态在钥匙循环后符合预期。
8. 通信可读性:用诊断仪或自动化脚本读取 0x19、0x22 等服务,确认外部看到的结果和内部模型一致。

如果只在 MIL 里拉一个信号从 0 到 1,看 FaultFlag 是否置位,这个测试是不够的。VCU 诊断的交付证据应该包括:模型覆盖率、SIL 等价性、HIL 注入曲线、诊断服务响应、DTC状态字、冻结帧内容、问题单回归记录。

九、故障矩阵是最实用的工程交付物

建议为 VCU 建一张故障矩阵,把每个故障从需求到测试串起来。表里至少包含这些字段:

1. 故障名称和内部 EventId。
2. DTC 编码、DTC 文本、诊断等级。
3. 检测对象、输入信号、信号来源、采样周期。
4. 使能条件、触发条件、恢复条件。
5. 确认时间、恢复时间、老化策略、清故障策略。
6. 降级动作、扭矩限制、高压动作、仪表提示。
7. 冻结帧和扩展数据字段。
8. MIL/SIL/HIL/整车测试用例编号。
9. 标定量名称和默认值。
10. 版本、责任人和变更记录。

这张表看起来朴素,但非常有用。它能防止模型工程师、基础软件工程师、测试工程师和系统工程师各说各话。后期车型派生、阈值调整、DTC 合并、法规检查、售后问题追溯,最终都会回到这张表。


截图4:故障矩阵要能把需求、模型、DTC、冻结帧和测试用例追溯起来


十、一个可落地的VCU诊断建模流程

如果从零开始搭 VCU 故障诊断模型,建议按下面步骤推进。

第一步,先按整车功能列出故障族,而不是先画模型。比如高压上电故障、驱动请求故障、通信故障、制动/踏板故障、档位/车速故障、能量管理故障、热管理故障、NVM/配置故障、诊断服务故障。

第二步,对每个故障定义输入可信性。先问这个信号来自哪里:本地ADC、数字IO、CAN、LIN、以太网、基础软件服务,还是标定/NVM配置?来源不同,检测方式不同。

第三步,定义使能条件。VCU 在上电初始化、正常运行、充电、下电、休眠、工厂模式、维修模式下,诊断使能不能完全一样。很多误报都来自使能条件太粗。

第四步,定义成熟和恢复。用统一的 Debounce 模块或 Stateflow 模板表达,不要每个故障自己写一套风格。最好让计数器、时间、阈值、初值、饱和边界都可读。

第五步,定义控制动作。控制动作不要散落在各个故障模块里,而是汇总到故障仲裁或模式管理里。这样才能处理多个故障同时出现时的优先级。

第六步,定义 DTC 映射。包括 EventId、DTC、status byte、冻结帧、扩展数据、清除策略、老化策略、UDS 服务表现。

第七步,定义测试用例。每个故障都要有正常不误报、触发、边界、恢复、清码、上下电、组合故障测试。早期先做 MIL,代码生成后做 SIL,集成后做 HIL 和台架。

第八步,做版本追溯。模型版本、标定版本、DBC/ODX/A2L版本、基础软件配置版本、测试脚本版本要能对上。否则一个 DTC 不一致,排查半天可能只是版本错配。

十一、常见误区

误区一:故障诊断就是报 DTC。

不对。DTC 是外部诊断表达,VCU 还要承担控制降级、功能禁止、恢复策略和安全边界。没有控制动作的 DTC 只是记录,没有 DTC 的控制降级又难以售后追溯。

误区二:故障越快确认越安全。

不一定。安全相关故障需要快,但普通信号异常如果没有去抖,会带来误报和不必要降级。真正的安全不是所有故障都秒报,而是按风险等级设计响应时间。

误区三:清故障就是把模型里的 fault flag 清零。

不对。诊断仪清码通常只处理诊断事件存储。当前故障仍然存在时,应用层应继续上报 failed,DTC 可能马上再次出现。清码流程必须和当前故障状态、NVM 和操作循环协调。

误区四:HIL 通过了就说明模型没问题。

不一定。HIL 用例如果没有覆盖边界时间、恢复路径、组合故障和上下电循环,只能说明几个典型场景通过。诊断逻辑的缺陷常常藏在边界和状态切换里。

误区五:所有故障都能在 Simulink 里完全解决。

不对。DTC 存储、UDS服务、安全访问、NVM、网络管理、E2E、看门狗、硬件保护往往属于基础软件或底层驱动边界。MBD 模型必须定义接口和行为假设,但不能假装整个诊断栈都在应用层模型里。

结论

VCU 故障诊断做得好不好,关键不在于模型里有多少故障标志位,而在于链路是否闭合:输入是否可信、故障是否正确成熟、动作是否符合整车状态、DTC 是否可读可清、冻结帧是否能解释问题、HIL 是否能复现并验证恢复。

对 MBD 工程师来说,最值得训练的能力是把“故障条件”翻译成“可仿真、可生成代码、可标定、可诊断、可测试”的工程对象。能把一个 BMS 通信超时、一个踏板合理性、一个 HVIL 断开完整闭环做出来,再扩展到几十个 VCU 故障,思路就会清楚很多。

相关学习资源

1. STM32嵌入式软件MBD开发实例:适合理解模型到嵌入式部署、PIL/HIL和接口联调。
2. Simulink仿真及代码生成技术入门到精通:适合系统补齐 Simulink、Stateflow、代码生成和测试闭环。
3. Simulink/Stateflow建模规范:适合把诊断状态机、接口和命名做成团队可维护风格。
4. 入职HIL岗位后,如何快速转岗到电控软件开发:适合继续理解 HIL、故障注入和电控开发能力迁移。

参考资料

1. ISO 14229-1:2026 Road vehicles - Unified diagnostic services (UDS) - Part 1: Application layer
2. AUTOSAR Standard Features - Diagnostic
3. AUTOSAR WG-DIA Diagnostics Working Group
4. ASAM MCD-2 D / ODX

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
持续学习 未来有你
基于场景 解决问题
项目合作联系微信:Hyowinners
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|MBD全栈技术学校|苏ICP备2025212294号-1|Hyowinner校长B站首页|手机版|小黑屋|Hyowinner的MBD技术论坛

GMT+8, 2026-10-15 21:59 , Processed in 0.119758 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表