Tag Archives: счетчики

Счетчики CoDeSys

CTU Функциональный блок ‘инкрементный счетчик’.

Входы CU, RESET и выход Q типа BOOL, вход PV и выход CV типа WORD.

По каждому фронту на входе CU (переход из FALSE в TRUE) выход CV увеличивается на 1. Выход Q устанавливается в TRUE, когда счетчик достигнет значения заданного PV. Счетчик CV сбрасывается в 0 по входу RESET = TRUE.

Пример объявления:

CTUInst : CTU ;

Пример IL:

CAL CTUInst(CU := VarBOOL1, RESET := VarBOOL2, PV := VarINT1)

LD CTUInst.Q

ST VarBOOL3

LD CTUInst.CV

ST VarINT2

Пример FBD:

Пример ST:

CTUInst(CU:= VarBOOL1, RESET:=VarBOOL2 , PV:= VarINT1);

VarBOOL3 := CTUInst.Q ;

VarINT2 := CTUInst.CV;

CTD Функциональный блок ‘декрементный счетчик’.

 

Входы CD, LOAD и выход Q типа BOOL, вход PV и выход CV типа WORD.

По каждому фронту на входе CD (переход из FALSE в TRUE) выход CV уменьшается на 1. Когда счетчик достигнет 0, счет останавливается, выход Q переключается в TRUE. Счетчик CV загружается начальным значением, равным PV по входу LOAD = TRUE.

Примеробъявления:

CTDInst : CTD ;

Пример IL:

CAL CTDInst(CD := VarBOOL1, LOAD := VarBOOL2, PV := VarINT1)

LD CTDInst.Q

ST VarBOOL3

LD CTDInst.CV

ST VarINT2

Пример FBD:

Пример ST:

CTDInst(CD:= VarBOOL1, LOAD:=VarBOOL2 , PV:= VarINT1);

VarBOOL3 := CTDInst.Q ;

VarINT2 := CTDInst.CV;

 

CTUD Функциональный блок ‘инкрементный / декрементный счетчик’.

Входы CU, CD, RESET, LOAD и выходы QU и QD типа BOOL, PV и CV типа WORD.

По входу RESET счетчик CV сбрасывается в 0, по входу LOAD загружается значением PV.

По фронту на входе CU счетчик увеличивается на 1. По фронту на входе CD счетчик уменьшается на 1 (до 0).

QU устанавливается в TRUE, когда CV больше или равен PV.

QD устанавливается в TRUE, когда CV равен 0.

Примеробъявления:

CTUDInst : CUTD ;

Пример IL:

CAL CTUDInst(CU := VarBOOL2, RESET := VarBOOL3, LOAD :=VarBOOL4, PV := VarINT1)

LD CTUDInst.QU

ST VarBOOL5

LD CTUDInst.QD

ST VarBOOL6

LD CTUDInst.CV

ST VarINT2

Пример FBD:

Пример ST:

CTUDInst(CU := VarBOOL1, CU:= VarBOOL2, RESET := VarBOOL3,

LOAD:=VarBOOL4 , PV:= VarINT1);

VarBOOL5 := CTUDInst.QU ;

VarBOOL6 := CTUDInst.QD ;

VarINT2 := CTUDInst.CV;

 

Задача на изучение блоков стандартных библиотек (управление освещением)

Условие задачи

Условие задачи

Условие задачи

На входе установлены два дискретных датчика: один снаружи комнаты, другой внутри. Когда срабатывает сначала внешний датчик, затем внутренний, это означает, что человек зашел в комнату.Когда срабатывает сначала внутренний датчик, затем внешний, это означает, что человек вышел из комнаты.

Задача1: Если человек вошел – включить свет, Если человек вышел – выключить свет.

Задача2: Необходимо считать количество людей, заходящих и выходящих из комнаты.

Пока в комнате остается хотя бы один человек, свет должен быть включен.

Реализовать задачу управления светом комнате с помощью компонентов стандартной библиотеки. Свет должен выключаться через 5 секунд, после того как последний человек покинет комнату.

 

Рисунок 1 Визуализация задачи

Рисунок 1 Визуализация задачи

Рисунок 2 Добавление стандартных библиотек

Рисунок 2 Добавление стандартных библиотек

Программа

Область переменных:

PROGRAM PLC_PRG

VAR vh_sen, vyh_sen:BOOL;(*сигналы с сенсоров на входной двери*)

light:BOOL;(*сигнал включения света в комнате*)

ludi:INT;(*число людей в комнате*)

vh_sen_pred, vyh_sen_pred:BOOL;(*вспомогательные переменные: состояния сенсоров на предыдущем шаге*)

rtr1: R_TRIG;(*детекторы передних фронтов*)

rtr2: R_TRIG;

tt2: TOF;(*таймер для организации задержки выключения*)

tzad:TIME;(*текущее время задержки*)

END_VAR

Рисунок 3 Вид программы на языке СFC с использованием стандартных библиотек

Рисунок 3 Вид программы на языке СFC с использованием стандартных библиотек

Мой блог находят по следующим фразам