3.3 计数器指令
本节将介绍PLC计数器的类型和使用方法
学习目标
- 掌握计数器的工作原理
- 了解不同类型计数器的区别
- 能够正确使用计数器编程
1. 计数器基本概念
1.1 什么是计数器
计数器是PLC中用于对脉冲信号进行计数的软元件,广泛应用于产品计数、行程控制等场合。
计数器工作原理:
计数脉冲
│
▼
┌───────────────┐
│ 计数器 │
│ ┌───────┐ │
│ │ 当前值 │ │──→ 计数器线圈
│ │ CV │ │ (达到设定值时接通)
│ └───────┘ │
│ ↑ │
│ 每个脉冲±1 │
│ ↑ │
│ ┌───────┐ │
│ │ 设定值 │ │
│ │ PV │ │
│ └───────┘ │
│ │ │
│ 复位输入 │
└───────────────┘1.2 计数器与定时器对比
| 特性 | 定时器 | 计数器 |
|---|---|---|
| 计数对象 | 时间(固定周期) | 脉冲(外部信号) |
| 增量方式 | 自动递增 | 脉冲触发 |
| 应用场景 | 延时控制 | 数量统计 |
| 精度 | 取决于时基 | 脉冲计数精确 |
1.3 计数器组成要素
| 要素 | 说明 | 示例 |
|---|---|---|
| 计数器编号 | 计数器的标识 | C0, C10, CTU_1 |
| 设定值(PV) | 预设的计数目标 | 100 |
| 当前值(CV) | 已计数的值 | 0~设定值 |
| 计数输入(CU) | 加计数脉冲输入 | 上升沿计数 |
| 复位输入(R) | 复位计数器 | 清零当前值 |
| 输出(Q) | 计数到达输出 | 线圈/触点 |
2. 计数器类型
2.1 计数器分类
PLC计数器类型:
┌─────────────────────────────────────────────────────┐
│ 计数器 │
├────────────┬────────────┬────────────┬──────────────┤
│ CTU │ CTD │ CTUD │ HSC │
│ 加计数器 │ 减计数器 │ 加减计数器 │ 高速计数器 │
├────────────┼────────────┼────────────┼──────────────┤
│ 0→PV │ PV→0 │ 双向计数 │ 高频率计数 │
│ 达到PV输出│ 达到0输出 │ 灵活控制 │ 编码器计数 │
└────────────┴────────────┴────────────┴──────────────┘2.2 各品牌计数器对照
| 功能 | 西门子(S7) | 三菱(FX) | 欧姆龙 |
|---|---|---|---|
| 加计数器 | CTU | OUT C | CNT |
| 减计数器 | CTD | - | CNTD |
| 加减计数器 | CTUD | - | CNTR |
| 高速计数器 | HSC | HSCS | PRV |
3. 加计数器(CTU)
3.1 工作原理
CTU:每检测到一个上升沿脉冲,计数值加1,达到设定值后输出接通。
CTU工作时序:
计数输入CU: ___┌┐___┌┐___┌┐___┌┐___┌┐___┌┐___
↓ ↓ ↓ ↓ ↓ ↓
当前值CV: 0 1 2 3 4 5
设定值PV=5
↓
输出Q: ________________________________┌───
│
达到PV后接通
复位R: ┌─┐
────────────────┘ └───────────────
↓
当前值CV: 清零为03.2 CTU梯形图表示
【梯形图】
┌──────────┐
计数输入 ─┤CU CTU ├──── 输出(达到设定值)
│ │
复位输入 ─┤R CV ├──── 当前值
│ │
设定值 ───┤PV │
└──────────┘
【说明】
· CU:计数脉冲输入(上升沿触发)
· R:复位输入(高电平复位)
· PV:设定值(计数目标)
· Q:到达输出
· CV:当前计数值
【简化表示】
计数信号
───┤├───────[CTU C0, 100]───
复位按钮
───┤├───────[RST C0]───
C0
───┤├───────( 输出 )───3.3 CTU应用实例
应用:产品计数(每计10个产品报警)
Network 1: 计数器
┌──────────┐
传感器 ───┤CU CTU ├──── 计数到达
│ │
复位按钮 ─┤R │
│ │
10 ───┤PV │
└──────────┘
Network 2: 报警输出
计数到达
───┤├───────( 报警灯 )───
说明:传感器每检测到一个产品,计数器加1
当计数到10时,报警灯亮
按下复位按钮,计数器清零4. 减计数器(CTD)
4.1 工作原理
CTD:预装设定值,每检测到一个脉冲计数值减1,减到0时输出接通。
CTD工作时序:
装载LD: ───┌┐_________________________________
↓
当前值CV: PV=5
计数输入CD: ______┌┐___┌┐___┌┐___┌┐___┌┐___
↓ ↓ ↓ ↓ ↓
当前值CV: 5 4 3 2 1 0
↓
输出Q: _________________________________┌───
│
减到0后接通4.2 CTD梯形图表示
【梯形图】
┌──────────┐
减计数 ───┤CD CTD ├──── 输出(减到0)
│ │
装载 ─────┤LD CV ├──── 当前值
│ │
设定值 ───┤PV │
└──────────┘
【说明】
· CD:减计数输入
· LD:装载设定值
· PV:预设值(初始值)
· Q:减到0时输出4.3 CTD应用实例
应用:倒计数控制(库存减少到0报警)
┌──────────┐
出库传感器 ┤CD CTD ├──── 库存不足
│ │
入库完成 ──┤LD CV ├──── 当前库存
│ │
100 ───┤PV │ // 初始库存
└──────────┘
当CV=0时,输出接通 → 库存不足报警5. 加减计数器(CTUD)
5.1 工作原理
CTUD:可双向计数,有加计数和减计数两个输入。
CTUD工作时序:
加计数CU: ___┌┐_________┌┐___┌┐___________
↓ ↓ ↓
减计数CD: _________┌┐_______________┌┐___
↓ ↓
当前值CV: 0 1 0 1 2 1
│ │
加计数+1 减计数-1
输出QU:达到PV时接通(上限)
输出QD:减到0时接通(下限)5.2 CTUD梯形图表示
【梯形图】
┌──────────┐
加计数 ───┤CU CTUD ├──── 上限输出(达到PV)
│ │
减计数 ───┤CD QD ├──── 下限输出(减到0)
│ │
复位 ─────┤R CV ├──── 当前值
│ │
装载 ─────┤LD │
│ │
设定值 ───┤PV │
└──────────┘
【说明】
· CU:加计数输入
· CD:减计数输入
· R:复位(清零)
· LD:装载设定值
· QU:达到上限输出
· QD:达到下限(0)输出5.3 CTUD应用实例
应用:停车场车位管理
输入:
· 入口传感器(加计数)
· 出口传感器(减计数)
· 系统复位
输出:
· 车位满(100辆)
· 车位空(0辆)
· 当前车辆数量
程序:
┌──────────┐
入口传感器 ┤CU CTUD ├──── 满位指示
│ │
出口传感器 ┤CD QD ├──── 空位指示
│ │
系统复位 ──┤R CV ├──── 当前数量
│ │
100 ───┤PV │
└──────────┘6. 高速计数器(HSC)
6.1 概述
普通计数器受PLC扫描周期限制,高频脉冲会丢失。高速计数器通过硬件中断实现高频率计数。
普通计数器 vs 高速计数器:
普通计数器: 高速计数器:
脉冲 ─→ 扫描程序读取 脉冲 ─→ 硬件直接计数
受扫描周期限制 不受扫描周期限制
最大约 1kHz 可达 100kHz以上
适用场合: 适用场合:
· 低速计数 · 编码器计数
· 按钮计数 · 高速脉冲计数
· 位置检测6.2 高速计数器特点
高速计数器配置要点:
1. 使用专用高速输入端口
2. 设置计数模式:
· 单相计数(一路脉冲)
· AB相正交计数(两路脉冲,可辨向)
3. 设置计数方向
4. 使用中断或比较指令处理
常用参数:
┌────────────────────────────────────────────────────┐
│ 参数 │ 说明 │
├────────────────────────────────────────────────────┤
│ 计数模式 │ 单相/双相/AB相 │
│ 计数方向 │ 加计数/减计数/自动 │
│ 当前值 │ 32位整数 │
│ 比较值 │ 用于触发输出或中断 │
│ 输入端口 │ 必须使用专用高速输入 │
└────────────────────────────────────────────────────┘6.3 编码器应用
旋转编码器计数:
编码器类型:
· 增量式编码器:输出A、B、Z脉冲
· 绝对式编码器:输出位置绝对值
1000线编码器位置计算:
当前计数值
位置(度) = ────────── × 360°
1000 × 4
(4倍频计数时,1000线编码器转一圈产生4000个脉冲)
应用:
· 位置检测和控制
· 速度测量
· 长度测量7. 计数器应用实例
7.1 生产计数显示
需求:对产品进行计数,显示当前数量,满100个报警
Network 1: 计数
传感器
───┤├───────[CTU C0, 100]───
Network 2: 复位
复位按钮
───┤├───────[RST C0]───
Network 3: 显示(将计数值送显示寄存器)
常ON
───┤├───────[MOV C0 → 显示寄存器]───
Network 4: 报警
C0
───┤├───────( 报警灯 )───7.2 定时计数配合
需求:每隔1分钟检测一次速度(计数产品数量)
Network 1: 1分钟定时
M0 T0
───┤/├─────────┤/├─────[TON T1, 60秒]───
T1
───┤├───────────────────( M0 )───
Network 2: 产品计数
传感器
───┤├───────[CTU C0, 9999]───
Network 3: 每分钟记录
T1
───┤P├──────[MOV C0 → 速度寄存器]───
[RST C0]───
Network 4: 速度判断(速度>50时输出)
常ON 速度寄存器 > 50
───┤├───────[CMP]────────( 高速指示 )───7.3 批次计数
需求:每10个产品为一箱,计满5箱后停止
Network 1: 产品计数(每箱10个)
传感器
───┤├───────[CTU C0, 10]───
Network 2: 箱数计数(满箱时C1加1,C0复位)
C0
───┤├───────[CTU C1, 5]───
[RST C0]───
Network 3: 停止信号
C1
───┤├───────( 停止输出 )───
Network 4: 系统复位
复位按钮
───┤├───────[RST C0]───
[RST C1]───7.4 往复运动控制
需求:工作台往复运动5次后停止
Network 1: 左限位计数
左限位开关
───┤├───────[CTU C0, 5]───
Network 2: 右行控制(未计满且在左限位时右行)
C0 左限位
───┤/├────────┤├────────( 右行 )───
Network 3: 左行控制(未计满且在右限位时左行)
C0 右限位
───┤/├────────┤├────────( 左行 )───
Network 4: 到达5次停止
C0
───┤├───────────────────( 完成指示 )───
Network 5: 复位
复位按钮
───┤├───────[RST C0]───8. 计数器使用注意事项
8.1 常见问题
问题1:计数不准确
原因:
· 脉冲过快超出扫描能力
· 信号抖动产生多余脉冲
· 复位时机不当
解决:
· 高频使用高速计数器
· 加入滤波电路
· 使用上升沿检测
问题2:计数器溢出
原因:超出最大计数范围
解决:
· 16位计数器:使用32位计数器
· 定期复位或记录累计值
问题3:掉电数据丢失
原因:使用普通计数器
解决:
· 使用停电保持型计数器
· 定期将数值存入EEPROM8.2 信号去抖动
机械开关去抖动:
开关信号 T0
───┤├─────────────┤/├─────[TON T0, 20ms]───
T0
───┤├───────────────────[CTU C0, 100]───
说明:
· 利用定时器滤除20ms内的抖动
· 确保信号稳定后再计数8.3 最佳实践
计数器使用建议:
┌────────────────────────────────────────────────────┐
│ 1. 合理选择计数器类型 │
│ · 低速场合:普通计数器 │
│ · 高速场合:高速计数器 │
│ · 需要保持:停电保持型 │
├────────────────────────────────────────────────────┤
│ 2. 注意计数范围 │
│ · 16位:0-32767 │
│ · 32位:0-2147483647 │
├────────────────────────────────────────────────────┤
│ 3. 复位时机 │
│ · 在适当时机复位 │
│ · 避免正在计数时复位 │
├────────────────────────────────────────────────────┤
│ 4. 边沿计数 │
│ · 计数器自动检测上升沿 │
│ · 不需要另加边沿检测 │
└────────────────────────────────────────────────────┘本节小结
计数器指令要点:
┌────────────────────────────────────────────────────┐
│ CTU(加计数器) │
│ · 从0开始向上计数 │
│ · 达到设定值后输出ON │
│ · 最常用的计数器类型 │
├────────────────────────────────────────────────────┤
│ CTD(减计数器) │
│ · 从设定值向下计数 │
│ · 减到0时输出ON │
│ · 用于倒计数场合 │
├────────────────────────────────────────────────────┤
│ CTUD(加减计数器) │
│ · 双向计数功能 │
│ · 有上限和下限输出 │
│ · 用于库存、车位管理 │
├────────────────────────────────────────────────────┤
│ HSC(高速计数器) │
│ · 硬件计数不受扫描周期限制 │
│ · 用于编码器、高速脉冲计数 │
│ · 需要专用输入端口 │
└────────────────────────────────────────────────────┘练习题
- 说明CTU、CTD、CTUD三种计数器的区别。
- 为什么高速场合需要使用高速计数器?
- 设计一个批次计数程序:每20个产品为一批,计10批后停止。
- 如何解决机械开关的信号抖动问题?