Арифметические функции

F_LIN

Тип модуля: функция

Переменная

Тип

Описание

Входы

X

REAL

Аргумент

A

REAL

Угловой коэффициент

B

REAL

Коэффициент сдвига

Выходы

F_LIN

REAL

Значение линейной функции

Функция F_LIN возвращает для аргумента X значение линейной функции, вычисленное по формуле

F_LIN(X)=A ∙ X + B

Пример

VAR X : REAL := 2.0; (* аргумент *) A : REAL := 1.5; (* угловой коэффициент *) B : REAL := -3.0; (* коэффициент сдвига *) Y : REAL; (* результат *) END_VAR (* F_LIN(X) = A * X + B = 1.5 * 2.0 - 3.0 = 0.0 *) Y := OSCAT_BASIC.F_LIN(X := X, A := A, B := B); END_PROGRAM

F_LIN2

Тип модуля: функция

Переменная

Тип

Описание

Входы

X

REAL

Аргумент

X1

REAL

Координата X для точки 1

Y1

REAL

Координата Y для точки 1

X2

REAL

Координата X для точки 2

Y2

REAL

Координата Y для точки 2

Выходы

F_LIN2

REAL

Линейно интерполированное значение Y для X

Функция F_LIN2 возвращает для точки с координатой X результат линейной интерполяции координаты Y между узловыми точками (X1, Y1) и (X2, Y2). Если значение X не входит в диапазон (Х1...Х2), то значение Y (F_LIN2) экстраполируется.

Пример

VAR X : REAL := 5.0; (* точка, для которой ищем Y *) X1 : REAL := 0.0; Y1 : REAL := 0.0; X2 : REAL := 10.0; Y2 : REAL := 100.0; Y : REAL; (* результат *) END_VAR (* Линейная интерполяция между (0,0) и (10,100): при X = 5 получаем Y = 50 *) Y := OSCAT_BASIC.F_LIN2(X := X, X1 := X1, Y1 := Y1, X2 := X2, Y2 := Y2); END_PROGRAM

F_POLY

Тип модуля: функция

Переменная

Тип

Описание

Входы

X

REAL

Аргумент

C

ARRAY [0..7] OF REAL

Коэффициенты полинома

Выходы

F_POLY

REAL

Значение полинома 7-ой степени

Функция F_POLY возвращает значение полинома 7-ой степени с коэффициентами С (где С – массив из 8-ми значений) для аргумента X, вычисленное по формуле

Graphic

Пример

VAR X : REAL := 1.5; C : ARRAY [0..7] OF REAL := [1.0, 1.0, 1.0, 1.0, 2.0, 2.0, 3.0, 3.0]; Y : REAL; END_VAR (* Полином: Y = C0 + C1*X + C2*X^2 + C3*X^3 + C4*X^4 + C5*X^5 + C6*X^6 + C7*X^7 При X = 1.5 и C = [1,1,1,1,2,2,3,3]: Y = 1 + 1.5 + 2.25 + 3.375 + 2*5.0625 + 2*7.59375 + 3*11.390625 + 3*17.0859375 = 118.0078125 *) Y := OSCAT_BASIC.F_POLY(X := X, C := C); END_PROGRAM

F_POWER

Тип модуля: функция

Переменная

Тип

Описание

Входы

a

REAL

Коэффициент

X

REAL

Аргумент

n

REAL

Показатель степени

Выходы

F_POWER

REAL

Значение степенной функции

Функция F_POWER возвращает для аргумента X значение степенной функции, вычисленное по формуле

F_POWER(X)=a ∙ X^n

Пример

VAR a : REAL := 2.0; x : REAL := 3.0; n : REAL := 4.0; y : REAL; END_VAR y := OSCAT_BASIC.F_POWER(a := a, X := x, n := n); (* y = 2 * 3^4 = 162 *) END_PROGRAM

F_QUAD

Тип модуля: функция

Переменная

Тип

Описание

Входы

X

REAL

Аргумент

A

REAL

Коэффициент

B

REAL

Коэффициент

C

REAL

Коэффициент

Выходы

F_QUAD

REAL

Значение квадратичной функции

Функция F_QUAD возвращает для аргумента X значение квадратичной функции, вычисленное по формуле

F_QUAD(X)=A ∙ X^2 + B ∙ X + С

Пример

VAR x : REAL := 2.0; a : REAL := 3.0; b : REAL := -4.0; c : REAL := 1.0; y : REAL; END_VAR y := OSCAT_BASIC.F_QUAD(X := x, A := a, B := b, C := c); (* y = 3*2^2 + (-4)*2 + 1 = 5 *) END_PROGRAM

FRMP_B

Тип модуля: функция

Переменная

Тип

Описание

Входы

START

BYTE

Начальное значение

DIR

BOOL

Направление изменения выхода

TD

TIME

Прошедшее время

TR

TIME

Полное время генерации (от 0 до 255)

Выходы

FRMP_B

BYTE

Выход блока

Функция FRMP_B используется для реализации генератора линейной функции. Пока функция находится в работе, значение ее выхода линейно изменяется от текущего (START) до максимального (при DIR=TRUE) или минимального (при DIR=FALSE). Минимальное и максимальное значения определяются диапазоном типа BYTE и соответственно составляют 0 и 255. Вход TR определяет полное время генерации (от 0 до 255 секунд), а вход TD – время, прошедшее с начала работы функции. Таким образом, значение входа TD должно увеличиваться во время работы функции для изменения ее выхода.

См. также генератор _RMP_B, построенный на базе данной функции.

Пример

VAR start : BYTE := 100; (* стартовое значение *) dirUp : BOOL := TRUE; (* TRUE: к 255, FALSE: к 0 *) td : TIME := T#0s; (* прошедшее время *) tr : TIME := T#10s; (* полное время генерации *) y : BYTE; END_VAR (* Пример: эмуляция прошедшего времени *) td := T#4s; y := OSCAT_BASIC.FRMP_B(START := start, DIR := dirUp, TD := td, TR := tr); (* При START=100, DIR=TRUE, TR=10s и TD=4s: y ≈ 100 + (255-100)*4/10 = 162 *) END_PROGRAM

FT_AVG

Тип модуля: ФБ

Переменная

Тип

Описание

Входы

IN

REAL

Контролируемое значение

E

BOOL

Сигнал управления блоком

N

N

Число точек усреднения сигнала (0…32)

RST

BOOL

Сигнал сброса блока

Выходы

FT_AVG

REAL

Значение скользящей средней

Функциональный блок FT_AVG представляет собой фильтр скользящей средней. Если вход E имеет значение TRUE, то блок находится в работе, и на выход AVG подается значение входа IN, усредненное за последние N циклов ПЛК (K – номер текущего цикла ПЛК):

Graphic

Если N=0, то AVG=IN. По переднему фронту на входе RST данные блока обнуляются, и усреднение начинается заново.

Graphic
Трассировка работы ФБ (N=30, время цикла ПЛК=50 мс)

FT_MIN_MAX

Тип модуля: ФБ

Переменная

Тип

Описание

Входы

IN

REAL

Контролируемое значение

RST

BOOL

Сигнал сброса блока

Выходы

MX

REAL

Максимальное значение

MN

REAL

Минимальное значение

Функциональный блок FT_MIN_MAX собирает статистику о входе IN, сохраняя его максимальное и минимальное значение на выходах MX и MN. По переднему фронту на входе RST значения выходов обнуляются, после чего сбор статистики начинается заново.

FT_RMP

Тип модуля: ФБ

Переменная

Тип

Описание

Входы

Rmp

BOOL

Сигнал управления блоком

IN

REAL

Контролируемый сигнал

KR

REAL

Допустимая скорость нарастания, ед/с

KF

REAL

Допустимая скорость спада, ед/с

Выходы

out

REAL

Сглаженное значение сигнала

busy

BOOL

Флаг «блок в работе»

UD

BOOL

Направление изменения сигнала

Функциональный блок FT_RMP используется для сглаживания сигналов. Пока вход Rmp имеет значение TRUE блок находится в работе и значение выхода out следует за значением входа IN, при этом допустимая максимальная скорость увеличения значения на выходе (в ед./c) определяется входом KR, а допустимая максимальная скорость уменьшения – входом KF. Выход busy имеет значение TRUE, пока происходит изменение выхода out. Выход UD имеет значение TRUE, если значение выхода out увеличивается, и FALSE – если уменьшается. Величина изменения выхода out зависит от времени цикла ПЛК; см. также блоки RMP_B и RMP_W с фиксированной величиной изменения выходов.

Graphic
Трассировка работы ФБ (KR=5.0, KF=2.0, время цикла ПЛК=50 мс)

LINEAR_INT

Тип модуля: функция

Переменная

Тип

Описание

Входы

X

REAL

Аргумент

XY

ARRAY [1..20, 0..1] OF REAL

Таблица узловых точек

Pts

INT

Число используемых узловых точек (3..20)

Выходы

LINEAR_INT

REAL

Линейно интерполированное значение Y для X

Функция LINEAR_INT выполняет для значения X кусочно-линейную интерполяцию по зависимости, определяемой таблицей узловых точек XY. Значения X в таблице должны быть отсортированы по возрастанию. Вход Pts определяет число используемых для интерполяции узловых точек и может принимать значение в диапазоне [3…20]. Если значение X не входит в диапазон таблицы, то значение Y (LINEAR_INT) экстраполируется.

См. график в разделе POLYNOM_INT

Пример

VAR (* Таблица узловых точек: [номер_точки, 0 для X, 1 для Y] *) XY_Table : ARRAY [1..20, 0..1] OF REAL := [ 0.0, 0.0, (* Точка 1: X=0.0, Y=0.0 *) 1.0, 2.0, (* Точка 2: X=1.0, Y=2.0 *) 2.0, 4.0, (* Точка 3: X=2.0, Y=4.0 *) 3.0, 8.0, (* Точка 4: X=3.0, Y=8.0 *) 4.0, 16.0, (* Точка 5: X=4.0, Y=16.0 *) 5.0, 32.0 (* Точка 6: X=5.0, Y=32.0 *) ]; InputX : REAL := 1.5; (* Аргумент для интерполяции *) Pts : INT := 6; (* Количество используемых точек *) ResultY: REAL; (* Результат интерполяции *) END_VAR (* Вызов функции интерполяции из библиотеки OSCAT_BASIC *) ResultY := OSCAT_BASIC.LINEAR_INT(X := InputX, XY := XY_Table, Pts := Pts); (* После выполнения: ResultY будет равен 3.0, так как X=1.5 находится посередине между точками 1.0 (Y=2.0) и 2.0 (Y=4.0). *) END_PROGRAM

POLYNOM_INT

Тип модуля: функция

Переменная

Тип

Описание

Входы

X

REAL

Аргумент

XY

ARRAY [1..5, 0..1] OF REAL

Таблица узловых точек

Pts

INT

Число используемых узловых точек (3..5)

Выходы

POLYNOM_INT

REAL

Полиномиально интерполированное значение Y для X

Функция POLYNOM_INT выполняет для значения X полиномиальную интерполяцию по зависимости, определяемой таблицей узловых точек XY. Значения X в таблице должны быть отсортированы по возрастанию. Вход Pts определяет число используемых для интерполяции узловых точек и может принимать значение в диапазоне [3…5]. Если значение X не входит в диапазон таблицы, то значение Y (POLYNOM_INT) экстраполируется.

Пример

VAR (* Таблица узловых точек: [номер_точки, 0 для X, 1 для Y] *) XY_Table : ARRAY [1..5, 0..1] OF REAL := [ 0.0, 1.0, (* Точка 1: X=0.0, Y=1.0 *) 1.0, 2.0, (* Точка 2: X=1.0, Y=2.0 *) 2.0, 5.0, (* Точка 3: X=2.0, Y=5.0 *) 3.0, 10.0, (* Точка 4: X=3.0, Y=10.0 *) 4.0, 17.0 (* Точка 5: X=4.0, Y=17.0 *) ]; InputX : REAL := 2.5; (* Аргумент для интерполяции *) Pts : INT := 5; (* Количество используемых точек (3..5) *) ResultY: REAL; (* Результат интерполяции *) END_VAR (* Вызов функции полиномиальной интерполяции *) ResultY := OSCAT_BASIC.POLYNOM_INT(X := InputX, XY := XY_Table, Pts := Pts); (* Результат: При X=2.5 и 5 точках, полиномиальная интерполяция даст значение, которое точно проходит через все заданные точки. Для данных точек функция соответствует полиному Y = X^2 + 1 При X=2.5: Y = 6.25 + 1 = 7.25 *) END_PROGRAM