4、PLC基础与编程:PLC硬件架构、I/O模块、梯形图与结构化文本编程入门

好,咱们今天聊聊PLC。说实话,很多刚入行的朋友觉得PLC就是个“大号继电器”,接接线、画个梯形图就完事了。嗯,这么理解也不能说全错,但如果你真打算靠这个吃饭,还是得把它的底子摸透。

我个人习惯,学任何控制器,先看它的“骨架”——也就是硬件架构。你想想看,一个PLC从现场收信号,到CPU算完,再发指令出去,这中间经过了多少环节?哪个环节掉链子,整个系统就瘫了。

4.1 PLC硬件架构:不只是个黑盒子

PLC的核心,说白了就是一台专门干“逻辑活”的工业计算机。它的骨架由这几块组成:

  • CPU模块:大脑。负责跑程序、做运算、管通信。我见过不少项目,CPU选型时抠预算,结果程序稍微复杂点就扫描不过来,现场设备一顿一顿的。
  • 电源模块:心脏。给CPU和I/O模块供电。注意,工业现场电源波动大,我曾经遇到过因为电源模块滤波不好,导致模拟量信号跳变,查了三天才找到原因。
  • I/O模块:手脚。负责跟现场设备打交道。后面我会细讲。
  • 背板总线:神经。CPU和I/O模块之间靠它传数据。总线速度决定了系统的实时性。
  • 通信模块:嘴巴。用来跟触摸屏、上位机、其他PLC聊天。
我的小建议: 选型时,CPU的运算速度别只看主频,要看“每千条指令执行时间”。有些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语言转过来的人容易犯的错。

一个小技巧: 刚开始学ST时,别急着写复杂逻辑。先把梯形图里能实现的功能,用ST重写一遍。比如“启动-保持-停止”,用ST怎么写?答案是:
Motor := (Start OR Motor) AND NOT Stop;
你看,是不是很简洁?

4.7 总结与避坑

好了,这一章的内容就这些。我帮你捋一下重点:

  • PLC硬件:CPU、电源、I/O、背板、通信,一个都不能少。
  • I/O模块:数字量管开关,模拟量管连续信号。选型时注意分辨率和抗干扰。
  • 梯形图:电气工程师的母语,适合简单逻辑。
  • 结构化文本:高级语言,适合复杂算法和数据处理。
  • 两者结合:用LD做框架,用ST做核心运算。
最后一句掏心窝的话: 编程语言只是工具,真正值钱的是你对工艺的理解。我见过有人梯形图画得花里胡哨,但控制逻辑一塌糊涂;也见过有人ST写得像天书,但现场就是跑得稳。所以,别沉迷于语言本身,多想想你要解决什么问题

下一章,咱们聊聊PLC的扫描周期和中断,这可是决定系统实时性的关键。到时候见。