> ## Content Index
> Fetch the complete content index at: https://www.hubwiz.com/blog/llms.txt
> Use this file to discover other available public pages before exploring further.

# TIA Portal 计数器简明教程
- URL: https://www.hubwiz.com/blog/a-concise-tutorial-on-tia-portal-counters/
- Published: 2026-08-28T09:59:57.000Z
- Updated: 2026-10-13T15:11:32.000Z
- Description: 本文将介绍 TIA Portal 中使用的三种主要计数器类型：CTU（加计数器）、 CTD（减计数器）和 CTUD（加减计数器）。
- Author: admin
- Tags: PHYSICAL AI, PLC, #Import 2026-10-14 14:41

在西门子 S7-1200 和 S7-1500 PLC 中，**计数器（Counter）扮演着至关重要的角色。它们能够在控制程序中实现事件、脉冲和操作的计数，广泛应用于产品计数、周期跟踪、批处理和位置监控**。

本文将介绍 **TIA Portal** 中使用的**三种主要计数器类型**：**CTU（加计数器）**、 **CTD（减计数器）**和 **CTUD（加减计数器）**。所有示例均基于 S7-1200 和 S7-1500 PLC，两个系列的计数器逻辑完全相同。

## 1、计数器的基本结构和参数

TIA Portal 中的计数器以 **IEC\_COUNTER** 结构的形式实现，存储在 **数据块（DB）** 中。每个计数器实例都会创建自己的 DB，使计数器能够独立运行。

![CTU 计数器数据块](https://www.hubwiz.com/blog/content/images/2026/08/image-3-1.png)

CTU、CTD 和 CTUD 指令具有相似的参数。**PV** 和 **CV** 的数据类型在插入指令时选择——最常用的是 **Int**，但根据预期的计数范围，也可以使用 **DInt**、**UInt**、**UDInt**、**SInt**、**USInt**、**LInt** 或 **ULInt**。

- **CU** – 加计数输入（Bool）。CU 处的**上升沿**（0→1）将当前值 CV 加 1。在 CTU 和 CTUD 中可用。
- **CD** – 减计数输入（Bool）。CD 处的**上升沿**（0→1）将 CV 减 1。在 CTD 和 CTUD 中可用。
- **R** – 复位输入（Bool）。信号为 1 时将 CV 重置为 0 并清除输出 Q。在 CTU 和 CTUD 中可用。R 具有最高优先级——当 R = 1 时，计数被阻止。
- **LD** – 加载输入（Bool）。信号为 1 时将预设值 PV 加载到 CV 中。在 CTD 和 CTUD 中可用。用于在倒计数前将计数器预加载到起始值。
- **PV** – 预设值。定义计数器将 CV 与之比较的目标值。对于 CTU，当 CV ≥ PV 时 Q 切换为 1。对于 CTD，PV 是通过 LD 加载的起始值。
- **Q** – 逻辑输出（Bool），在 CTU 和 CTD 中使用。指示是否已达到计数目标。可用于后续逻辑或可视化。
- **QU** – 加计数状态（Bool），仅在 CTUD 中可用。当 CV ≥ PV 时 QU = 1。
- **QD** – 减计数状态（Bool），仅在 CTUD 中可用。当 CV ≤ 0 时 QD = 1。
- **CV** – 当前值。显示实际计数。可在程序逻辑中读取、存档或在 HMI 上显示。

> ⚠️ 每个 IEC\_COUNTER 结构应仅分配给一个计数器指令，以避免 CU、CD、R 和 LD 信号之间的意外交互。

在 **LAD** 中编程时，计数器指令应放置在**网络末尾**，建议使用**标签输出（Q、QU、QD、CV）而不是直接访问 DB 变量。请记住 CU 和 CD 仅对上升沿**作出反应——如果需要计数连续电平，请将计数器与边沿检测器结合使用（参见我们关于 [R\_TRIG 和 F\_TRIG 边沿检测](https://controlbyte.tech/blog/triggers-in-codesys-r-trig-f-trig-edge-detection/?ref=hubwiz.com) 的指南）。

## 2、加计数

### 2.1 工作原理

CTU 是 PLC 编程中最常用的计数器。每次输入信号 **CU** 的**上升沿**（从 0 到 1 的跳变）时，当前值 CV 加 1。

CV 随着每个上升沿不断增加，直到达到其数据类型的上限（对于 `Int`，为 32,767）。一旦 CV ≥ PV，输出 **Q** 切换为 1。只要 CV 大于或等于 PV，Q 就保持为 1，无论 CU 是否持续脉冲。

如果 **R** 设为 1，CV 立即重置为 0，Q 变为低电平。当 R = 1 时，计数器忽略 CU 上的上升沿——复位具有绝对优先级。

![CTU 时序图](https://www.hubwiz.com/blog/content/images/2026/08/image-13-2.png)

![CTU 计数器工作原理](https://www.hubwiz.com/blog/content/images/2026/08/image-4-1.png)

### 2.2 典型应用

当你需要跟踪事件或完成操作的数量时，加计数很有用，例如：

- 计算传送带上的产品
- 计算已完成的机器周期
- 跟踪操作直到计划维护（例如每 10,000 个周期）
- 计算一个班次中的不合格零件或报警次数
- 在定义数量的事件后触发动作（打包、包装）

## 3、减计数

### 3.1 工作原理

CTD 计数器的工作方式与 CTU 相反。在计数开始之前，使用输入 **LD** 将预设值 PV 加载到 CV 中——LD 处的信号为 1 时在单次扫描中将 PV 复制到 CV。

加载后，每次输入 **CD** 的**上升沿**将 CV 减 1。当 CV 达到 0 或更低时，输出 **Q** 切换为 1。只要 CV ≤ 0，Q 就保持为 1。

与 CTU 不同，CTD 计数器没有复位输入。要重新开始倒计数，只需再次脉冲 LD = 1——这会将 PV 重新加载到 CV 中并清除 Q。

![CTD 时序图](https://www.hubwiz.com/blog/content/images/2026/08/image-143.png)

![CTD 计数器工作原理](https://www.hubwiz.com/blog/content/images/2026/08/image-5-1.png)

### 3.2 典型应用

当过程必须运行定义的步数然后发出完成信号时，使用 CTD 计数器，例如：

- 倒计数生产批次中剩余的零件
- 递减票证或令牌池
- 倒计数到报警或维护通知
- 每一步都递减剩余计数的机器序列
- 分配预设数量的物品并自动停止

## 4、加减计数

### 4.1 工作原理

CTUD 计数器在单个指令中结合了 CTU 和 CTD 的行为。在 **CU** 的上升沿时 CV 加 1，在 **CD** 的上升沿时 CV 减 1，当 **R** \= 1 时重置为 0，当 **LD** \= 1 时加载 PV。

CTUD 暴露两个独立的状态输出：

- **QU** \= 1 当 CV ≥ PV（达到上限）
- **QD** \= 1 当 CV ≤ 0（达到下限）

输入之间的优先级是固定的：**R 具有最高优先级**，其次是 LD，然后是计数输入。如果 CU 和 CD 在同一扫描中都收到上升沿，CV 保持不变。

![CTUD 时序图](https://www.hubwiz.com/blog/content/images/2026/08/image-1-1.png)

![CTUD 计数器工作原理](https://www.hubwiz.com/blog/content/images/2026/08/image-6-2.png)

### 4.2 典型应用

CTUD 计数器非常适合需要双向计数的场景——跟踪既可以增长也可以减少的数量，例如：

- 库存或缓冲区跟踪（零件进、零件出）
- 线性和旋转轴上的位置计数
- 停车场或仓库占用率监控
- 计算生产线中两个工作站之间的物品
- 出入口处的人数计数

## 5、常见问题和最佳实践

在 TIA Portal 中实现**计数器**时，一些常见问题经常出现：

- **丢失边沿** — CU 和 CD 仅计数**上升沿**。如果驱动信号有噪声或抖动，请在计数器输入前使用去抖滤波器或边沿检测器（R\_TRIG）。
- **Int 计数器溢出** — 默认 `Int` 范围是 −32,768…32,767。对于高速或长时间运行的计数器，请将 PV/CV 切换为 `DInt` 或 `UDInt`。
- **计数器未复位** — 检查 R 是否确实转换为 1。复位具有优先级，但如果 R 由于逻辑错误保持为 0，计数器将继续计数。
- **实例之间共享 DB** — 永远不要将两个计数器调用指向同一个实例 DB。每个计数器需要自己的 IEC\_COUNTER 实例。
- **重启后的保持性** — 默认情况下，CV 在电源循环后不会保留。如果需要计数在重启后存活（例如总运行周期），请在 DB 属性中将 DB 变量标记为保持性。

## 6、结束语

**西门子 PLC 中的计数器**是基于事件的逻辑的基本工具。理解 **CTU、CTD 和 CTUD** 的行为，可以让你在 **TIA Portal** 中构建可靠的产品计数、批处理、位置跟踪和库存监控。与定时器和边沿检测器结合使用，计数器构成了几乎所有工业序列的核心。

---

原文链接：[Counters in TIA Portal – How to Use CTU, CTD and CTUD in Siemens PLCs](https://controlbyte.tech/blog/counters-in-tia-portal-how-to-use-ctu-ctd-and-ctud-in-siemens-plcs/?ref=hubwiz.com)

汇智网翻译整理，转载请标明出处

> **这是「AI × 工业 / PLC」专题的一部分。**完整地图见：[AI × 工业 / PLC 完全指南](https://www.hubwiz.com/blog/ai-industrial-stack/)