Mermaid (代码转流程图)语法详解

目录

Mermaid 语法详解

基本语法结构

1. 图声明

A
B

2. 方向定义

代码 方向 说明
TD 或 TB 从上到下 Top to Bottom
BT 从下到上 Bottom to Top
LR 从左到右 Left to Right
RL 从右到左 Right to Left

节点定义

基本节点

矩形节点
圆角矩形
体育场形
子程序形
圆柱形
圆形
菱形
六边形
平行四边形
反向平行四边形
梯形
反向梯形

对应代码:

复制代码
flowchart LR
    id1[矩形节点]
    id2(圆角矩形)
    id3([体育场形])
    id4[[子程序形]]
    id5[(圆柱形)]
    id6((圆形))
    id8{菱形}
    id9{{六边形}}
    id10[/平行四边形/]
    id11[\反向平行四边形\]
    id12[/梯形\]
    id13[\反向梯形/]

带文本的节点

这是矩形节点

支持多行文本
圆角

多行
判断

节点

代码:

复制代码
flowchart LR
    A[这是矩形节点<br>支持多行文本]
    B(圆角<br>多行)
    C{判断<br>节点}

连接线语法

基本连接
带文本的连接
A
B
C
D
E
F
G
H

代码:

复制代码
flowchart LR
    A --> B
    C -- 带文本的连接 --> D
    E --- F
    G ==> H

连接线类型
带文字
虚线带文字
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T

代码:

复制代码
flowchart LR
    A --> B           # 实线箭头
    C --- D           # 实线无箭头
    E -- 带文字 --- F # 实线带文字
    G ==> H           # 粗箭头
    I -.-> J          # 虚线箭头
    K -. 虚线带文字 .-> L
    M --o N           # 圆头箭头
    O --x P           # 叉箭头
    Q o--o R          # 双向圆头
    S x--x T          # 双向叉箭头

多节点连接

A
B
C
D
E
F
G

代码:

复制代码
flowchart LR
    A --> B & C --> D  # 一个节点连接多个
    E --> F
    E --> G            # 分别连接

子图(Subgraph)

基本子图

条件1
条件2
子图2
处理3
处理4
子图1
处理1
处理2
开始
判断
结束

代码:

复制代码
flowchart TD
    A[开始] --> B{判断}
    
    subgraph SG1 [子图1]
        C[处理1]
        D[处理2]
    end
    
    subgraph SG2 [子图2]
        E[处理3]
        F[处理4]
    end
    
    B -->|条件1| SG1
    B -->|条件2| SG2
    SG1 --> G[结束]
    SG2 --> G

子图方向

子图2
F
G
H
子图1
C
D
E
A
B

代码:

复制代码
flowchart TD
    A --> B
    
    subgraph one [子图1]
        direction LR
        C --> D
        D --> E
    end
    
    subgraph two [子图2]
        direction RL
        F --> G
        G --> H
    end
    
    B --> one
    one --> two

条件分支和循环

条件判断



开始
条件判断
处理A
结束
处理B

代码:

复制代码
flowchart TD
    Start[开始] --> Condition{条件判断}
    
    Condition -->|是| ProcessA[处理A]
    ProcessA --> End[结束]
    
    Condition -->|否| ProcessB[处理B]
    ProcessB --> End

循环结构



开始
初始化
条件满足?
处理过程
更新条件
结束

代码:

复制代码
flowchart TD
    Start[开始] --> Init[初始化]
    Init --> Condition{条件满足?}
    
    Condition -->|是| Process[处理过程]
    Process --> Update[更新条件]
    Update --> Condition
    
    Condition -->|否| End[结束]

样式自定义

节点样式

默认样式
红色填充
蓝色边框

代码:

复制代码
flowchart LR
    A[默认样式]
    B[红色填充]:::red
    C[蓝色边框]:::blue
    
    classDef red fill:#f96,stroke:#333,stroke-width:2px
    classDef blue fill:#66f,stroke:#333,stroke-width:2px,color:#fff

连接线样式

红色粗线
虚线
A
B
C
D

代码:

复制代码
flowchart LR
    A -->|红色粗线| B
    C -.->|虚线| D
    
    linkStyle 0 stroke:#f00,stroke-width:4px
    linkStyle 1 stroke:#0f0,stroke-dasharray: 5 5

实际应用示例

LIN休眠唤醒流程图

下面是之前LIN休眠唤醒流程的完整代码示例:
从节点唤醒流程
主节点唤醒流程
休眠过程
需要唤醒网络
超时内发送
超时未发送
主节点发送休眠帧

0x3C 0x00
主节点唤醒
从节点唤醒
正常通信状态
所有节点接收到休眠帧
节点MCU准备休眠
关闭收发器或切至低功耗模式
休眠状态

总线隐性 功耗极低
唤醒源类型?
主节点MCU控制收发器

发送同步间隔场
同步间隔场唤醒所有节点
主节点继续发送同步场/数据场

启动正常通信
从节点MCU控制收发器

发送>150μs显性脉冲
唤醒脉冲唤醒所有节点
主节点被唤醒后

在规定时间内发送同步间隔场
所有从节点接收到同步间隔场

网络通信恢复
唤醒失败

从节点记录错误/重试

代码:

复制代码
flowchart TD
    A[正常通信状态] -->|主节点发送休眠帧<br>0x3C 0x00| B
    subgraph B [休眠过程]
        direction LR
        B1[所有节点接收到休眠帧] --> B2[节点MCU准备休眠]
        B2 --> B3[关闭收发器或切至低功耗模式]
    end
    B3 --> C[休眠状态<br>总线隐性 功耗极低]
    
    C -->|需要唤醒网络| D{唤醒源类型?}
    
    D -->|主节点唤醒| E
    subgraph E [主节点唤醒流程]
        direction LR
        E1[主节点MCU控制收发器<br>发送同步间隔场] --> E2[同步间隔场唤醒所有节点]
        E2 --> E3[主节点继续发送同步场/数据场<br>启动正常通信]
    end
    
    D -->|从节点唤醒| F
    subgraph F [从节点唤醒流程]
        direction LR
        F1[从节点MCU控制收发器<br>发送>150μs显性脉冲] --> F2[唤醒脉冲唤醒所有节点]
        F2 --> F3[主节点被唤醒后<br>在规定时间内发送同步间隔场]
        F3 -->|超时内发送| F4[所有从节点接收到同步间隔场<br>网络通信恢复]
        F3 -->|超时未发送| F5[唤醒失败<br>从节点记录错误/重试]
    end
    
    E3 --> A
    F4 --> A
    
    classDef process fill:#e1f5fe,stroke:#01579b,stroke-width:2px
    classDef decision fill:#fff3e0,stroke:#ef6c00,stroke-width:2px
    classDef state fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px
    
    class A,E3,F4 state
    class D decision
    class B,E,F process

常见问题与技巧

1. 文本换行

使用

标签或 \n 进行换行:

复制代码
A[第一行<br>第二行]
B[第一行\n第二行]

2. 特殊字符转义

使用HTML实体或引号包裹:

复制代码
A["双引号: \"文本\""]
B[小于号: &lt;]
C[大于号: &gt;]

3. 注释

使用 %% 添加注释:

复制代码
flowchart TD
    %% 这是一条注释
    A --> B

4. 节点ID命名规则

只能包含字母、数字、下划线、连字符

不能以数字开头

区分大小写

5. 最佳实践

保持简洁:流程图不要过于复杂

统一风格:相同类型的节点使用相同样式

合理分组:使用子图将相关步骤分组

明确方向:根据流程复杂度选择合适的方向

相关推荐
楼田莉子1 分钟前
Linux网络:TCP协议
linux·运维·服务器·网络·tcp/ip
攻城狮在此22 分钟前
华三交换机如何清除Console口密码
网络
芯智工坊33 分钟前
第8章 Mosquitto消息高级特性
网络·人工智能·mqtt·开源·ssl
rOuN STAT38 分钟前
PLC(电力载波通信)网络机制介绍
开发语言·网络·php
数据知道1 小时前
claw-code 源码详细分析:命令宇宙 vs 工具宇宙——`commands` / `tools` 镜像清单如何驱动路由与 shim 执行?
linux·服务器·网络·python·ai·claude code
婷婷_1721 小时前
DWC Ethernet QoS VLAN功能实现详解
网络·学习·程序人生·ethernet·芯片·vlan·gmac
测试摆渡媛1 小时前
UDS诊断
网络
minji...1 小时前
Linux 多线程(三)线程控制,线程终止,线程中的异常问题
linux·运维·服务器·开发语言·网络·算法
Benszen1 小时前
一些存储类型
网络·网络协议·rpc
vortex51 小时前
一文厘清DDoS与CC攻击
网络·网络安全·渗透测试·ddos