de_DEen_USes_ESfa_IRfr_FRhi_INid_IDjapl_PLpt_PTru_RUvizh_CNzh_TW

系统建模语言版本2(SysML v2)标志着系统工程的一次重大转变。通过摆脱SysML v1中基于UML的僵化图形约束,SysML v2引入了以语言驱动的文本语法。这种语法将结构、行为、需求和分析视为深度集成的文本元素。

本全面指南通过一个具体的自主无人机设计实例,来解析SysML v2的核心支柱、概念和语法。

The core pillars, concepts, and syntax of SysML v2 using a concrete AutonomousDrone example


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 {

目标坐标;

输出 任务状态;

动作 起飞;

然后 动作 航向;

然后 动作 降落;

}

}

}