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(Block / 元件):定義一個結構性、實體性或邏輯性的系統元件。

  • item def (流動項目): 定義非固定元件——例如資料流、流體、力量或電力——在零件之間流動。

介面與埠

  • 埠定義 (介面規格): 定義介面邊界,明確指出哪些資料或項目可以進入(in)或離開(out).

以下是這些元件在系統命名空間中宣告與嵌套的方式:

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 {
    // 實例化需求使用,以乾淨地滿足定義對應
    滿足需求 : RangeRequirement;
}


4. 行為支柱(執行空間)

SysML v1 強制將結構(內部區塊圖)與行為(活動圖)之間劃分得非常清楚。SysML v2 完全消除了這道障礙,透過將 動作與控制流程成為原生、在範圍內的結構元素.

順序動作與控制流程

使用 動作關鍵字,您可以宣告接受輸入(in) 並傳遞輸出(out)。控制流程使用 then關鍵字線性書寫,無需複雜的控制流程圖。

動作 executeMission {
    in targetCoordinates;
    out missionStatus;
    
    動作 sTakeoff;
    then 動作 sNavigate;
    then 動作 sLand;
}


5. 功能分配:將行為連結至結構

分配 回答系統工程的根本問題: 哪個組件執行哪個功能?

SysML v2 使用 perform關鍵字在零件使用區塊中處理此問題。使用 點表示法(.),您可以深入嵌套的動作迴圈,將操作直接對應至實體硬體。

零件定義 AutonomousDrone {

    // 子零件透過明確「執行」其分配的步驟來分配行為
    零件 flightController : FlightController {
        執行 executeMission.sNavigate;
    }
    
    零件 propulsionSystem : PropulsionSystem {
        執行 executeMission.sTakeoff;
    }

    // 內嵌行為定義
    動作 executeMission {
        動作 sTakeoff;
        then 動作 sNavigate;
        then 動作 sLand;
    }
}


 

核心關鍵字摘要

關鍵字 空間 用途
package 結構 定義一個容器命名空間,用於組織您的模型。
private import 結構 引入外部標準程式庫(例如 標量值國際單位制單位)納入範圍,而不會使其向下游洩漏。
定義 範式 表示可重複使用的藍圖或類型定義。
零件 / 項目 結構 宣告一個物理/邏輯元件,或流經系統的流體/資料流。
結構 建立一個介面邊界,定義輸入輸出流。
需求 問題 定義一個包含類型屬性和數學目標的文字合約。
滿足 關係 直接將結構元件連接到其所滿足的需求。
動作 執行 定義一個行為步驟或操作功能。
然後 執行 強制在動作之間按順序執行。
執行 分配 將行為動作直接映射到負責執行它的物理部分。

 

SysML V2 的完整範例:三大支柱

套件 飛行器系統範例 {

私有 匯入 數值類型::*;

私有 匯入 SI::*;

// ==========================================

// 基礎藍圖定義

// ==========================================

項目 定義 電力;

定義 電力輸出埠 {

輸出 項目 電力輸出 : 電力;

}

定義 電力輸入埠 {

輸入 項目 powerElec : 電力;

}

部分 定義 飛行控制器;

部分 定義 推進系統;

部分 定義 電池;

// ==========================================

// 1. 需求支柱(問題空間)

// ==========================================

需求 定義 範圍需求 {

文件 /* 遙控飛機必須維持至少45分鐘的連續飛行續航力。 */

屬性 續航目標 : 實數 = 45.0;

}

// ==========================================

// 2. 結構與行為支柱

// ==========================================

部分 定義 自主無人機 {

屬性 enduranceActual : 實數;

// 子部件透過明確地「執行」其分配的步驟來分配行為

部件 flightController : FlightController {

執行 executeMission.sNavigate;

}

部件 propulsionSystem : PropulsionSystem {

執行 executeMission.sTakeoff;

}

部件 powerSource : 電池;

// 接口連接

pBatteryOut : PowerOutPort;

pPropulsionIn : PowerInPort;

// FIX 1:實例化一個需求使用,以乾淨地滿足定義映射

滿足 需求 : 範圍需求;

// ==========================================

// 3. 行為支柱(執行空間)

// ==========================================

// 清晰、順序的動作定義,原生在作用域內

動作 executeMission {

targetCoordinates;

out missionStatus;

action sTakeoff;

then action sNavigate;

then action sLand;

}

}

}