2. 需求分析与Simulink模型接口定义
在V模型左侧,需求从整车级逐层分解到软件级,最终落到Simulink模型上。这一过程的核心不是“把需求抄进模型”,而是建立一条从系统需求到模型需求的可追溯链路,并明确模型边界、输入输出接口与信号字典。只有接口定义清晰,后续的模型实现、单元测试和集成测试才有稳定的基准。
从系统需求到模型需求的分解方法
系统需求通常以整车功能或子系统功能的形式出现,例如“车辆在车速低于30 km/h时,电机应输出不超过50 N·m的扭矩”。这类需求描述的是系统级行为,不能直接作为Simulink模型的输入。分解时,需要先识别该需求涉及的功能链:传感器采集、信号处理、控制算法、执行器输出。然后按“功能—接口—约束”三个维度逐层展开。
以电机控制为例,系统需求“根据加速踏板开度和车速计算目标扭矩”可以分解为:
- 功能需求:模型根据踏板开度(0~100%)和车速(0~200 km/h)查表得到基础扭矩请求。
- 接口需求:模型输入为踏板开度、车速、使能信号;输出为目标扭矩、扭矩有效标志。
- 约束需求:扭矩请求需经过斜率限制,上升率不超过200 N·m/s,下降率不超过500 N·m/s。
分解后的模型需求应具备可验证性:每个需求都能对应到模型中的一个子系统、一个信号或一个参数。例如“扭矩上升率不超过200 N·m/s”可以对应到Rate Limiter模块的上升斜率参数。这样,后续的测试用例可以直接从需求生成,而不是凭经验编写。
需求可追溯性
可追溯性要求每条模型需求都能向上追溯到系统需求,向下关联到模型元素和测试用例。在Simulink中,常用的做法是使用需求管理工具(如Simulink Requirements)将需求链接到模块、信号线或Stateflow状态。链接关系应至少覆盖三个方向:
- 向上追溯:模型需求 → 系统需求,确保没有凭空出现的模型功能。
- 向下追溯:模型需求 → 模块/信号/参数,确保每条需求都有实现载体。
- 测试追溯:模型需求 → 测试用例,确保每条需求都有验证手段。
实际操作中,可以在Simulink模型中为关键子系统添加需求链接。例如,在扭矩计算子系统的属性中链接到系统需求ID“SYS-MC-001”,在Rate Limiter模块上链接到模型需求ID“MDL-MC-007”。当需求变更时,通过追溯矩阵可以快速定位受影响的模块和测试用例。
输入输出接口与信号字典设计
接口定义是模型边界的具体化。一个清晰的接口应包含信号名称、数据类型、单位、取值范围、采样时间、初始值和描述。这些信息集中存放在信号字典中,作为模型和测试的共同数据源。
以车辆控制器为例,模型边界通常划分为三类接口:
- 输入接口:来自传感器或上游控制器的信号,如加速踏板开度、制动开关、车速、挡位。
- 输出接口:发送给执行器或下游控制器的信号,如目标扭矩、扭矩使能、故障状态。
- 标定接口:可调参数,如扭矩查表MAP、斜率限制值、滤波系数。
信号字典的设计应遵循命名规范。例如,输入信号以“In_”开头,输出信号以“Out_”开头,标定参数以“Cal_”开头。数据类型优先使用Simulink内置类型,如single、uint8、boolean,避免使用double造成不必要的资源消耗。单位统一采用国际单位制,并在信号名称或描述中标注,例如“In_AccPedal_Pct”表示踏板开度百分比。
以电机控制为例定义模型边界
假设我们要开发一个电机控制器模型,负责根据整车控制器(VCU)的扭矩请求和电机反馈信号,计算最终施加给电机的扭矩指令。模型边界可以这样定义:
- 输入:VCU_TorqueReq(N·m,范围-200~200)、Motor_Speed(rpm,范围-12000~12000)、Motor_Temp(℃,范围-40~150)、Enable(boolean)。
- 输出:Motor_TorqueCmd(N·m,范围-200~200)、TorqueValid(boolean)、DeratingFactor(0~1)。
- 标定:Cal_TorqueMap(转速-扭矩二维查表)、Cal_DeratingTemp(降额温度阈值)、Cal_RateLimitUp(N·m/s)、Cal_RateLimitDown(N·m/s)。
模型内部至少包含四个子系统:扭矩查表、温度降额、斜率限制、使能与故障处理。每个子系统的输入输出都应在信号字典中定义,并与模型边界接口保持一致。例如,扭矩查表子系统的输入是Motor_Speed和VCU_TorqueReq,输出是BaseTorque;温度降额子系统的输入是BaseTorque和Motor_Temp,输出是DeratedTorque;斜率限制子系统的输入是DeratedTorque,输出是Motor_TorqueCmd。
定义好边界后,还需要在Simulink中通过Inport、Outport和Signal Specification模块将接口固化。Inport模块的名称必须与信号字典中的输入信号名称一致,数据类型和采样时间也应在模块属性中设置。对于标定参数,可以使用Simulink.Parameter对象,并在数据字典中统一管理。这样,模型在编译时就能检查接口一致性,避免因信号名称拼写错误或数据类型不匹配导致的集成失败。
最后,模型边界定义完成后,应生成一份接口清单,作为模型与上下游团队的接口协议。接口清单至少包含信号名称、方向、数据类型、单位、范围、采样时间和描述。这份清单既是模型开发的输入,也是后续集成测试和故障排查的依据。