4、PLC基础与编程:PLC硬件架构、I/O模块、梯形图与结构化文本编程入门
好,咱们今天聊聊PLC。说实话,很多刚入行的朋友觉得PLC就是个“大号继电器”,接接线、画个梯形图就完事了。嗯,这么理解也不能说全错,但如果你真打算靠这个吃饭,还是得把它的底子摸透。
我个人习惯,学任何控制器,先看它的“骨架”——也就是硬件架构。你想想看,一个PLC从现场收信号,到CPU算完,再发指令出去,这中间经过了多少环节?哪个环节掉链子,整个系统就瘫了。
4.1 PLC硬件架构:不只是个黑盒子
PLC的核心,说白了就是一台专门干“逻辑活”的工业计算机。它的骨架由这几块组成:
- CPU模块:大脑。负责跑程序、做运算、管通信。我见过不少项目,CPU选型时抠预算,结果程序稍微复杂点就扫描不过来,现场设备一顿一顿的。
- 电源模块:心脏。给CPU和I/O模块供电。注意,工业现场电源波动大,我曾经遇到过因为电源模块滤波不好,导致模拟量信号跳变,查了三天才找到原因。
- I/O模块:手脚。负责跟现场设备打交道。后面我会细讲。
- 背板总线:神经。CPU和I/O模块之间靠它传数据。总线速度决定了系统的实时性。
- 通信模块:嘴巴。用来跟触摸屏、上位机、其他PLC聊天。
4.2 I/O模块:PLC的“五官”和“手脚”
I/O模块,就是PLC跟现实世界交互的接口。你想想看,现场的温度、压力、开关状态,都得靠它变成CPU能懂的0和1。
I/O模块主要分两类:
4.2.1 数字量I/O(DI/DO)
处理开关信号。比如按钮、继电器、接近开关、指示灯。
- DI(数字量输入):检测外部是“通”还是“断”。注意,干接点和湿接点的区别。干接点就是纯开关,湿接点自带电源。我刚开始时搞混过,直接把24V信号接到干接点模块上,结果烧了一个通道。
- DO(数字量输出):控制外部设备通断。有继电器输出和晶体管输出两种。继电器输出便宜,但动作慢、寿命短;晶体管输出快、寿命长,但得注意负载电流。
4.2.2 模拟量I/O(AI/AO)
处理连续变化的信号。比如4-20mA电流、0-10V电压、热电偶、热电阻。
- AI(模拟量输入):把现场的模拟信号转成数字量。分辨率很关键,12位和16位的精度差了一个数量级。
- AO(模拟量输出):把CPU算好的数字量转成模拟信号,去控制变频器、调节阀。
4.3 梯形图编程:电气工程师的“母语”
梯形图(Ladder Diagram,简称LD),是PLC最经典的编程语言。它长得跟继电器电路图一模一样,所以电气工程师上手特别快。
它的基本元素就三个:
- 常开触点(-||-):条件满足时闭合。
- 常闭触点(-|/|-):条件满足时断开。
- 线圈(-( )-):输出结果。
举个例子,一个最简单的“启动-保持-停止”电路:
启动按钮 停止按钮 接触器
| | |/| ( )
| | | | |
| +------+ | |
| 接触器 | |
| 自锁触点| |
+----| |--+ |
你看,左边是“母线”,相当于火线。电流从母线流过来,经过触点,最后驱动线圈。这就是梯形图的逻辑——能流的概念。
我个人习惯,写梯形图时,把公共逻辑(比如急停、手自动切换)放在最前面,这样程序结构清晰,排查故障也快。
4.4 结构化文本(ST):当逻辑变复杂时
梯形图虽然直观,但遇到复杂算法、数据处理、循环运算时,就有点力不从心了。这时候,结构化文本(Structured Text,简称ST)就派上用场了。
ST长得像Pascal或C语言,用IF、CASE、FOR这些语句来描述逻辑。说白了,它就是PLC界的“高级语言”。
举个例子,用ST写一个“根据温度控制阀门开度”的逻辑:
IF Temp > 80.0 THEN
ValveOpen := 100.0; // 温度太高,全开
ELSIF Temp > 60.0 THEN
ValveOpen := 50.0; // 温度偏高,开一半
ELSE
ValveOpen := 0.0; // 温度正常,关闭
END_IF;
你看,是不是比梯形图简洁多了?而且可读性也强。
- 简单的启停、互锁、报警逻辑,用梯形图。电气工程师看得懂,维护方便。
- 复杂的PID运算、数据排序、通信协议解析,用ST。代码量少,执行效率高。
两者结合,才是王道。
4.5 梯形图 vs 结构化文本:怎么选?
很多新手会纠结:到底学哪个?我的答案是:都得会。
给你个对比表,心里就有数了:
| 对比项 | 梯形图(LD) | 结构化文本(ST) |
|---|---|---|
| 直观性 | ★★★★★ 图形化,一目了然 | ★★☆☆☆ 需要编程思维 |
| 复杂逻辑 | ★★☆☆☆ 超过20行就乱 | ★★★★★ 越复杂越有优势 |
| 数学运算 | ★☆☆☆☆ 非常痛苦 | ★★★★★ 天生适合 |
| 维护门槛 | 低,电工也能改 | 高,需要软件背景 |
| 执行效率 | 中等 | 高(编译后代码更紧凑) |
嗯,这里要注意:别以为ST高级就全用ST。我见过一个项目,全用ST写,结果现场电工排查故障时,对着屏幕一脸懵,最后还是我远程连线才搞定。所以,用什么语言,取决于谁来看、谁来维护。
4.6 编程入门:从点亮一盏灯开始
不管学什么语言,第一步都是“Hello World”。在PLC里,就是点亮一盏灯。
假设我们有一个按钮(接在DI通道%I0.0),一个指示灯(接在DO通道%Q0.0)。
梯形图版本:
%I0.0 %Q0.0
| | ( )
意思就是:按钮按下,灯亮;按钮松开,灯灭。
ST版本:
%Q0.0 := %I0.0;
一行搞定。但注意,ST里赋值是“:=”,不是“=”。这是很多从C语言转过来的人容易犯的错。
Motor := (Start OR Motor) AND NOT Stop;你看,是不是很简洁?
4.7 总结与避坑
好了,这一章的内容就这些。我帮你捋一下重点:
- PLC硬件:CPU、电源、I/O、背板、通信,一个都不能少。
- I/O模块:数字量管开关,模拟量管连续信号。选型时注意分辨率和抗干扰。
- 梯形图:电气工程师的母语,适合简单逻辑。
- 结构化文本:高级语言,适合复杂算法和数据处理。
- 两者结合:用LD做框架,用ST做核心运算。
下一章,咱们聊聊PLC的扫描周期和中断,这可是决定系统实时性的关键。到时候见。