跳到主要内容
本文档已合并

LAD 梯形图的设计原则、编程模式、工程示例、安全回路设计已全部合并至 LAD 梯形图完全参考手册

本文档保留为历史参考,新内容请直接查看综合手册的对应章节:

LAD 编程指南

本文档介绍梯形图程序设计的核心原则、常用设计模式以及完整的工程示例,帮助工程师写出可靠、可维护的 LAD 程序。

设计原则

1. 每级只做一个逻辑功能

每个梯级应实现一个独立、完整的逻辑功能。避免将多个不相关的逻辑塞入同一梯级。

// 好:每级一个功能
// 梯级 1: 电机启动条件
bStart bStop bOverload bMotorRun
──┤ ├──────┤/├──────┤/├──────────────( )──

// 梯级 2: 运行指示
bMotorRun bMotorIndicator
──┤ ├────────────────────( )──

// 梯级 3: 计时
bMotorRun ┌─ TON ────┐ bRunTimeOK
──┤ ├────────┤ IN Q ├───( )──
│ PT T#1h│
└──────────┘
// 不好:多种逻辑混在一起
bStart bStop bOverload ┌─ TON ────┐ bMotorRun bIndicator
──┤ ├──────┤/├──────┤/├──────────┤ IN Q├───┤S├────────( )──
│ PT T#1h│
└──────────┘

2. 安全信号串在最前

急停、安全门、光栅等安全相关信号应串联在所有输出线圈之前,使用常闭触点形式(断线即停)。

// 安全联锁 — 在所有梯级之前
bEStop bSafetyGate bLightCurtain bSafetyOK
──┤/├──────┤/├───────────┤/├───────────────( )──

// 每个输出梯级引用 bSafetyOK
bStart bSafetyOK bMotor
──┤ ├──────┤ ├─────────────────────( )──

3. 优先使用 S/R 代替自锁

置位/复位线圈逻辑比自锁电路更清晰,不容易出现"意外保持"的 bug。

// 推荐:S/R 方式
bStart bMotorRun
──┤ ├─────────────────────(S)──

bStop bMotorRun
──┤ ├─────────────────────(R)──

// 避免:自锁方式(可读性差,易出错)
bStart bStop bMotorRun
──┤ ├──────┤/├────┬───────────────( )──

bMotorRun │
──┤ ├──────────────┘

4. 显式复位所有 S 线圈

使用 S(置位)线圈时,必须有对应的 R(复位)路径,否则可能导致输出"粘死"。

5. 定时器/计数器实例命名清晰

// 好:有意义的命名
tonMotorOverloadDelay
ctuPartCount_Line1
tofCoolingFanOff

// 避免:无意义命名
ton1
ctu2
timer_3

常用设计模式

模式 1:自锁(保持)电路

用途:按钮启动、保持运行、按钮停止。

// 自锁启停
bStart bRunning
──┤ ├────┬──────────────(S)──

bStop │
──┤/├────┘

// 或标准自锁形式:
bStart bStop bRunning
──┤ ├──────┤/├────┬───────────────( )──

bRunning │
──┤ ├──────────────┘

模式 2:互锁

用途:防止两个输出同时导通(如电机正反转、阀门开关)。

// 正转启动
bFwd bFwdRun
──┤ ├────┬──────────────(S)──

bRevRun│
──┤/├────┘

// 反转启动
bRev bRevRun
──┤ ├────┬──────────────(S)──

bFwdRun│
──┤/├────┘

// 停止
bStop bFwdRun
──┤ ├─────┤ ├────────────(R)──

bStop bRevRun
──┤ ├─────┤ ├────────────(R)──

模式 3:延时启动/停止

用途:电机星三角启动、风机延时停止、防颤振。

// 延时启动
bStart bStop bDelayStart
──┤ ├──────┤/├────────────────────(S)──

bDelayStart ┌─ TON ────┐ bMotorOn
──┤ ├──────────┤ IN Q├───────( )──
│ PT T#3s │
└──────────┘

// 延时停止
bStop bDelayStop
──┤ ├─────────────────────(S)──

bDelayStop ┌─ TOF ────┐ bFanRun
──┤/├─────────┤ IN Q├───────( )──
│ PT T#5s │
└──────────┘

模式 4:脉冲生成

用途:报警灯闪烁、周期触发、看门狗脉冲。

// 对称方波(50% 占空比)
bFlash ┌─ TP ───────┐ bFlash
──┤/├──────────────┤ IN Q ├───( )──
│ PT T#500ms │
└────────────┘

// 非对称方波
bTimerPulse ┌─ TON ────┐ bTimerPulse
──┤/├──────────┤ IN Q├───────( )──
│ PT T#1s │
└──────────┘

// bTimerPulse = 1s ON / 1s OFF 循环

模式 5:顺序控制(步进)

用途:多步工艺流程、工位顺序控制。

// 步骤 1:启动条件
bStart bStep3Done bStep1
──┤ ├──────┤/├─────────────────────(S)──

bStep2Active bStep1
──┤ ├──────────────────────────────(R)──

// 步骤 2:执行动作
bStep1 bStep2Done bStep2
──┤ ├──────┤/├─────────────────────(S)──

bStep3Active bStep2
──┤ ├──────────────────────────────(R)──

// 步骤 3:完成
bStep2 tonStep3.Q bStep3
──┤ ├──────┤ ├─────────────────────(S)──

bStep1Active bStep3
──┤ ├──────────────────────────────(R)──

模式 6:故障检测与恢复

用途:超时检测、故障锁存、手动复位。

// 超时检测
bCommandActive ┌─ TON ────┐ bTimeout
──┤ ├──────────────┤ IN Q├────(S)──
│ PT T#5s │
└──────────┘

// 故障锁存
bTimeout bFault
──┤ ├─────────────────────(S)──

bFault bCommandActive
──┤/├─────────────────────(R)──

// 故障复位
bReset bFault
──┤ ├─────────────────────(R)──

bFault bTimeout
──┤/├─────────────────────(R)──

工程示例

示例 1:三相电机控制

功能:带过载保护的三相电机启动/停止,含运行指示和运行计时。

// === 电机控制 ===
// 安全联锁
bEStop bSafetyGate bSafetyOK
──┤/├────────┤/├─────────────────( )──

// 启动/停止
bStart bStop bMotorRun
──┤ ├────────┤/├────┬────────────(S)──

bMotorRun │
──┤ ├────────────────┘

// 过载保护
bOverload bMotorRun
──┤/├─────────────────────(R)──

// 输出到接触器(串联安全联锁)
bMotorRun bSafetyOK bContactor
──┤ ├────────┤ ├─────────────────( )──

// 运行指示
bMotorRun bRunLight
──┤ ├────────────────────────────( )──

// 运行计时
bMotorRun ┌─ TON ────┐ bRunHourReached
──┤ ├────────┤ IN Q├───────( )──
│ PT T#8h │
└──────────┘

示例 2:传送带报警系统

功能:传送带过载、跑偏、堵料三级报警。

// === 报警逻辑 ===
// 过载报警 (rCurrent > 15.0A)
bEnable ┌─ GT ───┐ bAlarmOverload
──┤ ├───────┤ rCurrent├───────────(S)──
│ 15.0 │
└────────┘

// 跑偏检测 (传感器持续 2s 触发)
bMisalign ┌─ TON ────┐ bAlarmMisalign
──┤ ├─────────┤ IN Q├──────(S)──
│ PT T#2s │
└──────────┘

// 堵料检测 (电机运行但无物料通过超过 10s)
bMotorRun bPartDetect bJamDelay
──┤ ├────────┤/├─────────────────(S)──

bJamDelay ┌─ TON ────┐ bAlarmJam
──┤ ├─────────┤ IN Q├──────(S)──
│ PT T#10s │
└──────────┘

// 报警复位
bReset bAlarmOverload
──┤ ├──────────────────────────(R)──

bReset bAlarmMisalign
──┤ ├──────────────────────────(R)──

bReset bAlarmJam
──┤ ├──────────────────────────(R)──

// 蜂鸣器(任一报警激活)
bAlarmOverload bBuzzer
──┤ ├────────────────────────────( )──

bAlarmMisalign
──┤ ├──

bAlarmJam
──┤ ├──

示例 3:气动阀门顺序控制

功能:双气缸顺序动作——A 缸伸出→B 缸伸出→B 缸退回→A 缸退回。

// === 双气缸顺序控制 ===
// Step 1: A 缸伸出
bCycleStart bStep4Done bStep1
──┤ ├────────┤/├──────────────────(S)──

bStep1 bAExtEnd bStep2
──┤ ├────────┤ ├────┬─────────────(S)──

bStep1 (R)──

// Step 2: B 缸伸出
bStep2 bBExtEnd bStep3
──┤ ├────────┤ ├────┬─────────────(S)──

bStep2 (R)──

// Step 3: B 缸退回
bStep3 bBRetEnd bStep4
──┤ ├────────┤ ├────┬─────────────(S)──

bStep3 (R)──

// Step 4: A 缸退回
bStep4 bARetEnd bCycleDone
──┤ ├────────┤ ├────┬─────────────(S)──

bStep4 (R)──

// 输出映射
bStep1 bAExtend
──┤ ├────────────────────────────( )──

bStep2 bBExtend
──┤ ├────────────────────────────( )──

bStep3 bBRetract
──┤ ├────────────────────────────( )──

bStep4 bARetract
──┤ ├────────────────────────────( )──

示例 4:PID 手自动无扰切换

功能:PID 回路的手动/自动模式切换,带输出跟踪防止切换扰动。

// === PID 手自动切换 ===
// 手动模式
bManual bAutoMode
──┤ ├──────────────────────────(R)──

bManual bManualMode
──┤ ├──────────────────────────(S)──

// 自动模式
bAuto bAutoMode
──┤ ├──────────────────────────(S)──

bAuto bManualMode
──┤ ├──────────────────────────(R)──

// 手动模式:输出跟随手动设定
bManualMode bOutput
──┤ ├────┬─────────────────────( )──

bManualSet
──┤MOVE├─┘

// 自动模式:输出来自 PID 输出
bAutoMode ┌─ MOVE ─┐ bOutput
──┤ ├────────┤ pidOut ├────────( )──
│ │
└─────────┘

安全回路设计

急停回路

急停按钮应采用常闭触点串联,断线检测优先:

// 急停链 — 所有急停串联
bES1 bES2 bES3 bES_ChainOK
──┤/├───────┤/├───────┤/├─────────────────( )──

// 急停状态指示
bES_ChainOK bES_Normal
──┤ ├─────────────────────────────────────( )──

安全门监控

// 安全门关闭 + 门锁确认
bDoorClosed bDoorLocked bDoorOK
──┤ ├─────────┤ ├──────────────────────( )──

// 门未关报警(延时确认,防抖动)
bDoorOK ┌─ TON ────┐ bDoorAlarm
──┤/├────────┤ IN Q├──────────────(S)──
│ PT T#1s │
└──────────┘

双手启动

// 双手按钮同时按下 0.5s 内启动
bHandLeft bHandRight ┌─ TON ────┐ bStartOK
──┤ ├───────┤ ├──────────┤ IN Q├──( )──
│ PT T#500ms│
└──────────┘

性能优化建议

  1. 梯级数量控制:单个 POU 梯级不超过 50 级,超过则拆分子程序
  2. 减少分支嵌套:分支深度不超过 4 层,过深影响扫描效率
  3. 避免空梯级:空梯级浪费扫描时间,及时清理
  4. 使用 MOVE 代替多个线圈:需要同时赋多个值的场景,考虑用 MOVE 块一次赋值
  5. 定时器 PT 不要频繁修改:PT 值变化需重新初始化定时器
  6. 高速任务用 SCL:1ms 以下周期任务建议用 SCL 替代 LAD

常见反模式

反模式问题正确做法
线圈双向驱动同一线圈在多个梯级赋值合并到一个梯级或用 S/R
空线圈悬空线圈未绑定变量确认每个线圈都有有效变量
触点直接连母线左母线直连右母线,短路加中间变量或空线圈
定时器嵌套过深定时器输出再驱动定时器用顺序逻辑替代嵌套
分支未闭合分支有头无尾确保分支汇合到公共路径
跳转滥用JMP 满天飞,逻辑不连续用 S/R 顺序控制替代
变量类型混用INT 直接连 BOOL 输入用比较块转换

相关文档