主题
综合场景例程
6 个完整的现场小工程:交通灯、传送带分拣、一用一备轮换、故障报警与复位、自动/手动切换、进出计数。 每段都可直接录入或导入上位机运行,代码用 IL 指令文本表示(与梯形图一一对应)。
返回 例程总览。
先读这两条再动手
- 同一线圈不要出现两次
OUT:多处控制同一个 Y 时,要用ORB把条件并到一起再输出一次(见例程 5)。 - 多台顺序启动的例程在 定时计数例程,本页不再重复。
例程 1:十字路口交通灯
场景:东西、南北两个方向轮流放行,绿灯结束前先走几秒黄灯。这是练"多个定时器串起来 + 输出分区"最经典的例子。
软元件:M100 自动运行、T0~T3 四个时段、Y0/Y1/Y2 东西红/黄/绿、Y10/Y11/Y12 南北红/黄/绿
; —— 时段划分:T0 东西绿 25s → T1 东西黄 3s → T2 南北绿 25s → T3 南北黄 3s ——
LD M100
ANI T3
OUT T0 K250 ; 东西绿灯 25s(100ms 时基)
LD T0
OUT T1 K30 ; 东西黄灯 3s
LD T1
OUT T2 K250 ; 南北绿灯 25s
LD T2
OUT T3 K30 ; 南北黄灯 3s
LD T3
RST T0 ; 一轮结束,四个定时器一起复位
RST T1 ; T3 复位后其触点断开,T0 重新开始计时 → 循环
RST T2
RST T3
; —— 东西方向 ——
LD M100
ANI T0
OUT Y2 ; 东西绿(T0 之前)
LD T0
ANI T1
OUT Y1 ; 东西黄(T0~T1)
LD T0
OUT Y0 ; 东西红(T0 之后,含黄灯与南北放行时段)
; —— 南北方向 ——
LD M100
ANI T1
OUT Y10 ; 南北红(T1 之前)
LD T1
ANI T2
OUT Y12 ; 南北绿(T1~T2)
LD T2
ANI T3
OUT Y11 ; 南北黄(T2~T3)要点
- 四个定时器首尾相接:前一个的触点驱动下一个的线圈,最后一个到点后统一
RST,形成循环。 - 黄灯段落用"前一段已到(T0)且本段未到(T1)"来界定,即
LD T0 / ANI T1。 - 两个方向的红灯必须互不包含对方的绿灯:改时段时先画一遍时序表,再改 K 值。
验证:强制 M100 = ON → Y2 亮 25s → Y1 亮 3s → Y12 亮 25s → Y11 亮 3s → 回到 Y2,如此循环;任何时刻两个方向的绿灯不同时亮。
注意事项
- 忘了
RST T3(只清前三个):T3 触点一直 ON,ANI T3把 T0 永久封锁,灯停在最后一相不动。 - 定时器时基搞混:
T0~T199是 100ms,K250= 25s;若误用T200~T245(10ms),同样的 K250 只有 2.5s。 - 两个方向绿灯可以同时亮的写法(漏了互锁条件)在真路口是事故,改完务必按上面"验证"逐相看一遍。
例程 2:传送带分拣(到位 → 延时 → 推料)
场景:工件随传送带移动,到达检测位后延时一小段(走到气缸正前方),确认是需要挑出的,气缸推出并保持一会再收回。 "到位后延时再动作"是所有分拣、喷码、剔除类机构的共同骨架。
软元件:X0 到位传感器、X1 分拣判据(如色标/高度)、T10 走到气缸位延时、T11 气缸保持时间、Y10 推料气缸、M0/M1 边沿脉冲
LD X0
PLS M0 ; 工件到位,取一个脉冲
LD M0
OUT T10 K5 ; 0.5s 后到达气缸正前方
LD T10 ; 延时到
AND X1 ; 且这个工件需要挑出
PLS M1
LD M1
SET Y10 ; 推出
LD M1
OUT T11 K10 ; 保持 1s
LD T11
RST Y10 ; 收回
END要点
- 两段定时器各管一件事:
T10是位置补偿(传感器到气缸的距离 ÷ 带速),T11是动作保持(气缸行程时间)。现场调这两个数就够了。 - 分拣条件
AND X1要放在延时之后判断:工件到气缸那一刻的状态才是准的,在传感器位就判会判错(工件可能还在移动)。 - 用
SET/RST而不是OUT Y10:PLS脉冲只有一个扫描周期,用OUT的话气缸只吸合一个周期,根本来不及动作。
验证:强制 X0 一个脉冲 → 0.5s 后(若 X1=ON)Y10 吸合并保持 1s 后断开;X1=OFF 时 Y10 全程不动作。
注意事项
- 延时值按"时间"算却没考虑带速变化:带速调了
T10就要重调,否则剔除位置偏移。 - 连续来料时
T10被下一个工件的脉冲重新触发,前一个工件的剔除动作被冲掉。节拍快的场合要改用移位寄存器逐位跟踪(见 应用指令例程 例程 4 的 SFTL)。
例程 3:恒压供水一用一备轮换
场景:两台泵,平时只开一台,每次启动换另一台,让两台磨损均匀;当前这台有故障就自动切到另一台。
软元件:X1 压力低(需开泵)、X2 压力高(停泵)、X3 1 号泵故障、X4 2 号泵故障、M20 本次用哪台(0=1 号 / 1=2 号)、M0 启动需求脉冲、Y0 1 号泵、Y1 2 号泵
; —— 轮换标志:每次"从停到开"翻转一次 ——
LD X1
PLS M0 ; 需要开泵的上升沿
LD M0
ANI M20
LD M20
ANI M0
ORB
OUT M20 ; 每次启动换一台(二分频)
; —— 1 号泵 ——
LD X1
ANI X2 ; 压力未到上限
ANI X3 ; 1 号无故障
AND M20 ; 本轮轮到 1 号
OUT Y0
; —— 2 号泵 ——
LD X1
ANI X2
ANI X4
ANI M20 ; 本轮轮到 2 号
OUT Y1要点
- 轮换靠
M20这个"轮换标志",每次启动需求到来时翻转,逻辑就是二分频(见 基本回路例程 例程 3)。 - 故障信号只用
ANI屏蔽"选中",不改变轮换顺序:故障泵修好后下一次仍会轮到它,不会出现长期偏用一台。 - 两台泵不互锁(这里不是正反转),压力不够时理论上可以双投 —— 真需要"一用一备且故障时才切备用"的话,把
AND M20/ANI M20换成"主泵故障才投备用"的条件即可。
验证:X1 从 OFF→ON 一次 → Y0 动作;松开 X1 再给一次 → Y1 动作;强制 X3 后重复 → 只有 Y1 动作。
注意事项
- 用
LD X1直接驱动翻转块(不加PLS):压力低期间每个扫描周期都翻一次,泵会以扫描频率来回切换。 - 故障输入接的是常闭点却写成
ANI X3:逻辑反了,故障泵反而被优先选中。写之前先确认外部是常开还是常闭。 - 压力信号抖动(临界点频繁通断)会让泵频繁启停,现场应加压力回差(用两个压力阈值,见 应用指令例程 例程 1)。
例程 4:故障报警、锁存、确认与消音
场景:故障瞬间出现也要记住(锁存),人工确认后停蜂鸣器但灯继续闪,故障真正消失后才自动解除。 这套"报警—确认—恢复"三段式是现场最能减少误操作的结构。
软元件:X10 故障输入、X11 确认按钮、M100 报警锁存、M101 已确认(消音)、M2 确认脉冲、Y10 报警灯、Y11 蜂鸣器
LD X10
SET M100 ; 故障出现即锁存(一个扫描周期的抖动也记得到)
LD X11
PLS M2
LD M2
SET M101 ; 人工确认 → 消音
LD M8000
ANI X10 ; 故障信号已消失
AND M101 ; 且已确认
RST M100 ; 解除报警
RST M101 ; 同时清掉确认标志,下次重新走一遍流程
LD M100
AND M8013 ; 1s 时钟脉冲
OUT Y10 ; 报警灯闪
LD M100
ANI M101
OUT Y11 ; 蜂鸣器:确认前一直响
END要点
SET锁存是关键:瞬时故障(比扫描周期还短)用OUT会丢,用SET一定记得到。- 灯和蜂鸣器分开控制:灯跟
M100(报警存在就闪),蜂鸣器跟M101(确认后就不响)。这两件事的结束条件不同,写在一起就会"确认后灯也灭了,故障其实还在"。 - 解除条件是"故障消失 且 已确认"两者同时满足,避免故障还在时按一下确认就把报警清掉。
验证:给 X10 一个短脉冲 → Y10 闪、Y11 响;按 X11 → Y11 停、Y10 继续闪;X10 回到 OFF → Y10 灭、M100 自动复位。
注意事项
- 解除段写成只看
ANI X10:故障一消失就清报警,操作工还没看到就灭了,等于漏报。 - 忘了
RST M101:确认标志一直留着,下一次故障时蜂鸣器不响(一上来就是"已确认"状态)。 M8013是 1s 时钟(另有M801110ms、M8012100ms、M80141min),选型见 特殊辅助继电器一览;某些机型对时钟脉冲的支持以该表为准。
例程 5:自动 / 手动切换(无扰动切换)
场景:面板上一个"自动/手动"旋钮,手动时用按钮直接点动设备,自动时由逻辑条件控制。 看着简单,但它是最容易写出双线圈(同一 Y 出现两次 OUT)的地方。
软元件:X20 自动/手动旋钮、X21 手动启动按钮、M10 自动逻辑结果、M200 自动模式标志、Y0 设备
LD X20
OUT M200 ; M200 = 1 自动;= 0 手动
; 自动:由逻辑条件决定
LD M200
AND M10 ; 自动运行的允许条件(联锁、时序都在这里)
; 手动:由按钮直接决定
LDI M200
AND X21
ORB ; 两条支路并联:谁生效取决于模式
OUT Y0 ; 整个程序里 Y0 只出现这一次 OUT
END要点
- 两条支路用
ORB并到一起,只输出一次。写成两个独立的LD…OUT Y0就是双线圈:后一段的结果会覆盖前一段,自动模式往往失效。 - 手动支路同样要能看到硬件联锁:急停、限位这类条件要串在最后的
OUT之前(ORB之后再AND急停条件),手动也不能绕过安全。 - 切换瞬间输出状态由新模式的条件决定,本身就是"无扰动"的;若要求切换时强制复位,可在
X20的边沿加一段ZRST清自动状态。
验证:X20 = ON 时,只有 M10 成立 Y0 才动作(X21 无效);X20 = OFF 时,按住 X21 立刻动作,松开即停。
注意事项
- 双线圈(最常见):程序里搜两遍
OUT Y0,只要出现两次就是隐患,即使"看起来能跑"。 - 手动支路忘了串急停:手动模式下安全联锁失效,是现场事故的高发点。
- 旋钮信号抖动导致模式来回切:可在
X20后加定时器做几十毫秒的确认延时。
例程 6:车库进出计数与满位指示
场景:车辆进入加一、离开减一,剩余车位数实时显示,满了就亮"满位"灯并禁止再进。 用加减计数比用双向计数器直观,也便于直接把余位送显示或上云。
软元件:X0 进场传感器、X1 出场传感器、M0/M1 边沿脉冲、D0 当前在场车辆、D1 剩余车位、D100 总车位(Lua/上位机可写)、Y10 满位红灯、Y11 有空位绿灯
LD M8002
MOV K100 D100 ; 总车位 100(默认值,实际由上位机下发)
LD X0
PLS M0
LD M0
INC D0 ; 进车 +1
LD X1
PLS M1
LD M1
DEC D0 ; 出车 -1(D0 不会减到负数以下见注意事项)
LD M8000
SUB D100 D0 D1 ; 剩余车位 = 总车位 - 在场
LD>= D0 D100 ; 在场 ≥ 总车位
OUT Y10 ; 满位红灯
LD< D0 D100
OUT Y11 ; 有空位绿灯
END要点
INC/DEC必须配PLS用脉冲触发,否则车停在传感器上时每个扫描周期都加一次。- 余位由
SUB现算,D1可以直接送触摸屏显示或交给 Lua 上云(见 通信与 Lua 协同例程)。 - 满位判断用触点比较指令
LD>=/LD<,省掉了CMP要占的三个位元件。
验证:设 D100 = 100,给 X0 三次脉冲 → D0 = 3、D1 = 97、Y11 亮;把 D0 直接写成 100 → Y10 亮、Y11 灭;再给 X1 一次脉冲 → D0 = 99、Y11 重新亮。
注意事项
DEC减到负数:出场传感器误触发(如行人、倒车反复遮挡)会把 D0 减成负数,余位显示反而变大。加一条下限保护:LD< D0 K0 / MOV K0 D0,或在DEC前判断LD> D0 K0。- 掉电清零:
D0是普通寄存器,断电后计数归零,与实际在场车辆不符。需要掉电保持请把在场数存到 R 区(见 常用解决方案 的掉电保持一节)。 - 用双向计数器(
C200+M8200)也能做,但两个传感器要接到同一计数器的增减输入上,接线与方向位都要对,调试比这个写法麻烦。