SysML v2 文本符号的权威指南
系统建模语言版本2(SysML v2)标志着系统工程的一次重大转变。通过摆脱SysML v1中基于UML的僵化图形约束,SysML v2引入了以语言驱动的文本语法。这种语法将结构、行为、需求和分析视为深度集成的文本元素。
本全面指南通过一个具体的自主无人机设计实例,来解析SysML v2的核心支柱、概念和语法。

1. 核心范式:定义与使用
SysML v2中最重要的架构概念是严格区分定义(蓝图)与使用(上下文实例)。
-
其中
def关键字:表示可重用的定义、类型或元素蓝图。它在被使用之前并不存在于物理实体中。 -
无
def关键字:表示使用。它代表特定父系统中的实际出现或组件实例。
// 定义:任何电池的可重用蓝图
part def Battery;
// 使用:我们无人机系统中一个特定的电池实例
part powerSource : Battery;
这种区分使工程师能够一次性定义一个组件,并在多个具有不同名称、配置和内部连接的子系统中重用它。
2. 结构架构:部件、项目和端口
SysML v2将物理或逻辑架构划分为组件、流经它们的实体以及连接它们的接口。
部件和项目
-
part def(块/组件):定义一个结构化、物理或逻辑的系统组件。 -
item def(流元素): 定义非固定元素——例如数据流、流体、力或电能——这些元素在部件之间流动。
端口和接口
-
端口定义(接口规范): 定义接口边界,明确指出哪些数据或项目可以进入(输入) 或退出(输出).
以下是这些组件在系统命名空间中声明和嵌套的方式:

package DroneSystemExample {
private import ScalarValues::*;
private import SI::*;
// 基础蓝图(定义)
item def Power;
port def PowerOutPort {
out item powerElec : Power;
}
port def PowerInPort {
in item powerElec : Power;
}
part def FlightController;
part def PropulsionSystem;
part def Battery;
// 集成系统上下文
part def AutonomousDrone {
// 属性 / 值属性
attribute enduranceActual : Real;
// 子部件使用(实例化定义)
part flightController : FlightController;
part propulsionSystem : PropulsionSystem;
part powerSource : Battery;
// 端口使用(实例化接口)
port pBatteryOut : PowerOutPort;
port pPropulsionIn : PowerInPort;
}
}
3. 需求支柱(问题空间)
在SysML v1中,需求通常是与工程数学隔离的文本块。在SysML v2中,需求是 一等文本定义 包含元数据、描述性文本以及强类型属性,用于自动化验证。
requirement def RangeRequirement {
doc /* 无人机必须保持至少45分钟的连续飞行续航时间。 */
attribute enduranceTarget : Real = 45.0;
}

可追溯性通过 满足
为了在问题空间(需求)和解决方案空间(结构)之间形成闭环,SysML v2使用显式的关联关键字,如 满足 直接在部件上下文中使用:
part def AutonomousDrone {
// 实例化一个需求使用,以清晰地满足定义映射
satisfy requirement : RangeRequirement;
}

4. 行为支柱(执行空间)
SysML v1强制将结构(内部块图)与行为(活动图)之间划清界限。SysML v2通过使 动作和控制流成为原生的、作用域内的结构元素.
顺序动作和控制流
使用 动作使用关键字,你可以声明接受输入(in)并传递输出(out)。控制流使用 then关键字线性编写,无需复杂的控制流图。
动作 executeMission {
输入 targetCoordinates;
输出 missionStatus;
动作 sTakeoff;
然后 动作 sNavigate;
然后 动作 sLand;
}
5. 功能分配:将行为与结构连接
分配回答了系统工程的基本问题:哪个组件执行哪个功能?
SysML v2 使用 perform关键字在部件使用块中清晰处理。使用 点号表示法(.),你可以深入嵌套的动作循环中,将操作直接映射到物理硬件上。
部件定义 AutonomousDrone {
// 子部件通过显式‘执行’其分配的步骤来分配行为
部件 flightController : FlightController {
执行 executeMission.sNavigate;
}
部件 propulsionSystem : PropulsionSystem {
执行 executeMission.sTakeoff;
}
// 内嵌行为定义
动作 executeMission {
动作 sTakeoff;
然后 动作 sNavigate;
然后 动作 sLand;
}
}

核心关键字概要
| 关键字 | 空间 | 用途 |
|---|---|---|
package |
结构性 | 定义一个容器命名空间,用于组织你的模型。 |
private import |
结构性 | 引入外部标准库(例如 标量值或国际单位制单位)引入作用域,而不会导致它们在下游泄露。 |
定义 |
范式 | 表示一个可重用的蓝图或类型定义。 |
部件 / 项目 |
结构性 | 声明一个物理/逻辑组件,或系统中流动的流体/数据流。 |
端口 |
结构性 | 建立一个接口边界,定义输入和输出流。 |
需求 |
问题 | 定义一个基于文本的合约,包含类型化属性和数学目标。 |
满足 |
关系 | 将一个结构性元素直接连接到其所满足的需求。 |
动作 |
执行 | 定义一个行为步骤或操作功能。 |
然后 |
执行 | 强制动作之间的执行顺序为顺序执行。 |
执行 |
分配 | 将行为动作直接映射到负责执行它的物理部分。 |
SysML V2 的完整示例:三大支柱

包 飞行器系统示例 {
私有 导入 标量值::*;
私有 导入 SI::*;
// ==========================================
// 基础蓝图定义
// ==========================================
项 定义 功率;
端口 定义 功率输出端口 {
输出 项 电功率 : 功率;
}
端口 定义 功率输入端口 {
输入 项目 powerElec : 功率;
}
部件 定义 飞行控制器;
部件 定义 推进系统;
部件 定义 电池;
// ==========================================
// 1. 需求支柱(问题空间)
// ==========================================
需求 定义 范围需求 {
文档 /* 无人机必须保持至少45分钟的连续飞行续航能力。 */
属性 续航目标 : 实数 = 45.0;
}
// ==========================================
// 2. 结构与行为支柱
// ==========================================
部件 定义 自主无人机 {
属性 enduranceActual : 实数;
// 子部件通过显式‘执行’其分配的步骤来分配行为
部件 飞行控制器 : 飞行控制器 {
执行 executeMission.sNavigate;
}
部件 推进系统 : 推进系统 {
执行 executeMission.sTakeoff;
}
部件 电源 : 电池;
// 接口连接
端口 pBatteryOut : 功率输出端口;
端口 pPropulsionIn : 功率输入端口;
// 修复 1:实例化一个需求使用,以干净地满足定义映射
满足 需求 : 范围需求;
// ==========================================
// 3. 行为支柱(执行空间)
// ==========================================
// 清晰、顺序的动作定义原生在作用域内
动作 executeMission {
在 目标坐标;
输出 任务状态;
动作 起飞;
然后 动作 航向;
然后 动作 降落;
}
}
}














