资讯详情

PLC基本指令详解:从继电器电路到梯形图的工程应用

📅 2026/10/12 3:00:24 | 华诺云谱 👁 阅读
PLC基本指令详解:从继电器电路到梯形图的工程应用
很多人第一次翻开PLC编程手册看到LD、LDI、AND、ANI、OR、OUT、SET、RST、TON、CTU这一排英文缩写第一反应是这怕不是又要学一门编程语言其实完全不是。PLC的基本指令本质上就是把老式继电器控制柜里那一堆接触器、时间继电器、中间继电器的接线逻辑换了一种方式搬进电脑里。你在继电器电路图上怎么连线在梯形图里就怎么画触点、怎么串并联基本指令全部对应得上。这篇内容我是写给三类人看的刚转行做电气自动化的新人、有一定维修基础想学会PLC编程的产线电工、还有在学校学过理论但没碰过真机的学生。看完你会明白LD、AND、OR这些指令并不是需要死记硬背的语法而是每一个都有清晰的物理含义和工程场景。我尽量用实际设备里的例子讲不整虚的全是这些年在现场摸爬滚打总结出来的东西。1. 先搞明白一件事PLC基本指令就是把继电器电路图搬进了电脑1.1 从启动柜到梯形图同一个回路两种表达在PLC普及之前一台设备的控制逻辑是靠什么实现的一个铁皮柜子里面密密麻麻排着接触器、中间继电器、时间继电器线从这头绕到那头缠得跟蛛网一样。你要改一个动作逻辑就要重新接一根线甚至重新选型换继电器。那时候电工师傅最怕的就是图纸是对的接线接错了。PLC出现之后这些逻辑被搬进了程序。梯形图这个语言保留了继电器线路图的画法左边一条母线右边一条母线中间是触点和线圈。你也完全可以把它当成一张电路图来读。所以记住第一件事PLC基本指令不是计算机语言的逻辑而是电气控制逻辑。你用试电笔、万用表思维去理解它比用编程思维去理解它要顺畅十倍。对应关系也很简单。梯形图里的输入触点对应PLC的输入端子和外部按钮、开关、传感器输出线圈对应PLC的输出端子和外部接触器、电磁阀、指示灯中间还有一些只看程序看不见的辅助继电器对应老柜子里的中间继电器。这些名词后面都会反复出现。1.2 LD/LDI/OUT最容易被忽略但最有分量的三条指令先说三条最基础的。LD、LDI、OUT它们在很多教材里被放在第一页也因为太简单被不少人跳过了。但在我实际带过的徒弟里凡是后面写程序总出问题的仔细回头查多半是这三条指令的使用习惯从一开始就没养好。LD取指令相当于在一张白纸上放一个常开触点。在继电器电路里常开触点就是平时不接通、按下去才接通的那个。LDI取反指令相当于放一个常闭触点平时是通的外部信号一来反而断开。OUT输出指令就是把这一行的逻辑结果送给某个线圈。举一个最简单的例子X0接一个启动按钮Y0接一个指示灯。程序就三行LD X0 OUT Y0按钮按下去X0接通Y0有输出灯亮按钮松开灯灭。就这么简单。但你注意这里的X0、Y0都是PLC的映像区地址不是直接接到PLC端子的线。PLC工作是分步的先读所有输入信号放进输入映像区然后程序从上往下扫描不停地计算、赋值最后把所有输出结果从输出映像区搬到物理输出端子。这就是扫描工作方式。所以你在选型的时候输出点Y0不能直接驱动一台7.5kW的电机PLC输出顶多带个中间继电器或者小功率负载重负载一律通过外部接触器转接。这个不是指令的问题是硬件I/O容量的问题但很多新手的第一个烧毁输出点就这么来的。1.3 自锁、互锁与点动三个经典回路背后的位逻辑组合如果你只会LD和OUT那只能做按钮按住才动作的点动控制。真正的设备控制里你按下启动按钮松手之后设备还得继续运行这就需要自锁。什么叫自锁拿接触器来类比按下启动按钮接触器吸合设备启动这时松开按钮接触器靠自己的辅助触点继续维持线圈有电。在PLC里这个自己的辅助触点就是用OR指令并联一个自己的常开触点实现的LD X0 // 启动按钮 OR Y0 // 自锁回路Y0已动作时把它自己也并入导通条件 ANI X1 // 停止按钮用常闭触点串在回路里 OUT Y0 // 输出到接触器这段程序的意思很直白启动按钮按下去Y0通Y0一通OR Y0这个触点也通了于是即使你松开X0Y0照样保持。想停X1这个停止按钮通过常闭触点接法一按下X1回路断开Y0掉电。这个逻辑和继电器自锁电路一模一样。再往上一层是互锁。最常见的场景是电机正反转正转接触器Y0和反转接触器Y1绝对不能同时吸合否则相间短路。程序上怎么保证正转回路里串一个反转接触器的常闭触点反转回路里串一个正转接触器的常闭触点。双侧互锁LD X0 OR Y0 ANI X1 // 急停 ANI Y1 // 反转未动作时才能正转 OUT Y0 LD X2 OR Y1 ANI X1 // 急停 ANI Y0 // 正转未动作时才能反转 OUT Y1这一段程序里AND系列指令就是串联OR系列就是并联。记住这个物理对应你就不会在梯形图里把逻辑画反。我还要多说一句程序里的互锁只是第一道保险外部接触器上必须另外加硬件互锁。程序是在扫描周期内运行的一旦PLC本身出问题或者输出点卡住程序互锁就是一张废纸硬件互锁兜底。2. 串联并联别只记口诀AND/ANI、OR/ORI的工程含义2.1 AND系列串联当中的顺序执行思维AND把常开触点串联到当前逻辑回路里ANI把常闭触点串联进去。串联意味着什么意味着必须同时满足。在继电器电路里串联的两个按钮任何一个断开回路就断。在逻辑里这就是严格的与关系。我强调一个容易忽略的点梯形图每一行的逻辑是从左到右、从上到下扫描的所以串联触点的顺序会影响你排障时的阅读舒适度。比如上面那个正反转程序我把急停X1放在互锁Y1的前面是为了突出急停优先的直观感。虽然从逻辑结果上串联顺序不影响最终是否导通但从维护视角看把危险信号、总停信号放在最左边一眼就能看清楚安全条件。这个习惯建议养成。2.2 OR系列并联分支与先到先得OR并联一个常开触点ORI并联一个常闭触点。并联意味着任一条件成立即可。最典型的就是多地控制同一个泵既可以在中控室启动又可以在现场启动。LD X10 // 现场启动按钮 OR X11 // 中控室启动按钮 OR M100 // 自动模式下的远程指令 ANI X12 // 停止 OUT Y10这里X10、X11、M100三个条件任何一个为ONY10就能保持导通。你说三个地方同时按会不会冲突不会因为这是并联没有谁覆盖谁的问题任何一个为ON结果就是ON。很多新手把多条件启动写成先赋值后覆盖用MOV去改同一个位反而容易出乱子。2.3 组合案例双按钮启动三地控制实际工程里很少用单一触点基本都是组合逻辑。比如一个需要双手启动的设备安全要求是左右手两个按钮同时按下才动作防止操作员一只手还在模具里。这个逻辑用AND一下就出来了LD X0 // 左手按钮 AND X1 // 右手按钮 ANI X2 // 安全门开关常闭 OUT Y0再叠加三地控制就把OR和AND混合用。你要记住的不是指令本身而是怎么把一句句中文控制要求翻译成电路图思维。同时按下就是串联任何一处能启动就是并联安全条件不满足就断开就是串联常闭。3. 定时器指令TON/TOF/TP选错一个设备就跟你闹脾气3.1 TON通电延时星三角、风机、液压站的通用套路定时器里用得最多的一定是TON通电延时型。规则就一句输入条件从OFF变ON的瞬间开始计时时间到输出置ON输入条件一旦变OFF输出立即复位时间清零。注意输入一直ON期间如果时间还没到输出是保持OFF的。经典应用是电机星三角降压启动。启动瞬间先星形接法电机绕组电压降低以减小启动电流延时几秒后切换成三角形接法电机全压运行。用程序写出来核心就是LD X0 OR Y0 OUT Y0 // 主接触器 LD Y0 OUT T0 K50 // 延时5秒K50取决于定时器分辨率 LD T0 OUT Y1 // 星形运行吸合在定时器没通前 LD T0 ANDN Y1 // 时间到且星形已经断开 OUT Y2 // 三角形运行吸合你看整个切换的核心就是定时器T0到了没有。K50这个设定值在不同品牌、不同型号的PLC里代表的时间长度不一样。在某类日系PLC里T0默认分辨率是100msK50就是5秒如果T0所在编号段分辨率是10ms那K50就是0.5秒。所以写定时器之前先查你手里那台PLC的软元件表别把数值50当成50秒。3.2 TOF断电延时设备停电风机不能马上停TOF和TON正好相反它是断电延时型。输入条件从OFF变成ON的瞬间输出立刻置ON不等待输入条件从ON变OFF的瞬间开始计时时间到输出才变OFF。最有代表性的场景是液压站或主轴箱的冷却风机。设备正常运行时风机跟着转但你按了停机之后液压泵虽然停了泵体和油箱里的余热还在如果风机立刻停几分钟内温度会往上蹿。所以控制要求写成泵停止后风机继续转5秒再停。如果用TON你会发现逻辑绕来绕去很别扭用TOF直接搞定LD Y10 // 液压泵运行信号 TOF T1 K50 // 泵停止后继续延时5秒 LD T1 OUT Y11 // 冷却风机这里最容易被坑的点是TOF在输入条件一上来的时候输出就已经ON了不是等延时结束才ON。我见过不止一个新手把TOF理解成输入ON了先等5秒再动作结果程序写出来风机要么不转要么转的时间完全不对。你只需要盯住一个区别TON是通电后延时才有输出TOF是断电后延时关闭输出。3.3 TP脉冲输出一次扫描能抓住的信号才靠谱第三种定时器是TP脉冲定时器。输入从OFF变ON一次不管这个输入信号维持多长时间输出只ON一个固定的时间宽度。时间到自动OFF。只要输入没有再变OFF再变ON输出不会再启动。TP的实用价值在于脉冲展宽。传感器发出的到位信号可能只有几十毫秒而PLC的扫描周期在5~20毫秒之间理论上能捕捉到但如果信号正好发生在程序扫描的间隙就可能漏掉。更稳妥的办法是把短信号接入TP让它输出一个100ms或者更宽的固定脉冲后续逻辑用这个展宽信号来做判断、计数可靠得多。LD X5 // 接近开关脉冲 TP T2 K10 // 展宽为1秒 LD T2 OUT M50 // 展宽后的标志位这种做法在计数工位上非常实用后面讲计数器时还会遇到。3.4 定时器要记住的常识扫描周期、分辨率与瞬时值这里我要集中说三个平时最容易出问题的点。第一扫描周期。PLC是循环扫描执行程序的定时器的计时动作并不是物理上每一毫秒都更新而是跟随扫描周期去刷新。扫描周期是几毫秒到十几毫秒所以定时精度能做到几十毫秒级对于绝大多数设备控制绰绰有余。你要是拿PLC定时器去做高精度测量那纯属用错工具。第二分辨率。就是前面说的K数值乘以分辨率才是实际时间。选定时器编号时先看分辨率100ms量程大适合秒级延时10ms、1ms量程小但精度高适合快速切断、瞬时检测。定时器编号段的划分每个品牌、每个系列都不一样写程序前把这页手册拍下来贴在电脑屏幕边框上比记在脑子里靠谱。第三在程序里监控定时器的当前值是排查定时相关故障最快的手段。梯形图监控界面上直接能看到T0的当前计数值如果当前值走着走着停住不动说明输入条件不稳定如果当前值是0但程序逻辑没动说明这段程序根本没被执行到很可能被跳转指令跳过了。这个细节后面排错章节还会讲到。4. 计数器指令产线上所有数数需求都跑不出这三类4.1 CTU加计数工件计数的最简实现与复位陷阱计数器指令的核心就一条输入信号从OFF变ON的上升沿有效当前值加1。CTU是加计数每来一个脉冲计数器的当前值加1一直加到设定值输出变为ON之后如果不复位输出继续保持ON。举一个典型的输送线计数场景传送带送过来一个一个小盒子入口处有一个对射光电传感器程序要每满20个触发一次挡料气缸动作把一箱货推入分拣道。程序大致思路LD X0 // 光电传感器 CTU C0 K20 // 计数到20 LD C0 OUT Y3 // 气缸动作 LD X1 // 复位按钮 RST C0你看计数器C0的计数脉冲来自X0的上升沿设定值是20。当C0当前值等于20时C0触点导通Y3有输出。但你注意一个关键问题C0到达20之后如果还有第21、第22个盒子过来计数器当前值会继续往上加输出依然保持ON。所以实际工程里气缸动作之后必须有一个复位动作把C0清回0。复位来源可以是气缸动作到位信号也可以是下一箱物料的检测信号。很多人第一次调试时发现气缸动作一次之后就再也不动作了十有八九就是计数器没复位。4.2 CTD减计数把还剩多少直接变成控制信号和CTU反过来CTD是减计数。每一路输入脉冲当前值减1减到0时输出置ON。它的工程场景很有意思不是已经来了多少而是还剩多少。例如料仓里有50个零件操作工每取走一件取料口传感器来一个脉冲计数器从50往下减。减到0说明料仓空了程序给出一个缺料信号让AGV小车去补料或者让指示灯报警。这个场景用CTD比CTU多了一个优势你不需要在程序里写当前值是否到达50的比较逻辑计数器自己就把减到0这个状态变成触点了。LD X2 // 取料口传感器 CTD C1 K50 // 从50往下减 LD C1 // 减到0时导通 OUT Y4 // 缺料报警CTD同样存在复位问题补料完成后要用RST把当前值重新设回50。注意RST对CTD来说是把当前值恢复到设定初值不是清零这个和CTU的RST含义有区别。4.3 计数定时器组合做一个低成本的设备看门狗单用计数器的场景很直接真正体现功力的是计数器和定时器组合使用。我在很多产线项目里见过这样一个需求设备运行过程中某个机构必须在规定时间内完成指定次数的动作如果没完成说明机构卡滞或者传感器失灵要立刻报警停机。这个需求用定时器计数器可以做得很巧妙。思路是这样的用一个定时器给一个固定时间窗口比如30秒在这个窗口内用一个计数器统计机构到位信号的脉冲数。定时器时间一到用比较逻辑看一下计数器的当前值有没有达到设定数没到就触发报警。具体程序可以这样组织T0定时30秒C0统计脉冲T0时间到且C0当前值小于设定值则M0报警。比较的那一步就需要用到下一章的指令了这里先记住思路计数器和定时器是天生的搭档一个管次数一个管时间窗口两者一拼就能做出很多你原以为需要买专门模块才能实现的功能。5. 比较与传送指令让程序从一个只会走流程的变成会做决定的5.1 触点比较与CMP指令数值大小怎么驱动分支位逻辑指令和定时器、计数器加在一起能做的还是一个走流程的控制。比如液位到了高位就停泵到底了再开泵这种判断用液位传感器有没有信号的开关量就能做。但很多设备的判断不是有或没有而是数值是多少、大于多少、小于多少。这时候就要用比较指令。比较指令在梯形图里最常见的形态是触点比较比如当前温度大于80℃时接通LD D0 K80 OUT Y5这行的意思是D0这个数据寄存器里的数值如果大于80Y5就输出。这里D0可不是一个开关量它是一个16位的存储器里面存的是温度变送器送过来的数值比如75、82这些。另一种写法是用CMP指令把两个数比较后的三种结果大于、等于、小于分别送到三个标志位里CMP D0 K80 M10执行完之后M10对应D0K80M11对应D0K80M12对应D0K80。后续程序直接看这三个位就可以做分支判断。这两种写法本质一样只是触点比较写起来更直接CMP适合后面多次引用比较结果的情况。5.2 MOV指令配方切换和参数写入的高频用法MOV是传送指令功能就是把一个值复制到另一个地方。看起来简单但在实际工程里出场率极高。最典型的用法是做配方切换。举个例子一套包装机有3种规格的包装每种规格对应不同的封口温度、切断长度。你不用把每种规格单独写一套完整的控制逻辑而是用一个外部旋钮选规格程序根据旋钮的位置把不同的参数传送给控制用的数据寄存器LD X10 // 规格1选择 MOV K350 D100 // 封口温度设为350度对应值 MOV K120 D101 // 切断长度设为120mm对应值 LD X11 // 规格2选择 MOV K380 D100 MOV K150 D101后面控制程序只要引用D100、D101这两个寄存器里的值就自动适配当前规格。改配方时改程序开头这一小段传送逻辑不动主程序维护成本低很多。这个参数集中管理的思路比你满地散落着一大堆数值比较指令好维护得多。5.3 D寄存器与K常数的配合别把数据存到线圈里去讲到MOV就一定要把数据寄存器的概念说清楚。PLC里有两类变量一类是位bit只有0和1两个状态比如X、Y、M一类是字word能存数值比如D寄存器。很多新手搞混把计数器的设定值当成一个开关量去处理或者在M继电器里存数字这就像拿一个灯泡去当温度计用根本存不进去。K常数就是写在程序里的固定数值比如K80、K350它不带符号时范围是0到65535带符号时是-32768到32767。16位D寄存器的范围和它一致。如果你的数值超过这个范围就要用32位的指令和双字寄存器这是后话但选型之前心里要有个数。还有一个工程习惯现场修改参数一律通过触摸屏或上位机写到D寄存器里不要在程序里反复改K值。你想想一个设备已经放在客户车间每次调整温度都要让电气人员开电脑、改程序、下载多折腾。把参数都挪到D寄存器做几个HMI输入框操作工自己就能调这才是基本指令组合起来的实际效果。6. 一个真实排错过程按下启动没反应我按这个链路一步步找到问题6.1 现象回顾该亮的灯都亮就是输出不动有一次我在现场调试一台小型组装设备。客户反馈按下启动按钮触摸屏上启动按钮已经变灰了PLC的输入指示灯X0也亮了程序监控里X0触点明明闭合但Y0输出点就是不亮接触器不吸合设备不动。这种问题最迷惑人的地方在于你看到的是该亮的都亮了该通的都通了但结果就是不对。接下来的排查链路很重要千万不要一上来就怀疑PLC坏了更不要随手改程序。6.2 排错链路硬件引脚、公共端、线圈重复、扫描顺序我的排查顺序是固定的一层层缩小范围第一步看PLC的输出指示灯。如果Y0指示灯不亮说明问题在程序侧直接跳去查程序如果Y0指示灯亮了但外部负载不动说明问题在硬件回路。第二步如果Y0灯亮但接触器不动用万用表量PLC输出端子和负载公共端之间有没有电压、公共端COM的24V有没有送过来、外部中间继电器线圈两端有没有电压差。很多程序不对的问题最后查出来其实是输出公共端保险丝烧了或者接线端子松了。第三步如果Y0灯不亮进编程软件用查找引用功能搜Y0在程序里出现了几次。这一步至关重要。我当时查到的结果就是Y0在程序里出现了两次被两个不同的地方OUT了。6.3 双线圈输出程序里同一个Y点写两次OUT的后果双线圈输出专业说法叫双线圈矛盾指的是同一个输出线圈地址在程序中被写了两次OUT指令。PLC扫描是从上往下进行的最终输出映像区的状态由最后一次OUT决定。于是问题就来了前面的OUT Y0算了一通条件也满足了但是程序往下走到后面又被第二个OUT Y0覆盖掉如果第二个OUT的条件不成立Y0就被写成0前功尽弃。这就像你在一张纸上先写了开结果下一页又写了个关最后以最后一笔为准。程序监控时你会看到Y0梯形图前面一段的线圈明明有黄色的导通状态闪烁的痕迹可输出就是保持不住。很多设计新手会有意无意犯这个错在自动程序里OUT了一次Y0又在手动程序里OUT了一次切换模式的时候两个OUTY0互相打架。解决办法有两条。一是把逻辑合并两个条件都放到同一个OUT的梯形图里去就是多个分支并联进一个OUT指令。二是用SET/RST代替OUT需要开的地方SET Y0需要关的地方RST Y0这样既能实现锁存也回避了双线圈覆盖的问题。但对于同一个输出点同一时刻全程序里SET/RST也不能乱套建议还是集中管理。6.4 这个坑给我们的习惯先画逻辑再写程序那次排查最后只花了两分钟找到问题但教训让我记住了很久。双线圈这种错误光靠眼睛盯着密密麻麻的梯形图很难发现尤其程序几百行的时候。所以后来我给自己定了一个硬规矩写程序之前先在纸上把控制逻辑画成简单的时序段标出哪些输出点会在哪些场景下动作并在程序末尾集中做一个输出映射区。程序主体里只操作M内部继电器最后统一通过输出映射区把结果送到Y点这样同一个Y点的OUT全程序只出现一次双线圈问题从根源上杜绝。这个习惯一开始会显得麻烦但等你维护的设备多了就明白排错最省时间的办法不是找错误找得快而是让错误根本造不出来。基本指令虽然简单组合起来之后程序的结构和习惯才是真正决定设备后期好不好用、好不好修的东西。我在实际项目中还有一个体会学基本指令千万别在电脑仿真软件里关起门来学一定得对着实物或者至少对着真实案例学。把指令用进真实设备里见过它在该动的时候动、不该动的时候不动你对指令的理解才会从会写变成会用。你在仿真软件里标一个1很容易但在现场这个1是从几米外的传感器传过来、经过断线排查、经过模块转换、最终变成通信报文才落到程序里的这里面的经验只有踩过线才值钱。最后分享一个小技巧。接手别人设备时我习惯先按F4或者编程软件里的查找功能把所有输出线圈过一遍看有没有重复输出再用监视模式盯着Y点的导通状态同时手按外部按钮观察实际动作。这一套做下来大多数设备不动作的问题都能在十分钟内定位。基本指令就这么几页纸真正复杂的从来不是指令本身而是你怎么把它们组织成一套可靠、看得懂、改得动的控制逻辑。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑