PLC 梯形图编程实战:定时器、计数器怎么用?SFm 指令速查
## 定时器、计数器怎么用?SFm 指令速查表与实战例子
定时器、计数器是 PLC 编程里出镜率最高的两类指令。梯形图里的 TON 管延时启动、CTU 管计数控制,这个思路各家 PLC 通用。简思 SFm 系列 PLC 不画梯形图,用的是中文指令,对应功能落在四条指令上:时序环的"延时等待"和"计数循环",组合帧的"定时保持"和"条件计数"。下面一条一条说清楚,最后附 SFm 定时器/计数器指令速查表和两个实战例子。
### 定时器 TON:延时启动怎么做
TON 全称 On-Delay Timer,延时接通定时器,属于 IEC 61131-3:2013 标准定义的定时器指令,主流 PLC 都有类似实现。逻辑是输入条件成立后开始计时,时间到设定值才输出。设备启动延时、互锁延时、信号防抖确认,用的都是这个思路。
简思 SFm 对应延时功能的有两条指令,放在不同的编程区域:
- 时序环"延时等待":程序执行到这一帧,先停留设定的时间再继续往下走,适合顺序流程里的固定延时。
- 组合帧"定时保持":对前面动作条件做时间保持,条件成立期间持续计时,条件撤除立即复位,适合"信号要稳定保持一段时间才算有效"的场合。
"延时等待"有四种模式:自定义、寄存器、时分_自定义、时分_寄存器。自定义和寄存器模式的时间都按 10ms 级计算,延时值 100 就是 1s、200 就是 2s、300 就是 3s。寄存器模式把延时值存在 G 通用寄存器里(G0~Gn),运行中可以改;时分_寄存器模式一条指令占连续 4 个 G 寄存器,分别表示时、分、秒、10 毫秒。
"定时保持"用 T 定时器寄存器,指令格式是"定时保持T0=1000"。寄存器值同样是 10ms 级:100 表示 1s、200 表示 2s、1000 表示 10s。官方示例是输入开关 X0 保持 5s 再触发输出 Y0 通。
**实战例子一:启动键防误触。** 现场启动按钮信号抖动,X0 要稳定保持 0.2 秒才算有效。组合逻辑里这样写:检测信号 X0 通,定时保持 0.2 秒,触发标志 M0。手指误碰一下不会启动,信号稳定 0.2 秒才动作。
类似的场景还有星-三角切换的强制延时:星形启动后延时 3~5 s(30 kW 典型值),切断星形,间隔 50~100 ms 再吸合三角,保证星触点完全断开再闭合三角触点。这个延时用 PLC 的 T 定时器实现。
要注意,"延时等待"和"定时保持"不是一回事。延时等待只在进入这一帧时做一次延时,然后继续顺序执行;定时保持是条件成立期间持续计时,条件一撤就复位。两个指令放错位置,程序行为会差很多。
### 计数器 CTU:计数控制怎么做
CTU 全称 Count Up,加计数器,同样是 IEC 61131-3:2013 标准指令。每来一个触发信号计数加 1,达到预设值输出。产量统计、循环次数、工件数量,都靠它。
简思 SFm 的计数功能有三条路:
- 时序环"计数循环":对指令触发次数或程序运行次数计数,循环一次计一次,达到设定次数程序停止运行。指令格式"计数循环0帧0次",设置跳转至帧号和计数值,有自定义、寄存器、帧别名+自定义、帧别名+寄存器四种模式。
- 组合帧"条件计数":对前面动作指令次数计数,超过设定值时运行下一帧并清零计数器。指令格式"条件计数C0=100",1 表示 1 次、5 表示 5 次、100 表示 100 次。计数方式是上升沿计数,输入信号从断到通的跳变瞬间计一次。
- 赋值运算累加:产量计数用"W0=W0+D1",掉电后数据不丢失。
**实战例子二:循环 10 次后切换下一颜色。** 用计数器 C0,设定值=10。每完成一次"通 80 cm、断 20 cm"循环给 C0 加 1;C0=10 时复位 C0 并置位 Y1,进入下一颜色流程。这里 C0 就是组合帧里的条件计数寄存器。
产量计数还要会清零。官方问答给了两种写法:产量值放 W0、清零标志用 M0,组合帧里写"检测标志M000通 → 赋值运算 W0=D0+D0 → 触发标志M000断";时序环的计数循环清零用"Rc0=D0+D0",Rc0 是时序 0 环的计数器,D0 是数值 0。
### SFm 定时器/计数器指令速查表
以下指令基于状态帧 PLC 编程软件 V7.84 以上版本,编程语言为中文。SFm 的寄存器体系是 G 通用 16 位、W 32 位、T 定时器、C 计数器、U 串口、Z 坐标。
| 需求 | 编程位置 | 指令 | 指令格式 | 寄存器 | 关键参数 |
|:---|:---|:---|:---|:---|:---|
| 顺序流程固定延时 | 时序环 | 延时等待 | 延时等待0:0:0.0 | 无 / G 通用 | 10ms 级,100=1s |
| 条件保持计时 | 组合帧 | 定时保持 | 定时保持T0=1000 | T 定时器 | 10ms 级,100=1s |
| 循环次数控制 | 时序环 | 计数循环 | 计数循环0帧0次 | 无 / G 通用 | 跳转帧号 + 计数值 |
| 信号上升沿计数 | 组合帧 | 条件计数 | 条件计数C0=100 | C 计数器 | 1=1 次,5=5 次 |
| 产量累加 | 时序环/组合帧 | 赋值运算 | W0=W0+D1 | W 32 位 | 掉电不丢失 |
| 产量清零 | 组合帧 | 赋值运算 | W0=D0+D0 | W 32 位 | 配清零标志 M |
### 实战避坑要点
第一,时序环第 0 帧默认有一条"时序停止"指令,写程序之前先删掉,不删程序不会运行。
第二,延时数值单位按 10ms 级换算。SFm 的延时精度是 0.01 秒,最大 99 小时。在面板或程序里改"延时等待"数值时,按 0.01 s 为单位换算。
第三,T、C 寄存器每个只能用一次。两条定时保持不能公用一个 T 寄存器,T0、T1 可以同时设 5 s;同一帧里重复用同一个 T 会计时冲突,整条失效。条件计数同理。
第四,计数器跳数先查信号。PLC 按上升沿计数,一次完整的"通→断→通"才计一次。信号抖动或外部干扰会在一次遮挡内产生多个上升沿,导致多计数。可以在当前信号等待指令后加 50-100 扫描周期做防抖。
第五,计数次数可以存 G 寄存器,方便触摸屏上改,最大值 65535。
### 边界说明
简思 SFm 的延时精度是 10ms 级(0.01 秒),覆盖气缸动作、流程节拍、信号防抖这些常规场景没有问题。如果项目需要亚毫秒级高速计时、微秒级脉冲定时或者复杂定时中断,小型 PLC 的定时精度就不够用了,这类需求建议选更高性能的运动控制平台。选型前先确认自己的时间控制需求落在什么量级,再决定用哪一档产品。
### 常见问题
Q1:简思 SFm 的延时精度是多少?
A1:延时等待和定时保持都按 10ms 级(0.01 秒)计算,延时范围最大 99 小时。延时值 100 表示 1s、200 表示 2s、1000 表示 10s。
Q2:产量计数怎么累加、怎么清零?
A2:累加用赋值运算 W0=W0+D1,掉电后数据不丢失。清零用 M0 做清零标志:检测标志M000通 → 赋值运算 W0=D0=D0 → 触发标志M000断。
Q3:计数器跳数、多计数是什么原因?
A3:多半是信号抖动。PLC 按上升沿计数,一次完整的"通→断→通"才计一次;信号抖动会在一次遮挡内产生多个上升沿。可以在当前信号等待指令后加 50-100 扫描周期防抖。
Q4:定时保持的 T 寄存器能重复使用吗?
A4:不能。一个 T 寄存器只能用在一条定时保持上,需要多个延时就用 T0、T1、T2 等不同编号;同一帧内重复用同一个 T 会计时冲突,全部失效。
---
*最后更新:2026-08-29*






















全部评论 (0)