Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
在工业自动化领域,顺序控制无处不在:从饮料灌装线的瓶体传送、化工反应釜的温控批次,到电梯调度和水处理流程——所有这些场景的共同需求是:用清晰、无歧义的方式描述”什么时候该做什么,下一步去哪里”。IEC 60848 定义的 GRAFCET(GRAphe Fonctionnel de Commande Etape-Transition,即”步-转换控制功能图”)正是为这一需求而生的国际标准图形化规范语言。本文基于 IEC 60848:2013 版,系统介绍 GRAFCET 的核心概念、与 IEC 61131-3 SFC 的关系,并从工程设计视角给出实用指南。
GRAFCET 图由以下基本要素构成,它们交替排列,形成”步-转换-步-转换…”的链式结构:
| 要素 | 图形表示 | 含义 | 工程注记 |
|---|---|---|---|
| 步 (Step) | 带编号的方框,初始步为双线框 | 系统的一个”状态”,在此状态下执行关联的动作 | 步的编号建议从 0 开始,初始步必须存在且唯一(特殊情况除外) |
| 转换 (Transition) | 横跨连线的短横线 | 从前序步进入后续步的条件 | 转换条件可以是布尔表达式、时间条件(如 t1/X10/5s)或边沿检测(↑S1) |
| 有向连线 (Arc) | 带箭头的竖线/折线 | 连接步与转换,规定演化方向(默认自上而下) | 非默认方向必须标注箭头;交叉点用”·”表示逻辑”与”分叉 |
| 动作 (Action) | 附着于步右侧的矩形 | 步激活时执行的操作(输出置位、变量赋值、延时等) | 动作可附带限定符(qualifier),如 N(非存储型)、S(置位)、R(复位)、L(限时)、D(延迟)、P(脉冲) |
| 宏步 (Macro-step) | 带”M”前缀的大方框 | 将一组子步封装为一个可复用的层次模块 | 宏步的展开图必须包含”入口步”和”出口步”各一个,极大提升复杂系统的可读性 |
| 包围步 (Enclosing Step) | 带”*”的步符号 | 其内部嵌套了另一个完整的 GRAFCET 图 | 用于表述多层级控制系统或强制/使能子结构 |
| 定向动作与强制 | 动作块中标明目标 GRAFCET 图名 | 强制(F/)或使能(E/)另一个独立 GRAFCET 图的执行状态 | 强制是最强干预——接收方无论当前在哪一步,直接跳转到被强制的步号 |
GRAFCET 的执行遵循五条基本演化规则,这是其区别于普通流程图的核心所在:
这是工程实践中被问得最多的问题:“GRAFCET 和 SFC(Sequential Function Chart)是不是一回事?”答案是:有亲缘关系,但定位不同。
IEC 60848 GRAFCET 是一个独立于实现的规范语言。它不依赖任何特定的 PLC 平台或编程语言,纯粹面向控制工程师进行逻辑规格定义。它起源于法国 AFCET 在 1977 年提出的 Grafcet,后经 IEC 标准化(首版 1988 年,2013 年为第二版)。
IEC 61131-3 SFC 则是 PLC 编程语言标准中定义的一种实现语言。SFC 的元素(步、转换、动作块)直接映射为可执行代码,与梯形图(LD)、结构化文本(ST)等其它 IEC 61131-3 语言共用一套运行时框架。SFC 的语法源于 GRAFCET,但加入了更多工程实现细节(如动作限定符的精确语义、扫描周期绑定等)。
| 特性 | IEC 60848 GRAFCET | IEC 61131-3 SFC |
|---|---|---|
| 定位 | 规范语言 (specification) | 实现语言 (implementation) |
| 标准化版本 | 1988 / 2013 (Ed.1 / Ed.2) | 1993 / 2003 / 2013 (包含在 61131-3 中) |
| 动作限定符 | N, S, R, L, D, P, C, A, SD, SL, DS | N, R, S, L, D, P, SD, DS, SL, P0, P1 |
| 层级控制(强制/使能) | ✓ 完整的 F/ E/ 语义 | Δ 取决于特定 PLC 实现 |
| 宏步 | ✓ 标准定义 | ✓ 支持(SFC 动作块可调用子 SFC) |
| 时间/边沿条件 | 内置语法:t1/X5/3s、↑S2 | 通过转换条件中的布尔变量实现 |
| 设计目标 | 人与机器共读的规格文档 | 机器执行的工业控制程序 |
面对一份 50 页的工艺规程(如”全自动 CIP 清洗系统”),如何高效抽取 GRAFCET 模型?推荐以下步骤:
陷阱 1:不稳定步(Unstable Step)——某步的转换条件在步激活时就已经为真,导致该步”一闪而过”,观察不到。解决方案:将转换条件改为需要上升沿触发(使用 ↑ 操作符),或在步的动作中先复位该条件。
陷阱 2:死锁分支(Deadlock)——并行分支的汇合处需要所有前置步都激活才能通过,若某条分支因故障提前终止,整个汇合点永远等不到。解决方案:添加”超时+强制跳转”的看门狗结构。
陷阱 3:意外的非确定性——当两个互斥的转换条件同时为真时,选择哪个分支的规则在 GRAFCET 中是从左到右的优先级(图形化隐含),但如果依赖这个顺序而不加以明确互锁,换一个工程师修改图形布局就可能改变行为。最佳实践是让互斥分支的条件在逻辑上天然互斥(如 temp ≥ 80 和 temp < 80)。
| 限定符 | 名称 | 行为 | 典型应用场景 |
|---|---|---|---|
| N | 非存储型 | 步激活期间动作持续执行,步失活时停止 | 电机运转、阀门保持、指示灯点亮 |
| S | 置位(存储型) | 步激活时将动作置为 ON,步失活后保持 ON | 锁定状态信号、报警锁定 |
| R | 复位 | 步激活时将之前 S 置位的动作复位为 OFF | 清除锁定报警、复位计数器 |
| L | 限时 | 步激活后动作持续不超过指定时长 | 冲洗定时、预润滑 |
| D | 延迟 | 步激活后延迟指定时长再执行动作 | 星三角启动延时、预吹扫 |
| P | 脉冲 | 步激活时产生一个扫描周期的脉冲 | 计数器递增、数据锁存、事件触发 |
| C | 条件型 | 动作仅在步激活且附加布尔条件为真时执行 | 条件加热、可选搅拌 |
Q1: GRAFCET 到底是一种编程语言,还是一种设计工具?
GRAFCET 从根本上是一个规范语言(Specification Language),不是编程语言。它的设计目的是让控制工程师在编写任何代码之前,先以图形化的方式精确定义系统的顺序行为。当然,许多 PLC 编程环境允许你直接根据 GRAFCET 图生成 SFC 代码,但标准本身并不依赖于任何具体的编程语言或平台。
Q2: 我的 PLC 只支持梯形图,GRAFCET 对我还有用吗?
非常有用。你完全可以用 GRAFCET 来设计控制逻辑,然后手工将步/转换/动作翻译为梯形图中的”步号线圈+互锁接点”模式(即经典的”步进梯形图”)。事实上,许多经验丰富的 PLC 工程师即使在纯梯形图环境中,也会先在纸上画 GRAFCET 图,因为图形化的表达比梯形图更容易审查和沟通。
Q3: 如何处理紧急停止?GRAFCET 有规定吗?
IEC 60848 建议使用层级化 GRAFCET 结构:一个顶层的”模式管理”GRAFCET 图通过强制指令统管各子系统的 GRAFCET 图。当急停触发时,高层图向所有子系统发出强制跳到安全状态的命令。重要的是,急停本身应同时作用于硬接线安全回路——GRAFCET 的强制只是逻辑层面的补充,不能替代安全 PLC 或安全继电器的硬接线。
Q4: GRAFCET 适合描述连续过程控制(如 PID 调节)吗?
不太适合。GRAFCET 的本质是离散事件系统的建模工具——它描述的是”状态序列”而非”连续变量演变”。对于 PID 回路、模拟量连续调节,GRAFCET 可以用来管理”模式切换”(如升温/保温/降温阶段),但每个阶段内部的连续控制算法(PID 参数、设定值曲线等)应在动作块中通过调用结构化文本或功能块来实现。