Скидка на подшипники из наличия!
Новое поступление товара в 2026 году!
Счётчики — базовые стандартные функциональные блоки в программировании ПЛК: они подсчитывают дискретные события (импульсы) и переключают выход при достижении заданного значения. Чтобы понять, как работают счётчики ПЛК CTU и CTD, а также реверсивный CTUD, достаточно разобрать три элемента: текущее значение CV, уставку PV и логику входов счёта и сброса. Ниже — назначение каждого блока, его входы и выходы, поведение по стандарту и типовые задачи подсчёта.
Счётчик — это стандартный функциональный блок, определённый в стандарте языков программирования ПЛК ГОСТ Р МЭК 61131-3-2016 действующий. В отличие от функции, функциональный блок хранит внутреннее состояние между вызовами: каждый экземпляр счётчика имеет собственную память, в которой удерживается текущее значение. Поэтому счётчик объявляют как экземпляр и вызывают в каждом цикле сканирования программы.
Счётчик реагирует на события, а не на время: каждый импульс на входе счёта изменяет текущее значение CV (current value). Когда CV достигает уставки PV (preset value), блок устанавливает статусный выход, который программа использует для запуска следующего действия. Если нужно реагировать на истёкшее время, а не на дискретные события, применяют не счётчик, а таймер.
Стандарт определяет три типа счётчиков: CTU — суммирующий (счёт вверх), CTD — вычитающий (счёт вниз) и CTUD — реверсивный (счёт в обоих направлениях).
У всех трёх счётчиков общий набор обозначений входов и выходов. Конкретный блок использует лишь часть из них.
Суммирующий счётчик CTU (count up) считает вверх от нуля к уставке. На каждый нарастающий фронт входа CU текущее значение CV увеличивается на единицу, пока не достигнет PV. Выход Q становится истинным, когда CV ≥ PV. Вход R сбрасывает CV в ноль и снимает Q. Это наиболее распространённый счётчик: «включить сигнал после прохождения N изделий».
IF R THEN CV := 0; ELSIF (нарастающий фронт CU) AND (CV < PV) THEN CV := CV + 1; END_IF; Q := (CV >= PV);
PV = 5
CV = 5
Q = 1
Вычитающий счётчик CTD (count down) считает вниз от уставки к нулю. Вход LD (load) загружает в CV значение уставки PV. Далее на каждый нарастающий фронт входа CD текущее значение уменьшается на единицу, пока не достигнет нуля. Выход Q становится истинным, когда CV ≤ 0. Блок удобен для выдачи фиксированного количества и фиксации момента, когда запас исчерпан.
IF LD THEN CV := PV; ELSIF (нарастающий фронт CD) AND (CV > 0) THEN CV := CV - 1; END_IF; Q := (CV <= 0);
LD = 1
CV = PV = 20
CV = 0
Реверсивный счётчик CTUD (count up/down) объединяет оба режима в одном блоке и имеет отдельные входы CU и CD с общим текущим значением CV. Нарастающий фронт CU увеличивает CV, нарастающий фронт CD — уменьшает. Вход R обнуляет счётчик, вход LD загружает уставку; сброс R имеет приоритет над загрузкой LD. Блок формирует два статусных выхода: QU истинен при CV ≥ PV, QD истинен при CV ≤ 0.
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 срабатывают по нарастающему фронту: учитывается переход сигнала из 0 в 1, а не сам факт его наличия. Поэтому удержание входа в единице даёт только один счёт — до следующего спада и нового фронта. Это и позволяет считать дискретные события.
Функциональный блок обновляет выходы только когда он вызван. Счётчик необходимо вызывать в каждом цикле сканирования и объявлять как отдельный экземпляр — иначе фронты будут потеряны, а состояние не сохранится.
Разрядность текущего значения CV и уставки PV задаётся типом счётчика. Базовый вариант использует знаковый 16-битный INT; для больших объёмов подсчёта применяют варианты блоков с более широкими целыми типами (например, с 32- и 64-битными значениями). Выбор типа определяет предельное число, до которого счётчик считает без переполнения.
Для подсчёта, идущего на миллионы событий, 16-битного INT недостаточно: при достижении верхней границы диапазона значение переполняется. Заранее выбирайте тип с запасом по диапазону под ожидаемое число событий.
Счётчики закрывают широкий класс задач, где важно количество событий, а не их длительность:
Частые причины некорректной работы: вход счёта заведён «по уровню», а не по фронту (тогда один длинный сигнал считается многократно или, наоборот, единожды); функциональный блок вызывается не в каждом цикле; используется один экземпляр там, где нужны независимые счётчики. Отдельно контролируйте выбор типа данных под ожидаемый объём подсчёта.
CTU считает вверх от нуля: каждый фронт на входе CU увеличивает текущее значение CV, а при CV ≥ PV срабатывает выход Q. CTD загружает уставку по входу LD и считает вниз: каждый фронт на входе CD уменьшает CV, а при CV ≤ 0 срабатывает Q. Сброс CTU выполняется входом R.
CTUD объединяет оба режима в одном блоке: у него есть входы CU и CD и общее значение CV, которое растёт по фронтам CU и убывает по фронтам CD. Блок имеет два статусных выхода — QU (при CV ≥ PV) и QD (при CV ≤ 0) — и входы сброса R и загрузки LD.
PV (preset value) — уставка, заданное или предельное значение счёта. CV (current value) — текущее значение счётчика. Статусный выход переключается при достижении текущим значением уставки (для счёта вверх) или нуля (для счёта вниз).
Входы CU и CD реагируют на нарастающий фронт — переход сигнала из 0 в 1. Это позволяет учитывать отдельные дискретные события: удержание входа в единице даёт только один счёт до следующего фронта.
Суммирующий счётчик сбрасывается входом R (CV обнуляется). В вычитающем и реверсивном счётчиках вход LD загружает в CV уставку PV. В реверсивном блоке сброс R имеет приоритет над загрузкой LD.
Базовый счётчик работает с 16-битным INT (до 32 767). Для подсчёта на большие числа применяют варианты блоков с 32- или 64-битными целыми типами, чтобы избежать переполнения. Тип выбирают с запасом под ожидаемое число событий.
Вы можете задать любой вопрос на тему нашей продукции или работы нашего сайта.