Математические функции

ACOSH

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

Переменная

Тип

Описание

Входы

X

REAL

Аргумент

Выходы

ACOSH

REAL

Значение гиперболического арккосинуса

Функция ACOSH возвращает значение гиперболического арккосинуса, вычисленное по формуле Graphic

Область определения: Graphic

Пример

VAR x : REAL := 2.0; (* Аргумент, должен быть >= 1.0 *) y : REAL; (* Результат ACOSH(x) *) END_VAR y := OSCAT_BASIC.ACOSH(x); (* y ≈ 1.3169579 *) END_PROGRAM

ACOTH

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

Переменная

Тип

Описание

Входы

X

REAL

Аргумент

Выходы

ACOTH

REAL

Значение гиперболического арккотангенса

Функция ACOTH возвращает значение гиперболического арккотангенса, вычисленное по формуле Graphic

Область определения: Graphic

VAR x : REAL := 2.0; (* |x| > 1 *) y : REAL; END_VAR y := OSCAT_BASIC.ACOTH(X := x); (* y ≈ 0.5493061 *) END_PROGRAM

AGDF

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

Переменная

Тип

Описание

Входы

X

REAL

Аргумент

Выходы

AGDF

REAL

Значение обратной функции Гудермана

Функция AGDF возвращает значение обратной функции Гудермана, вычисленное по формуле Graphic

Текущая реализация функции гарантирует приемлемую точность вычислений только для x, принадлежащих интервалу Graphic

VAR x : REAL := 0.5; y : REAL; END_VAR y := OSCAT_BASIC.AGDF(X := x); (* у=0.5222381*) END_PROGRAM

ASINH

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

Переменная

Тип

Описание

Входы

X

REAL

Аргумент

Выходы

ASINH

REAL

Значение гиперболического арксинуса

Функция ASINH возвращает значение гиперболического арксинуса, вычисленное по формуле Graphic

Область определения: Graphic

VAR x : REAL := 2; y : REAL; END_VAR y := OSCAT_BASIC.ASINH(X := x); (* y=1.44363546*) END_PROGRAM

ATAN2

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

Переменная

Тип

Описание

Входы

Y

REAL

Координата Y

X

REAL

Координата X

Выходы

ATAN

REAL

Значение арктангенса для отношения Y/X

Функция ATAN2 возвращает значение арктангенса для заданных координат X и Y. Арктангенс – это угол между осью X и линией, проведенной из начала координат (0,0) в точку с координатами (X,Y). Угол определяется в радианах в диапазоне Graphic

VAR x : REAL := 1.0; y : REAL := 1.0; a1 : REAL; x2 : REAL := 1.0; y2 : REAL := 0.0; a2 : REAL; END_VAR a1 := OSCAT_BASIC.ATAN2(Y := y, X := x); (* a1 ≈ 0.7853982 рад (π/4) *) a2 := OSCAT_BASIC.ATAN2(Y := y2, X := x2); (* a2 = 0 рад *) END_PROGRAM

ATANH

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

Переменная

Тип

Описание

Входы

X

REAL

Аргумент

Выходы

ATANH

REAL

Значение гиперболического арктангенса

Функция ATANH возвращает значение гиперболического арктангенса, вычисленное по формуле Graphic

Область определения: Graphic

VAR X : REAL := 0.5; (* Аргумент (в диапазоне -1..1, не включая ±1) *) Y : REAL; (* Результат *) END_VAR Y := OSCAT_BASIC.ATANH(X); (* Y = ATANH(0.5) ≈ 0.549306 *) END_PROGRAM

BETA

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

Переменная

Тип

Описание

Входы

X

REAL

Аргумент X

Y

REAL

Аргумент Y

Выходы

BETA

REAL

Значение бета-функции

Используемые модули

GAMMA

Функция BETA возвращает значение бета-функции, вычисленное по формулеGraphic,

где Г — гамма-функция.

Область определения: Graphic

VAR x : REAL := 0.5; y : REAL := 0.5; b : REAL; END_VAR b := OSCAT_BASIC.BETA(X := x, Y := y); (* b = 3.10966635 *) END_PROGRAM

BINOM

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

Переменная

Тип

Описание

Входы

N

INT

Аргумент N

K

INT

Аргумент K

Выходы

BINOM

DINT

Биномиальный коэффициент из N по K

Функция BINOM возвращает значение биномиального коэффициента из N по K, вычисленное по формуле Graphic

Функция возвращает корректные значения только для Graphic

VAR n : INT := 4; k : INT := 2; c : DINT; END_VAR c := OSCAT_BASIC.BINOM(N := n, K := k); (* c = 6 *) END_PROGRAM

CAUCHY

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

Переменная

Тип

Описание

Входы

X

REAL

Аргумент

T

REAL

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

U

REAL

Коэффициент масштаба

Выходы

CAUCHY

REAL

Плотность вероятности для распределения Коши

Функция СAUCHY возвращает значение плотности вероятности для распределения Коши, вычисленное по формуле Graphic, Graphic

VAR x : REAL := 1.0; (* аргумент *) t : REAL := 0.0; (* сдвиг *) u : REAL := 0.5; (* масштаб, > 0 *) p : REAL; END_VAR p := OSCAT_BASIC.CAUCHY(X := x, T := t, U := u); (* p ≈ 0.127323955 *) END_PROGRAM

CAUCHYCD

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

Переменная

Тип

Описание

Входы

X

REAL

Аргумент

T

REAL

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

U

REAL

Коэффициент масштаба

Выходы

CAUCHYCD

REAL

Функция распределения Коши

Функция СAUCHYCD возвращает значение функции распределения Коши, вычисленное по формуле Graphic, Graphic

CEIL

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

Переменная

Тип

Описание

Входы

X

REAL

Округляемое значение

Выходы

CEIL

INT

Округленное значение

Функция CEIL округляет переменную типа REAL в сторону ближайшего большего целого значения.

Примечание
Функция возвращает значение типа INT, что накладывает соответствующие ограничения на величину входной переменной (диапазон возможных значений для типа INT составляет –32768..32767).
VAR x1 : REAL := 3.14; x2 : REAL := -2.30; r1 : INT; r2 : INT; END_VAR r1 := OSCAT_BASIC.CEIL(X := x1); (* r1 = 4 *) r2 := OSCAT_BASIC.CEIL(X := x2); (* r2 = -2 *) END_PROGRAM

CEIL2

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

Переменная

Тип

Описание

Входы

X

REAL

Округляемое значение

Выходы

CEIL

DINT

Округленное значение

Функция CEIL2 округляет переменную типа REAL в сторону ближайшего большего целого значения. В отличие от функции CEIL, данная функция возвращает значение типа DINT, что увеличивает диапазон возможных значений входной переменной.

VAR x1 : REAL := 33000.22; x2 : REAL := -33000.22; r1 : DINT; r2 : DINT; END_VAR r1 := OSCAT_BASIC.CEIL2(X := x1); (* r1 = 33001 *) r2 := OSCAT_BASIC.CEIL2(X := x2); (* r2 = -33000 *) END_PROGRAM

CMP

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

Переменная

Тип

Описание

Входы

X

REAL

1-я сравниваемая величина

Y

REAL

2–я сравниваемая величина

N

INT

Кол-во сравниваемых знаков

Выходы

CMP

BOOL

Результат сравнения

Функция CMP сравнивает значения X и Y типа REAL и возвращает TRUE, если их первые N символов совпадают. В противном случае функция возвращает FALSE.

Необходимо отметить, что тип REAL обеспечивает относительную точность в 7-8 десятичных цифр после запятой в заданном диапазоне, поэтому нельзя гарантировать корректную работу функции в 100% случаев.

VAR x1 : REAL := 12.34567; y1 : REAL := 12.34512; n1 : INT := 5; eq1 : BOOL; x2 : REAL := 1.234567; y2 : REAL := 1.229999; n2 : INT := 4; eq2 : BOOL; END_VAR eq1 := OSCAT_BASIC.CMP(X := x1, Y := y1, N := n1); (* eq1 = TRUE *) eq2 := OSCAT_BASIC.CMP(X := x2, Y := y2, N := n2); (* eq2 = FALSE *) END_PROGRAM

COSH

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

Переменная

Тип

Описание

Входы

X

REAL

Аргумент

Выходы

COSH

REAL

Значение гиперболического косинуса

Функция COSH возвращает значение гиперболического косинуса, вычисленное по формуле Graphic

Область определения: Graphic

VAR x : REAL := 2.0; y : REAL; END_VAR y := OSCAT_BASIC.COSH(X := x); (* y ≈ 3.76219583 *) END_PROGRAM

COTH

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

Переменная

Тип

Описание

Входы

X

REAL

Аргумент

Выходы

COTH

REAL

Значение гиперболического котангенса

Функция COTH возвращает значение гиперболического котангенса, вычисленное по формуле Graphic

Область определения: Graphic

VAR x : REAL := 2.0; y : REAL; END_VAR y := OSCAT_BASIC.COTH(X := x); (* y ≈ 1.03731477 *) END_PROGRAM

D_TRUNC

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

Переменная

Тип

Описание

Входы

X

REAL

Округляемое значение

Выходы

D_TRUNC

DINT

Округленное значение

Функция D_TRUNC возвращает целую часть переменной типа REAL (обратите внимание, что речь идет не об округлении до ближайшего целочисленного значения). Функция TRUNC() из стандарта МЭК 61131-3 поддерживает тип DINT не во всех средах программирования; более того, даже преобразование REAL_TO_DINT на разных системах может приводить к разному результату. Функция D_TRUNC анализирует работу преобразования и возвращает корректное значение.

VAR x1 : REAL := 3.99; x2 : REAL := -3.99; r1 : DINT; r2 : DINT; END_VAR r1 := OSCAT_BASIC.D_TRUNC(X := x1); (* r1 = 3 *) r2 := OSCAT_BASIC.D_TRUNC(X := x2); (* r2 = -3 *) END_PROGRAM

DEC1

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

Переменная

Тип

Описание

Входы

X

INT

Декрементируемое значение 1

N

INT

Декрементируемое значение 2

Выходы

DEC1

INT

Результат декремента

Функция DEC1 декрементирует значение переменной X. Если X = 0, то функция возвращает декрементированное значение переменной N.

VAR x1 : INT := 5; n1 : INT := 10; r1 : INT; x2 : INT := 0; n2 : INT := 10; r2 : INT; END_VAR r1 := OSCAT_BASIC.DEC1(X := x1, N := n1); (* r1 = 4 *) r2 := OSCAT_BASIC.DEC1(X := x2, N := n2); (* r2 = 9 *) END_PROGRAM

DEG

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

Переменная

Тип

Описание

Входы

rad

REAL

Значение угла в радианах

Выходы

DEG

REAL

Значение угла в градусах

Функция DEG преобразует значение угла из радиан в градусы. Если входная переменная rad превышает 2π, то из нее будет вычитаться по π до тех пор, пока ее значение не окажется в интервале 0< rad < 2π.

VAR r1 : REAL := 3.1415927; (* π *) d1 : REAL; END_VAR d1 := OSCAT_BASIC.DEG(rad := r1); (* d1 ≈ 180.0 *) END_PROGRAM

DIFFER

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

Переменная

Тип

Описание

Входы

in1

REAL

Сравниваемое значение 1

in2

REAL

Сравниваемое значение 2

X

REAL

Допустимая разность значений

Выходы

DIFFER

TRUE

Флаг сравнения

Функция DIFFER возвращает значение TRUE, если значения переменных in1 и in2 отличаются на величину, превышающую X. В противном случае функция возвращает FALSE.

VAR a : REAL := 10.0; b : REAL := 10.3; x : REAL := 0.2; r1 : BOOL; c : REAL := 10.0; d : REAL := 10.1; r2 : BOOL; END_VAR r1 := OSCAT_BASIC.DIFFER(in1 := a, in2 := b, X := x); (* r1 = TRUE, |10.0-10.3| = 0.3 > 0.2 *) r2 := OSCAT_BASIC.DIFFER(in1 := c, in2 := d, X := x); (* r2 = FALSE, |10.0-10.1| = 0.1 <= 0.2 *) END_PROGRAM

ERF

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

Переменная

Тип

Описание

Входы

X

REAL

Аргумент

Выходы

ERF

REAL

Функция ошибок

Используемые модулиSGN

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

Graphic, где Graphic

Относительная ошибка вычисления не превышает 0.00013.

VAR x : REAL := 0.05; y : REAL; END_VAR y := OSCAT_BASIC.ERF(X := x); (* y = 0.5637164 *) END_PROGRAM

ERFC

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

Переменная

Тип

Описание

Входы

X

REAL

Аргумент

Выходы

ERFC

REAL

Дополнительная функция ошибок

Используемые модулиERF

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

Graphic

VAR x : REAL := 0.05; y : REAL; END_VAR y := OSCAT_BASIC.ERFC(X := x); (* y = 0.9436284 *) END_PROGRAM

EVEN

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

Переменная

Тип

Описание

Входы

in

DINT

Анализируемое значение

Выходы

EVEN

BOOL

Флаг четности

Функция EVEN возвращает TRUE, если значение переменной in является четным, и FALSE — если нечетным.

VAR a : DINT := 10; b : DINT := 11; r1 : BOOL; r2 : BOOL; END_VAR r1 := OSCAT_BASIC.EVEN(in := a); (* r1 = TRUE *) r2 := OSCAT_BASIC.EVEN(in := b); (* r2 = FALSE *) END_PROGRAM

EXP10

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

Переменная

Тип

Описание

Входы

X

REAL

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

Выходы

EXP10

REAL

Показательная функция

Функция EXP10 возвращает значение показательной функции с основанием степени 10, вычисленное по формуле

Graphic
VAR x1 : REAL := 2.0; y1 : REAL; x2 : REAL := -1.0; y2 : REAL; END_VAR y1 := OSCAT_BASIC.EXP10(X := x1); (* y1 = 100.0 *) y2 := OSCAT_BASIC.EXP10(X := x2); (* y2 = 0.1 *) END_PROGRAM

EXPN

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

Переменная

Тип

Описание

Входы

X

REAL

Основание степени

N

INT

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

Выходы

EXPN

REAL

Показательная функция

Функция EXPN возвращает значение показательной функции c целочисленным основанием степени, вычисленное по формуле

Graphic

Функция EXPN разработана специально для ПЛК без FPU (математического сопроцессора) и выполняется приблизительно в 30 раз быстрее функции EXPT, определенной стандартом МЭК 61131-3.

VAR x1 : REAL := 2.0; n1 : INT := 10; y1 : REAL; x2 : REAL := 5.0; n2 : INT := 0; y2 : REAL; END_VAR y1 := OSCAT_BASIC.EXPN(X := x1, N := n1); (* y1 = 1024.0 *) y2 := OSCAT_BASIC.EXPN(X := x2, N := n2); (* y2 = 1.0 *) END_PROGRAM

FACT

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

Переменная

Тип

Описание

Входы

X

INT

Аргумент

Выходы

FACT

DINT

Значение факториала

Функция FACT возвращает значение факториала X. Функция возвращает корректные значения при X, принадлежащем интервалу Graphic. Во всех остальных случаях функция возвращает -1.

VAR x1 : INT := 5; f1 : DINT; x2 : INT := 13; f2 : DINT; END_VAR f1 := OSCAT_BASIC.FACT(X := x1); (* f1 = 120 *) f2 := OSCAT_BASIC.FACT(X := x2); (* f2 = -1 (вне диапазона 0..12) *) END_PROGRAM

FIB

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

Переменная

Тип

Описание

Входы

X

INT

Номер элемента последовательности

Выходы

FIB

DINT

Значение элемента последовательности

Функция FIB возвращает значение X-го элемента последовательности Фибоначчи. Функция возвращает корректные значения при X, принадлежащему интервалу Graphic. Во всех остальных случаях функция возвращает -1.

VAR x1 : INT := 10; f1 : DINT; x2 : INT := -1; f2 : DINT; END_VAR f1 := OSCAT_BASIC.FIB(X := x1); (* f1 = 55 *) f2 := OSCAT_BASIC.FIB(X := x2); (* f2 = -1 (вне допустимого диапазона) *) END_PROGRAM

FLOOR

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

Переменная

Тип

Описание

Входы

X

REAL

Округляемое значение

Выходы

FLOOR

INT

Округленное значение

Функция FLOOR округляет переменную типа REAL в сторону ближайшего меньшего целого значения. Обратите внимание, что функция возвращает значение типа INT, что накладывает соответствующие ограничения на величину входной переменной (диапазон возможных значений для типа INT составляет -32768..32767).

Пример

VAR x1 : REAL := 3.14; x2 : REAL := -2.30; r1 : INT; r2 : INT; END_VAR r1 := OSCAT_BASIC.FLOOR(X := x1); (* r1 = 3 *) r2 := OSCAT_BASIC.FLOOR(X := x2); (* r2 = -3 *) END_PROGRAM

FLOOR2

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

Переменная

Тип

Описание

Входы

X

REAL

Округляемое значение

Выходы

FLOOR2

DINT

Округленное значение

Функция FLOOR2 округляет переменную типа REAL в сторону ближайшего меньшего целого значения. В отличие от функции FLOOR, данная функция возвращает значение типа DINT, что увеличивает диапазон возможных значений входной переменной.

Пример

VAR x1 : REAL := 35000.25; x2 : REAL := -35000.25; r1 : DINT; r2 : DINT; END_VAR r1 := OSCAT_BASIC.FLOOR2(X := x1); (* r1 = 35000 *) r2 := OSCAT_BASIC.FLOOR2(X := x2); (* r2 = -35001 *) END_PROGRAM

FRACT

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

Переменная

Тип

Описание

Входы

X

REAL

Значение с плавающей точкой

Выходы

FRACT

REAL

Дробная часть значения

Используемые модули

D_TRUNC

Функция FRACT возвращает дробную часть значения с плавающей точкой. Необходимо отметить, что тип REAL обеспечивает относительную точность в 7-8 десятичных цифр после запятой в заданном диапазоне, поэтому нельзя гарантировать корректную работу функции в 100% случаев.

Пример

VAR x1 : REAL := 12.345; f1 : REAL; x2 : REAL := -12.345; f2 : REAL; END_VAR f1 := OSCAT_BASIC.FRACT(X := x1); (* f1 ≈ 0.345 *) f2 := OSCAT_BASIC.FRACT(X := x2); (* f2 ≈ -0.345 *) END_PROGRAM

GAMMA

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

Переменная

Тип

Описание

Входы

X

REAL

Аргумент

Выходы

GAMMA

REAL

Значение гамма-функции

Функция GAMMA возвращает значение гамма-функции, вычисленное по аппроксимирующей формуле Герго Немеса:

Graphic

Область определения: Graphic

Функция может использоваться для приближенного вычисления факториалов чисел, что будет полезным в тех случаях, когда не может быть использована функция FACT. Следует помнить, что гамма-функция возвращает не факториал X, а факториал его декремента.

Пример

VAR x1 : REAL := 5.0; g1 : REAL; x2 : REAL := 6.0; g2 : REAL; END_VAR g1 := OSCAT_BASIC.GAMMA(X := x1); (* g1 ≈ 24.0 (Γ(5) = 4! ) *) g2 := OSCAT_BASIC.GAMMA(X := x2); (* g2 ≈ 120.0 (Γ(6) = 5! ) *) END_PROGRAM

GAUSS

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

Переменная

Тип

Описание

Входы

X

REAL

Аргумент

U

REAL

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

SI

REAL

Коэффициент масштаба

Выходы

GAUSS

REAL

Плотность вероятности для распределения Гаусса

Функция GAUSS возвращает значение плотности вероятности для распределения Гаусса (нормального распределения), вычисленное по формуле

Graphic, Graphic

Пример

VAR x : REAL := 0.0; (* аргумент *) u : REAL := 0.0; (* среднее (сдвиг) *) si : REAL := 1.0; (* σ (масштаб), > 0 *) p : REAL; END_VAR p := OSCAT_BASIC.GAUSS(X := x, U := u, SI := si); (* p ≈ 0.3989423 *) END_PROGRAM

GAUSSCD

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

Переменная

Тип

Описание

Входы

X

REAL

Аргумент

U

REAL

Параметр сдвига

SI

REAL

Параметр масштаба

Выходы

GAUSSCD

REAL

Функция распределения Гаусса

Используемые модули

ERF

Функция GAUSSCD возвращает значение функции распределения Гаусса (нормального распределения), вычисленное по формуле

Graphic, Graphic

Пример

VAR x : REAL := 0.0; (* аргумент *) u : REAL := 0.0; (* среднее (сдвиг) *) si : REAL := 1.0; (* σ (масштаб), > 0 *) f : REAL; END_VAR f := OSCAT_BASIC.GAUSSCD(X := x, U := u, SI := si); (* f = 0.5 *) END_PROGRAM

GCD

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

Переменная

Тип

Описание

Входы

A

DINT

1-ое значение

B

DINT

2-ое значение

Выходы

GCD

INT

Наибольший общий делитель для A и B

Функция GCD возвращает значение наибольшего общего делителя для чисел A и B.

Пример

VAR a : DINT := 48; b : DINT := 18; g : INT; END_VAR g := OSCAT_BASIC.GCD(A := a, B := b); (* g = 6 *) END_PROGRAM

GDF

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

Переменная

Тип

Описание

Входы

X

REAL

Аргумент

Выходы

GDF

REAL

Значение функции Гудермана

Функция GDF возвращает значение функции Гудермана, вычисленное по формуле Graphic

Область определения: Graphic

Пример

VAR x : REAL := 5.0; y : REAL; END_VAR y := OSCAT_BASIC.GDF(X := x); (* y = 1.55732048 *) END_PROGRAM

GOLD

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

Переменная

Тип

Описание

Входы

X

REAL

Аргумент

Выходы

GOLD

REAL

Значение функции

Функция GOLD возвращает значение, вычисленное по формуле Graphic

При X=1 функция возвращает значение золотого сечения.

Пример

VAR x : REAL := 1.0; y : REAL; END_VAR y := OSCAT_BASIC.GOLD(X := x); (* y ≈ 1.6180339 *) END_PROGRAM

HYPOT

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

Переменная

Тип

Описание

Входы

X

REAL

Длина катета X

Y

REAL

Длина катета Y

Выходы

HYPOT

REAL

Длина гипотенузы

Функция HYPOT возвращает значение длины гипотенузы прямоугольного треугольника, вычисленное по теореме ПифагораGraphic

Пример

VAR x : REAL := 3.0; y : REAL := 4.0; h : REAL; END_VAR h := OSCAT_BASIC.HYPOT(X := x, Y := y); (* h = 5.0 *) END_PROGRAM

INC

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

Переменная

Тип

Описание

Входы

X

INT

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

D

INT

Прибавляемое значение

M

INT

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

Выходы

INC

INT

Возвращаемое значение

Функция INC складывает значения X и D, и проверяет результат. Если результат сложения превышает M, то функция возвращает 0. Если результат сложения отрицателен, то функция возвращает M. Во всех остальных случаях функция возвращает сумму X и D. Функция может быть полезной при работе с массивами и буферами, а также абсолютными энкодерами.

Пример

VAR x1 : INT := 5; d1 : INT := 3; m : INT := 10; r1 : INT; x2 : INT := 9; d2 : INT := 3; r2 : INT; x3 : INT := 1; d3 : INT := -5; r3 : INT; END_VAR r1 := OSCAT_BASIC.INC(X := x1, D := d1, M := m); (* r1 = 8 *) r2 := OSCAT_BASIC.INC(X := x2, D := d2, M := m); (* r2 = 0 (12 > 10) *) r3 := OSCAT_BASIC.INC(X := x3, D := d3, M := m); (* r3 = 10 (-4 < 0) *) END_PROGRAM

INC1

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

Переменная

Тип

Описание

Входы

X

INT

Инкрементируемое значение 1

N

INT

Инкрементируемое значение 2

Выходы

INC1

INT

Результат инремента

Функция INC1 инкрементирует значение переменной X до N-1, после чего на выход подается 0, и продолжается циклический инкремент.

Пример

VAR x1 : INT := 3; n : INT := 5; r1 : INT; x2 : INT := 4; r2 : INT; END_VAR r1 := OSCAT_BASIC.INC1(X := x1, N := n); (* r1 = 4 *) r2 := OSCAT_BASIC.INC1(X := x2, N := n); (* r2 = 0 (т.к. 4 -> 0 при N=5) *) END_PROGRAM

INC2

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

Переменная

Тип

Описание

Входы

X

INT

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

D

INT

Прибавляемое значение

L

INT

Нижний предел

U

INT

Верхний предел

Выходы

INC2

INT

Возвращаемое значение

Функция INC2складывает значения X и D, и проверяет результат. Если результат сложения превышает U, то функция возвращает L. Если результат сложения меньше L, то функция возвращает U. Во всех остальных случаях функция возвращает сумму X и D. Функция может оказаться полезной при работе с массивами и буферами, а также абсолютными энкодерами.

Пример

VAR x1 : INT := 5; d1 : INT := 3; l : INT := 0; u : INT := 10; r1 : INT; x2 : INT := 9; d2 : INT := 3; r2 : INT; x3 : INT := 1; d3 : INT := -5; r3 : INT; END_VAR r1 := OSCAT_BASIC.INC2(X := x1, D := d1, L := l, U := u); (*r1 = 8*) r2 := OSCAT_BASIC.INC2(X := x2, D := d2, L := l, U := u); (*r2 = 0 (12 > 10 -> L)*) r3 := OSCAT_BASIC.INC2(X := x3, D := d3, L := l, U := u); (*r3 = 10 (-4 < 0 -> U)*) END_PROGRAM

INV

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

Переменная

Тип

Описание

Входы

X

INT

Аргумент

Выходы

INV

REAL

Обратное число

Функция INV возвращает обратное число для X.

Graphic

Пример

VAR x : INT := 4; y : REAL; END_VAR y := OSCAT_BASIC.INV(X := x); (* y = 0.25 *) END_PROGRAM

LAMBERT_W

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

Переменная

Тип

Описание

Входы

X

REAL

Аргумент

Выходы

LAMBERT_W

REAL

Значение W-функции Ламберта

Функция LAMBERT_W возвращает значение W-функции Ламберта, вычисленное по аппроксимационной формуле

Graphic

Относительная точность вычисления по данной формуле превышает 10%.

Пример

VAR x : REAL := 3.0; w : REAL; END_VAR w := OSCAT_BASIC.LAMBERT_W(X := x); (* w ≈ 1.04990888 *) END_PROGRAM

LANGEVIN

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

Переменная

Тип

Описание

Входы

X

REAL

Аргумент

Выходы

LANGEVIN

REAL

Значение функции Ланжевена

Используемые модули

COTH

Функция LANGEVIN возвращает значение функции Ланжевена, вычисленное по формуле

Graphic

Пример

VAR x : REAL := 5.0; y : REAL; END_VAR y := OSCAT_BASIC.LANGEVIN(X := x); (* y ≈ 0.800090849 *) END_PROGRAM

MAX3

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

Переменная

Тип

Описание

Входы

in1

REAL

Сравниваемое значение 1

in2

REAL

Сравниваемое значение 2

in3

REAL

Сравниваемое значение 3

Выходы

MAX3

REAL

Наибольшее из сравниваемых значений

Функция MAX3 возвращает наибольшее из трех сравниваемых значений. Согласно стандарту МЭК 61131-3 оператор MAX() должен иметь настраиваемое число входов, но в некоторых средах разработки их число ограничено двумя – по этой причине в библиотеку OSCAT включена функция MAX3.

Пример

VAR a : REAL := 1.2; b : REAL := 5.6; c : REAL := 3.4; m : REAL; END_VAR m := OSCAT_BASIC.MAX3(in1 := a, in2 := b, in3 := c); (* m = 5.6 *) END_PROGRAM

MID3

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

Переменная

Тип

Описание

Входы

in1

REAL

Сравниваемое значение 1

in2

REAL

Сравниваемое значение 2

in3

REAL

Сравниваемое значение 3

Выходы

MID3

REAL

Среднее из сравниваемых значений

Функция MID3 возвращает среднее (но не усредненное) из трех сравниваемых значений.

Пример

VAR a : REAL := 1.2; b : REAL := 5.6; c : REAL := 3.4; m : REAL; END_VAR m := OSCAT_BASIC.MID3(in1 := a, in2 := b, in3 := c); (* m = 3.4 *) END_PROGRAM

MIN3

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

Переменная

Тип

Описание

Входы

in1

REAL

Сравниваемое значение 1

in2

REAL

Сравниваемое значение 2

in3

REAL

Сравниваемое значение 3

Выходы

MIN3

REAL

Наименьшее из сравниваемых значений

Функция MIN3 возвращает наименьшее из трех сравниваемых значений. Согласно стандарту МЭК 61131-3 оператор MIN() должен иметь настраиваемое число входов, но в некоторых средах разработки их число ограничено двумя – по этой причине в библиотеку включена функция MIN3.

Пример

VAR a : REAL := 1.2; b : REAL := 5.6; c : REAL := 3.4; m : REAL; END_VAR m := OSCAT_BASIC.MIN3(in1 := a, in2 := b, in3 := c); (* m = 1.2 *) END_PROGRAM

MODR

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

Переменная

Тип

Описание

Входы

IN

REAL

Сравниваемое значение 1

DIVI

REAL

Сравниваемое значение 2

Выходы

MODR

REAL

Наименьшее из сравниваемых значений

Используемые модули

FLOOR2

Функция MODR возвращает остаток от деления значения IN на значение DIVI. В отличие от стандартного оператора MOD(), в качестве аргументов используются переменные типа REAL. При DIVI=0 функция возвращает 0.

Пример

VAR a1 : REAL := 5.5; b1 : REAL := 2.0; r1 : REAL; a2 : REAL := 5.5; b2 : REAL := 0.0; r2 : REAL; END_VAR r1 := OSCAT_BASIC.MODR(IN := a1, DIVI := b1); (* r1 = 1.5 *) r2 := OSCAT_BASIC.MODR(IN := a2, DIVI := b2); (* r2 = 0.0 (DIVI=0) *) END_PROGRAM

MUL_ADD

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

Переменная

Тип

Описание

Входы

X

REAL

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

K

REAL

Коэффициент масштабирования

O

REAL

Сдвиг

Выходы

MUL_ADD

REAL

Отмасштабированное значение

Функция MUL_ADD возвращает значение линейной функции с коэффициентом K и сдвигом O для аргумента X.

Graphic

Пример

VAR x : REAL := 10.0; k : REAL := 2.5; o : REAL := -3.0; y : REAL; END_VAR y := OSCAT_BASIC.MUL_ADD(X := x, K := k, O := o); (* y = 22.0 *) END_PROGRAM

NEGX

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

Переменная

Тип

Описание

Входы

X

REAL

Аргумент

Выходы

NEGX

REAL

Значение аргумента с противоположным знаком

Функция NEGX возвращает значение аргумента с противоположным знаком.

Пример

VAR x : REAL := 12.5; y : REAL; END_VAR y := OSCAT_BASIC.NEGX(X := x); (* y = -12.5 *) END_PROGRAM

RAD

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

Переменная

Тип

Описание

Входы

DEG

REAL

Значение угла в градусах

Выходы

RAD

REAL

Значение угла в радианах

Используемые модули

MODR, DEG

Функция RAD преобразует значение угла в градусах в радианы. Если входная переменная DEGпревышает 2 π, то из нее будет вычитаться по π до тех пор, пока ее значение не окажется в интервале Graphic.

Пример

VAR d1 : REAL := 180.0; r1 : REAL; d2 : REAL := 450.0; (* > 360°, будет приведено к диапазону 0..360° *) r2 : REAL; END_VAR r1 := OSCAT_BASIC.RAD(DEG := d1); (* r1 ≈ 3.1415927 *) r2 := OSCAT_BASIC.RAD(DEG := d2); (* r2 ≈ 1.5707963 (т.к. 450° -> 90°) *) END_PROGRAM

RDM

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

Переменная

Тип

Описание

Входы

last

REAL

Начальное значение (зерно)

Выходы

RDM

REAL

Псевдослучайное число

Используемые модули

T_PLC_MS, BIT_COUNT, FRACT

Функция RDM используется для генерации псевдослучайных чисел с плавающей точкой в диапазоне [0,1). В качестве источника энтропии используется системный таймер ПЛК. Поскольку модуль RDM представляет собой функцию, а не ФБ, он не содержит информацию о своем предыдущем вызове, и поэтому должен использоваться с осторожностью. Если функция вызывается более одного раза в течение цикла, то возвращает одинаковые числа, т.к. значение системного таймера остается тем же. Этого можно избежать, вызывая функцию с разным значением зерна last. В качестве зерна можно использовать значение функции, возвращенное при предыдущем вызове.

Пример

VAR seed : REAL := 0.12345; (* зерно (last) *) r1 : REAL; r2 : REAL; END_VAR (* Первый вызов: получаем псевдослучайное число в диапазоне [0,1) *) r1 := OSCAT_BASIC.RDM(last := seed); (* 0.0 <= r1 < 1.0 *) (* Обновляем зерно значением предыдущего вызова *) seed := r1; (* Следующий вызов (в следующем цикле ПЛК): новое число, используя seed *) r2 := OSCAT_BASIC.RDM(last := seed); (* 0.0 <= r2 < 1.0, обычно r2 <> r1 *) END_PROGRAM

RDM2

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

Переменная

Тип

Описание

Входы

last

DWORD

Начальное значение (зерно)

low

INT

Нижний предел

high

INT

Верхний предел

Выходы

RDM2

INT

Псевдослучайное число

Используемые модули

RDM, FRACT

Функция RDM2 используется для генерации псевдослучайных целых чисел в диапазоне [low,high]. В качестве источника энтропии используется системный таймер ПЛК. Поскольку модуль RDM2 представляет собой функцию, а не ФБ, он не содержит информацию о своем предыдущем вызове, и поэтому должен использоваться с осторожностью. Если функция вызывается более одного раза в течение цикла, то возвращает одинаковые числа, т.к. значение системного таймера остается тем же. Этого можно избежать, вызывая функцию с разным значением зерна last. В качестве зерна можно использовать значение функции, возвращенное при предыдущем вызове.

Пример

VAR seed : INT := 12345; (* зерно (last) *) low : INT := 10; high : INT := 20; r1 : INT; r2 : INT; END_VAR (* Первый вызов: целое число в диапазоне [10..20] *) r1 := OSCAT_BASIC.RDM2(last := seed, low := low, high := high); (* 10 <= r1 <= 20 *) (* Обновляем зерно значением предыдущего результата *) seed := r1; (* Следующий вызов (в следующем цикле ПЛК): новое число, используя seed *) r2 := OSCAT_BASIC.RDM2(last := seed, low := low, high := high); (* 10 <= r2 <= 20, обычно r2 <> r1 *) END_PROGRAM

RDMDW

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

Переменная

Тип

Описание

Входы

last

REAL

Начальное значение (зерно)

Выходы

RDMDW

DWORD

Псевдослучайный набор бит

Используемые модули

RDM, T_PLC_MS, BIT_COUNT, FRACT

Функция RDMDW используется для генерации псевдослучайных 32-битных наборов бит. В качестве источника энтропии используется системный таймер ПЛК. Поскольку модуль RDMDW представляет собой функцию, а не ФБ, он не содержит информацию о своем предыдущем вызове, и поэтому должен использоваться с осторожностью. Если функция вызывается более одного раза в течение цикла, то возвращает одинаковые числа, т.к. значение системного таймера остается тем же. Этого можно избежать, вызывая функцию с разным значением зерна last. В качестве зерна можно использовать значение функции, возвращенное при предыдущем вызове.

Пример

VAR seed : DWORD := 0.12345; (* зерно (last) *) dw : DWORD; END_VAR (* Получаем псевдослучайный 32-битный набор *) dw := OSCAT_BASIC.RDMDW(last := seed); (* В качестве зерна для следующего цикла можно использовать предыдущее значение seed, либо обновлять seed (например, значением OSCAT_BASIC.RDM(last := seed)) *) END_PROGRAM

REAL_TO_FRAC

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

Переменная

Тип

Описание

Входы

X

REAL

Число с плавающей точкой

N

INT

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

Выходы

REAL_TO_FRAC

FRACTION

Число с плавающей точкой в виде дроби

Функция REAL_TO_FRAC представляет значение переменной X типа REAL в виде дроби, знаменатель которой не превышает N. Возвращаемое значение представляет собой структуру типа FRACTION.

Пример

VAR x : REAL := 0.75; n : INT := 100; f : OSCAT_BASIC.FRACTION; END_VAR f := OSCAT_BASIC.REAL_TO_FRAC(X := x, N := n); (* ожидаемо: f = 3/4 (знаменатель <= 100) *) END_PROGRAM

RND

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

Переменная

Тип

Описание

Входы

X

REAL

Округляемое значение

N

INT

Число значащих цифр

Выходы

RND

REAL

Округленное значение

Используемые модули

EXPN, CEIL

Функция RND возвращает число с плавающей точкой X, округленное до N значащих цифр. Для чисел 0-4 округление выполняется в меньшую сторону, для 5-9 – в большую. Для округления до заданного количества десятичных знаков может использоваться функция ROUND.

Пример

VAR x1 : REAL := 1234.56; n1 : INT := 3; y1 : REAL; x2 : REAL := 0.012345; n2 : INT := 2; y2 : REAL; END_VAR y1 := OSCAT_BASIC.RND(X := x1, N := n1); (* y1 ≈ 1230.0 (3 значащие цифры) *) y2 := OSCAT_BASIC.RND(X := x2, N := n2); (* y2 ≈ 0.012 (2 значащие цифры) *) END_PROGRAM

ROUND

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

Переменная

Тип

Описание

Входы

in

REAL

Округляемое значение

N

INT

Число знаков после запятой

Выходы

ROUND

REAL

Округленное значение

Функция ROUND возвращает число с плавающей точкой X, округленное до N знаков после запятой. Для чисел 0-4 округление выполняется в меньшую сторону, для 5-9 – в большую. Для округления до заданного количества значащих цифр может использоваться функция RND.

Пример

VAR x1 : REAL := 12.3456; n1 : INT := 2; y1 : REAL; x2 : REAL := 12.344; n2 : INT := 2; y2 : REAL; END_VAR y1 := OSCAT_BASIC.ROUND(in := x1, N := n1); (* y1 = 12.35 *) y2 := OSCAT_BASIC.ROUND(in := x2, N := n2); (* y2 = 12.34 *) END_PROGRAM

SGN

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

Переменная

Тип

Описание

Входы

X

REAL

Анализируемое значение

Выходы

SGN

INT

Код знака

Функция SGN возвращает код знака переменной X.

Graphic

Пример

VAR x1 : REAL := 10.0; x2 : REAL := 0.0; x3 : REAL := -2.5; s1 : INT; s2 : INT; s3 : INT; END_VAR s1 := OSCAT_BASIC.SGN(X := x1); (* s1 = 1 *) s2 := OSCAT_BASIC.SGN(X := x2); (* s2 = 0 *) s3 := OSCAT_BASIC.SGN(X := x3); (* s3 = -1 *) END_PROGRAM

SIGMOID

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

Переменная

Тип

Описание

Входы

X

REAL

Аргумент

Выходы

SIGMOID

REAL

Значение сигмоиды

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

Graphic

Пример

VAR x : REAL := 0.5; y : REAL; END_VAR y := OSCAT_BASIC.SIGMOID(X := x); (* y = 0.622459352 *) END_PROGRAM

SIGN_I

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

Переменная

Тип

Описание

Входы

in

DINT

Анализируемое значение

Выходы

SIGN_I

BOOL

Флаг знака

Функция SIGN_I возвращает TRUE, если значение переменной in типа DINT является отрицательным, и FALSE – если положительным.

Пример

VAR a : DINT := -10; b : DINT := 10; r1 : BOOL; r2 : BOOL; END_VAR r1 := OSCAT_BASIC.SIGN_I(in := a); (* r1 = TRUE *) r2 := OSCAT_BASIC.SIGN_I(in := b); (* r2 = FALSE *) END_PROGRAM

SIGN_R

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

Переменная

Тип

Описание

Входы

in

REAL

Анализируемое значение

Выходы

SIGN_R

BOOL

Флаг знака

Функция SIGN_R возвращает TRUE, если значение переменной in типа REAL является отрицательным, и FALSE – если положительным.

Пример

VAR a : REAL := -10.0; b : REAL := 10.0; r1 : BOOL; r2 : BOOL; END_VAR r1 := OSCAT_BASIC.SIGN_R(in := a); (* r1 = TRUE *) r2 := OSCAT_BASIC.SIGN_R(in := b); (* r2 = FALSE *) END_PROGRAM

SINC

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

Переменная

Тип

Описание

Входы

X

REAL

Аргумент

Выходы

SINC

REAL

Значение кардинального синуса

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

Graphic

Пример

VAR x : REAL := 0.5; y : REAL; END_VAR y := OSCAT_BASIC.SINC(X := x); (* y = 0.9588511 *) END_PROGRAM

SINH

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

Переменная

Тип

Описание

Входы

X

REAL

Аргумент

Выходы

SINH

REAL

Значение гиперболического синуса

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

Graphic

Область определения: Graphic

Пример

VAR x : REAL := 0.5; y : REAL; END_VAR y := OSCAT_BASIC.SINH(X := x); (* y ≈ 0.5210953 *) END_PROGRAM

SQRTN

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

Переменная

Тип

Описание

Входы

X

REAL

Аргумент

N

REAL

Степень корня

Выходы

SQRTN

REAL

Корень N-й степени

Функция SQRTN возвращает значение корня N-й степени из X.

Пример

VAR x : REAL := 27.0; n : REAL := 3.0; y : REAL; END_VAR y := OSCAT_BASIC.SQRTN(X := x, N := n); (* y = 3.0 *) END_PROGRAM

TANC

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

Переменная

Тип

Описание

Входы

X

REAL

Аргумент

Выходы

TANC

REAL

Значение функции

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

Graphic

Пример

VAR x : REAL := 0.5; y : REAL; END_VAR y := OSCAT_BASIC.TANC(X := x); (* y = 1.092605 *) END_PROGRAM

TANH

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

Переменная

Тип

Описание

Входы

X

REAL

Аргумент

Выходы

TANH

REAL

Значение гиперболического тангенса

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

Graphic

Область определения: Graphic

Пример

VAR x : REAL := 0.5; y : REAL; END_VAR y := OSCAT_BASIC.TANH(X := x); (* y = 0.462117136 *) END_PROGRAM

WINDOW

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

Переменная

Тип

Описание

Входы

low

REAL

Нижний предел

in

REAL

Анализируемое значение

high

REAL

Верхний предел

Выходы

WINDOW

BOOL

Флаг принадлежности интервалу

Функция WINDOW возвращает TRUE, если значение X принадлежит интервалу (low, high). В противном случае функция возвращает FALSE.

Пример

VAR low : REAL := 0.5; high : REAL := 10.0; x1 : REAL := 5.0; x2 : REAL := 0.0; r1 : BOOL; r2 : BOOL; END_VAR r1 := OSCAT_BASIC.WINDOW(low := low, in := x1, high := high); (* r1 = TRUE *) r2 := OSCAT_BASIC.WINDOW(low := low, in := x2, high := high); (* r2 = FALSE *) END_PROGRAM

WINDOW2

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

Переменная

Тип

Описание

Входы

low

REAL

Нижний предел

in

REAL

Анализируемое значение

high

REAL

Верхний предел

Выходы

WINDOW2

BOOL

Флаг принадлежности интервалу

Функция WINDOW2 возвращает TRUE, если значение X принадлежит интервалу [low, high]. В противном случае функция возвращает FALSE.

Пример

VAR low : REAL := 0.0; high : REAL := 10.0; x1 : REAL := 0.0; x2 : REAL := 10.0; x3 : REAL := 10.1; r1 : BOOL; r2 : BOOL; r3 : BOOL; END_VAR r1 := OSCAT_BASIC.WINDOW2(low := low, in := x1, high := high); (* r1 = TRUE *) r2 := OSCAT_BASIC.WINDOW2(low := low, in := x2, high := high); (* r2 = TRUE *) r3 := OSCAT_BASIC.WINDOW2(low := low, in := x3, high := high); (* r3 = FALSE *) END_PROGRAM