Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Языки пр в Concept.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
1.87 Mб
Скачать

1.2. Функции и функциональные блоки

В разделе кратко описаны некоторые простейшие FFB, доступные в библиотеке IEC. Для удобства эти FFB разбиты на группы. В имени FFB часто присутствует тип данных, который должен стоять вместо «***» (например, ADD_REAL). Более полно FFB описаны в [1].

Группа элементарных функций «Arithmetic» - арифметика

В этой группе представлены EF, выполняющие арифметические операции (табл. 2.1). Типы данных на входах (IN) и выходе (OUT) должны быть одинаковыми. Некоторые EF допускают расширение количества входов до 32.

Таблица 2.1

Группа «Arithmetic»

Имя функции

Тип данных

Действие

Примечание

ADD_***

ANY_NUM, TIME

Сложение OUT=IN1+IN2+…

Количество входов – до 32 для ANY_NUM

DIV_***

ANY_NUM

Деление

OUT:=IN1/IN2

Для ANY_INT – целочисленное деление

MOD_***

ANY_INT

Остаток от целочисленного деления

MOVE

ANY

OUT=IN

Окончание таблицы 2.1

Имя функции

Тип данных

Действие

Примечание

MUL_***

ANY_NUM

Умножение

OUT=IN1*IN2*…

Количество входов – до 32

SUB_***

ANY_NUM, TIME

вычитание

OUT=IN1–IN2

TIME_MUL_***

IN1: TIME

IN2: ANY_NUM

OUT: TIME

умножение

OUT=IN1*IN2

TIME_DIV_***

IN1: TIME

IN2: ANY_NUM

OUT: TIME

деление

OUT=IN1/IN2

Группа элементарных функциональных блока «Bistable» – триггеры

В группу входят два триггера: RS (с доминирующим входом «Сброс» – R1) и SR (с доминирующим входом «Установка» – S1). Оба триггера имеют выход Q1. Разрешенный тип данных на входах и выходах – BOOL.

Ниже приведена таблица переходов RS и SR триггеров. В таблице «» означает лог. 0 или лог. 1.

Таблица 2.2

Таблицы переходов RS и SR триггеров

Q1t-1  Q1t+1

R1t

St

Q1t-1  Q1t+1

Rt

S1t

0  0

0

0  0

0

0 1

0

1

0 1

1

1  1

0

1  1

0

1  0

1

1  0

1

0


Группа элементарных функций «Comparison» - сравнение

В группу входят EF, выполняющие функцию сравнения входных данных типа ANY_ELEM (табл. 2.3). Количество входов в EF может варьироваться от 2 до 32. Если условие сравнения выполняется, то выходная переменная (типа BOOL) принимает значение лог. 1, иначе – лог. 0.

Таблица 2.3

Группа «Comparison»

Имя функции

Условие сравнения

Описание функции сравнения

EQ_***

=

OUT=1, если IN1=IN2 и IN2=IN3 и IN3=IN4…

GE_***

OUT=1, если IN1IN2 и IN2IN3 и IN3IN4…

LE_***

OUT=1, если IN1IN2 и IN2IN3 и IN3IN4…

GT_***

>

OUT=1, если IN1>IN2 и IN2>IN3 и IN3>IN4…

LT_***

<

OUT=1, если IN1<IN2 и IN2<IN3 и IN3<IN4…

NE_***

OUT=1, если IN1IN2 и IN2IN3 и IN3IN4…

Группа элементарных функций «Converter» - преобразование типа данных

В группу входят EF (табл. 2.4), преобразующие тип данных.

При преобразовании типов данных выполняются условия:

  • если входные данные имеет большую разрядность чем выходные, то значение выходных данных определяется младшими разрядами входных данных;

  • если входные данные имеет меньшую разрядность чем выходные, то входные данные передаются в младшие разряды выходных данных, а старшие разряды обнуляются;

  • при преобразовании знаковых переменных в незнаковые знак теряется.

На рис. 2.3 приведен пример преобразования переменной Sensor_Temperature типа UDINT в переменную Temperature типа REAL с помощью функции UDINT_TO_REAL:

Таблица 2.4

Группа «Converter»

Имя функции

Действие

BOOL_TO_***

Преобразование данных типа BOOL в данные типа ANY_NUM, BYTE или WORD

BYTE_TO_***

Преобразование данных типа BYTE в данные типа ANY_NUM, BOOL или WORD

DINT_TO_***

Преобразование данных типа DINT в данные типа INT, ANY_BIT, UDINT, UINT, REAL, TIME

INT_TO_***

Преобразование данных типа INT в данные типа, ANY_BIT, DINT, UDINT, UINT, REAL или TIME..

REAL_TO_***

Преобразование данных типа REAL в данные типа ANY_BIT или ANY_INT, или TIME.

REAL_TRUNC_TO_***

Преобразование данных типа REAL в данные типа ANY_INT с округлением в сторону нуля.

TIME_TO_***

Преобразование данных типа TIME в данные типа ANY_BIT или ANY_NUM

UDINT_TO_***

Преобразование данных типа UDINT в данные типа ANY_BIT, DINT, INT, UINT, REAL, TIME

UINT_TO_***

Преобразование данных типа UINT в данные типа ANY_BIT, DINT, INT, UDINT, REAL или TIME

WORD_TO_***

Преобразование данных типа WORD в данные типа ANY_NUM, BOOL, BYTE, или TIME.

Группа элементарных функциональных блоков «Counter» - счетчики

В группу входят суммирующий – CTU (Up counter), вычитающий – CTD (Down counter) и реверсивный – CTUD (Up/Down counter) счетчики.

В суммирующем счетчике (рис. 2.4) для обнуления на вход R необходимо подать лог. 1. Изменение переменной на входе CD с лог. 0 к лог. 1 приводит к увеличению содержимого счетчика (выход CV) на 1. Выход Q становится равным лог. 1, если CV становится больше PV.

В вычитающем счетчике (рис. 2.5) при подаче на вход LD лог. 1 в счетчик (выход CV) записывается начальное значение, подаваемое на вход PV. Изменение переменной на входе CD с лог. 0 к лог. 1 приводит к уменьшению содержимого счетчика на 1. Выход Q становится равен лог. 1, если CV<=0.

В реверсивном счётчике (рис. 2.6) для обнуления на вход R необходимо подать лог. 1. При подаче на вход LD лог 1 в счетчик записывается начальное значение, подаваемое на вход PV. При одновременном приходе лог. 1 на входы LD и R, преимущество имеет вход R. Изменение значения на входе CU с лог. 0 к лог. 1 приводит к увеличению содержимого счетчика на 1. Такое же изменение на входе CD приводит к уменьшению содержимого счетчика. При одновременном изменении на входах CU и CD, вход CU имеет преимущество.

Выход CV предназначен для считывания содержимого счетчика. Выход QU=1, если CV>=PV. Выход QD=1, если CV<=0.

Группа элементарных функциональных блоков «Edge Detection» – обнаружение фронта/среза

В группу входят два EFB – R_TRIG и F_TRIG, имеющие вход CLK и выход Q. В R_TRIG на выходе Q появляется лог. 1 по фронту (переходу из лог. 0 к лог 1) на входе CLK. В F_TRIG на выходе Q появляется лог. 1 по срезу (переходу из лог. 1 к лог. 0) на входе CLK.

Группа элементарных функций «Logic» - логика

В группу входят EF, выполняющие поразрядные логические операции над данными типа ANY_BIT (табл. 2.5). Типы данных на входах и выходе должны быть одинаковыми.

Таблица 2.5

Группа «Logic»

Действие

Примечание

NOT_***

Поразрядное логическое отрицание

AND_***

Поразрядное логическое умножение

Количество входов – до 32

OR_***

Поразрядное логическое сложение

Количество входов – до 32

XOR_***

Поразрядное сложение по модулю 2

Количество входов – до 32

ROL_***

Циклический сдвиг влево

Количество разрядов для сдвига задается на входе N

ROR_***

Циклический сдвиг вправо

Количество разрядов для сдвига задается на входе N

SHL_***

Сдвиг влево

Количество разрядов для сдвига задается на входе N

SHR_***

Сдвиг вправо

Количество разрядов для сдвига задается на входе N

Группа элементарных функций «Numerical» - вычисление функций

В группу входят EF, предназначенные для вычисления:

- тригонометрических функций – SIN_REAL, COS_REAL, TAN_REAL, ASIN_REAL, ACOS_REAL и ATAN_REAL;

- квадратного корня – SQRT_REAL);

- натурального и десятичного логарифмов – LN_REAL и LOG_REAL;

- экспоненты – EXP_REAL;

(для перечисленных EF входные и выходные переменные имеют тип – REAL);

- возведения в степень – ***_EXPT_REAL;

- модуля – ABS_***.

Здесь «***» - переменная типа ANY_NUM.

Группа элементарных функций «Selection» - селекция

В EF группы «Selection» (табл. 2.6) входные и выходные данные могут быть любого типа (ANY_ELEM).

Таблица 2.6

Группа «Selection»

Имя функции

Действие

Примечание

LIMIT_***

Передает на выход входное значение (вход IN), ограниченное сверху (вход MX) и снизу (вход MN)

MAX_***

Передает на выход максимальное значение из нескольких входных значений

Количество входов – до 32

MIN_***

Передает на выход минимальное значение из нескольких входных значений

Количество входов – до 32

MUX_***

Мультиплексор: соединяет заданный вход с выходом в зависимости от значения переменой на входе К

Количество входов – до 32 типа ANY, выбор входа переменной типа ANY_INT

SEL

Мультиплексор на два входа IN0 и IN1 типа ANY с переключателем логического типа

Пример: Для элементарной функции LIMIT_REAL (рис. 2.7) выполняется:

P=SENSOR_P, если 4.0 ≤ SENSOR_P ≤ 5.0;

Р =4.0, если P < 4.0;

Р=5.0, если P > 5.0.

Группа элементарных функциональных блоков «Timer» - таймер

В эту группу входят ЕFB TOF, TON и TP.

Во всех таймерах вход PT предназначен для задания величины выдержки времени (переменная типа TIME), вход IN – для пуска таймера (переменная типа BOOL). На выходе Q (переменная типа BOOL) формируется лог. 1 в момент времени, определяемый типом таймера, а на выходе ET (переменная типа TIME) формируется код текущего времени с начала пуска таймера.

На рис. 2.8 приведены временные диаграммы функционирования таймера TOF.

В FFB TOF (рис. 2.8) в исходном состоянии IN=0 и Q=0. При изменении переменной на входе IN из лог. 0 в лог. 1 (моменты (1, 4)) переменная на выходе Q принимает значение лог. 1. Отсчет времени начинается при изменении на входе IN из лог. 1 в лог. 0, при этом значение переменной на выходе ET начинает линейно увеличиваться. По окончании времени выдержки на выходе Q формируется переход из лог. 1. в лог. 0. Сброс таймера осуществляется подачей лог. 1 на вход IN (момент (4)).

В EFB TON (рис. 2.9) в исходном состоянии IN=0 и Q=0. Отсчет времени начинается (момент (1)) при изменении значения переменной на входе IN из лог. 0 в лог. 1. По окончании времени выдержки (момент (2)) переменная на выходе Q принимает значение лог. 0. Сброс таймера (моменты (3, 4)) осуществляется изменением значения переменной на входе IN из лог. 1 в лог. 0.

В FFB TP (рис. 2.10) в исходном состоянии IN=0 и Q=0. Отсчет времени начинается (момент (1)) при изменении значения переменной на входе IN из лог. 0 в лог. 1. При этом на выходе Q формируется лог. 1. По окончании времени выдержки на выходе Q формируется переход из лог. 1. в лог. 0. Сброс таймера осуществляется подачей лог. 0 на вход IN независимо от состояния таймера (во время отсчета выдержки или после ее окончания).