
电气人手里如果只有螺丝刀和万用表能吃下安装接线、排查故障的活但碰到设备改造、节拍优化、新工艺导入这类项目往往会卡在同一个地方看不懂 PLC 程序。设备厂家把程序一锁改动一个延时时间都要付费上门客户要求增加一个工位、调整一次动作顺序你却只能对着触摸屏干瞪眼。这不是个例而是大量电气工程师、设备维护人员和刚入行的自动化新手的共同困境。这篇文章要解决的就是这个问题。我会从 PLC 的运行原理讲起带你理清梯形图、定时器、计数器、FB 块这些核心概念再结合西门子、三菱、信捷、汇川这些主流品牌给出选型思路最后用可运行的示例程序走通一个完整控制逻辑。读完你会得到一个明确判断PLC 编程不神秘它本质上是把继电器控制电路搬进处理器电气人学它比计算机专业的人更有优势因为你早就懂电路缺的只是一套表达逻辑的语言。1. 这篇文章真正要解决的问题很多电气人第一次接触 PLC 时的感受是看着梯形图觉得眼熟两条母线、一堆触点线圈和继电器控制原理图长得差不多但真让自己写一个程序又不知道从哪里下手。这个问题的根源在于大家把 PLC 编程想复杂了。PLC 编程不是软件工程师那种高并发、微服务、数据结构它要处理的核心问题只有一个按照输入信号的变化按既定顺序驱动输出设备。水泵起停、气缸伸缩、电机正反转、传送带启停全部是这类逻辑。这篇文章适合谁看第一类是工厂设备维护电工日常要处理设备故障但程序是厂家写的出了问题只能换件不能改逻辑第二类是刚毕业进入自动化行业的电气工程师需要快速上手项目编程第三类是做单片机、嵌入式开发的程序员想理解工业控制领域的思维方式。这三类人读完后至少能独立完成一个包含自锁、互锁、延时、计数的小型控制程序并且知道怎么用 FB 块和通信功能把程序组织得像个工程而不是一个只能点灯的实验程序。PLC 编程真正难的不是语法而是工程意识。你写的每一行逻辑最终都在控制真实设备要考虑急停、断电、恢复、误操作这些边界场景。这一点我会在后续章节反复强调。2. PLC 的核心概念与运行原理2.1 从继电器电路到 PLC 的映射如果你会看继电器控制原理图学 PLC 梯形图几乎没有门槛。传统的继电器控制里启动按钮、停止按钮、接触器辅助触点串联并联形成自锁、互锁、顺序启动等逻辑。PLC 的梯形图就是把这些物理继电器换成内部软元件输入端子接收按钮信号输出端子驱动接触器线圈中间逻辑用软继电器、软定时器、软计数器来实现。两者对照起来看是这样的继电器控制PLC 梯形图本质启动按钮常开触点指令 X0 / I0.0读取输入信号停止按钮常闭触点指令 X1 / I0.1读取输入信号取反接触器线圈输出线圈 Y0 / Q0.0控制输出端子中间继电器内部软继电器 M中间逻辑状态时间继电器定时器 T延时控制这个映射关系是所有品牌 PLC 的通用底层逻辑。只要理解这一点换品牌只是换指令助记符和软元件编号规则核心思路完全一致。2.2 扫描周期PLC 的工作节拍PLC 不是像单片机那样一条指令一条指令地响应用户程序它采用循环扫描机制。一个扫描周期包括三件大事读取所有输入信号的状态、执行用户程序、把运算结果写到输出端子。这个过程不断循环周期通常在几毫秒到几十毫秒之间。理解扫描周期对排查故障极其重要。比如你用同一个按钮既想启动又想停止如果程序里同一个输入信号既接了常开又接了常闭扫描周期的先后顺序会直接影响逻辑结果。再比如两个设备需要严格同步动作你不能靠“它们几乎同时执行”来保证而要考虑扫描周期的先后关系必要时要使用立即刷新指令或中断功能。我在实际项目中见过有人用两个扫描周期之间的时间差做延时这种做法非常危险因为扫描周期受程序长短影响不是固定值。该用定时器就用定时器别自作聪明。2.3 梯形图、指令表和结构化文本PLC 编程语言不只是梯形图一种。IEC 61131-3 标准定义了五种语言梯形图LD、指令表IL、结构化文本ST、功能块图FBD和顺序功能图SFC。梯形图适合逻辑控制为主的项目因为直观电工能看懂结构化文本类似 Pascal适合数学运算、数据处理的场景顺序功能图适合流程明显的设备控制比如半自动装配机。一个成熟的 PLC 项目往往是多种语言混用主流程用梯形图或 SFC算法部分用 ST。初学者的学习顺序建议是先用梯形图把基础逻辑闯关遇到数据计算再用结构化文本最后按需学习功能块图。不要一上来就追着某种语言学因为工厂里现有设备的程序多半是梯形图你看不懂梯形图就没法接手维护。3. 主流 PLC 品牌与选型思路3.1 四大品牌矩阵自动化行业几乎每个项目都会遇到选型问题。纯进口项目常见西门子和罗克韦尔日系设备常见三菱和欧姆龙国产项目现在大量使用信捷和汇川。对于学习来说选一个主流品牌下手就行因为底层逻辑是通的。品牌典型系列编程软件常见应用场景西门子S7-200 SMART / S7-1200 / S7-1500TIA Portal / STEP 7中大型项目、Profinet 通信、过程控制三菱FX3U / FX5U / Q 系列GX Works2 / GX Works3小型设备、日系产线、定位控制信捷XD / XC 系列XDPPro国产设备、性价比项目、触摸屏联动汇川H1U / H3U / AM 系列InoProShop伺服定位、新能源设备、国产替代选型时最重要的不是哪种 PLC 功能最强而是你所在项目、所在城市的产业生态和个人就业方向。做汽车产线配套西门子是主流做3C小设备三菱和信捷很常见做伺服定位和新能源设备汇川的出镜率很高。3.2 学习用硬件还是软件很多新手在“要不要先买一台真 PLC”这件事上纠结。我的建议是第一步用仿真软件跑通逻辑觉得有意思、能坚持下去了再花几百块买一台入门级 PLC 配开关电源和按钮做真实接线实验。因为真实硬件的输入输出接线、干扰问题、复位时序仿真软件永远模拟不出来。信捷、三菱的入门 PLC 价格不贵二手设备也不少。西门子 S7-200 SMART 的学习资料最丰富遇到问题搜一下到处是答案适合自学者。如果只是体验逻辑运行搜索“PLC 仿真软件”能找到不少选择先把梯形图跑起来成本为零。4. 环境准备与基础搭建4.1 编程软件如何选不同品牌对应不同软件版本差异也会影响界面操作。写这篇文章时我不会把某个版本的按钮位置写死因为软件更新很快但通用流程是一致的安装软件、建立工程、选择 CPU 型号、配置输入输出、编写程序、编译下载。以西门子 S7-200 SMART 为例学习路径是这样的# 软件安装完成后打开软件新建项目 # 选择 CPU 型号例如 CPU SR30 # 在项目树中找到“程序块” - MAIN 主程序 # 在指令树中选择触点、线圈、定时器拖拽到梯形图编辑区如果你用的是三菱 GX Works2 或信捷 XDPPro概念完全一样只是菜单语言和快捷键有差异。新手最容易卡在“选错 CPU 型号导致指令不可用”这个问题上建工程前先确认手上设备的 CPU 具体型号不要只看系列名。4.2 软元件表PLC 的寻址规则每个品牌都有自己的软元件编号规则。西门子用 I/Q/M/T/C三菱用 X/Y/M/T/C信捷也用 X/Y/M/T/C 体系。不管哪种逻辑上都是输入继电器、输出继电器、内部辅助继电器、定时器、计数器这五类。用一张表梳理三菱和信捷体系的软元件软元件含义示例说明X输入继电器X0-X17接按钮、开关、传感器信号Y输出继电器Y0-Y17接触器、电磁阀、指示灯M内部继电器M0-M1023程序内部中间变量T定时器T0-T255延时控制C计数器C0-C255计数控制西门子的编号规则不太一样它采用 I0.0、Q0.0、M0.0 这样的位寻址方式字节和位通过点号分隔。实际写程序中“M0.0”这种寻址容易和“M0”混淆看程序时先确认这是位地址还是字节地址再往下读逻辑。5. 核心流程拆解从需求到程序5.1 一个标准的编程流程拿到一个控制需求不要立刻打开软件画梯形图。成熟的工程师会先做这三步第一步梳理输入输出清单。把设备的按钮、传感器、开关全部列出分配好 PLC 输入点把接触器、电磁阀、指示灯全部列出分配好输出点。这一步叫 I/O 分配是整个程序的基础。第二步画动作流程。不管是用文字还是流程图把设备每个状态、每个切换条件写清楚。比如“按下启动按钮后指示灯亮延时 3 秒后电机启动按下停止按钮后电机停止指示灯灭。”第三步写逻辑并仿真。把动作流程翻译成梯形图先用软件仿真验证再下载到真实 PLC 接线测试。5.2 边界条件的设计新手最容易忽略的是“异常情况下设备怎么处理”。比如急停按下后程序应该立即切断所有输出还是保持当前状态继续走完当前动作再比如设备断电又恢复后是让程序从第一步重新开始还是从断点继续这些决定必须在写代码前想清楚而不是等调试时才发现。我的经验是给每个程序都预留一个急停处理段所有输出线圈串联急停常闭触点确保急停按下时输出全部断开。这个习惯看起来简单但在现场能救命。6. 完整示例点动、自锁与互锁6.1 点动控制点动控制是 PLC 编程的“Hello World”。按下按钮电机转动松开按钮电机停止。对应的梯形图逻辑是输入 X0 常开触点直接驱动输出 Y0。如果使用结构化文本ST表达逻辑是这样的// 点动控制X0 为启动按钮Y0 为电机接触器 Y0 : X0;这段逻辑翻译成自然语言就是Y0 的状态直接跟随 X0。按钮按下X0 为 ONY0 输出按钮松开X0 为 OFFY0 断电。用梯形图思维看这就是一个输入触点串一个输出线圈。最简单但也最不实用因为大多数设备需要的是“按一下启动再按一下停止”这就要用到自锁。6.2 自锁控制自锁是电机控制中最经典的逻辑。按下启动按钮电机启动即使启动按钮松开接触器通过自身的辅助触点维持通电按下停止按钮电机停止。在 PLC 梯形图中自锁的实现方式是启动按钮常开触点 X0 与接触器输出线圈 Y0 的常开辅助触点并联再与停止按钮的常闭触点 X1 串联。// 文件路径MAIN 程序 // 自锁控制X0 启动按钮X1 停止按钮Y0 电机接触器 IF X1 THEN Y0 : FALSE; // 停止按钮按下断开输出 ELSIF X0 THEN Y0 : TRUE; // 启动按钮按下置位输出 END_IF;但这段 ST 代码描述的是单扫描周期的逻辑真正工程实现时还可以用置位复位指令SET/RST来完成。置位复位的写法更容易理解也更贴近实际项目// 置位复位实现自锁 IF X0 THEN SET Y0; // 启动置位输出 END_IF; IF X1 THEN RST Y0; // 停止复位输出 END_IF;运行逻辑验证方式给 X0 一个短脉冲观察 Y0 是否保持 ON再给 X1 一个短脉冲观察 Y0 是否回到 OFF。如果程序下载后动作不对先检查 I/O 分配是否正确再看输入信号是否接到对应的 X 点。6.3 互锁控制电机正反转电机正反转是 PLC 初学者的第一道坎也是工厂里最常见的控制需求。正转接触器 KM1 和反转接触器 KM2 绝对不允许同时吸合否则相间短路轻则跳闸重则烧毁设备。互锁要在两个层面做第一层是硬件互锁在接触器的控制回路里把 KM1 的常闭触点串到 KM2 线圈回路KM2 的常闭触点串到 KM1 线圈回路第二层是程序互锁在梯形图里把正转输出 Y0 的常闭触点串到反转输出 Y1 回路反转输出 Y1 的常闭触点串到正转输出 Y0 回路。// 正反转互锁控制 // X0 正转启动按钮X1 反转启动按钮X2 停止按钮 // Y0 正转接触器Y1 反转接触器 // 正转停止按钮未按下 且 反转输出未通 且 正转启动按钮按下 IF NOT X2 AND NOT Y1 AND X0 THEN Y0 : TRUE; ELSE Y0 : FALSE; END_IF; // 反转停止按钮未按下 且 正转输出未通 且 反转启动按钮按下 IF NOT X2 AND NOT Y0 AND X1 THEN Y1 : TRUE; ELSE Y1 : FALSE; END_IF;这段代码兼顾了自锁、互锁和停止优先。判断顺序上“停止按钮未按下”放在第一个条件保证了急停和停止的优先级最高。实际项目建议在输出端再加物理接触器互锁因为一旦输出晶体管或继电器损坏程序互锁会失效。7. 定时器、计数器与 FB 块的工程化使用7.1 定时器的三个典型场景延迟启动、延迟停止、闪烁控制是定时器最常用的三个功能。三菱和信捷的 T 定时器用 RST 复位西门子用 TON通电延时、TOF断电延时、TP脉冲定时器区分不同行为。一个最简单的延时启动逻辑按下启动按钮后延时 5 秒再启动电机。// 三菱/信捷风格梯形图描述 // X0 启动按钮T0 定时器Y0 电机输出 // 网络1X0 驱动定时器 T0设定值 K500.1秒为单位即5秒 // 梯形图指令LD X0; OUT T0 K50; // 网络2T0 常开触点驱动 Y0 // 梯形图指令LD T0; OUT Y0;这里的关键点是定时器单位。三菱 FX 系列默认定时器单位是 100msK50 就是 5 秒西门子 TON 的 PT 端单位取决于 CPU 设置可能是 10ms、100ms 或 1s。不看单位直接写定时常数是新手排错最多的地方。7.2 计数器计数器按输入信号的上升沿次数进行递增或递减。比如检测到 10 个工件后传送带停止// 三菱/信捷风格计数器描述 // X1 计数脉冲输入光电传感器C0 计数器设定值 K10 // 梯形图指令LD X1; OUT C0 K10; // 计数满时 C0 常开触点接通驱动传送带停止逻辑计数器在工程中常和定时器配合使用用于统计生产数量、循环次数和故障次数。计数满后要用 RST 指令对计数器复位否则下一次循环无法重新计数。7.3 FB 块把程序封装成可复用单元热搜词里“信捷 PLC 怎么设置 FB 块”搜的人很多说明不少人在封装程序时卡住了。FB 块Function Block功能块的本质是把一组完成特定功能的逻辑封装起来像搭积木一样在主程序里反复调用。什么场景该用 FB 块比如你的设备有四个相同的搅拌电机控制逻辑一模一样只是输入输出地址不同。如果不封装你要写四段几乎相同的程序如果用 FB 块只需写一次逻辑然后实例化四个块分别填入对应的启动、停止、反馈、输出地址。在西门子 TIA Portal 中FB 块的创建位置在程序块文件夹下右键新建即可内部可以定义 IN输入参数、OUT输出参数、STAT静态变量。在信捷 XDPPro 中可以在功能块库中新建功能块定义好变量和程序段然后在主程序中调用。用 FB 块重构后程序的可读性和维护效率会大幅提升。一个设备 80 个子程序如果全是复制粘贴的梯形图后期改一个动作要改 80 处如果用 FB 块改一处逻辑所有实例全部更新。这就是程序设计的工程化思维。8. PLC 通信Modbus TCP 与 Profinet 的工程意义8.1 为什么 PLC 通信越来越重要现在的设备不再是单机运行PLC 要和触摸屏通信要和上位机监控软件通信要和伺服驱动器、变频器、视觉相机交换数据。热搜词里的“康耐视相机与西门子 PLC 关于 Profinet 通信”“信捷 PLC 作为 Modbus TCP 服务器与海康相机通信”都指向一个趋势PLC 编程早已不只是梯形图逻辑通信配置占据了一半工作量。8.2 Modbus TCP工业以太网的通用语言Modbus TCP 是工业领域最广泛的通信协议之一几乎所有 PLC 都支持。它的核心机制是一个主站客户端读取或写入多个从站服务器的寄存器数据。信捷 PLC 设置为 Modbus TCP 服务器时上位机或视觉相机通过网口访问 PLC 的保持寄存器完成数据交换。Modbus TCP 的通信地址和 PLC 软元件需要建立映射关系。不同品牌映射规则不一样常见做法是把数据放到 D 寄存器数据寄存器然后上位机按功能码 03读保持寄存器或 06写单个寄存器访问。如果你的设备调试时“能 ping 通但读不到数据”先检查功能码、寄存器地址偏移和字节顺序。8.3 Profinet西门子生态的实时通信Profinet 是西门子主推的工业以太网标准比 Modbus TCP 更强的实时性和设备诊断能力。在 TIA Portal 里配置 Profinet 通信的基本步骤是组态设备时分配 IP 地址和设备名称在拓扑视图里连接 IO 控制器和 IO 设备通过设备视图配置输入输出字节长度然后在程序中用 I/O 地址直接读写对方设备的数据。配置 Profinet 有个容易踩的坑设备名称和 IP 地址必须同时正确Profinet 不按 IP 找设备按设备名称找设备。很多调试人员改了 IP 却发现设备报“找不到 IO 设备”就是因为没有重新分配设备名称。通信这块的完整示例涉及 PLC 品牌、上位机协议版本、寄存器映射表等细节篇幅管控下不展开后面我会单独写一篇 Modbus TCP 实战文章重点覆盖信捷、西门子与视觉相机的数据交换。这里需要对你传达的判断是通信是 PLC 学习第二阶段的必选项但不必急着把它放第一阶段先把逻辑控制练扎实更重要。9. 常见问题与排查思路现场调试和自学过程中下面这些问题是出现频率最高的问题现象可能原因排查方式解决方案程序下载后设备不动作I/O 地址分配错误或接线松动看模块指示灯、监控软元件状态对照 I/O 分配表检查接线和程序地址自锁逻辑松开按钮就停止忘记了输出线圈的辅助触点并联在监控模式下观察 Y 点是否保持补上 Y 点常开触点并联构成自锁回路定时器不工作定时器单位和设定值不对查看定时器当前值和目标值确认定时器单位后再计算设定值正反转同时吸合只有程序互锁硬件互锁缺失检查接触器控制回路增加接触器常闭触点硬件互锁Modbus TCP 读不到数据寄存器地址映射不对或字节顺序不一致用调试工具读写测试寄存器核对功能码、寄存器地址和字节序Profinet 找不到设备设备名称未分配或 IP 冲突用 TIA 在线扫描设备重新分配设备名称检查 IP 唯一性排查问题时最重要的原则是先硬件后软件先电源后信号先输入后输出。检查程序之前先确认 PLC 是否处于 RUN 模式、输入指示灯是否点亮、输出模块是否有供电。很多“程序没问题但设备不动”的案例最后查出来是接线端子松了。还有一个常见的疑问程序在上位机监控模式下看着是对的为什么实际设备就不动这时候要看程序是否还有第二个地方在驱动同一个输出点。PLC 中一个输出线圈如果被多处赋值最终结果由谁来决定是非常隐蔽的问题排查时用软件的“跨引用”功能查找所有操作该输出点的位置。10. 最佳实践与工程建议10.1 程序结构规范不管用哪个品牌 PLC程序都应该保持清晰的模块化结构。主程序只做调用具体功能放在子程序和功能块里。程序开头放注释项目名称、作者、版本、修改日期。每个网络或程序段前面写清楚功能说明比如“传送带启动逻辑”“气缸伸出到位检测”。注释的价值不在于好看而在于三个月后你自己回来看程序还能看懂。10.2 I/O 分配前先做规划I/O 分配不要边写程序边定这会自食其果。写程序前先把所有输入输出列成表格输入点预留备用点输出点预留报警输出。特别是输入点的分配要考虑到传感器类型是常开还是常闭。急停按钮一定要用常闭触点接入 PLC这样线路断线时 PLC 能检测到急停信号如果不接常闭触点断线后设备可能完全不知道自己失去了急停保护。10.3 安全逻辑优先任何程序都必须将急停线路放在最高优先级。可以用所有输出线圈的公共回路串联急停信号也可以在程序开头用急停状态去切断所有输出。对于可能造成人身伤害的设备除了程序互锁还必须保留硬接线安全回路。PLC 程序只是安全系统的第一层不能把安全全部交给程序。10.4 程序修改必须有记录工厂里最怕的就是有人改了程序不更新存档。设备运行好好的某天突然动作异常查了很久发现是上周有人临时注释掉一个互锁条件忘了恢复。建议每次修改都导出一下文件以“项目名_日期_修改人_修改说明”的格式命名保存。这样即使改出问题也能快速回滚到上一个可用版本。10.5 数据备份与恢复触摸屏工程、PLC 程序、器件参数表这三类资料要同步备份。很多工程师只备份 PLC 程序变频器参数、伺服参数丢了要花半天重新配置。现在的新设备基本都支持 SD 卡存储配方和参数项目验收时把整批备份文件拷贝一份放到公司网盘这是成本最低的保险。11. 总结与后续学习方向回到开头的问题电气人学 PLC 编程到底难不难我的结论是入门难度远低于你的想象但工程化水平决定你能走多远。本文把 PLC 的扫描原理、软元件、梯形图、自锁互锁、定时器计数器、FB 块、通信和排查思路完整串了一遍核心是帮你在头脑中建起一个“从电路逻辑到程序语言”的转换框架。下一步的实践路径很清晰先在仿真软件里把点动、自锁、互锁三个程序各敲一遍体会梯形图的扫描顺序然后买一台入门 PLC接上按钮和接触器做一遍延时启动和正反转实验之后选择一个方向深入比如伺服定位控制、Modbus TCP 通信或触摸屏联动。如果你正在做设备维护试着把一台旧设备的程序打开读一遍对照 I/O 表理解每个设备的动作流程这就是最好的进阶训练。PLC 这门手艺上手靠动手水平靠工程思维每一段代码背后都是一台真实设备的安全和效率。