采样中 采样中 --> 数据处理 数据处理 --> 采样中 } state \"故障状态 (Fault)\" as Fault { [*] --> 诊断中 诊断中 --> 锁定输出: 保护下游 锁定输出 --> 等待维修 } state \"维修模式 (Maintenance)\" as Maint { [*] --> 识别FRU 识别FRU --> 更换模块: 拔插操作 更换模块 --> 自动自检: 握手通信 自动自检 --> [*] } %% 状态流转逻辑 Measure --> Fault: 监测到光强过低 (光源老化) Fault --> Maint: 运维人员到达,切换至维修模式 note right of Maint 这里体现 FRU 的优势: 不需要焊接,不需要示波器 换完自动握手 end note Maint --> Measure: 自检通过,系统复位 核心语法要素 开头结尾画只眼 [*], 箭头必须两横线 -->, 名字太长用别名 as, 条件说明加冒号 :\n"> Mermaid状态图 采样中 采样中 --> 数据处理 数据处理 --> 采样中 } state \"故障状态 (Fault)\" as Fault { [*] --> 诊断中 诊断中 --> 锁定输出: 保护下游 锁定输出 --> 等待维修 } state \"维修模式 (Maintenance)\" as Maint { [*] --> 识别FRU 识别FRU --> 更换模块: 拔插操作 更换模块 --> 自动自检: 握手通信 自动自检 --> [*] } %% 状态流转逻辑 Measure --> Fault: 监测到光强过低 (光源老化) Fault --> Maint: 运维人员到达,切换至维修模式 note right of Maint 这里体现 FRU 的优势: 不需要焊接,不需要示波器 换完自动握手 end note Maint --> Measure: 自检通过,系统复位 核心语法要素 开头结尾画只眼 [*], 箭头必须两横线 -->, 名字太长用别名 as, 条件说明加冒号 :\n"> 采样中 采样中 --> 数据处理 数据处理 --> 采样中 } state \"故障状态 (Fault)\" as Fault { [*] --> 诊断中 诊断中 --> 锁定输出: 保护下游 锁定输出 --> 等待维修 } state \"维修模式 (Maintenance)\" as Maint { [*] --> 识别FRU 识别FRU --> 更换模块: 拔插操作 更换模块 --> 自动自检: 握手通信 自动自检 --> [*] } %% 状态流转逻辑 Measure --> Fault: 监测到光强过低 (光源老化) Fault --> Maint: 运维人员到达,切换至维修模式 note right of Maint 这里体现 FRU 的优势: 不需要焊接,不需要示波器 换完自动握手 end note Maint --> Measure: 自检通过,系统复位 核心语法要素 开头结尾画只眼 [*], 箭头必须两横线 -->, 名字太长用别名 as, 条件说明加冒号 :\n">

Mermaid状态图

示例代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
stateDiagram-v2
    [*] --> 正常运行(Measure)

    state "正常运行 (Measure)" as Measure {
        [*] --> 采样中
        采样中 --> 数据处理
        数据处理 --> 采样中
    }

    state "故障状态 (Fault)" as Fault {
        [*] --> 诊断中
        诊断中 --> 锁定输出: 保护下游
        锁定输出 --> 等待维修
    }

    state "维修模式 (Maintenance)" as Maint {
        [*] --> 识别FRU
        识别FRU --> 更换模块: 拔插操作
        更换模块 --> 自动自检: 握手通信
        自动自检 --> [*]
    }

    %% 状态流转逻辑
    Measure --> Fault: 监测到光强过低 (光源老化)
    
    Fault --> Maint: 运维人员到达,切换至维修模式
    note right of Maint
        这里体现 FRU 的优势:
        不需要焊接,不需要示波器
        换完自动握手
    end note

    Maint --> Measure: 自检通过,系统复位
stateDiagram-v2 [*] --> 正常运行(Measure) state "正常运行 (Measure)" as Measure { [*] --> 采样中 采样中 --> 数据处理 数据处理 --> 采样中 } state "故障状态 (Fault)" as Fault { [*] --> 诊断中 诊断中 --> 锁定输出: 保护下游 锁定输出 --> 等待维修 } state "维修模式 (Maintenance)" as Maint { [*] --> 识别FRU 识别FRU --> 更换模块: 拔插操作 更换模块 --> 自动自检: 握手通信 自动自检 --> [*] } %% 状态流转逻辑 Measure --> Fault: 监测到光强过低 (光源老化) Fault --> Maint: 运维人员到达,切换至维修模式 note right of Maint 这里体现 FRU 的优势: 不需要焊接,不需要示波器 换完自动握手 end note Maint --> Measure: 自检通过,系统复位

核心语法要素

开头结尾画只眼 [*] 箭头必须两横线 --> 名字太长用别名 as 条件说明加冒号 :

  • 起点与终点:[*],这是状态图的标志性符号
    • 放在开头:表示“系统启动”。
    • 放在结尾:表示“系统关机”或“流程结束”。
  • 流转箭头:-->
    • 注意!Mermaid 的状态图箭头必须是 两个横杠 -->
  • 状态描述:冒号 :
    • 如果你想解释“为什么”会从 A 变成 B,就在箭头后面加冒号
    • 格式:状态A --> 状态B : 触发条件
  • 别名法
    • 给状态起个简单的英文代号(ID),然后在引号里写复杂的中文名字
    • 语法: state "复杂的中文名字" as ID

避坑指南

  • 坑 1:方向没控制好,状态图默认是从上到下(Top-Bottom),如果流程很长,图会变得巨长无比
    • 解决: 在第一行加上 direction LR (Left to Right)。
  • 坑 2:忘记闭环
    • 状态图最怕“死胡同”。比如:状态到了“故障”,然后就没下文了。
    • 逻辑检查: 故障修好了去哪?要画一条线指回“正常”或指像“结束 [*]”。
  • 坑 1:箭头少画一横
    • ❌ 错误:A -> B
    • ✅ 正确:A --> B
Licensed under CC BY-NC-SA 4.0