西门子梯形图指令手册:113 条指令一条一页
113 条西门子梯形图指令,一条一页:引脚表、最小示例、时序表、常见坑。本文拆页面结构,并拿三组最容易混的指令验证它够不够用。
一句话结论:查梯形图指令时,最费时间的不是"忘了符号长什么样",而是"这条和上一条差在哪、用错了会怎样"。Learn-LAD 的 LAD 指令手册 把这件事固定成了页结构:113 条 S7-1200/1500 常用指令、13 个分类,一条一页,每页七节——一句话、符号与引脚、最小示例、怎么工作(真值/时序)、常用场景、常见坑、相关示例。页面里还挂了「在 TIA 里试一下」:选一个示例块,用 TiaLink 导入你当前打开的 TIA Portal 工程——先预检、默认不覆盖同名对象、导入后不自动保存。
它不替代 TIA 帮助:帮助文档讲"这个引脚是什么",手册讲"它和谁像、什么时候不该用、错了会怎样"。下面按"它是什么 → 一页里有什么 → 拿最容易混的几组验证 → 怎么用 → 边界"的顺序拆。
一、查指令真正卡住的地方,很少是语法
触点、线圈、定时器,学过一遍都认识。但真到改程序时,卡点是另外几种:
- 分不清近邻:
TON/TOF/TP三个都叫"定时器",符号长得像,行为完全不同;SCoil/Sr都能锁存,复位路径不一样。 - 知道定义,不知道后果:
TON的ET在IN断开时回 0——这句话读起来没感觉,等你拿它当"累计运行时间"就出事。 - 参数手册只给参数:TIA 帮助会告诉你
PT是预设时间,但不会提醒你"一个扫描周期的短脉冲永远到不了PT"。 - 查完了落不到工程里:看懂了引脚,回到博途还是要从零把网络敲一遍,中间又引入新的错。
这四个问题都不是"缺一条定义",而是缺对照关系 + 失败模式 + 可运行的样例。这也是判断一份指令参考值不值得收藏的五个判据:
| 判据 | 为什么重要 | 手册的情况 |
|---|---|---|
| 有引脚表和方向 | 流输入(RLO)和普通输入(值)不是一回事 | 每条指令一张引脚表,标 流输入 / 输入 / 流输出 / 输出 |
| 有最小示例 | 只给定义记不住,给一个 3 行的网络就记住了 | 每条都有梯形图 + 变量说明 |
| 有真值表或时序表 | "什么时候为 1"必须能逐扫描推 | 定时器/计数器/边沿给的是状态表 |
| 有"和近邻的区别" | 用错几乎都发生在两条像的指令之间 | 每页固定一节「常见坑」,第一条通常就是"X 不是 Y" |
| 有上下文 | 单条指令放进完整程序才知道怎么用 | 「相关示例」按入门/进阶/综合分级 + 「相关指令」横向跳 |
二、这本手册的规模:113 条,13 类
首页是分类索引,每类带条数:
| 分类 | 条数 | 代表指令 |
|---|---|---|
| 位逻辑 | 7 | Contact、Coil、SCoil、RCoil、Not、SBitfield、RBitfield |
| 触发器 | 2 | Sr(置位优先)、Rs(复位优先) |
| 边沿 | 8 | PContact、NContact、PBox、NBox、PCoil、NCoil、R_TRIG、F_TRIG |
| 定时器 | 10 | TON、TOF、TP、TONR、CoilTON、CoilTOF、CoilTP、CoilTONR、PtCoil、ResetIECTimerCoil |
| 计数器 | 3 | CTU、CTD、CTUD |
| 比较 | 13 | Eq、Lt、Gt、Le、Ge、Ne、InRange、OutRange、OK、NOK、IS_ARRAY、IS_NULL、NOT_NULL |
| 字逻辑 | 9 | SEL、And、Or、Xor、Inv、Mux、Demux、DECO、ENCO |
| 字符串 | 10 | LEN、CONCAT、LEFT、RIGHT、MID、FIND、INSERT、DELETE、REPLACE、S_Move |
| 移位 | 4 | Shl、Shr、Rl、Rr |
| 数学 | 24 | Add、Sub、Mul、Div、Mod、LIMIT、MIN、MAX、Abs、Inc、Dec…(含三角/对数/取整) |
| 移动 | 12 | Move、Swap、MoveBlockI/U、FillBlockI/U、Lower_Bound、Upper_Bound、GATHER、SCATTER、Serialize、Deserialize |
| 转换 | 7 | Convert、Scale_X、Normalize、Round、Trunc、Ceil、Floor |
| 程序控制 | 4 | Jump、JumpNot、Switch、JmpList |
几处看得出是"按工程用得上"来收的,而不是照抄指令集目录:
CoilTON/CoilTOF/CoilTP/CoilTONR单独立了页:博途里计时线圈(线圈式定时器)和盒式定时器的写法、能放的位置都不同,混着写是现场常见事故。- 比较类把
OK/NOK/IS_ARRAY/IS_NULL/NOT_NULL收进来了:这几条不是"比大小",是有效性检查,写通用 FB 时躲不开。 - 只有 4 条程序控制(
Jump/JumpNot/Switch/JmpList):没有把整本指令集铺开,只留了梯形图里真会用的跳转形态。
页面头部还标了三件容易被忽略的信息:适用型号(S7-1200/1500)、版本口径(TIA V19)、别名(例如 TON 的别名是"接通延时 / On-delay timer / SD",TP 是"脉冲定时器 / Pulse timer / SP")。别名这一项对读老图纸特别有用——图纸上写 SD、博途里叫 TON,同一个东西。
技术上有句话值得记:引脚名与方向来自 lad-ir 指令目录,图由 lad-render 渲染,和示例库里 60 多个例程用的是同一套渲染——所以手册里的图和示例页里的图长得一样,可以对着看。
三、一页里到底有哪七节(以 TON 为例)
打开 TON — 接通延时定时器,从上往下是固定七节。这个顺序本身就是一种读法:先能用,再懂原理,最后知道边界。
1)一句话
TON是接通延时定时器:IN持续为 1 达到PT后,Q才置 1;IN一断开,Q和ET立即复位。
一句话就交代了触发条件(持续为 1)、判定条件(达到 PT)、复位条件(IN 断开)。三条信息缺任何一条,这条指令就会用错。
2)符号与引脚
| 引脚 | 方向 | 说明 |
|---|---|---|
IN |
流输入 | 使能输入;为 1 时开始计时 |
PT |
输入 | 预设时间(Time) |
Q |
流输出 | 到时后为 1;IN 断开即复位 |
ET |
输出 | 已过时间;IN 断开时回 0 |
外加两行元信息:分类:定时器、需要实例、模板值:时间类型(time_type)。"需要实例"这一条决定了它能不能放在 FC 里、要不要建 IEC 定时器实例 DB——这是新手最容易漏的一格。
3)最小示例
Start 接通并保持 5 秒后,Motor 才置位;Start 一断开,Motor 立即复位。示例用 FB 的静态多重实例 Timer;在 OB/FC 里也可以改用全局 IEC 定时器实例 DB。图上标了:# 前缀表示块内局部变量,实际工程里也可以是全局标签或 DB 变量。
4)怎么工作(状态表)
IN |
经过时间 | Q |
ET |
|---|---|---|---|
| 0 | — | 0 | 0 |
| 1 | < PT |
0 | 从 0 开始递增 |
| 1 | ≥ PT |
1 | 停在 PT |
| 1 → 0 | — | 0 | 回 0 |
表下面四句补充,每句都对应一个坑:IN 必须是持续的(脉冲进不了 TON);PT 与 ET 的区别;到时后 ET 不再增加;同一实例不要多处调用。
5)常用场景
- 启动延时:按下后确认 3–5 秒再启动电机,避免误触或电网冲击。
- 信号防抖 / 到位确认:信号稳定 200–500 ms 才认,把
PT改小,Q当"稳定信号"。 - 超时报警:启动命令发出后计时,若
PT内没收到"完成"信号就报警——手册这里还补了一句关键前提:这时通常还要串一个NOT Done条件,并且假设Start是保持命令;如果是点动按钮,先用SCoil/自锁把它保持住。
这一节是整页最"工程"的部分:它不只说"能用在哪",还顺手把"直接照抄会漏什么"点出来。
6)常见坑
TON 不是 TP:TON到时后Q一直保持,直到IN断开;TP是固定脉宽,IN断开不会掐断。 TON 不是 TOF:TOF是断开延时,IN掉下后Q还要保持PT。 短脉冲进不了 TON:一个扫描周期的脉冲永远到不了PT。ET会复位:IN=0时ET回 0,不要拿它当累计计时。 实例冲突:同一个实例在多个网络调用,计时会互相覆盖。 漏写PT:TIA 编译会报参数未使用;SCL 里写TON(IN:=...)时特别容易漏。
六条里五条是"错误形态",不是"定义"。这份手册真正的价值密度就在这一节——它是按"我见过的错法"写的,不是按"参数表"写的。
7)相关示例 + 相关指令
- 相关示例:「延时电机启动与泵控制」(进阶)、「三电机延时启停」(进阶),每条带一句摘要和难度级别。
- 相关指令:
SCoil、TOF,每条带一句话说明——横向跳到"下一个会混的"。
另外:页面顶部的「在 TIA 里试一下」
这是手册和普通文档站最大的差别。页面上有个示例块选择器(TON 有「最小示例 / 信号防抖 / 超时报警」三个),选完点导入:
- 通过 TiaLink 导入当前打开的 TIA 项目,流程是先预检、默认不覆盖同名对象、导入后不自动保存;
- 示例块不会自动运行:导入后需要你自己在 OB1 里调用并接上变量;
- TiaLink 地址默认
http://localhost:8080,也可以在页面地址后加?tialink=临时指定; - 如果 TiaLink 启动时设了
--api-token,页面里要填同一个值;这个值只保存在本机浏览器 localStorage,不上传。
"不覆盖同名对象 + 不自动保存"这两条很关键:它把风险留在你能撤销的一侧——导入只是把块放进项目,什么时候保存、要不要留,还是你决定。
四、拿三组最容易混的指令验证它够不够用
判断一份指令参考好不好用,最直接的办法是拿"你被坑过的那些对"去查。下面三组是梯形图里最典型的。
4.1 定时器三兄弟:TON / TOF / TP
TON 接通延时 |
TOF 断开延时 |
TP 脉冲 |
|
|---|---|---|---|
| 什么时候开始算 | IN 为 1 时 |
IN 由 1 变 0 时 |
IN 上升沿 |
Q 什么时候为 1 |
IN=1 且到时后 |
IN=1 立即为 1,断开后继续保持 PT |
上升沿后固定 PT 宽度 |
IN 中途断开 |
Q、ET 立即复位 |
这正是它开始计时的时候 | 不会掐断脉冲 |
| 短脉冲会怎样 | 到不了 PT,Q 永不为 1 |
也会完整保持 PT |
就是它的正常工作方式 |
| 典型用途 | 启动延时、防抖、超时报警 | 风机延时停止、输送机跑完 | 电磁阀固定脉宽、启动脉冲 |
三条"常见坑"里最值得记的一句是互为镜像的:
TON的坑是"短脉冲进不了 TON"——所以想抓脉冲别用TON,用TP或边沿锁存。TOF的坑是"短脉冲也会完整延时"——所以别拿它当"短脉冲过滤器",它会把一个扫描的脉冲放大成整个PT。
同一条物理事实(脉冲宽度 vs 设定时间),在两条指令上给出完全相反的错误用法。这类"镜像坑"只有把两条放在一起读才看得出来。
TP 页还留了一个诚实的注脚:脉冲期间再次来上升沿,通常不会延长当前脉冲;需要确认具体 CPU/版本行为。 这种"我没法在文档里给你保证"的写法,比拍死一个结论更有用——它告诉你该去实测。
4.2 位逻辑:Coil / SCoil / RCoil / Sr / Rs
同样一个"置 1",有五个入口,语义完全不同:
| 指令 | 形态 | 行为 | 复位怎么走 |
|---|---|---|---|
Coil |
线圈 | 每个扫描跟随 RLO,RLO=0 就输出 0 | 自动 |
SCoil |
线圈 | RLO=1 时置 1 并保持 | 必须 RCoil 或写入 0 |
RCoil |
线圈 | RLO=1 时复位为 0 | — |
Sr |
盒(触发器) | 置位优先的锁存触发器 | 由 r1 输入复位 |
Rs |
盒(触发器) | 复位优先的锁存触发器 | 同时为 1 时复位赢 |
Sr 页的"常见坑"列了五条,全是语义层面的:operand 不能用 Output(TIA 不允许读 Output,要用 InOut 或 Static);别和 SCoil/RCoil 混淆(一个是盒,一个是线圈);同时置位/复位时优先级不同,按工艺选;q 是 RLO 输出可继续串联;扫描顺序——锁存位被多处写时,结果依赖扫描顺序。
最后一条其实是整个梯形图编程的总纲:同一个位被多个网络写,你得到的不是一个"值",而是"最后一个扫描到它的网络写的值"。 这句在参数手册里通常找不到。
4.3 边沿:PContact / PBox / PCoil / R_TRIG
边沿类是"漏脉冲""多计数"两大生产事故的源头,手册把它们分成 8 条并区分了三类检测对象:
| 指令 | 检测谁的边沿 | 是否需实例 | 输出持续 |
|---|---|---|---|
PContact / NContact |
扫一个 operand 的 0→1 / 1→0 | 否(需边沿存储位 bit) |
一个扫描 |
PBox / NBox |
左侧 RLO 的边沿 | 否(需边沿存储位) | 一个扫描 |
PCoil / NCoil |
RLO 边沿,直接写 operand | 否(需边沿存储位) | 一个扫描 |
R_TRIG / F_TRIG |
CLK 的边沿,Q 输出脉冲 |
是(R_TRIG/F_TRIG 实例) | 一个扫描 |
PContact 页的"怎么工作"说清了机制:bit 是边沿存储位,记录上一个扫描的 operand,每个边沿触点要用独立的 bit;operand 从 0 变 1 的那个扫描 out=1,下一个扫描即使 operand 仍为 1,out 也回 0;bit 在扫描结束后才更新。
它列的坑,基本就是现场排障清单:
- 没有前置逻辑:
PContact放在 rung 第一个元素会违反 TIA 边沿规则,前面要先加Enable/Not/ 触点; - 共用边沿位:两个
PContact共用一个bit,边沿互相覆盖,直接漏脉冲; - 边沿位不保持:
bit放 Temp 里每次调用重置——要用 Static、全局M或 DB; - 用成电平:
PContact只亮一个扫描,要保持就接SCoil或自锁; - 跳转/未扫描:网络被
Jump跳过时边沿不会被记录,回来时可能误判。
最后一条很少有人写在教程里,但它是"程序里那段永远不执行的代码"变成"偶发误动作"的标准路径。
五、三种用法:救火、系统学、交给 AI
用法 1:现场救火(30 秒法则)
顺序是 一句话 → 引脚表 → 常见坑,不读全文。一句话判断"是不是我要的语义",引脚表确认接线,常见坑确认"我现在的写法是不是那个错误形态"。熟练之后一页 30 秒看完。
用法 2:按分类通读(把"坑"读成对照表)
单看一条记不住,但把同一分类的"常见坑"连起来读,得到的是边界图:定时器 10 条读完,你脑子里会形成一张"什么时候不能用哪种定时器"的表;边沿 8 条读完,就是一张"哪里会漏脉冲"的检查表。这比背符号有用得多。
用法 3:把指令页当 AI 的校验清单
这条对现在的工作方式影响最大。用 AI 生成或修改梯形图/SCL 时,出错最集中的四类恰好是:定时器选错(TON/TOF/TP 混用)、边沿位共用、双线圈、实例冲突——而这份手册的每页「常见坑」就是一份现成的检查项。
具体做法:把要审查的指令对应的手册页(一句话 + 引脚 + 怎么工作 + 常见坑)当上下文贴给模型,让它逐条对照而不是"凭印象生成"。同类思路可以参考站内两篇:《AI 做 PLC 编程的 7 个教训》(四层验证:结构校验 → TIA 编译 → 云仿真 → 虚拟 PLC/现场,各层能证明什么、不能证明什么)和 《西门子 PLC 梯形图示例库》(60 多个例程怎么排成练习路线)。
⚠️ 但要记住手册自己写的那句:指令页只讲语义和用法,不替代 TIA 帮助和现场工艺评审;安全相关结论必须人工确认。
六、把"查到"变成"跑过"的四步
手册单独看是参考书,配合示例库和 TiaLink 才是闭环:
- 查:在指令页确认语义与坑(本文第三节那七节)。
- 导:用页面顶部的「在 TIA 里试一下」选一个示例块(如
TON的「超时报警」),经 TiaLink 导入当前打开的工程——预检、默认不覆盖同名对象、不自动保存。 - 接:在
OB1里调用该块并接上真实变量。示例块不会自动运行,这一步必须自己做——也正是理解引脚的地方。 - 验:先在云仿真里跑时序,再上虚拟 PLC 看 IO 行为。四层验证的分工见 《AI 做 PLC 编程的 7 个教训》;没有硬件的练法见 《虚拟 PLC 实验室:Factory IO + OpenPLC + Modbus TCP》。
对比"抄一段代码进项目"的做法,这四步多花的只有第 3 步,但换来的是:你知道每一行在哪个扫描周期执行。第 43 篇里那个"重构时把 TP 写成 TON、编译 0 错误 0 警告、电机就是不动"的案例,就是跳过第 3、4 步的代价。
七、边界:它不做什么
写清楚"不做什么"比列功能更能说明一个参考的定位:
- 不替代 TIA 帮助:手册给的是语义、示例与坑;具体固件、具体 CPU 的细节仍以官方帮助与实测为准。
- 不替代工艺评审:特别是安全相关(急停、安全门、F-CPU/F 块)——手册页明确写了"安全相关结论必须人工确认"。
- 版本口径是 TIA V19、S7-1200/1500:S7-300/400 时代的 S5 定时器(
S_ODT之类)语义不同,不能直接套;跨版本行为差异(例如TP脉冲期间再次上升沿是否延长)页面会标"需确认",那就去实测。 - 示例是最小可读形态,不是可投产程序:它演示语义,不带工艺联锁、不带故障处理,导入后必须自己补齐并 review。
- 导入不等于应用:不覆盖同名对象、不自动保存,意味着最终判断权在你这侧——这既是保护,也是责任。
八、FAQ
Q:和 TIA 帮助有什么不一样? 帮助文档是"参数定义 + 官方描述",回答"这个引脚是什么"。手册是"语义 + 最小示例 + 和近邻的区别 + 失败形态",回答"我该用哪条、用错会怎样"。查参数用帮助,选指令用手册。
Q:支持 S7-300/400 吗? 页面统一标 S7-1200/1500(TIA V19)。老 CPU 的定时器/计数器是另一套语义,别直接套。
Q:没有 PLC 硬件能练吗? 能。示例块导入后可以先在云仿真里看时序,或用虚拟 PLC(OpenPLC + Modbus TCP)看 IO 行为;思路见 虚拟 PLC 实验室。
Q:能直接导入我正在做的项目吗? 能,但走的是"预检 → 默认不覆盖同名对象 → 不自动保存"。建议先导入到测试项目里对照,再决定往正式工程里搬什么。
Q:和站内那篇《梯形图转 SCL 迁移指南》什么关系? 一篇讲"同一段逻辑在 LAD 和 SCL 里怎么写"(LAD → SCL 迁移指南),一篇讲"单条指令的准确语义"。迁移时两份一起看最省事:先用手册确认指令语义,再看迁移指南里的等价写法。
来源
- LAD 指令手册(首页,113 条 / 13 类):tia.hubwiz.com/learn-lad/instructions/
- 本文引用的指令页:TON、TOF、TP、CTU、SCoil、Sr、PContact
- 梯形图示例库(60 多个例程,与手册同源渲染):tia.hubwiz.com/learn-lad/
本文为 Learn-LAD 页面结构与内容的整理与解读,指令语义以 TIA 帮助、官方文档与现场工艺评审为准。文中对导入行为(预检、不覆盖同名对象、不自动保存、不自动运行)的描述来自页面上的说明文字。
相关阅读
- 西门子 PLC 梯形图示例库:60 个可导入博途的练习题
- AI 做 PLC 编程的 7 个教训:从编译通过到现场可用
- 梯形图转 SCL 迁移指南(TIA Portal)
- 虚拟 PLC 实验室:Factory IO + OpenPLC + Modbus TCP
- AI 读 PLC 程序评审:一次真实的代码评审课
这是「AI × 工业 / PLC」专题的一部分。完整地图见:AI × 工业 / PLC 完全指南