Производство по чертежам Подбор аналогов Цены производителя Оригинальная продукция в короткие сроки
INNERпроизводство и поставка промышленных комплектующих и оборудования
Бесплатно Личный кабинет — избранное и расчёты ★ Регистрация →
Новинка Симуляторы и тренажёры — ЧПУ, допуски, ПИД Попробовать →
Правовая информация →

INNER
Контакты

Как работают счётчики ПЛК CTU и CTD

  • 14.07.2026
  • Принцип работы

Счётчики — базовые стандартные функциональные блоки в программировании ПЛК: они подсчитывают дискретные события (импульсы) и переключают выход при достижении заданного значения. Чтобы понять, как работают счётчики ПЛК CTU и CTD, а также реверсивный CTUD, достаточно разобрать три элемента: текущее значение CV, уставку PV и логику входов счёта и сброса. Ниже — назначение каждого блока, его входы и выходы, поведение по стандарту и типовые задачи подсчёта.

Содержание статьи
ПЛК-программирование

Что такое счётчик ПЛК

Счётчик — это стандартный функциональный блок, определённый в стандарте языков программирования ПЛК ГОСТ Р МЭК 61131-3-2016 действующий. В отличие от функции, функциональный блок хранит внутреннее состояние между вызовами: каждый экземпляр счётчика имеет собственную память, в которой удерживается текущее значение. Поэтому счётчик объявляют как экземпляр и вызывают в каждом цикле сканирования программы.

Счётчик реагирует на события, а не на время: каждый импульс на входе счёта изменяет текущее значение CV (current value). Когда CV достигает уставки PV (preset value), блок устанавливает статусный выход, который программа использует для запуска следующего действия. Если нужно реагировать на истёкшее время, а не на дискретные события, применяют не счётчик, а таймер.

Стандарт определяет три типа счётчиков: CTU — суммирующий (счёт вверх), CTD — вычитающий (счёт вниз) и CTUD — реверсивный (счёт в обоих направлениях).

Наверх

Общие параметры: входы и выходы

У всех трёх счётчиков общий набор обозначений входов и выходов. Конкретный блок использует лишь часть из них.

ОбозначениеТипНазначение
CUBOOL (по фронту)Счёт вверх: каждый нарастающий фронт увеличивает CV на единицу
CDBOOL (по фронту)Счёт вниз: каждый нарастающий фронт уменьшает CV на единицу
RBOOLСброс: обнуляет текущее значение (CV := 0)
LDBOOLЗагрузка уставки в счётчик (CV := PV)
PVINT (или иной целый)Уставка — заданное (предельное) значение счёта
QBOOLСтатусный выход суммирующего или вычитающего счётчика
QUBOOLВыход «вверх» реверсивного счётчика: CV ≥ PV
QDBOOLВыход «вниз» реверсивного счётчика: CV ≤ 0
CVINT (или иной целый)Текущее значение счётчика
БлокНаправление счётаВходыВыходыУсловие срабатывания
CTUВверх от нуляCU, R, PVQ, CVQ = 1 при CV ≥ PV
CTDВниз от уставкиCD, LD, PVQ, CVQ = 1 при CV ≤ 0
CTUDВверх и внизCU, CD, R, LD, PVQU, QD, CVQU = 1 при CV ≥ PV; QD = 1 при CV ≤ 0
Наверх

CTU — суммирующий счётчик

Суммирующий счётчик CTU (count up) считает вверх от нуля к уставке. На каждый нарастающий фронт входа CU текущее значение CV увеличивается на единицу, пока не достигнет PV. Выход Q становится истинным, когда CV ≥ PV. Вход R сбрасывает CV в ноль и снимает Q. Это наиболее распространённый счётчик: «включить сигнал после прохождения N изделий».

Поведение блока CTU по стандарту:
IF R THEN
    CV := 0;
ELSIF (нарастающий фронт CU) AND (CV < PV) THEN
    CV := CV + 1;
END_IF;
Q := (CV >= PV);
Уставка PV = 5. Датчик даёт импульс на CU при прохождении каждой детали. После пятого импульса CV = 5, срабатывает Q = 1 — программа формирует упаковку из пяти деталей и подаёт импульс на R, обнуляя счётчик для следующей партии.
Наверх

CTD — вычитающий счётчик

Вычитающий счётчик CTD (count down) считает вниз от уставки к нулю. Вход LD (load) загружает в CV значение уставки PV. Далее на каждый нарастающий фронт входа CD текущее значение уменьшается на единицу, пока не достигнет нуля. Выход Q становится истинным, когда CV ≤ 0. Блок удобен для выдачи фиксированного количества и фиксации момента, когда запас исчерпан.

Поведение блока CTD по стандарту:
IF LD THEN
    CV := PV;
ELSIF (нарастающий фронт CD) AND (CV > 0) THEN
    CV := CV - 1;
END_IF;
Q := (CV <= 0);
Загрузка LD = 1 задаёт CV = PV = 20 — требуется выдать 20 изделий. Каждое выданное изделие даёт импульс на CD. Когда CV = 0, выход Q = 1 сигнализирует, что партия отгружена полностью.
Наверх

CTUD — реверсивный счётчик

Реверсивный счётчик CTUD (count up/down) объединяет оба режима в одном блоке и имеет отдельные входы CU и CD с общим текущим значением CV. Нарастающий фронт CU увеличивает CV, нарастающий фронт CD — уменьшает. Вход R обнуляет счётчик, вход LD загружает уставку; сброс R имеет приоритет над загрузкой LD. Блок формирует два статусных выхода: QU истинен при CV ≥ PV, QD истинен при CV ≤ 0.

Поведение блока CTUD по стандарту:
IF R THEN
    CV := 0;
ELSIF LD THEN
    CV := PV;
ELSE
    IF NOT (фронт CU AND фронт CD) THEN
        IF (фронт CU) AND (CV < верхний предел типа) THEN
            CV := CV + 1;
        ELSIF (фронт CD) AND (CV > нижний предел типа) THEN
            CV := CV - 1;
        END_IF;
    END_IF;
END_IF;
QU := (CV >= PV);
QD := (CV <= 0);
Учёт заполнения буфера конвейера на PV = 30 позиций. Датчик входа даёт импульс на CU (позиция прибыла), датчик выхода — на CD (позиция ушла). QU = 1 сигнализирует о заполнении буфера, QD = 1 — о его опустошении.
Наверх

Фронт, сброс и загрузка уставки

Ключевая особенность входов счёта — реакция на фронт, а не на уровень. Входы CU и CD срабатывают по нарастающему фронту: учитывается переход сигнала из 0 в 1, а не сам факт его наличия. Поэтому удержание входа в единице даёт только один счёт — до следующего спада и нового фронта. Это и позволяет считать дискретные события.

  1. Счёт по фронту. Один нарастающий фронт на CU или CD изменяет CV ровно на единицу.
  2. Сброс R. Пока R истинен, CV удерживается в нуле; выход счёта снимается.
  3. Загрузка LD. Истинный LD записывает в CV значение уставки PV (для вычитающего и реверсивного счёта).
  4. Приоритет. В реверсивном блоке сброс R обрабатывается раньше загрузки LD, а одновременные фронты CU и CD не изменяют значение.

Функциональный блок обновляет выходы только когда он вызван. Счётчик необходимо вызывать в каждом цикле сканирования и объявлять как отдельный экземпляр — иначе фронты будут потеряны, а состояние не сохранится.

Наверх

Типы данных и переполнение

Разрядность текущего значения CV и уставки PV задаётся типом счётчика. Базовый вариант использует знаковый 16-битный INT; для больших объёмов подсчёта применяют варианты блоков с более широкими целыми типами (например, с 32- и 64-битными значениями). Выбор типа определяет предельное число, до которого счётчик считает без переполнения.

ТипРазрядностьДиапазон значений
INT16 бит, со знаком−32 768 … +32 767
DINT32 бит, со знаком−2 147 483 648 … +2 147 483 647
UDINT32 бит, без знака0 … 4 294 967 295
LINT64 бит, со знаком−9 223 372 036 854 775 808 … +9 223 372 036 854 775 807
ULINT64 бит, без знака0 … 18 446 744 073 709 551 615

Для подсчёта, идущего на миллионы событий, 16-битного INT недостаточно: при достижении верхней границы диапазона значение переполняется. Заранее выбирайте тип с запасом по диапазону под ожидаемое число событий.

Наверх

Типовые задачи и рекомендации

Счётчики закрывают широкий класс задач, где важно количество событий, а не их длительность:

  • Подсчёт изделий. CTU считает детали на конвейере и формирует партию заданного размера по достижении уставки.
  • Дозирование партии. CTD отсчитывает вниз от заданного количества и фиксирует момент, когда партия выдана полностью.
  • Баланс «вход/выход». CTUD отслеживает текущее заполнение накопителя, склада или буфера при поступлении и убытии позиций.

Частые причины некорректной работы: вход счёта заведён «по уровню», а не по фронту (тогда один длинный сигнал считается многократно или, наоборот, единожды); функциональный блок вызывается не в каждом цикле; используется один экземпляр там, где нужны независимые счётчики. Отдельно контролируйте выбор типа данных под ожидаемый объём подсчёта.

Как работают счётчики ПЛК CTU и CTD?

CTU считает вверх от нуля: каждый фронт на входе CU увеличивает текущее значение CV, а при CV ≥ PV срабатывает выход Q. CTD загружает уставку по входу LD и считает вниз: каждый фронт на входе CD уменьшает CV, а при CV ≤ 0 срабатывает Q. Сброс CTU выполняется входом R.

Чем отличается CTUD от CTU и CTD?

CTUD объединяет оба режима в одном блоке: у него есть входы CU и CD и общее значение CV, которое растёт по фронтам CU и убывает по фронтам CD. Блок имеет два статусных выхода — QU (при CV ≥ PV) и QD (при CV ≤ 0) — и входы сброса R и загрузки LD.

Что такое PV и CV в счётчике?

PV (preset value) — уставка, заданное или предельное значение счёта. CV (current value) — текущее значение счётчика. Статусный выход переключается при достижении текущим значением уставки (для счёта вверх) или нуля (для счёта вниз).

Почему счётчик считает по фронту, а не по уровню?

Входы CU и CD реагируют на нарастающий фронт — переход сигнала из 0 в 1. Это позволяет учитывать отдельные дискретные события: удержание входа в единице даёт только один счёт до следующего фронта.

Как сбросить счётчик?

Суммирующий счётчик сбрасывается входом R (CV обнуляется). В вычитающем и реверсивном счётчиках вход LD загружает в CV уставку PV. В реверсивном блоке сброс R имеет приоритет над загрузкой LD.

Какой тип данных выбрать для счётчика?

Базовый счётчик работает с 16-битным INT (до 32 767). Для подсчёта на большие числа применяют варианты блоков с 32- или 64-битными целыми типами, чтобы избежать переполнения. Тип выбирают с запасом под ожидаемое число событий.

Статья носит ознакомительный характер и не заменяет действующие тексты стандартов и техническую документацию на конкретную среду разработки и модель ПЛК. Обозначения входов, выходов и поведение блоков уточняйте по документации применяемой системы программирования; автор и издатель не несут ответственности за возможные последствия использования приведённой информации.

Источники

  1. ГОСТ Р МЭК 61131-3-2016 — Контроллеры программируемые. Часть 3. Языки программирования (идентичен IEC 61131-3:2013).
  2. IEC 61131-3:2025 — Programmable controllers. Part 3: Programming languages (действующая редакция; стандартные функциональные блоки счётчиков CTU, CTD, CTUD).
  3. K.-H. John, M. Tiegelkamp. IEC 61131-3: Programming Industrial Automation Systems (справочное издание по стандарту).
  4. Техническая документация распространённых сред разработки ПЛК по стандартным функциональным блокам счётчиков.

© Компания Иннер Инжиниринг. Все права защищены.

Появились вопросы?

Вы можете задать любой вопрос на тему нашей продукции или работы нашего сайта.