Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
15
Добавлен:
31.08.2025
Размер:
5.84 Mб
Скачать

Приложение D: Библиотеки CoDeSys

Входные переменные CLAIM и RELEASE - как и выходная переменная BUSY типа BOOL. (CLAIM – запрос захвата, RELEASE - освобождение)

Семафор предназначен для организации асинхронного доступа к одному аппаратному ресурсу. Если при вызове семафора с CLAIM = TRUE возвращаемое значение BUSY = FALSE, то ресурс свободен (запрашивается впервые или уже освобожден вызовом RELEASE = TRUE). Возвращаемое значение BUSY = FALSE, это означает, что ресурс занят.

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

SEMAInst : SEMA ;

Пример IL:

CAL SEMAInst(CLAIM := VarBOOL1, RELEASE := VarBOOL2) LD SEMAInst.BUSY

ST VarBOOL3

Пример FBD:

Пример ST:

SEMAInst(CLAIM:= VarBOOL1 , RELEASE:=VarBOOL2 );

VarBOOL3 := SEMAInst.BUSY;

Детекторы импульсов

R_TRIG

Функциональный блок R_TRIG генерирует импульс по переднему фронту входного сигнала. FUNCTION_BLOCK R_TRIG

VAR_INPUT CLK : BOOL;

END_VAR VAR_OUTPUT

Q : BOOL; END_VAR VAR

M : BOOL := FALSE; END_VAR

Q := CLK AND NOT M;

M := CLK; END_FUNCTION_BLOCK

Выход Q равен FALSE до тех пор, пока вход CLK равен FALSE. Как только CLK получает значение TRUE, Q устанавливается в TRUE. При следующем вызове функционального блока выход сбрасывается в FALSE. Таким образом, блок выдает единичный импульс при каждом переходе

CLK из FALSE в TRUE.

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

RTRIGInst : R_TRIG ;

CoDeSys V2.3

10-47

Приложение D: Библиотеки CoDeSys

Пример IL:

CAL RTRIGInst(CLK := VarBOOL1)

LD RTRIGInst.Q

ST VarBOOL2

Пример FBD:

Пример ST:

RTRIGInst(CLK:= VarBOOL1);

VarBOOL2 := RTRIGInst.Q;

F_TRIG

Функциональный блок F_TRIG генерирует импульс по заднему фронту входного сигнала. FUNCTION_BLOCK F_TRIG

VAR_INPUT CLK: BOOL;

END_VAR VAR_OUTPUT

Q: BOOL; END_VAR VAR

M: BOOL := FALSE; END_VAR

Q := NOT CLK AND NOT M; M := NOT CLK;

END_FUNCTION_BLOCK

Выход Q равен FALSE до тех пор, пока вход CLK равен TRUE. Как только CLK получает значение FALSE, Q устанавливается в TRUE. При следующем вызове функционального блока выход сбрасывается в FALSE. Таким образом, блок выдает единичный импульс при каждом переходе

CLK из TRUE в FALSE.

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

FTRIGInst : F_TRIG ;

Пример IL:

CAL FTRIGInst(CLK := VarBOOL1) LD FTRIGInst.Q

ST VarBOOL2

Пример FBD:

Пример ST:

FTRIGInst(CLK:= VarBOOL1);

CoDeSys V2.3

10-48

Приложение D: Библиотеки CoDeSys

VarBOOL2 := FTRIGInst.Q;

Счетчики

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

CoDeSys V2.3

10-49

Приложение D: Библиотеки CoDeSys

Пример 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 ;

CoDeSys V2.3

10-50