CTUD - счетчик вверх/вниз

Назначение.
Функциональный блок СTUD представляет собой счетчик, значения которого могут увеличиваться или уменьшаться на единицу в каждом цикле работы контроллера. Может использоваться совместно с функциональным блоком RF_TRIG для подсчета количества изменений булевского значения на противоположное: true → false или false → true.
Состав структурной переменной.
Переменная со структурным типом СTUD будет добавлена в локальный словарь автоматически при добавлении блока в редактор.

Описание алгоритма.
На вход PV подается целое число, которое определяет начальное значение при убывании счета (CD=TRUE) или конечное значение при возрастании (CU=TRUE). На выход CV выводится текущее значение счетчика. Если PV<0, выход CV=0.
Управление работой счетчика осуществляется через подачу на входы CU, CD, RESET и LOAD управляющих дискретных сигналов:
-
LOAD=TRUE - используется для записи в блок входного целочисленного значения PV, которое сохраняется в блоке и передается на выход СV. Значение на входе LOAD обладает самым высоким приоритетом и не зависит от других входных значений. Пока LOAD=TRUE, другие управляющие команды игнорируются, значение счетчика не изменяется, а выход СV=PV.
-
RESET=TRUE - используется для обнуления текущего значения счетчика, после чего текущее значение счетчика и выход CV будут равны 0. Счетчик будет обнулен, если отсутствует сигнал загрузки (LOAD=FALSE), иначе значение RESET игнорируется. Пока RESET=TRUE, значение счетчика не изменяется, а выход СV=0.
-
CD=TRUE - используется для запуска убывающего счетчика. Счетчик будет запущен, если входные сигналы LOAD, RESET и CU равны FALSE. После запуска в каждом цикле работы контроллера начальное значение счетчика PV будет уменьшаться на единицу и передаваться на выход CV. Счетчик будет остановлен, если его текущее значение уменьшится до нуля (CV=0), при этом выход QD=TRUE (отсчет закончен, текущее значение равно 0).
-
CU=TRUE - используется для запуска возрастающего счетчика. Счетчик будет запущен, если входные сигналы LOAD, RESET и CD равны FALSE. После запуска в каждом цикле работы контроллера значение счетчика будет увеличиваться на единицу и передаваться на выход CV, отсчет начинается с нуля. Счетчик будет остановлен, если его текущее значение увеличится до максимального (CV=PV), при этом выход QU=TRUE (отсчет закончен, текущее значение равно максимальному). При PV<=0 счетчик не запускается, а выходы CV=0, QU=TRUE.Работа счетчика может быть остановлена принудительно до завершения отсчета. Остановка произойдет при поступлении управляющих сигналов на загрузку (LOAD=TRUE), сброс (RESET=TRUE), остановку текущего счетчика (CU=FALSE и CD=FALSE) или при попытке одновременного запуска счетчика в двух направлениях (CU=TRUE и CD=TRUE). В таком случае выходные значения QU=FALSE и QD=FALSE, так как отсчет не был завершен.Если работа счетчика была прервана командами загрузки или обнуления, выходу CV будет присвоено значение PV или 0 соответственно. Во всех остальных случаях на выходе CV сохраняется последнее значение счетчика.
Пример синтаксиса на языке ST.
//вызов функционального блока СTUD
Block.CTUD(CU, CD, RESET, LOAD, PV);
//чтение текущего значения счетчика
CV := Block.CV;
//QU=TRUE, если CV=PV или PV<=0 при возрастающем счетчике
//QU=FALSE, в остальных случаях
QU := Block.QU;
//QD=TRUE, если CV=0 при убывающем счетчике
//QD=FALSE, в остальных случаях
QD := Block.QD;
|
Использование с блоком RF_TRIG.
Функциональный блок CTUD не определяет передний и задний фронты входных дискретных сигналов CU и CD. Поэтому, для создания импульсного счетчика на входы CU и CD необходимо подавать сигналы с выходов двух блоков RF_TRIG, которые выделяют передний фронт дискретного сигнала.
На следующем изображении приведен пример соединения блоков, когда содержимое счетчика в блоке CTUD будет увеличиваться или уменьшаться на 1 по переднему фронту (FALSE → TRUE) сигналов "Add" или "Sub" соответственно.

Если установить инверсию на входы CLK блоков RF_TRIG, содержимое счетчика в блоке СTUD будет увеличиваться или уменьшаться по заднему фронту (FALSE → TRUE) дискретных сигналов "Add" или "Sub" соответственно.

