2. 基于需求的功能模型接口定义
从一条功能需求到接口规范
假设需求条目为:REQ-F-002——“控制器接收车速传感器信号(单位 km/h,范围 0~240),按 10 ms 周期采样,输出限速后的车速值(单位 km/h)”。本节要做的不是实现限速算法,而是把这条需求翻译成 Simulink 模型可落地的接口定义:输入端口、输出端口、信号名称、数据类型、采样时间,并让每个接口都能回溯到需求编号。
接口定义的核心是“三定一溯”:定方向(Inport/Outport)、定类型(数据类型与维度)、定节拍(采样时间),并把每个接口挂到需求 ID 上。方向错了模型无法编译,类型错了会报类型不匹配,采样时间错了会引入代数环或速率转换错误。
接口规范表(可直接填写)
| 接口名 | 方向 | 数据类型 | 维度 | 单位 | 采样时间 | 需求追溯 |
|---|---|---|---|---|---|---|
| VehSpd_raw | Inport | single | 1 | km/h | 0.01 s | REQ-F-002 |
| VehSpd_lim | Outport | single | 1 | km/h | 0.01 s | REQ-F-002 |
说明:车速范围 0~240 用 single 足够(float32 有效精度约 7 位十进制,240 量级下分辨率远优于 0.01 km/h);若后续需要与定点 ECU 代码生成对齐,再在例 4 中改为 fixdt。采样时间 0.01 s 与需求“10 ms 周期”一致,输入输出同节拍可避免速率转换。
在 Simulink 中落地接口
新建模型后,按以下顺序设置,使接口属性成为模型的“契约”,而不是散落在各模块里:
- 放置
Inport与Outport模块,双击分别把 Port name 改为VehSpd_raw和VehSpd_lim。 - 在 Inport 的 Signal Attributes 页把 Port dimensions 设为 1,Data type 设为
single,Sample time 设为0.01;Outport 同样设置,保证两端节拍一致。 - 用一条信号线连接 Inport 与 Outport(本节只验证接口,不实现算法),选中信号线,在 Signal Properties 中把信号名设为
VehSpd_raw,并勾选 Signal name must resolve to Simulink signal object 之前先不勾选,保持轻量。 - 打开 Model Configuration Parameters → Solver,把 Fixed-step size 设为
0.01,求解器选Fixed-step / discrete (no continuous states),使模型基采样时间与接口一致。 - 在模型空白处右键 → Model Properties → Description,写入
REQ-F-002: 车速采集与限速输出接口,完成需求追溯锚点。
接口名建议采用“对象_属性”命名法(VehSpd_raw / VehSpd_lim),避免使用 in1、out1 这类默认名。默认名在后续子系统划分和代码生成时会变成难以追踪的变量名。
接口关系与追溯视图
验证接口是否定义正确
接口定义完成后,用以下方式确认,而不是只看模型能否打开:
- 编译检查:按
Ctrl+D更新模型,若出现 “Data type mismatch” 或 “Sample time mismatch”,说明接口属性未对齐。 - 端口属性回读:在 MATLAB 命令窗口执行
get_param('模型名/Inport','CompiledPortDataTypes'),确认返回single;执行get_param('模型名/Inport','CompiledPortSampleTime'),确认返回0.01。 - 追溯检查:打开 Model Properties → Description,确认 REQ-F-002 已写入;后续例 4 配置信号对象时,可把需求 ID 写入信号对象的 Description 字段,形成可查询的追溯链。
常见错误:只改 Inport 的采样时间而忘记 Outport,导致模型在两端之间插入隐式 Rate Transition,仿真步长被自动调整,结果与 10 ms 需求不符。接口定义阶段必须两端同时设置。
可复用的接口定义检查清单
| 检查项 | 通过条件 | 不通过时的处理 |
|---|---|---|
| 端口命名 | 非 in1/out1,采用对象_属性命名 | 双击端口模块重命名 |
| 数据类型 | 与需求量程匹配,无溢出 | 调整 Data type 或改用定点 |
| 采样时间 | 输入输出一致且等于需求周期 | 两端同时改为 0.01 |
| 需求追溯 | 模型 Description 含需求 ID | 补充 REQ-F-002 |
| 编译结果 | Ctrl+D 无类型/节拍报错 | 按报错定位端口属性 |
完成以上设置后,模型虽然还没有限速算法,但接口契约已经成立:任何后续加入的算法模块都必须遵守 VehSpd_raw 进、VehSpd_lim 出、single 类型、0.01 s 节拍这四条约束。这正是 MBD 中“先定接口、再填算法”的工程习惯。