
PLC编程教程:梯形图的编写方法与常见注意事项
梯形图(Ladder Diagram,LD)是一种以触点、线圈和功能块表示控制逻辑的 PLC 编程语言。它沿用了继电器控制回路的图形表达方式,常用于设备启停、顺序控制、状态联锁和报警处理。对熟悉电气原理图的工程师而言,梯形图通常比较直观;但直观不等于可以忽略扫描顺序、变量类型和现场安全边界。
本文从可执行逻辑出发,介绍梯形图的基本写法、常见控制模式、调试方法和容易出错的地方。PLC 品牌、软件版本和 CPU 型号不同,指令名称、参数范围、保持行为及下载方式可能不同。文中的触点与功能块表达是通用示意;代码示例采用 IEC 61131-3 结构化文本(ST),可用于支持相应语言和标准定时器、边沿触发功能块的运行环境,例如 CODESYS。它是便于验证逻辑的完整程序,不是可直接导入所有品牌软件的梯形图工程文件。
一、梯形图适合解决什么问题
梯形图的核心是描述布尔条件和动作之间的关系。常见应用包括:
- 启停控制:满足启动条件后置位运行状态,在停止、故障或许可条件丢失时复位。
- 设备互锁:限制两个执行器不能同时动作,或要求某个阀门到位后才允许启动下一步。
- 定时与计数:延时启动、动作超时检测、批次计数和节拍控制。
- 顺序控制:按条件推进多个状态,例如夹紧、加工、松开和复位。
- 状态显示与报警:将输入、运行条件、故障状态整理成便于监控的逻辑信号。
梯形图并非所有任务的最佳选择。大量数值计算、数组处理、配方运算或复杂数据结构,用 ST 等文本语言可能更清晰。实际项目可以按功能选择语言,但应统一变量命名、状态定义和模块边界,避免同一逻辑在多个程序块中重复实现。
二、先理解扫描周期与梯级求值
多数循环执行型 PLC 会反复运行用户程序。一个典型周期大致包括读取输入映像、执行程序、更新输出映像和处理通信等环节。具体顺序取决于控制器和任务配置,快速输入、立即输出、中断任务、通信更新等机制也可能改变普通循环的行为。因此,涉及响应时间时,应查阅目标设备手册,不能只凭“一个扫描周期”推算。
普通梯形图可以粗略理解为从左到右、从上到下求值。左侧母线代表逻辑起点;触点表示条件,串联表示 AND,并联表示 OR;右侧线圈表示对变量或输出进行操作。这个图形习惯并不意味着程序可以忽略执行顺序:一个网络对变量的写入,可能影响后续网络在同一轮扫描中的求值。不同平台对网络执行、线圈类型及输出刷新还有各自定义。
尤其要区分“程序变量”与“物理输入状态”。输入模块采样后,程序通常读取输入映像;程序把值写入输出变量后,物理端子何时更新取决于控制器的输出处理机制。若需要精确时序、脉冲捕获或高速计数,应使用设备提供的高速功能,而不是假定普通扫描能捕捉所有变化。
三、触点、线圈与逻辑语义
1. 常开与常闭触点描述的是逻辑条件
梯形图中的常开触点通常表示“对应变量为 TRUE 时导通”,常闭触点通常表示“对应变量为 FALSE 时导通”。这里的“常开”“常闭”首先是程序图形中的逻辑含义,不应直接等同于现场按钮的机械触点形式。
例如,现场停止按钮可能采用常闭接线以便检测断线,但 PLC 输入变量在正常按下或线路故障时的取值,仍需结合输入模块、接线方式和电气设计确认。编程时应使用明确的变量名,如 StopRequest、SafetyPermit,并在 I/O 表中注明信号的有效电平、正常状态和故障表现。
2. 串并联对应逻辑关系
- 串联:所有条件都成立才导通,表示逻辑与(AND)。
- 并联:任意一条支路成立即可导通,表示逻辑或(OR)。
- 取反条件:以常闭触点表示变量为 FALSE 时条件成立,类似逻辑非(NOT)。
绘制复杂网络时,建议拆分中间条件。例如先生成 StartPermitted,再用它驱动状态逻辑,比把十几个条件挤进一个梯级更容易检查。中间变量应表达明确的业务含义,不要只命名为 M1、Flag7。
3. 普通线圈与置位、复位线圈不是一回事
普通线圈通常在每次程序执行时根据梯级结果写入状态,条件成立则为 TRUE,不成立则为 FALSE。置位和复位线圈则具有保持状态的效果,只有收到相应条件时才改变状态。不同厂商的指令名称和优先级可能不同,多个位置同时对同一变量写入时,还会产生难以预期的结果。
工程上应避免多个网络、多个任务或多个程序块无意间共同写同一个输出或状态变量。一个变量尽量只有一个明确的写入位置;需要置位、复位时,也要规定同时满足时的优先级,并按目标平台手册核对行为。
四、从需求到梯形图:建议的编写步骤
- 列出输入、输出和内部状态。写明数据类型、现场地址、有效状态、单位及初始值。物理 I/O 地址语法因平台不同,示例中使用符号变量。
- 写清楚允许条件和禁止条件。例如启动许可、故障状态、互锁状态和复位条件。特别注明哪些条件需要持续成立,哪些只需出现一个扫描周期。
- 先设计状态转换,再画网络。明确设备处于停止、运行、故障或复位等什么状态,以及各状态之间如何转换。
- 划分网络并命名。每个网络处理一项相对单一的功能,注释说明“为什么”,不要只复述触点名称。
- 检查写入点与执行顺序。确认线圈、内部状态和输出没有被不同网络重复赋值;确认定时器、边沿触发器等功能块每周期都按要求调用。
- 离线验证,再进行现场测试。模拟正常操作、断线、输入抖动、掉电恢复、故障复位和异常顺序,并观察在线状态与实际端子是否一致。
五、典型案例:带许可条件和延时的电机启动
下面的案例具有这些行为:按下启动按钮后产生一次启动请求;停止按钮、许可丢失或过载时撤销运行命令;运行命令成立两秒后才允许电机输出。定时器延时只是普通控制逻辑,不能替代安全回路。
在梯形图中,可以先用边沿触发功能块产生启动脉冲,再用运行状态和停止条件形成自保持逻辑,随后调用 TON 延时接通定时器。概念上,运行状态的逻辑可写成:
运行条件 = (原运行状态 OR 启动上升沿)
AND NOT 停止请求
AND 安全许可
AND NOT 过载
这只是便于理解的逻辑表达,实际梯级应根据目标软件的线圈类型、边沿指令和网络求值规则绘制。以下 ST 示例则将该行为写成一个完整程序。变量应在开发环境中绑定到实际 I/O,或由仿真环境提供。
PROGRAM PLC_PRG
VAR
StartPB : BOOL := FALSE;
StopPB : BOOL := FALSE;
SafetyOK : BOOL := TRUE;
Overload : BOOL := FALSE;
RunCmd : BOOL := FALSE;
MotorOut : BOOL := FALSE;
StartEdge : R_TRIG;
StartDelay : TON;
END_VAR
(* 每个程序周期调用边沿触发功能块 *)
StartEdge(CLK := StartPB);
(* 运行命令保持;停止、许可丢失或过载具有停止优先级 *)
IF StopPB OR NOT SafetyOK OR Overload THEN
RunCmd := FALSE;
ELSIF StartEdge.Q AND SafetyOK AND NOT Overload THEN
RunCmd := TRUE;
END_IF;
(* TON 在 IN 为 TRUE 时累计时间;输入变为 FALSE 时复位 *)
StartDelay(IN := RunCmd, PT := T#2S);
(* 延时完成且许可仍在时才输出 *)
MotorOut := RunCmd
AND StartDelay.Q
AND SafetyOK
AND NOT Overload;
END_PROGRAM
要在支持 IEC 61131-3 的环境运行,还需按软件要求创建工程、选择目标设备并配置任务周期。R_TRIG、TON 是标准中常见的功能块名称,但具体库、调用语法、时间类型表示及工程组织方式可能因实现而异;编译前应核对目标环境的库文档。示例中的布尔输入默认为测试值,必须替换为实际信号映射或仿真输入。
程序执行顺序也值得留意:示例先根据当前状态调用定时器,再根据本周期计算出的状态写入输出。因此,启动动作改变定时器输入的效果可能从后续调用周期体现。对多数普通控制场景,这种扫描级差异可以接受;若对响应时序有严格要求,应结合实际任务周期、功能块执行顺序和输出更新时间验证。
梯形图实现此逻辑时,不能机械地把 ST 语句逐行翻译成线圈。需要确认运行状态采用普通线圈还是置位/复位结构,并处理好停止与启动同时出现时的优先级。若一个网络中启动支路与自保持支路并联,停止条件应能可靠地切断整条逻辑路径,或者通过清晰、唯一的状态复位逻辑实现相同效果。
六、定时器与计数器:先看功能,再看限制
IEC 风格定时器常见类型包括 TON(延时接通)、TOF(延时断开)和 TP(脉冲)。名称相似,但时序行为并不相同。以 TON 为例,通常在使能输入持续为 TRUE 时开始计时,到达预设时间后置位完成状态;使能输入变为 FALSE 时通常复位。具体时间精度、时间基准、任务调度影响和边界处理,要查看设备手册和软件库说明。
预设时间并不意味着物理输出一定在该时刻精确切换。输出更新时间、扫描周期、任务优先级、定时器实现精度和模块延迟都会影响实际响应。对于特别短的脉冲或精确定位,应使用高速定时、硬件比较、运动控制或其他适合的功能,而不是把普通 TON 当作精密计时设备。
计数器也应明确计数边沿、复位条件和溢出处理。若输入信号可能持续多个扫描周期,直接把“条件成立”连接到计数动作可能导致每个扫描都计数。应使用上升沿检测,或采用设备提供的专用计数器功能。对于高速脉冲,应使用高速计数输入,并确认最大频率、输入滤波和接线要求;这些参数取决于具体硬件,不能假设所有 PLC 都相同。
七、模拟量与数值比较的注意事项
模拟量原始值通常是整数码值,工程量则是经过量程换算后的数值。不同模块的分辨率、有效范围、数据类型和故障表示不同。不能不看手册就假定某个原始值一定对应 4–20 mA 或 0–10 V。换算时应确认原始上下限、工程单位、量程方向以及越界处理,并避免整数运算造成截断。
使用比较指令时,也要注意边界条件。例如“温度大于设定值”与“大于或等于设定值”在临界点行为不同;传感器读数有噪声时,单一阈值可能导致输出频繁切换。可根据工艺需要设置回差、滤波或稳定时间,但这些处理会改变响应特性,必须通过测试确认不会掩盖真实故障。
八、容易造成故障的常见错误
- 把触点图形当成现场接线说明。程序常开、常闭只表示变量逻辑,不足以说明按钮触点类型、线路故障时状态或安全等级。
- 漏掉边沿检测。长按按钮或持续成立的条件直接连接计数、脉冲动作逻辑,可能导致重复执行。应根据功能采用上升沿、下降沿或状态转换检测。
- 同一变量多处写入。某网络置位,另一网络又用普通线圈复写,结果可能随网络顺序变化。统一状态所有权,减少隐式覆盖。
- 把自保持误当成故障记忆。普通运行自保持、故障锁存和掉电保持是不同需求。应分别定义复位方式、掉电行为和重新上电后的默认状态。
- 忘记定时器复位路径。使能信号没有按预期变为 FALSE,定时器可能继续保持完成;再次启动时是否重新计时应在目标平台上验证。
- 假定所有平台的线圈和定时器都一样。特殊线圈、保持变量、功能块参数和地址映射有平台差异。不要把某品牌的图形工程直接当成通用代码。
- 只在正常流程下测试。还要测试输入同时变化、许可中途丢失、定时器未完成时停止、CPU 重启以及传感器异常等情况。
- 用名称含糊的内部位。难以追踪的标记位会让交接和故障定位变慢。命名应说明含义,并为重要变量补充注释和状态说明。
九、安全用途的边界
普通 PLC 程序及普通输入输出模块不能因为写了“急停”“安全门”或“安全许可”变量,就自动具备功能安全能力。急停、安全门、光幕、双手控制等安全功能,必须根据风险评估、适用法规与标准以及设备设计,采用相应等级的安全继电器、安全 PLC、安全 I/O 和经验证的安全架构。具体类别或性能等级要求应由项目风险评估和合格设计人员确定,不能由一段示例代码推断。
普通控制程序可以读取安全设备提供的状态,用于停止工艺动作、显示信息或阻止重新启动,但不能替代安全回路。安全输出、接触器反馈、复位方式、故障诊断和能量隔离等要求,都应由经过设计验证的安全方案覆盖。下载程序、强制变量或在线修改时,还应按现场作业规程处理设备意外动作风险。
安全输入的接线方式和故障行为也不能一概而论。断线是否能被检测、测试脉冲是否兼容、双通道差异如何处理,都取决于所选设备和接线方案。必须依照安全设备和 PLC 的手册进行设计、配置、验证与定期测试,而不能仅凭普通 PLC 的逻辑仿真得出安全结论。
十、调试与验收建议
调试时可以按“信号—条件—状态—输出”的顺序逐层检查:
- 确认现场输入在 PLC 监控画面中的状态与实际按钮、传感器动作一致。
- 逐项核对启动许可、互锁和故障条件,确认每个条件在应成立和不应成立时都经过测试。
- 监控中间状态变量,检查按钮按下、释放、持续按住和快速操作时的状态变化。
- 观察定时器当前值、预设值和完成位,确认使能、复位及重新触发行为。
- 在安全措施到位的条件下检查输出变量与现场执行器响应;不要仅以软件画面上的线圈状态代替端子测量。
- 记录软件版本、参数、I/O 地址、测试条件和验收结果,并保存经过确认的工程备份。
在线强制变量可用于局部测试,但它会改变正常程序行为,也可能绕过联锁。测试结束后应清除所有强制,核实强制状态清单,并按规定重新确认设备处于可操作状态。调试中发现的问题应落实到程序、接线或设备配置的具体原因,不宜通过增加难以解释的临时触点掩盖。
结语
梯形图的可靠性不取决于网络画得多复杂,而取决于逻辑是否清晰、变量是否有明确所有权、边界条件是否经过验证,以及程序和硬件的责任划分是否正确。编写时先整理 I/O 与状态,再画触点和线圈;使用定时器、计数器时核对平台实现;涉及安全功能时则必须采用符合项目要求并经过验证的安全方案。掌握这些原则后,梯形图才能既便于阅读,也能在现场被可靠地调试和维护。









