Skip to content

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)欧姆龙
加计数器CTUOUT CCNT
减计数器CTD-CNTD
加减计数器CTUD-CNTR
高速计数器HSCHSCSPRV

3. 加计数器(CTU)

3.1 工作原理

CTU:每检测到一个上升沿脉冲,计数值加1,达到设定值后输出接通。

CTU工作时序:

计数输入CU: ___┌┐___┌┐___┌┐___┌┐___┌┐___┌┐___
                ↓    ↓    ↓    ↓    ↓    ↓
当前值CV:    0    1    2    3    4    5
                              设定值PV=5

输出Q:      ________________________________┌───

                                      达到PV后接通

复位R:                    ┌─┐
           ────────────────┘ └───────────────

当前值CV:               清零为0

3.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:掉电数据丢失

原因:使用普通计数器

解决:
· 使用停电保持型计数器
· 定期将数值存入EEPROM

8.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(高速计数器)                                 │
│  · 硬件计数不受扫描周期限制                       │
│  · 用于编码器、高速脉冲计数                       │
│  · 需要专用输入端口                               │
└────────────────────────────────────────────────────┘

练习题

  1. 说明CTU、CTD、CTUD三种计数器的区别。
  2. 为什么高速场合需要使用高速计数器?
  3. 设计一个批次计数程序:每20个产品为一批,计10批后停止。
  4. 如何解决机械开关的信号抖动问题?

← 上一节:3.2 定时器指令 | 返回目录 | 下一节:3.4 数据传送指令 →

本教程由 AI (Claude Opus 4.5) 生成,仅供学习参考