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

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

Пример FBD:

Пример ST:

TOFInst(IN := VarBOOL1, PT:= T#5s);

VarBOOL2 :=TOFInst.Q;

RTC

Функциональный блок ‘часы реального времени’. После установки начального значения, RTC выдает текущие время и дату.

RTC(EN, PDT, Q, CDT) Входы EN и PDT, выходы Q и CDT типов BOOL и DATE_AND_TIME со-

ответственно.

Пока EN равен FALSE, выход Q равен FALSE и CDT равен DT#1970-01-01-00-00:00:00.

При включении EN = TRUE в часы загружается время PD и начинается отсчет времени. На выходе CDT. Если EN перейдет в FALSE, CDT сбросится в начальное значение DT#1970-01-01-00- 00:00:00. Обратите внимание, что установка времени PDT происходит по фронту.

Библиотека UTIL.LIB

Данная библиотека содержит дополнительный набор различных функций и функциональных блоков, применяемых для BCD и бит/байт преобразований, дополнительных математических функций, а также регуляторов, генераторов и преобразований аналоговых сигналов.

Специальная версия этой библиотеки UTIL_NO_REAL не содержит функций и функциональных блоков, использующих переменные типа REAL.

BCD преобразования

Байт, представленный в формате BCD, содержит числа от 0 до 99. Каждый десятичный знак занимает 4 бита. Биты 4-7 содержат первую цифру – число десятков. Формат BCD подобен шестнадцатеричному представлению с ограничением диапазона чисел 0..99 вместо 0.. FF.

Например: Преобразуем число 51 в BCD формат. 5 - это двоичное 0101, 1 - это 0001. В результате получается байт 0101_0001.

BCD_TO_INT

Функция преобразует байт формата BCD в число типа INT.

Входной параметр функции типа BYTE и выход типа INT. Если входное значение не укладывается в формат BCD, функция возвращает -1.

Примеры ST:

i:=BCD_TO_INT(73); (* Результат 49 *) k:=BCD_TO_INT(151); (*Результат 97 *)

CoDeSys V2.3

10-53

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

l:=BCD_TO_INT(15); (* -1, потому что F0 не BCD формат*)

INT_TO_BCD

Функция преобразует INTEGER число в байт формата BCD.

Входной параметр функции типа INT и выход типа BYTE.

Если INTEGER число не может быть представлено в BCD формате, то функция возвращает значе-

ние 255.

Примеры ST:

i:= INT_TO_BCD(49);

(*Результат 73 *)

k:=INT_TO_BCD (97);

(*Результат 151 *)

l:= INT_TO_BCD (100);

(* Ошибка! Выход: 255 *)

Бит/байт функции

EXTRACT

Параметры функции: DWORD X и BYTE N. Выход типа BOOL, отражает значение бита N в числе X. Биты нумеруются с 0.

Примеры ST:

FLAG:=EXTRACT(X:=81,N:=4); (* Результат: TRUE, 81 это 1010001, 4й бит 1 *) FLAG:=EXTRACT(X:=33, N:=0); (* Результат: TRUE, 33 это 100001,бит ‘0’ это 1 *)

PACK

Функция сворачивает восемь параметров B0, B1, ..., B7 типа BOOL в один BYTE.

Функциональный блок UNPACK выполняет обратную распаковку.

PUTBIT

Параметры функции: DWORD X, BYTE N и BOOL B.

PUTBIT устанавливает N-й бит числа X в состояние, заданное B. Биты нумеруются с 0.

Примеры ST:

A:=38;

(* двоичное 100110 *)

B:=PUTBIT(A,4,TRUE);

(* Результат : 54 = 2#110110 *)

C:=PUTBIT(A,1,FALSE);

(* Результат : 36 = 2#100100 *)

UNPACK

UNPACK преобразует вход B типа BYTE в 8 выходов B0,...,B7 типа BOOL.

Обратная упаковка производится с помощью PACK.

Пример FBD:

CoDeSys V2.3

10-54

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

Дополнительные математические функции

DERIVATIVE

Функциональный блок выполняет численное дифференцирование.

Аналоговый вход IN и выход OUT типа REAL. Вход TM задает время дифференцирования (как правило, в миллисекундах) имеет тип DWORD. В процессе сброса (RESET = TRUE) выход OUT равен нулю.

Алгоритм DERIVATIVE проводит аппроксимацию по четырем точкам, что снижает ошибки при наличии шума во входном сигнале.

Блок FBD:

Пример дифференцирования треугольных импульсов:

INTEGRAL

Функциональный блок выполняет численное интегрирование.

Аналоговый вход IN типа REAL. Вход TM типа DWORD задает длительность интегрирования (как правило, в миллисекундах). Вход RESET типа BOOL запускает интегрирование при установ-

ке в TRUE. Выход OUT типа REAL.

Алгоритм вычисления использует классический двухточечный метод трапеций.

Блок FBD: пример интегрирования линейной функции:

CoDeSys V2.3

10-55

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

LIN_TRAFO

Данный функциональный блок (util.lib) преобразует значение переменной REAL, принадлежащее одному интервалу в пропорциональное значение, принадлежащее другому интервалу. Интервалы определяются минимальным и максимальным значением. Алгоритм преобразования опирается на следующее равенство:

(IN - IN_MIN) : (IN_MAX - IN) = (OUT - OUT_MIN) : (OUT_MAX - OUT)

Входные переменные:

Переменная

Тип

дан-

Описание

 

ных

 

 

 

 

 

 

IN

REAL

 

Входное значение

 

 

 

 

IN_MIN

REAL

 

Нижнее значение входного диапазона

 

 

 

 

IN_MAX

REAL

 

Верхнее значение входного диапазона

 

 

 

 

OUT_MIN

REAL

 

Нижнее значение выходного диапазона

 

 

 

 

OUT_MAX

REAL

 

Верхнее значение выходного диапазона

 

 

 

 

Выходные переменные:

 

 

 

 

 

 

 

Переменная

Тип

дан-

Описание

 

ных

 

 

 

 

 

 

OUT

REAL

 

Выходное значение

 

 

 

ERROR

BOOL

Признак ошибки: TRUE, если IN_MIN =

 

 

 

IN_MAX или если значение IN вышло за преде-

 

 

 

лы входного диапазона

 

 

 

 

Пример использования:

Допустим, датчик температуры выдает некоторое напряжение в вольтах (вход IN). Нам необходимо преобразовать полученное значение в градусы по Цельсию (выход OUT). Входной диапазон (в Вольтах) определяется пределами IN_MIN=0 и IN_MAX=10. Выходной диапазон (в градусах Цельсия) определяется соответствующими пределами OUT_MIN=-20 и OUT_MAX=40.

Так, при входном значении 5 Вольт, мы получим на выходе 10 градусов по Цельсию.

STATISTICS_INT

Функциональный блок определяет минимальное, максимальное и среднее значения входной величины.

CoDeSys V2.3

10-56