Математические функции
ACOSH
Тип модуля: функция | Переменная | Тип | Описание |
|---|---|---|---|
Входы | X | REAL | Аргумент |
Выходы | ACOSH | REAL | Значение гиперболического арккосинуса |
Функция ACOSH возвращает значение гиперболического арккосинуса,
вычисленное по формуле 
Область определения: 
Пример
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 возвращает значение гиперболического арккотангенса,
вычисленное по формуле 
Область определения: 
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 возвращает значение обратной функции Гудермана,
вычисленное по формуле 
Текущая реализация функции гарантирует приемлемую точность вычислений
только для x, принадлежащих интервалу 
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 возвращает значение гиперболического арксинуса,
вычисленное по формуле 
Область определения: 
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). Угол определяется
в радианах в диапазоне 
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 возвращает значение гиперболического арктангенса,
вычисленное по формуле 
Область определения: 
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 возвращает значение бета-функции, вычисленное
по формуле
,
где Г — гамма-функция.
Область определения: 
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, вычисленное по формуле 
Функция возвращает корректные значения только для 
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 возвращает значение плотности
вероятности для распределения Коши, вычисленное по формуле
, 
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 возвращает значение функции распределения
Коши, вычисленное по формуле
, 
CEIL
Тип модуля: функция | Переменная | Тип | Описание |
|---|---|---|---|
Входы | X | REAL | Округляемое значение |
Выходы | CEIL | INT | Округленное значение |
Функция CEIL округляет переменную типа REAL в сторону ближайшего большего целого значения.
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 возвращает значение гиперболического
косинуса, вычисленное по формуле 
Область определения: 
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 возвращает значение гиперболического котангенса,
вычисленное по формуле 
Область определения: 
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, вычисленное по формуле
, где 
Относительная ошибка вычисления не превышает 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, вычисленное по формуле

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, вычисленное по формуле
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 целочисленным основанием степени, вычисленное по формуле
Функция 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, принадлежащем интервалу
. Во всех остальных случаях
функция возвращает -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, принадлежащему
интервалу
. Во всех остальных
случаях функция возвращает -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 | Дробная часть значения |
Используемые модули | |||
Функция 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 возвращает значение гамма-функции, вычисленное по аппроксимирующей формуле Герго Немеса:
Область определения: 
Функция может использоваться для приближенного вычисления факториалов чисел, что будет полезным в тех случаях, когда не может быть использована функция 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 возвращает значение плотности вероятности для распределения Гаусса (нормального распределения), вычисленное по формуле
, 
Пример
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 возвращает значение функции распределения Гаусса (нормального распределения), вычисленное по формуле
, 
Пример
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 возвращает значение функции Гудермана, вычисленное
по формуле 
Область определения: 
Пример
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 возвращает значение, вычисленное по формуле 
При 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 возвращает значение длины гипотенузы прямоугольного
треугольника, вычисленное по теореме Пифагора
Пример
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.

Пример
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-функции Ламберта, вычисленное по аппроксимационной формуле

Относительная точность вычисления по данной формуле превышает 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 возвращает значение функции Ланжевена, вычисленное по формуле

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

Пример
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
Функция RAD преобразует значение угла в градусах в радианы.
Если входная переменная DEGпревышает 2 π,
то из нее будет вычитаться по π до тех пор, пока
ее значение не окажется в интервале
.
Пример
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
Функция 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
Функция 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
Функция 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 | Число с плавающей точкой в виде дроби |
Функция 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
Функция 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.

Пример
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 возвращает значение сигмоиды, вычисленное по формуле

Пример
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 возвращает значение ненормированной функции кардинального синуса, вычисленное по формуле

Пример
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 возвращает значение гиперболического синуса, вычисленное по формуле

Область определения: 
Пример
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 возвращает значение одноименной математической функции, вычисленное по формуле

Пример
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 возвращает значение гиперболического тангенса, вычисленное по формуле

Область определения: 
Пример
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 |