3、AALC编程基础:IEC 61131-3标准概述、梯形图(LD)入门、结构化文本(ST)入门、功能块图(FBD)入门
好,咱们正式开始动手写程序了。
在敲第一行代码之前,有个东西必须得先搞清楚——IEC 61131-3标准。说白了,这就是PLC编程界的“普通话”。没有它,各家厂商各玩各的,你换个品牌就得重新学一门语言,那得多痛苦?
3.1 IEC 61131-3标准概述
这个标准定义了五种编程语言:梯形图(LD)、结构化文本(ST)、功能块图(FBD)、指令表(IL)和顺序功能图(SFC)。咱们AALC控制器全面支持这五种,但实际工程中,最常用的就是LD、ST和FBD这三种。
我个人习惯这样分:
- 梯形图(LD):电气工程师的最爱,画起来像电路图,直观
- 结构化文本(ST):像C语言,适合复杂算法和数学运算
- 功能块图(FBD):图形化连线,适合信号流处理
你想想看,一个项目里往往三种语言混着用。我在做一条汽车焊装线时,主逻辑用LD,PID运算用ST,模拟量处理用FBD。各取所长,才是高手之道。
核心要点:IEC 61131-3标准的核心思想是“语言无关,逻辑统一”。不管用哪种语言写,最终编译成AALC控制器能执行的机器码。所以,选你顺手且适合场景的语言就行。
下面这张图,是我自己梳理的AALC编程语言选择逻辑,帮你快速定位该用哪种:
3.2 梯形图(LD)入门
梯形图,说白了就是“画电路”。左边一根竖线代表火线,右边一根竖线代表零线,中间画触点、线圈。电气工程师上手最快,因为跟继电器电路几乎一模一样。
举个例子,一个最简单的自锁电路:
||---[ 启动按钮 ]----[ 停止按钮 ]----( 电机运行 )---|
| |
| 电机运行触点 ----+ |
| | |
| [ 热继电器 ]----+ |
嗯,这里要注意:梯形图的执行顺序是从左到右、从上到下。跟实际电路不一样,实际电路是同时导通的。我在调试一个包装机项目时,就因为这个“同时”和“顺序”的区别,闹过笑话——明明电路图看着没问题,电机就是抖。后来才发现,梯形图里触点扫描有先后,得加个中间变量做同步。
小技巧:写LD时,把常开触点想象成“按钮按下就通”,常闭触点想象成“按钮没按时通”。这样画起来不容易乱。
3.3 结构化文本(ST)入门
ST语言,如果你写过C语言,那上手就是分分钟的事。它用文本描述逻辑,特别适合做数学运算、字符串处理、数组操作这些梯形图搞不定的活儿。
看一个简单的电机启动/停止逻辑:
// 电机控制 - ST版本
IF Start_PB AND NOT Stop_PB THEN
Motor_Run := TRUE;
ELSIF Stop_PB OR Overload THEN
Motor_Run := FALSE;
END_IF;
// 延时启动
IF Motor_Run THEN
Timer_Start(IN := TRUE, PT := T#5S);
IF Timer_Start.Q THEN
Motor_Accelerate := TRUE;
END_IF;
ELSE
Timer_Start(IN := FALSE);
Motor_Accelerate := FALSE;
END_IF;
我个人习惯把ST用在三个地方:PID运算、配方管理、通讯协议解析。有一次做多轴同步控制,用梯形图写数学公式简直要命,换成ST,三行搞定。
注意:ST虽然灵活,但别滥用。纯逻辑控制用ST写,后期维护的人会骂娘的。我见过一个项目,全部用ST写,结果电气工程师看不懂,机械工程师也看不懂,最后只能我自己去改。记住:合适的语言用在合适的地方。
3.4 功能块图(FBD)入门
FBD,你可以把它想象成“搭积木”。把一个个功能块(比如与门、或门、定时器、PID)拖出来,用线连起来。数据从左流到右,逻辑一目了然。
举个例子,一个简单的“与或”逻辑:
[传感器A] ---| |
|AND|---[报警灯]
[传感器B] ---|___|
[急停按钮] ---| |
|OR |---[蜂鸣器]
[手动确认] ---|___|
FBD最大的好处是:可读性极强。你不需要懂编程,看连线就知道信号怎么走的。我在做水处理项目时,模拟量处理全部用FBD,甲方工程师一看就懂,验收特别顺利。
不过,FBD也有短板——逻辑复杂了,线会乱成一团。我建议一个FBD网络别超过10个功能块,超过就拆成子程序。
总结一下:
| 语言 | 适合场景 | 不适合场景 |
|---|---|---|
| LD | 开关量逻辑、顺序控制、急停回路 | 复杂数学运算、字符串处理 |
| ST | 算法、PID、配方、通讯 | 纯继电器逻辑(维护困难) |
| FBD | 模拟量处理、信号流、简单逻辑 | 超复杂逻辑(线太多) |
好了,三种语言的基础就这些。别急着背语法,先理解它们各自是干什么的。下一节咱们会拿一个实际项目,三种语言各写一遍,你就能感受到它们的区别了。