2. 基于需求的功能模型接口定义

基于需求的功能模型接口定义 学习卡片

从一条功能需求到接口规范

假设需求条目为:REQ-F-002——“控制器接收车速传感器信号(单位 km/h,范围 0~240),按 10 ms 周期采样,输出限速后的车速值(单位 km/h)”。本节要做的不是实现限速算法,而是把这条需求翻译成 Simulink 模型可落地的接口定义:输入端口、输出端口、信号名称、数据类型、采样时间,并让每个接口都能回溯到需求编号。

接口定义的核心是“三定一溯”:定方向(Inport/Outport)、定类型(数据类型与维度)、定节拍(采样时间),并把每个接口挂到需求 ID 上。方向错了模型无法编译,类型错了会报类型不匹配,采样时间错了会引入代数环或速率转换错误。

接口规范表(可直接填写)

接口名方向数据类型维度单位采样时间需求追溯
VehSpd_rawInportsingle1km/h0.01 sREQ-F-002
VehSpd_limOutportsingle1km/h0.01 sREQ-F-002

说明:车速范围 0~240 用 single 足够(float32 有效精度约 7 位十进制,240 量级下分辨率远优于 0.01 km/h);若后续需要与定点 ECU 代码生成对齐,再在例 4 中改为 fixdt。采样时间 0.01 s 与需求“10 ms 周期”一致,输入输出同节拍可避免速率转换。

在 Simulink 中落地接口

新建模型后,按以下顺序设置,使接口属性成为模型的“契约”,而不是散落在各模块里:

  1. 放置 Inport 与 Outport 模块,双击分别把 Port name 改为 VehSpd_raw 和 VehSpd_lim。
  2. 在 Inport 的 Signal Attributes 页把 Port dimensions 设为 1,Data type 设为 single,Sample time 设为 0.01;Outport 同样设置,保证两端节拍一致。
  3. 用一条信号线连接 Inport 与 Outport(本节只验证接口,不实现算法),选中信号线,在 Signal Properties 中把信号名设为 VehSpd_raw,并勾选 Signal name must resolve to Simulink signal object 之前先不勾选,保持轻量。
  4. 打开 Model Configuration Parameters → Solver,把 Fixed-step size 设为 0.01,求解器选 Fixed-step / discrete (no continuous states),使模型基采样时间与接口一致。
  5. 在模型空白处右键 → Model Properties → Description,写入 REQ-F-002: 车速采集与限速输出接口,完成需求追溯锚点。
接口名建议采用“对象_属性”命名法(VehSpd_raw / VehSpd_lim),避免使用 in1、out1 这类默认名。默认名在后续子系统划分和代码生成时会变成难以追踪的变量名。

接口关系与追溯视图

需求条目 REQ-F-002 车速采集 0~240 km/h 10 ms 周期采样 Inport VehSpd_raw Outport VehSpd_lim 数据类型 single 维度 1 · 单位 km/h 采样时间 0.01 s 与需求 10 ms 对齐 信号线 VehSpd_raw 接口属性检查点 方向:Inport 接收传感器,Outport 输出限速值 类型:single 覆盖 0~240 km/h,无溢出风险 节拍:输入输出同为 0.01 s,避免速率转换 追溯:模型 Description 写入 REQ-F-002

验证接口是否定义正确

接口定义完成后,用以下方式确认,而不是只看模型能否打开:

  • 编译检查:按 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 中“先定接口、再填算法”的工程习惯。