一、PLCopen基础认知:什么是PLCopen、IEC 61131-3标准概述、状态机编程思想入门
1.1 什么是PLCopen?——不只是个组织
说实话,我刚入行那会儿,也以为PLCopen是个什么高深的编程协议。后来才明白,它其实就是一个国际组织,专门干一件事:让不同品牌的PLC能说同一种「语言」。
PLCopen成立于1992年,总部在荷兰。它的目标很纯粹——制定统一的PLC编程标准。你想想看,如果没有它,西门子的程序搬到三菱上就得重写,那得多痛苦?
我个人习惯把PLCopen理解为「工业界的普通话推广委员会」。它不卖产品,不收专利费,就是出标准。其中最出名的,就是IEC 61131-3。
核心要点:PLCopen ≠ 编程软件,它是标准制定者。你用的Codesys、TwinCAT、Mitsubishi GX Works,底层都遵循PLCopen的规范。
1.2 IEC 61131-3标准概述——五种编程语言
IEC 61131-3是PLCopen推出的核心标准。它定义了五种编程语言,我一个个说。
| 语言名称 | 缩写 | 特点 | 适用场景 |
|---|---|---|---|
| 梯形图 | LD | 像继电器电路,直观 | 开关量控制,电工最爱 |
| 功能块图 | FBD | 模块化,信号流清晰 | 过程控制,模拟量处理 |
| 顺序功能图 | SFC | 步进式,状态切换明显 | 顺序控制,流水线 |
| 结构化文本 | ST | 类似Pascal,灵活 | 复杂算法,数据处理 |
| 指令表 | IL | 汇编风格,效率高 | 底层优化,老系统维护 |
我在项目中遇到过不少工程师,只认梯形图。其实没必要。ST语言写状态机,比梯形图顺手十倍。你想想看,一个IF ELSE嵌套,梯形图得画多少行?ST三行搞定。
我的建议:新手从梯形图入门,但一定要学ST。状态编程里,ST是主力,梯形图做辅助。
1.3 状态机编程思想入门——从「跑马灯」说起
状态机是什么?说白了,就是让程序记住「现在在干什么」,然后根据条件决定「下一步干什么」。
我举个例子。你写一个跑马灯程序:
- 状态0:灯全灭
- 状态1:灯1亮
- 状态2:灯2亮
- 状态3:灯3亮
每个状态停留1秒,然后切换。这就是一个最简单的状态机。
传统写法呢?你可能用定时器+计数器,一堆M继电器,逻辑乱成一团。状态机写法呢?清晰得像看地图。
// 伪代码示例
CASE state OF
0: // 全灭
IF timer.Q THEN
state := 1;
timer.IN := FALSE;
END_IF
1: // 灯1亮
IF timer.Q THEN
state := 2;
timer.IN := FALSE;
END_IF
2: // 灯2亮
IF timer.Q THEN
state := 3;
timer.IN := FALSE;
END_IF
3: // 灯3亮
IF timer.Q THEN
state := 0;
timer.IN := FALSE;
END_IF
END_CASE
你看,每个状态做什么,清清楚楚。我曾经在一个包装机项目里,用状态机重构了别人写的2000行梯形图,最后只用了400行ST。调试时间从三天缩短到半天。
注意:状态机不是万能药。如果逻辑只有几个开关量,梯形图更直接。状态机适合「有明确阶段、有顺序依赖」的控制场景。
1.4 状态机的三个核心要素
搞懂状态机,记住三样东西:
- 状态(State)——程序当前在哪个阶段
- 事件(Event)——触发状态切换的条件
- 动作(Action)——进入/退出状态时执行的操作
我习惯用「电梯」来比喻。电梯当前在1楼(状态),你按了3楼按钮(事件),电梯关门上升(动作),到达3楼(新状态)。就这么简单。
嗯,这里要注意:状态机里,状态是离散的。你不能说「电梯在1.5楼」,要么1楼,要么2楼。这一点在编程时特别重要——别搞出「半状态」来。
1.5 为什么PLCopen要推状态机?
原因很简单:工业控制越来越复杂。以前一个气缸、一个电机,梯形图够用。现在呢?多轴联动、配方管理、故障恢复……逻辑一复杂,梯形图就变成「蜘蛛网」。
状态机的好处:
- 可读性强——别人一看就知道程序在干什么
- 可维护性高——加一个状态,改一个状态,不影响其他
- 调试方便——出问题了,看当前状态就知道问题在哪
我记得有一次,现场设备报错。操作员说「机器卡住了」。我远程一看状态变量,显示「状态5:等待料仓到位」。马上就知道是料仓传感器没信号。前后5分钟定位问题。要是梯形图,我得翻几十行逻辑。
一句话总结:PLCopen给了我们标准,IEC 61131-3给了我们工具,状态机给了我们思路。三者结合,才是现代PLC编程的正确打开方式。
1.6 本章知识体系图
下面这张图,帮你理清本章的核心逻辑:
个人经验:刚开始学状态机,别想太复杂。从「三步循环」开始:初始化→运行→停止。跑通了,再慢慢加状态。一口吃不成胖子,状态机也一样。
公众号:蓝海资料掘金营,微信deep3321