4. 块定义图构建系统静态结构
从需求到静态结构:块定义图要解决什么
需求图回答“系统必须做什么”,块定义图(BDD)回答“系统由哪些静态结构承担这些需求”。本案例以一个“智能温控风扇系统”为建模对象,用 BDD 定义顶层块、组成块、属性、操作和关联关系,并检查块间接口的一致性。
BDD 的核心元素只有四类,先明确它们的语义边界,后续建模才不会混用:
- 块(Block):系统中承担职责的结构单元,如
ThermalControlSystem、TemperatureSensor、FanActuator。 - 属性(Property):块拥有的值属性或部件属性,如
samplePeriod : Real、sensor : TemperatureSensor。 - 操作(Operation):块可被请求的行为,如
readTemperature()、setDutyCycle()。 - 关联(Association):块与块之间的静态结构连接,可带多重性和角色名,如
ThermalControlSystem与TemperatureSensor之间的 1 对 1 关联。
建模对象与结构划分
本案例的静态结构划分为三层:顶层系统块、三个组成块、一个外部接口块。顶层块通过组合关系拥有组成块,组成块之间通过关联关系协作,外部接口块通过关联接入系统。
| 块名 | 类型 | 关键属性 | 关键操作 |
|---|---|---|---|
ThermalControlSystem | 顶层系统块 | targetTemp : Real、samplePeriod : Real | regulate() |
TemperatureSensor | 组成块 | rangeMin : Real、rangeMax : Real、accuracy : Real | readTemperature() |
Controller | 组成块 | kp : Real、ki : Real、dutyLimit : Real | computeDuty() |
FanActuator | 组成块 | maxRpm : Integer、pwmFreq : Real | setDutyCycle() |
PowerSupply | 外部接口块 | voltage : Real、currentMax : Real | supply() |
块定义图结构
下图给出本案例的 BDD 静态结构。实心菱形表示组合关系,普通实线表示关联关系,箭头方向表示关联的可导航方向。图中同时标注了每个块的关键属性、操作和关联端的多重性,便于后续检查接口一致性。
接口一致性检查
BDD 画完后,必须检查块间接口是否自洽。本案例的检查项和判断依据如下:
| 检查项 | 检查内容 | 通过条件 |
|---|---|---|
| 属性类型匹配 | TemperatureSensor.readTemperature() 返回 Real,Controller 接收的 tempValue 是否为 Real | 类型一致 |
| 操作参数匹配 | Controller.computeDuty() 输出 Real,FanActuator.setDutyCycle(d : Real) 参数为 Real | 参数类型一致 |
| 多重性一致 | Sensor 与 Controller 关联端均为 1,Controller 与 FanActuator 关联端均为 1 | 无 0..* 与 1 冲突 |
| 供电范围覆盖 | PowerSupply.voltage 是否覆盖 Sensor、Controller、FanActuator 的工作电压 | 电压范围包含各块需求值 |
| 操作可见性 | 关联可导航方向是否允许调用目标块的操作 | 箭头方向与调用方向一致 |
检查时优先看“类型”和“多重性”两类错误:类型不匹配会导致后续 IBD 中连接器无法绑定,多重性冲突会导致实例数量无法确定。这两类问题在 BDD 阶段修正的成本最低。
建模操作要点
- 先建顶层块
ThermalControlSystem,再建三个组成块,最后建外部接口块PowerSupply。 - 用组合关系把三个组成块挂到顶层块下,组合端多重性设为 1。
- 在 Sensor 与 Controller 之间、Controller 与 FanActuator 之间建立关联,设置角色名和多重性。
- 用虚线依赖表示 PowerSupply 对三个组成块的供电关系,标注
power角色。 - 逐个块填写属性和操作,属性类型使用 SysML 值类型(Real、Integer),操作标注返回类型和参数类型。
- 按上表逐项检查接口一致性,发现类型或方向不一致时回到对应块修正。
不要用关联关系代替组合关系。组合表示“整体—部分”的强拥有关系,部分不能脱离整体独立存在;关联只表示结构连接。混用会导致后续 IBD 中部件实例的归属关系错误。