我在车间调试设备时,常有同行问我一个问题:PLC基本指令到底该怎么学,才不算白学?常开触点、常闭触点、输出线圈、定时器、计数器,这些名字人人都能叫得出来,可真到现场一调设备,问题全冒出来了——同一个输出点写了两遍、定时器时间怎么算都不对、计数器乱跳、按钮按一下就触发好几次。这些问题表面上是“程序写错了”,根子其实都在基本指令的使用方式上。
这篇内容我打算把PLC最核心的基本指令一次讲透,从位逻辑到定时器、计数器,再落到一个完整的小项目上,把指令背后的扫描原理、参数计算、信号处理和现场坑都过一遍。不管你是刚接触PLC的初学者,还是已经会写梯形图但总遇到“灵异现象”的调试工,都能在里面找到有用的一段。内容以目前市面上最普及的PLC指令体系为参照,换到其他品牌也只是助记符不同,逻辑几乎通用。
1. 指令系统的底层逻辑:搞清楚PLC是怎么执行程序的
1.1 存储区是理解指令的第一把钥匙
讲指令之前,必须先讲存储器。PLC里的每一个触点、线圈,本质上都是在读写存储区里的一个二进制位。这个“位”存储的是0或1,对应继电器控制回路里的“断电/得电”。存储区按功能分几大类,不同品牌叫法略有差异,但逻辑是一一对应的:
- 输入映像区:保存输入端子上物理信号的状态,程序里读输入地址时,读的是映像区里那一份采样值。
- 输出映像区:保存程序计算出的输出结果,扫描结束后统一写到物理输出端子。
- 位存储区:程序内部使用的中间位,不直接对应外部端子,用来暂存状态、做逻辑中转。
- 数据区:存放定时器的预设值、计数器的当前值、工艺参数等数值型数据。
- 特殊标志位:提供系统运行状态,比如首次扫描标志、扫描周期时钟等。
“映像区”这三个字很容易被忽略。我在培训新人时发现,很多人的脑子里默认PLC程序是在“实时读取物理输入”,结果一遇到输入信号变化和程序扫描不同步的情况就懵了。实际上,PLC为了保证程序执行过程稳定,不会在每条指令执行时都去读一遍物理端子的电平,而是在扫描开始时统一采样一次,程序执行期间用的都是这份“快照”。理解了这一点,后面所有指令行为都顺理成章。
1.2 扫描周期:程序不是“同时运行”的
PLC运行用户程序的方式是循环扫描,完整周期分三个阶段:
- 读输入:把所有输入端子状态采样到输入映像区。
- 执行程序:CPU从第一条指令开始逐条执行到最后一条,期间读写映像区和内部存储区。
- 写输出:把输出映像区的内容一次性送到物理输出端子。
这个过程反复进行,一圈的时间就是扫描周期,一般几毫秒到几十毫秒。这里有两个规律,是大量现场怪问题的根源:
- 程序执行期间,输入映像区不再随物理输入变化。所以同一个扫描周期里,程序多处读取同一个输入地址,得到的结果完全一样。如果程序执行到一半时物理输入变了,CPU这一圈看不见,下一圈才开始生效。
- 输出线圈写入的是输出映像区,不是直接驱动外部端子。同一个输出地址如果被多次赋值,只有最后一次的值会送去物理输出,前面写的全被覆盖了。
这两个规律解释了一个经典现象:程序里的输出点明明在第一个网段已经置1,后面某个网段又把它写0,外部执行机构愣是没反应。不是PLC坏了,是后面覆盖前面。后面讲常见问题时会再展开。
1.3 基本指令的分类地图
常见PLC的基本指令大致分成四类:
| 类别 | 作用 | 典型指令 |
|---|---|---|
| 位逻辑指令 | 处理开关量,构成控制逻辑主干 | 触点类LD/LDN/A/AN/O/ON,线圈类=,置位S/复位R |
| 定时器指令 | 实现延时控制 | 接通延时TON、断开延时TOF、保持型TONR |
| 计数器指令 | 统计脉冲/事件次数 | 加计数CTU、减计数CTD、双向CTUD |
| 程序流控制指令 | 改变程序执行顺序 | 跳转、子程序调用、循环等 |
前三类是本文的重点,其中位逻辑又是地基中的地基。后面我会把每个指令拆开讲,结合真实调试场景说明为什么这样用、不这样用会踩什么坑。
2. 位逻辑指令:触点和线圈到底怎么工作
2.1 常开与常闭触点的本质
先说一个基本概念:PLC程序里的“触点”并不是物理继电器上那种有实际接触结构的开关,它只是一条读状态+判断的指令。CPU执行触点指令时,就是检查某个存储位是0还是1,然后决定让不让“能流”通过。
- 常开触点:读取地址的状态,值为1时导通,为0时不通。梯形图里画成两条竖线。
- 常闭触点:读取地址的状态,值为0时导通,为1时不通。梯形图里带一条斜杠。
“常闭触点”本质是逻辑取反,这一点太重要了。我在现场见过不止一次把急停信号接成常开触点、程序里也按常开写,结果急停回路断线了,PLC完全不知道,设备照常运行。安全回路的设计原则是:急停按钮通常接常闭触点,线路断裂或按下急停都会让信号消失,程序里用对应的逻辑去判断。但这只是软件层,硬件上还必须有独立的安全链,绝不能让安全完全依赖PLC程序。
还有一个新手常犯的错:把常闭触点和“没有信号”划等号。常闭触点导通的条件是“该位为0”,而“该位为0”可以是传感器没有输出、线路没接好、模块故障,甚至程序里别的地方把它复位了。排查触点不导通的问题时,不能只看程序里这一条,要看这个地址在整个程序里被谁写过、硬件上有没有信号。
2.2 串联、并联与执行顺序
单个触点只能表达一个条件,实际控制都是多个条件组合。组合方式对应三种逻辑运算:
- 串联(与逻辑):前面的触点和后面的触点都导通,结果才导通。助记符是A、AN,例如A I0.0表示“与常开I0.0”,AN I0.1表示“与常闭I0.1”。
- 并联(或逻辑):几个触点中任意一个导通,结果就导通。助记符是O、ON。
- 块与、块或:把多个触点构成的“块”当成一个整体参与运算。
PLC程序是从上到下、从左到右执行的,CPU里没有电路那种“电流同时流过所有并联支路”的概念,只有指令执行的先后顺序。所谓并联,在语句表里就是用O指令把前面的结果“或”进来;所谓串联,就是用A指令把后面的条件和当前结果“与”起来。
举一个最简单也最经典的写法:启保停电路。按下启动按钮,输出线圈得电并自锁;松开按钮后,靠自身触点维持导通;按下停止按钮,输出断开。
LD I0.0 // 启动按钮 O Q0.0 // 自锁触点,并联上去 AN I0.1 // 停止按钮,串联常闭 AN I0.2 // 急停正常,串联常闭 = Q0.0 // 输出到接触器这段程序的执行过程是:先读启动按钮,然后把它和Q0.0当前状态“或”起来,无论是启动按钮按下还是输出已经在自锁状态,这个“或”的结果都是1;接着和停止按钮的常闭做“与”,停止按钮没按(I0.1为0)时AN I0.1才为1;再和急停正常信号做“与”。所有条件都满足,Q0.0为1,否则为0。
这里有个容易写错的地方:自锁触点O Q0.0放在AN I0.1前面还是后面,逻辑完全不同。如果写成先AN I0.1再O Q0.0,那自锁触点就绕过了停止按钮,停止按钮永远停不下设备。这种错误在现场并不少见,排查方法很简单:把梯形图逻辑翻译成“如果什么什么,就什么什么”,逐条念一遍,马上就发现不对。
2.3 输出线圈、置位与复位的取舍
输出指令有三种常用形式:
- 普通线圈:输出状态只跟本扫描周期前面的逻辑结果有关,条件不成立立刻变0。适合“条件满足就动作,不满足就停止”的场景,比如指示灯随运行状态变化。
- 置位:输出被锁存为1,即使前面的逻辑不再成立,也保持1,直到执行到复位指令才恢复0。
- 复位:把置位的输出恢复为0。
那什么时候用普通线圈,什么时候用置位/复位?我个人的经验总结:
- 需要“记住”某个状态,不管条件怎么变化都保持输出,用置位/复位。典型场景是气缸伸出到位后要一直保持,直到另一个信号来才缩回。
- 输出和输入条件必须严格实时对应,用普通线圈。比如运行指示灯,设备一停灯就该灭。
- 涉及安全停机的回路,尽量用普通线圈或复位来关断,避免用置位锁存一个不应该继续输出的信号。
置位/复位用多了还有一个大坑:同一个输出地址在多处置位、多处复位,程序执行顺序靠后的会覆盖靠前的。排查这类问题时,建议在编程软件里搜索该地址的全部出现位置,一条条捋清楚,光靠看梯形图眼睛很容易漏。
2.4 实操示例:双电机启停与互锁电路
我把最常见的双电机互锁控制展开讲一下,这是位逻辑指令的综合应用。
需求:按下电机A的启动按钮,A运行;按下电机B的启动按钮,B运行;按下公共停止按钮,全部停止;A和B不能同时运行(互锁);急停按下时所有输出断开。
输入分配:电机A启动按钮I0.0,电机B启动按钮I0.1,公共停止按钮I0.2,急停回路I0.3。 输出分配:电机A接触器Q0.0,电机B接触器Q0.1。
// 电机A LD I0.0 // A启动按钮 AN I0.2 // 停止按钮未按下 AN Q0.1 // B未运行(互锁) O Q0.0 // A自锁 AN I0.3 // 急停正常 = Q0.0 // 电机B LD I0.1 // B启动按钮 AN I0.2 // 停止按钮未按下 AN Q0.0 // A未运行(互锁) O Q0.1 // B自锁 AN I0.3 // 急停正常 = Q0.1这里有两个细节值得说。第一,互锁用的是对方接触器的常闭触点,也就是“对方没运行”这个条件。只有等对方真正断开,自己才能吸合,这个逻辑在继电器回路里靠硬件接线实现,在PLC里靠程序实现,但现场的物理互锁接触器仍然建议保留,因为程序判断的是映像区状态,万一接触器触点粘连,程序是不知道的。第二,急停信号I0.3常闭接入,正常时I0.3为1,程序里用AN I0.3表示“急停回路正常”才允许输出。如果急停按下,I0.3变0,所有输出立即断开。
写完程序后,我还会在两端并联一个“同时启动禁止”的处理:如果工艺允许两个电机同时启动会出事故,可以在程序里把两个启动按钮互斥,或者干脆用选择开关决定当前允许启动哪个。基础逻辑掌握了,这些变体都很好加。
3. 定时器指令:延时的背后有扫描周期参与
3.1 三种定时器类型,各管一个时间场景
定时器相当于继电控制里的时间继电器,但比时间继电器灵活得多。主流PLC至少提供三种定时器:
| 类型 | 动作特点 | 典型场景 |
|---|---|---|
| 接通延时TON | 输入导通后开始计时,时间到输出置1;输入一旦断开,立即清零 | 电机启动延时、设备顺序启动 |
| 断开延时TOF | 输入导通时输出立即为1,输入断开后才开始计时,时间到输出清0 | 风扇停机后延时停止、传送带尾料处理 |
| 保持型接通延时TONR | 计时过程中输入断开,计时值保持,累计到设定值才输出,必须用复位指令清零 | 设备累计运行时间、检修提醒 |
很多新手分不清TON和TOF,我提供一个最直白的记忆方法:TON是“开始计时后等一会儿才有输出”,TOF是“输出马上有,断开后等一会儿才消失”。两者梯形图符号几乎一样,区别只在内部逻辑和复位行为。
3.2 分辨率与时基:PT值不是毫秒数
定时器的“时间设定值”通常用PT参数表示,但这里的坑在于:PT的单位不是固定的毫秒,而是“时基乘数”。PLC内部定时器按分辨率分成几种,常见的是1ms、10ms、100ms。PT=100,写在10ms定时器上是1秒,写在100ms定时器上就是10秒,差距十倍。选错定时器编号,程序逻辑看起来完全正确,实际现场就是不动或动作太慢。
以最常见的指令体系为例,定时器编号和时基有固定的对应关系:
| 时基 | 典型编号范围 | PT=10时的实际时间 |
|---|---|---|
| 1ms | T32、T96等 | 10ms |
| 10ms | T33~T36、T97~T100等 | 100ms |
| 100ms | T37~T63、T101~T255等 | 1000ms |
不同品牌、不同CPU型号的对应关系会有差异,写程序前一定要翻开手册确认,或者直接在软件里看定时器属性。我见过有人把延时写在100ms定时器里,现场等了几分钟才动作,查了半天最后发现PT值按秒算的,闹了个大乌龙。
定时时间计算公式很简单:
实际时间 = PT值 × 分辨率
比如要延时3秒,选10ms定时器,PT=300;选100ms定时器,PT=30。由于PT值是整数,100ms分辨率做不到50ms这种非整百延时,高精度场景必须选1ms或10ms定时器。
3.3 定时器的常见坑:自复位写法
定时器能不能做周期循环?能,但写法有讲究。最常见的问题:想让定时器周期动作,有人直接把定时器的常开触点串在输入条件里,结果定时器永远无法启动。原因在于定时器输出为1的瞬间,输入条件已经断开,但同一个扫描周期内定时器还没清零,要等下一周期才重新计时。这种写法看起来循环了,实际行为却和预期差得很远。
正确做法是用中间位做自复位脉冲:
LD T37 // 定时时间到了 = M0.0 // 输出一个周期的脉冲 LD I0.0 // 运行条件 AN T37 // 时间没到时允许启动 TON T37, 100 // 10秒定时(100ms×100)T37时间到时,M0.0给出一个扫描周期的脉冲,同时T37的常闭触点断开,定时器在下一扫描周期清零,然后重新开始计时,形成固定周期的脉冲。这个脉冲可以用来驱动指示灯闪烁、周期采样、定期循环动作等。
3.4 经典案例:电机星三角延时切换
星三角启动是定时器最经典的应用。电机启动时先接星形,延时几秒再切换成三角形,降低启动电流。核心逻辑:
- 按下启动按钮,主接触器吸合,星形接触器吸合,同时启动延时定时器(5秒)。
- 5秒后,先断开星形接触器,停一小段间隔(约0.5秒),再吸合三角形接触器。
- 停止时全部断开。
程序关键段:
LD I0.0 // 启动按钮 AN Q0.2 // 未在运行状态 = M0.0 // 运行使能 LD M0.0 = Q0.0 // 主接触器吸合 = Q0.1 // 星形接触器吸合 LD M0.0 TON T37, 50 // 5秒(100ms×50) LD T37 AN Q0.1 // 先断开星形 = M0.1 LD M0.1 TON T38, 5 // 间隔0.5秒(100ms×5) LD T38 = Q0.2 // 三角形接触器吸合 LD I0.1 // 停止按钮 R Q0.0 R Q0.1 R Q0.2注意切换时序:星形没断开之前,三角形绝对不能吸合,否则相间短路。软件逻辑上,T37动作后先执行AN Q0.1断开星形,再延时0.5秒吸合三角形,这个间隔是出于接触器机械动作时间的考虑。接触器从线圈断电到触点完全释放需要几十毫秒,如果没有间隔,星形触点还没断开,三角形已经吸合,轻则烧保险,重则炸接触器。这种工艺经验,指令手册里不会写,但现场调试必须加。
4. 计数器与边沿检测指令
4.1 计数器的分类与计数对象
计数器指令统计“脉冲次数”,也就是输入条件从0变1的次数。主流PLC提供三种:
- 加计数器CTU:每来一个脉冲,当前值加1;当前值到达预设值PV时,输出位置1;复位端有效时当前值清零。
- 减计数器CTD:从预设值往下数,减到0时输出置1。
- 加/减计数器CTUD:同时有加计数端和减计数端,用于双向统计,比如物料移入移出、位置正反向行程计数。
计数器指令统计的是“边沿”而不是“电平”。如果计数输入是一个常开触点,只要这个触点一直保持导通,计数器只会计一次,不会一直往上加。这是最多人搞错的地方。统计产品数量时,光电传感器的信号只要被挡一次就计一个,靠的正是边沿检测。
4.2 边沿检测指令:上升沿与下降沿的正确姿势
边沿检测在主流PLC里都有,助记符略有差异,有的用EU/ED,有的用触点型边沿指令。
- 上升沿:输入条件从0变1的瞬间,输出一个扫描周期的脉冲。
- 下降沿:输入条件从1变0的瞬间,输出一个扫描周期的脉冲。
边沿检测最大的价值是“只动作一次”。比如按钮每按一次,计数器加1。如果不做边沿检测,按钮按下的物理过程可能持续几十毫秒,而PLC扫描周期只有几毫秒,程序在多个周期内都读到按钮为1,一次按键会带来多次计数。这也是很多计数不准确的根源。
用一段简单逻辑说明:
LD I0.0 // 光电计数信号 EU // 取上升沿 LD I0.1 // 复位按钮 CTU C0, 100 // 加计数,计数到100时C0置位 LD C0 = Q0.0 // 满100输出EU产生的脉冲只有一个扫描周期。如果需要把这个脉冲“延长”使用,可以配合定时器,例如用脉冲去触发一个10ms的TON,再把定时器输出用于后续逻辑。
4.3 组合应用:分拣台计数停机
一个很典型的小场景:传送带上有光电传感器,一箱货物通过时挡一次光,计到10箱后传送带停止,人工把整托盘搬走后按复位按钮重新开始。
程序逻辑拆解:
- 光电信号取上升沿,保证每箱只计一次。
- CTU计到10,计数输出C0置位。
- C0的常闭触点控制传送带:未满10箱时传送带运行,满10箱停止。
- 复位按钮I0.2清零计数器,传送带重新启动。
LD I0.0 // 光电信号 EU // 上升沿 LD I0.2 // 复位按钮 CTU C0, 10 // 计到10箱 LD C0 AN I0.2 // 复位时也允许运行 = Q0.0 // 传送带运行这里有个小技巧:复位端和计数端如果同时有效,复位瞬间可能把当次计数也吃掉。虽然光电信号和复位按钮同时发生的概率接近零,但程序里用AN I0.2把复位状态排除在运行条件之外,逻辑更严谨。实际调试时,我还会给光电信号加一个10ms左右的输入滤波,避免传感器抖动导致多计数。这个滤波可以用定时器实现,也可以用输入模块自带的滤波参数,具体看硬件配置。
5. 实操:一个完整小项目的指令组合应用
5.1 需求与I/O分配
为了把位逻辑、定时器、计数器、边沿检测串起来,我拆一个调试过的简易自动灌装装置控制逻辑,具体工艺参数做了调整,但逻辑完整。
需求:传送带上的瓶子到位后,灌装阀开始灌装,灌装5秒后关闭;再等2秒,推料气缸把瓶子推走;推走完成后,如果后续有瓶子就进入下一轮循环;每完成100个瓶子,满箱指示灯亮。急停按下时所有输出复位,计数也不继续。
I/O分配:
| 地址 | 信号 | 说明 |
|---|---|---|
| I0.0 | 瓶子到位检测 | 光电传感器 |
| I0.1 | 气缸推出到位检测 | 磁性开关 |
| I0.2 | 气缸缩回到位检测 | 磁性开关 |
| I0.3 | 急停按钮 | 常闭接入,正常为1 |
| I0.4 | 计数复位按钮 | 手动清零完成数 |
| Q0.0 | 传送带运行接触器 | 运行信号 |
| Q0.1 | 灌装阀 | 5秒灌装 |
| Q0.2 | 推料气缸电磁阀 | 推出/缩回 |
| Q0.3 | 满箱指示灯 | 完成100瓶亮 |
5.2 程序逻辑逐步搭建
第一段:急停复位。常闭接入的急停I0.3正常为1,按下变0。程序开头一旦检测到I0.3为0,立即复位所有工艺输出和计数器。
LDN I0.3 // 急停被按下(常闭断开,I0.3为0) R Q0.1, 2 // 复位灌装阀和推料阀 R C0 // 复位计数器第二段:灌装控制。瓶子到位信号取上升沿,确保每个瓶子只触发一次灌装。用置位指令锁存灌装阀,避免光电信号消失后灌装中断。灌装5秒后复位灌装阀。
LD I0.0 // 瓶子到位 EU // 上升沿 AN Q0.1 // 正在灌装则不重复启动 AN I0.3 // 急停正常 S Q0.1 // 置位灌装阀 LD Q0.1 AN I0.3 TON T37, 50 // 灌装5秒(100ms×50) LD T37 AN I0.3 R Q0.1 // 灌装完成,复位灌装阀第三段:推料控制。灌装完成信号T37作为推料启动条件,置位推料阀。推出到位后保持2秒,再缩回。
LD T37 // 灌装完成 O Q0.2 // 推料自锁 AN I0.3 S Q0.2 // 推料阀置位 LD I0.1 // 推出到位 AN I0.3 TON T38, 20 // 保持2秒(100ms×20) LD T38 AN I0.3 R Q0.2 // 缩回第四段:完成计数。缩回到位信号取上升沿,表示一个瓶子完整走完流程,计数器加1。计到100时,Q0.3满箱灯亮。
LD I0.2 // 缩回到位 EU // 每个瓶子循环完成一次,取一个上升沿 LD I0.3 // 急停作为复位来源之一 CTU C0, 100 // 完成100瓶后C0置位 LD C0 = Q0.3 // 满100瓶指示灯第五段:计数手动复位。现场换新托盘后,按复位按钮清除计数。
LD I0.4 // 计数复位按钮 R C0整个程序加起来不超过50行,但把位逻辑、置位复位、两种定时器、计数器、边沿检测全部串起来了。你能把这里每一行都解释清楚,PLC基本指令就算真正过关了。
5.3 下载与调试中要注意的坑
这类小项目我第一次调试时踩过几个坑,列出来供参考:
- 光电传感器响应时间太长,瓶子还没完全到位就触发了灌装。解决方法是调整光电支架位置,并在输入点设置10ms左右的滤波,滤掉过快抖动。
- 气缸推出到位后延时缩回,如果磁性开关装得太靠前,缩回指令发出的瞬间气缸还没完全推出,会出现输出抖动假象。一般用延时2秒作为稳定阶段,比单纯靠磁性开关可靠。
- 急停复位和计数器复位放在一起,急停恢复瞬间计数可能被清零。实际工艺要求是急停恢复后不自动继续流程,而是重新计数,所以这段逻辑是故意这么写的。不同工艺要求不同,但逻辑要明确。
调试顺序上,我的习惯是先在软件状态表里强制所有输入输出,模拟一遍完整流程,确认定时器时间、计数器计数都符合预期,再上电带负载。不要一上来就接电机,万一线接错或者逻辑有隐患,设备很受伤。
6. 常见问题与排查技巧实录
6.1 同一个输出线圈被写了两次
症状:设备动作偶发异常,有时该停不停,有时该动不动,触摸屏上的状态和实际输出还不一致。
原因:同一个输出地址在程序里写了多个普通线圈指令。后面执行的线圈会覆盖前面执行的,最终输出结果只取决于最后一次赋值。这是扫描周期的直接后果。
处理:在编程软件里搜索该输出地址的全部出现位置。一个输出点在全程序里只保留一个普通线圈,其他条件全部用中间位M在逻辑中联锁,到输出段统一汇总。
6.2 定时器不动作或时间不对
症状:定时器监控画面里当前值一直不变,或者动作时间比设定值短得多/长得多。
原因:一是定时器分辨率选错,PT=100在100ms定时器上是10秒,在1ms定时器上只有0.1秒;二是定时器编号重复使用,程序里两个地方都用了同一个定时器编号,互相干扰;三是输入条件没有持续导通,TON只要输入断开立刻清零。
处理:先确认所选定时器编号对应的时基,再用状态监控观察定时器当前值变化。如果当前值停在某个数值不动,翻查该定时器编号在程序里是否重复使用,以及输入条件是否一直为1。定时器编号建议一个逻辑块用独立的号段,定期整理程序注释。
6.3 计数器多计或漏计
症状:明明只来了10个瓶子,计数器显示12;或者实际来了12个,只计到9。
原因:绝大多数是信号抖动。计数信号来自机械触点按钮或继电器触点时,触点在闭合瞬间会产生多次通断。PLC扫描速度快,一次物理接触就被当成多个上升沿。漏计则可能是计数的上升沿被程序里别的逻辑抢先消费了,或者传感器响应太慢。
处理:硬件上用带RC滤波的输入模块,或者在程序里做一个“信号稳定滤波”,用定时器检测信号持续10ms后才计数。如果计数器带边沿检测仍然多计,基本就是信号质量问题,先解决硬件再谈程序。
6.4 边沿检测和扫描周期的“只通一拍”问题
症状:用上升沿指令去驱动一个输出,结果输出根本没吸合,或者吸合了又马上断开。
原因:EU/ED输出只有一个扫描周期的脉冲,这个脉冲宽度可能就是几毫秒,远不足以让接触器线圈可靠吸合。PLC程序里看逻辑是“通了”,物理上执行机构还没反应过来。
处理:需要把边沿脉冲“延长”成持续信号时,用EU去触发一个定时器,把脉冲扩展成几百毫秒甚至更长,再用定时器输出驱动负载。或者用置位指令锁存输出,用另一个条件去复位。直接拿边沿脉冲带大负载是无效操作。
6.5 软件互锁永远替代不了硬件安全链
这是我最想强调的一条。梯形图里的软件互锁、延时、置位复位再精密,也只是逻辑层面的保护。接触器触点粘连、急停回路断线、变频器内部故障,这些物理层面的问题,程序是感知不到的。程序看到的是映像区里的二进制状态,不是真实的触点状态。
现场规范的做法是:硬件上用机械互锁触点、安全继电器、急停硬回路,软件互锁作为第二层防线。别为了省几个继电器,把安全全部押在PLC程序上。程序写得再完美,也扛不住接触器烧死。
6.6 排查问题的最快路径
最后分享一个排查口诀:先硬件后软件,先电源后信号,先输入后输出。遇到设备不动,先看输入指示灯亮不亮,再看输出指示灯亮不亮,最后才翻开程序查逻辑。很多时候,问题根本不在程序,是传感器没得电、线头松了、桥架被人踩断了。这个习惯能帮你省下大量翻程序的时间。程序排查时,先看扫描顺序,再找重复输出,最后查定时器和计数器的参数。按这个顺序,90%的基本指令问题都能快速定位。
到这里,PLC基本指令的核心内容就全部讲完了。最后分享一个我自己的习惯:每写完一段程序,不要急着下载,先在软件的状态表里把所有输入输出地址逐个强制一遍,把能想到的组合条件全部模拟一遍。实际调试中,90%的怪问题都能在这个环节暴露出来,而不是等到设备上电后再手忙脚乱地改。PLC编程难吗?指令就这么多,真正拉开差距的是对扫描周期的理解、对现场信号质量的判断,以及那些代码写不出来、只能靠经验积累的设备“脾气”。希望这篇对你有用,下次碰到相似的逻辑,可以少走点弯路。