3、需求分析:制动控制系统的功能需求、非功能需求与文档编写

好,我们进入第三章。这一章聊需求分析。

说实话,很多工程师觉得需求分析是「产品经理的事」,跟我搞软件的没关系。我年轻时也这么想。直到有一次,我按着模糊的需求把代码写完了,结果台架测试时发现——制动响应慢了50毫秒。嗯,50毫秒,在制动系统里,可能就是一场事故的距离。

所以,需求分析不是走形式。它是整个制动控制软件的「宪法」。后面所有的架构设计、模块划分、代码实现,都得围着它转。

3.1 制动控制系统的功能需求

功能需求,说白了就是「系统要干什么」。制动控制系统的核心功能,我归纳为以下几条:

  • 基础制动控制:根据驾驶员踩下制动踏板的行程,计算出目标制动压力,并控制液压单元执行。这是最根本的功能,不能有任何闪失。
  • 防抱死制动(ABS):在紧急制动时,防止车轮完全抱死。我参与过一个项目,ABS介入的时机判断错了0.1秒,结果测试车在湿滑路面上直接侧滑出去。嗯,从那以后我对轮速信号的滤波算法格外敏感。
  • 电子制动力分配(EBD):根据车辆载荷和前后轴附着力,动态分配前后轮的制动力。说白了,就是让车在刹车时不「点头」太厉害,同时保持稳定。
  • 车身稳定控制(ESC):通过主动对单个车轮施加制动力,纠正车辆的横摆力矩。这个功能对实时性要求极高,后面我们会细说。
  • 再生制动协调:对于新能源车,需要协调电机的再生制动和液压制动。我见过一个案例,再生制动退出时液压制动没有及时补上,导致制动踏板「空行程」——驾驶员感觉像踩空了,非常吓人。

我的经验:功能需求一定要写清楚「触发条件」和「退出条件」。比如ABS,不能只说「在紧急制动时激活」,要写明:轮速减速度超过阈值且滑移率超过15%时激活,车速低于5km/h时退出。否则,测试用例都没法写。

3.2 制动控制系统的非功能需求

非功能需求,是「系统要干得多好」。制动系统是安全件,非功能需求比功能需求更致命。我重点讲三个:实时性、安全性、可靠性。

3.2.1 实时性

制动控制是典型的硬实时系统。什么叫硬实时?就是错过截止时间,等于系统失效。

我列一个典型的实时性指标表,供你参考:

功能模块 控制周期 最大允许延迟 备注
基础制动控制 2ms 1ms 踏板信号采样到执行器响应
ABS控制 5ms 2ms 轮速信号处理到电磁阀动作
ESC控制 10ms 5ms 横摆角速度传感器到单轮制动
CAN通信 10ms 5ms 接收其他ECU的信号

你想想看,2ms的控制周期意味着什么?意味着你的主循环必须在2ms内跑完所有任务。如果某个函数执行时间超过500μs,你就得考虑把它拆开或者放到低优先级任务里。

避坑指南:我曾经在一个项目里,把轮速滤波算法写得太复杂了,一个周期跑了800μs。结果ABS控制周期被拖到了3ms以上,轮速信号出现了明显的相位滞后。后来我把滤波算法改成了滑动窗口平均,执行时间降到了150μs。嗯,有时候简单就是最好的。

3.2.2 安全性

制动系统的安全性,必须达到ASIL D等级(ISO 26262)。这意味着什么?

  • 单点故障容错:任何一个硬件或软件模块失效,系统必须能进入安全状态。比如,主MCU挂了,备份MCU必须在10ms内接管。
  • 故障检测覆盖率:对关键信号(如制动压力、轮速)必须有诊断机制。我习惯的做法是:每个传感器信号都做「合理性检查」——比如制动压力信号,如果变化率超过50bar/ms,基本可以判定传感器故障。
  • 安全状态定义:系统检测到故障后,要进入什么状态?是降级运行(比如只保留基础制动),还是完全关闭?我个人建议:对于制动系统,永远不要完全关闭。降级到「机械备份模式」是最稳妥的。

警告:安全需求不是写出来就完事了。它需要贯穿整个开发流程。我见过一个团队,安全需求文档写了200页,结果代码里连一个看门狗都没加。文档写得再好,代码不落地,等于零。

3.2.3 可靠性

可靠性,说白了就是「系统能稳定运行多久不失效」。对于制动系统,整车厂通常要求:

  • MTBF(平均无故障时间):不低于100,000小时
  • 使用寿命:与整车同寿命,通常15年或300,000公里
  • 环境适应性:温度范围-40°C到125°C,湿度95%RH,振动等级按ISO 16750

我特别想强调一点:可靠性不是测出来的,是设计出来的。你想想看,如果代码里用了动态内存分配,在高温下内存碎片化导致malloc失败,那系统就挂了。所以,制动控制软件里,我从来不用动态内存分配,全部静态分配。

3.3 需求文档的编写

好,需求分析完了,怎么把它写下来?

我个人习惯用「需求编号+需求描述+验收标准」的三段式结构。举个例子:

需求编号:REQ-BRK-ABS-001
需求描述:当车辆在直线行驶且车速大于10km/h时,系统应能检测到车轮抱死趋势,并在100ms内激活ABS控制。
验收标准:
  1. 在干沥青路面(附着系数0.8)上,以100km/h初速度紧急制动,ABS介入时间不超过100ms。
  2. 在湿滑路面(附着系数0.3)上,以60km/h初速度紧急制动,ABS介入时间不超过150ms。
  3. 任何单轮抱死持续时间不超过200ms。

为什么要写验收标准?因为需求不能模棱两可。你说「ABS要快速介入」,多快算快?100ms还是200ms?没有验收标准,开发和测试就会扯皮。

我的建议:需求文档最好用「需求管理工具」来维护,比如DOORS或者Polarion。别用Word。我见过一个项目,Word版本混乱,有人改了需求没通知其他人,结果开发按旧需求做,测试按新需求测,全乱套了。

另外,需求文档要分层次:

  • 系统级需求:整车厂给的定义,比如「制动距离不超过40m(100km/h初速度)」
  • 软件级需求:我们软件团队要实现的,比如「ABS控制周期为5ms」
  • 模块级需求:具体到某个模块的,比如「轮速信号滤波模块的截止频率为20Hz」

每一层需求都要可追溯。系统级需求分解到软件级,软件级再分解到模块级。这样,当整车厂问「你这个功能能不能满足制动距离要求」时,你可以直接追溯到对应的软件实现。

嗯,这一章的内容就到这里。需求分析是地基,地基打不牢,后面盖的楼再漂亮也没用。下一章,我们聊聊制动控制软件的顶层架构设计——怎么把需求变成模块。