Skip to content

综合场景例程 ​

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 时钟(另有 M8011 10ms、M8012 100ms、M8014 1min),选型见 特殊辅助继电器一览;某些机型对时钟脉冲的支持以该表为准。

例程 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)也能做,但两个传感器要接到同一计数器的增减输入上,接线与方向位都要对,调试比这个写法麻烦。

相关文档 ​

LPPLC 工业物联网云平台 · 软硬件与云平台全栈自研