一、PLC硬件架构——别被那些花花绿绿的模块吓到
刚入行那会儿,我第一次打开西门子S7-300的机架,说实话有点懵。CPU、电源、DI、DO、AI、AO……一排排模块插在导轨上,像极了乐高积木。但搞懂了之后你会发现,PLC的硬件架构其实就那几块东西。
1.1 核心部件:CPU模块
CPU是PLC的大脑。它负责执行用户程序、处理I/O数据、管理通信。不同品牌的CPU性能差异很大,但核心指标就几个:
- 处理速度:通常用ms/千步指令来衡量,比如0.1ms/1K指令
- 程序容量:能装多少行代码,单位是KB或MB
- I/O点数:最多能带多少个输入输出点
- 通信接口:以太网、RS485、Profibus等
1.2 电源模块
电源模块给PLC系统供电。常见的有24V DC和220V AC两种。注意,电源模块的容量要算清楚——CPU、I/O模块、传感器、执行器都要吃电。
1.3 I/O模块
I/O模块是PLC和现场设备之间的桥梁。分两大类:
- 数字量I/O:处理开关信号,比如按钮、继电器、指示灯
- 模拟量I/O:处理连续信号,比如温度、压力、流量
我习惯把I/O模块比作PLC的「五官」——数字量是「触觉」,只有通断;模拟量是「视觉」,能感知程度。
1.4 通信模块
现代PLC很少单打独斗。通信模块让PLC能跟HMI、变频器、其他PLC甚至MES系统对话。常见的协议有Modbus、Profinet、EtherNet/IP等。
二、五种编程语言——IEC 61131-3标准
IEC 61131-3是PLC编程的国际标准。它定义了五种编程语言,每种都有自己的适用场景。说白了,就像工具箱里有螺丝刀、扳手、锤子——用对了地方,效率翻倍。
2.1 梯形图(LD)
梯形图是最直观的语言。它长得像继电器电路图,左母线、右母线、常开触点、常闭触点、线圈……电气工程师一看就懂。
||---[ ]----[ ]----( )---|
| | X1 X2 Y1 |
这个例子很简单:X1和X2都闭合时,Y1得电。我在项目中用LD写逻辑控制,比如电机启停、报警联锁,效率很高。
2.2 功能块图(FBD)
FBD用图形化的功能块来表示逻辑。每个功能块有输入和输出,用连线连接起来。适合做信号处理、PID控制这类任务。
| X1 ---|AND|--- Y1
| X2 ---| |
嗯,FBD看起来像画流程图。我一般用它做模拟量处理,比如把4-20mA信号转换成工程量。
2.3 结构化文本(ST)
ST是高级语言,语法类似Pascal或C。适合写复杂算法、数学运算、数据处理。
IF X1 AND X2 THEN
Y1 := TRUE;
ELSE
Y1 := FALSE;
END_IF;
我个人非常喜欢ST。为什么?因为它写起来快,逻辑清晰,而且容易调试。你想想看,一个复杂的PID算法用LD写得多痛苦,用ST几行就搞定了。
2.4 指令表(IL)
IL是汇编风格的文本语言。一条指令一行,比如LD、AND、ST。现在用得少了,但在一些老设备上还能见到。
LD X1
AND X2
ST Y1
说实话,IL我很少用。除非是维护老项目,否则不建议花太多时间学它。
2.5 顺序功能图(SFC)
SFC用来描述顺序控制流程。它把程序分成多个步(Step),每个步执行特定动作,步之间通过转移条件切换。
| [Step1] --> [Step2] --> [Step3]
| | | |
| (条件A) (条件B) (条件C)
SFC特别适合写流水线控制、自动加工这类有明确步骤的程序。我做过一个包装线项目,用SFC写主流程,配合ST写动作逻辑,调试起来非常顺畅。
三、数据类型与变量——别把整数当实数用
数据类型这事儿,看着简单,但坑不少。我见过有人把INT和REAL混用,结果计算精度全丢了。
3.1 基本数据类型
| 类型 | 说明 | 范围 |
|---|---|---|
| BOOL | 布尔型 | TRUE / FALSE |
| INT | 16位有符号整数 | -32768 ~ 32767 |
| DINT | 32位有符号整数 | -2^31 ~ 2^31-1 |
| REAL | 32位浮点数 | ±1.18e-38 ~ ±3.4e38 |
| TIME | 时间型 | T#0ms ~ T#49d17h2m47s295ms |
3.2 变量声明
变量分全局变量和局部变量。全局变量在整个程序里都能用,局部变量只在某个POU(程序组织单元)里有效。
VAR_GLOBAL
g_bStart : BOOL := FALSE;
g_iCount : INT := 0;
END_VAR
VAR
bTemp : BOOL;
rValue : REAL;
END_VAR
我建议:能用局部变量就别用全局变量。全局变量多了,程序耦合度高,改一个地方可能影响一片。你想想看,调试的时候找bug多痛苦。
四、基本指令与功能块——从简单到复杂
基本指令是PLC编程的砖瓦。功能块则是预制好的构件,拿来就能用。
4.1 位逻辑指令
- 常开触点:--| |--,输入为TRUE时闭合
- 常闭触点:--|/|--,输入为FALSE时闭合
- 线圈:--( )--,输出赋值
- 置位/复位:--(S)-- / --(R)--,保持状态
4.2 定时器与计数器
定时器(TON、TOF、TP)和计数器(CTU、CTD)是PLC编程的常客。
// TON定时器示例
TON_1(IN := X1, PT := T#5s);
Y1 := TON_1.Q;
这个例子:X1为TRUE后,延时5秒,Y1输出TRUE。我在项目中用TON做电机启动延时,防止同时启动导致电流冲击。
4.3 数学运算与比较
ADD、SUB、MUL、DIV、GT、LT、EQ……这些指令跟数学课上学的一样。但要注意数据类型匹配。
4.4 功能块(FB)与函数(FUN)
功能块有内部状态,可以保存数据。函数没有内部状态,每次调用都重新计算。
FUNCTION_BLOCK FB_MotorControl
VAR_INPUT
bStart : BOOL;
bStop : BOOL;
END_VAR
VAR_OUTPUT
bRun : BOOL;
END_VAR
VAR
bLastStart : BOOL;
END_VAR
END_FUNCTION_BLOCK
我经常把电机控制、阀门控制这类重复逻辑封装成功能块。这样写一次,到处调用,省时省力还少出错。
五、知识体系总览
下面这张图是我自己画的,把本章的核心内容串起来了。你看一眼,心里就有谱了。
这张图把PLC编程基础分成了四大块:硬件架构、五种编程语言、数据类型与变量、基本指令与功能块。你顺着这个框架学,不会跑偏。
公众号:蓝海资料掘金营,微信deep3321