什麼是時序圖?
一個時序圖 是一種專門的行為UML 圖 用於視覺化狀態的確切持續時間,以及沿線性時間軸狀態變化的精確條件。作為統一建模語言(UML)規範的重要組成部分,這種特定的UML 圖類型 非常重視硬性時間約束、時鐘週期和波形信號。它追蹤波形或階梯線,以精確說明物件在特定狀態下持續的時間,直到外部觸發器改變其狀態。
時序圖廣泛應用於嵌入式系統工程師、網路協定開發人員和硬體架構師,用於模擬競爭條件、追蹤執行緒生命週期的變化,或繪製硬體暫存器的狀態轉移。透過VPasCode,您不必手動計算像素寬度或設定時間軸座標。我們的渲染引擎會根據您的純文字腳本自動處理整個時間網格。
核心語法指南:元素與構造
要在 PlantUML 中設計出準確且符合標準的 UML 時序圖,您需要掌握參與者類型、狀態定義、時間間隔和同步約束。
1. 聲明參與者(強健式與簡潔式)
您可以根據系統所需的細節程度,使用兩種不同的視覺風格來建模時間軸。您必須使用明確的關鍵字來宣告它們:
- 強健式時間軸: 將狀態顯示為獨立且堆疊的列。適用於高階軟體流程。
robust "應用程式執行緒" as Thread - 簡潔式時間軸: 將狀態顯示在單一平面上,使用交叉陰影方塊表示變更。非常適合緊湊的硬體信號圖。
concise "CPU 暫存器" as Reg
2. 定義狀態轉換與時間步驟
與其他圖表不同,您透過使用@ 符號,引用您的參與者,並使用is 關鍵字來變更狀態。包含空格或特殊字元的狀態名稱必須用引號包覆:
@0
Thread is Idle
@10
Thread is "處理資料"
3. 產生時鐘信號
要模擬二進位硬體時鐘,請使用 clock 關鍵字。您必須指定一個週期週期、一個可選的佔空比,以及一個內部名稱:
clock "系統時鐘" as CLK with period 2
4. 添加精確約束和時間時程
為了記錄嚴格的執行截止時間(例如確保系統轉換在指定時間窗內發生),請使用 <-> 語法,以描述性標籤連接兩個時間座標:
@10 <-> @40 : {小於 30ms}
清晰時序佈局的最佳實務
- 保持時間單位一致: PlantUML 將時間軸整數視為通用的順序步驟。為您的專案選擇一致的時間單位(例如,時脈、微秒或秒),並持續保持一致。
- 為複雜轉換使用標籤: 您可以在狀態變更後立即加上冒號,直接附加文字訊息(例如,
@10nReg 正在讀取 : "觸發中斷"). - 策略性地排列宣告: PlantUML 會以完全相同的順序垂直堆疊生命線。請始終將您的主時鐘放在最上方,以便於對齊。
真實世界的 PlantUML 時序圖範例
範例 1:微控制器快取與暫存器狀態(簡潔且時鐘波形)
此可執行藍圖展示了典型的嵌入式硬體工程時間軸,同時運行標準系統時鐘與簡潔的資料儲存暫存器,用以追蹤硬體狀態。
@startuml
clock "系統時鐘 (CLK)" as clk with period 2
concise "資料匯流排暫存器" as Reg
@0
Reg 為空
@2
Reg 正在讀取 : "取得"
@6
Reg 正在寫入
@10
Reg 已鎖定
@14
Reg 為空
@enduml 
語法解析: 這 clock 指令會自動產生有節奏的高低方波。這 Reg 這行用於在絕對時間軸網格上順序處理多個狀態指派。附加冒號的文本字串(例如: "取得") 會以整齊的註解形式直接顯示在轉換邊界線之上。
範例 2:非同步 Web 消費者權杖重新整理(強健的多執行緒限制)
此進階且完全功能齊全的軟體架構藍圖,利用強健的佈局格式來追蹤多執行緒 Web 應用程式的工作流程,精確地映射 Web 客戶端與授權工作程式之間的時序截止時間。
@startuml
robust "Web 瀏覽器客戶端" as Web
robust "授權權杖工作程式" as Auth
@0
Web 為閒置狀態
Auth 為睡眠狀態
@5
Web 等待權杖
Auth 正在驗證
@15
Auth 正在產生
@15 <-> @25 : {產生期間}
@25
Auth 為睡眠狀態
Web 正在渲染頁面
@40
Web 為閒置狀態
@enduml 
語法解析: 透過使用robust 聲明,狀態會在每個獨立的生命線列上乾淨地列出於 Y 軸。時間評估限制(@15 <-> @25 : {產生期間}) 會在時間軸網格上方繪製標準的雙向尺寸箭頭,表示嚴格的操作限制。