В данном разделе приведено описание основных блоков обязательной в проекте библиотеки paCore. Описание соответствует версии библиотеки – 979 и выше.
Об установке библиотек см. в разделе.
Работа с типами данных
Типы данных
Типы данных paCore
Обозначение в среде | Название типа | Описание | Размер в памяти | Диапазон значений | Аналоги названий |
---|---|---|---|---|---|
chr, i8 | Байт | Целое значение со знаком. Signed 8-bit integer | 1 байт | -128…127 | sint, int8, TINYINT, INT1 |
uch, ui8, reg | Байт без знака | Целое значение без знака. Unsigned 8-bit integer | 1 байт | 0…255 | Byte |
int, i16 | Целое | Целое значение со знаком. Signed 16-bit integer | 2 байта | -32768…32767 | INT, SMALLINT, INT2 |
uns, u16, rg2 | Целое без знака | Целое значение без знака. Unsigned 16-bit integer | 2 байта | 0…65535 | WORD |
lng, i32, l32 | Длинное целое | Целое значение со знаком. Signed 32-bit integer | 4 байта | -2147483648…2147483647 | DINT, INT4 |
ulg, u32, rg4, ul32 | Длинное целое без знака | Целое значение без знака. Unsigned 32-bit integer | 4 байта | 0… 4294967295 | UDINT |
i64 | Двойное длинное целое | Двойное целое значение со знаком. Signed 64-bit integer | 8 байт | -9223372036854775808…9223372036854775807 | - |
u64 | Двойное длинное целое без знака | Двойное целое значение без знака. Unsigned 64-bit integer | 8 байт | 0…18446744073709551615 | - |
flt | Вещественное | Вещественное значение со знаком. Данные в формате с плавающей запятой | 4 байта | -3.4E+38… 1.18E-38 и 1.18E-38… 3.4E+38 | Float, Real |
double | Вещественное двойное | Вещественное значение со знаком. Данные в формате с плавающей запятой | 8 байта | -1.7E+308… 1.18E-308 и 1.18E-308… 1.7E+308 | Double |
b, bool, boolean, bit | Логический | Принимает значение 0 или 1 | 1 бит | 0,1 | Bit |
s40, s50, s100, str | Строковый | Cтроки символов | -* | - | String |

Кроме представленных в таблице типов данных используются массивы и перечисления.
Массив – массив данных определенного типа:
i32a - массив типа int32;
fa - массив данных типа float.
Перечисление – список констант, определяемый конкретным входом. Для входа с типом Перечисление невозможно задать значение, отличное от заданных в выпадающем списке. Обозначение: enm.
Очередь битов – позволяет накапливать очередь битовых значений в таймерном потоке. Обозначение: qb. Подробнее в разделе.
Другие типы в разделе Типы данных, кроме вышеперечисленных, являются системными.
При проведении связей между входами и выходами блоков среда разработки автоматически проверяет соответствие типов данных.
Цвет связей отображает тип данных входа:
черный – булевое;
красный – целое;
синий – вещественное;
серый – строковое.
Преобразование типов также можно осуществить вручную, используя блоки раздела Преобразователи типов.
Преобразовать можно только совместимые типы, иначе проведение связи запрещается, что отображается в соответствующем всплывающем окне предупреждения.
Если вход/выход блока имеет системный тип данных, то создать связь можно только с выходом/входом того же типа.
Преобразователи типов
Преобразование типов можно осуществить вручную, используя блоки Flt_Un, Flt_Ul, Uc_flt, Us_Flt и др. из раздела Преобразователи типов.
Блок преобразует значение одного типа данных в другой.
В большинстве случаев преобразование типов осуществляется на этапе трансляции, подходящий блок добавляется средой разработки автоматически.
Алгоритм:
out = in

Константы
Блоки Константа повторяют на выходе значение входа – Real, Integer, Reg2 и др. из раздела Преобразователи типов. Блок инициализируется константой на входе, не нулем.
Инициализация:
y = fi
Алгоритм:
y = fi

Терминальные блоки
Терминальные блоки повторяют на выходе значение входа – TransFlt, TransInt, TransBit и др. Данные блоки удобно использовать в качестве сбора входных и выходных параметров на одной странице программы. Блок инициализируется константой на входе, не нулем.
Назначение входов и выходов:
l0, l1, …,ln – входные значения;
o0, o1, …,on – выходные значения.
Инициализация:
oi = li, где I = 0…n
Алгоритм:
oi = li, где I = 0…n

Для передачи массивов используются терминальные блоки Transi32A, TransFA, TransStor и др. Блок повторяет на выходе массив соответствующего входа. Данные блоки удобно использовать в качестве сбора входных и выходных параметров на одной странице программы. Блок инициализируется массивом на входе, не нулем.
При использовании блока необходимо следить, чтобы его порядок выполнения находился между порядками выполнения блоков, с которыми он соединен, т. е. выполнялся после блоков, генерирующих входные массивы и перед блоками, которые получают выходные массивы.
Назначение входов и выходов:
in0, in1, …,inn – входные массивы;
o0, o1, …,on – выходные массивы.
Инициализация:
oi = ini, где I = 0…n
Алгоритм:
oi = ini, где I = 0…n

Арифметические блоки
Сложение (Add)
Функция Add вычисляет сумму своих входов. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Аргументы являются вещественными числами. Раздел библиотеки: Арифметические. Выход инициализируется 0.
Назначение входов и выходов:
f0, f1, …,fn – слагаемые;
sum – сумма.
Инициализация:
sum = 0
Алгоритм:
sum = f0 + f1 + … + fn

Целочисленное сложение (Addl)
Функциональный блок Addl производит целочисленное сложение. Аргументы являются целыми числами. Если на вход подается связь с выхода другого типа, то при выполнении программы происходит преобразование типов. Раздел библиотеки: Арифметические. Выход инициализируется 0.
Назначение входов и выходов:
in0, in1, …,inn – слагаемые;
sum – сумма.
Инициализация:
sum = 0
Алгоритм:
sum = in0 + in1 + … + inn

Вычитание (Sub)
Функция Sub вычисляет разность двух аргументов. Аргументы являются вещественными числами. Раздел библиотеки: Арифметические. Выход инициализируется 0.
Назначение входов и выходов:
f1 – уменьшаемое;
f2 – вычитаемое;
out – разность.
Инициализация:
out = 0
Алгоритм:
out = f1 - f2

Умножение (Mul)
Функция Mul вычисляет произведение своих входов. Число входов задается при создании функционального блока, и может быть изменено в процессе редактирования программы. Аргументы являются вещественными числами. Раздел библиотеки: Арифметические. Выход инициализируется 0.
Назначение входов и выходов:
f0, f1, …,fn – множитель;
out – произведение множителей.
Инициализация:
out = 0
Алгоритм:
out = f1 ∙ f2 ∙…∙ fn

Деление (Div)
Функция Div вычисляет частное своих аргументов. Если делитель равен нулю, то выставляется флаг ошибки, на выходе устанавливается 1. Аргументы являются вещественными числами. Раздел библиотеки: Арифметические. Выход инициализируется 1.
Назначение входов и выходов:
f1 – делимое;
f2 – делитель;
out – частное от деления;
zf – флаг ошибки.
Инициализация:
out = 1;
zf = 0
Алгоритм:
Если f2 = 0 → zf = 1, out = 1,
иначе out = f1/f2, zf = 0

Целочисленное деление (Divl)
Функция Divl производит целочисленное деление. Вычисляет неполное частное и остаток. Если делитель равен нулю, то выставляется флаг ошибки, на выходе остается прежнее значение. Аргументы являются целыми числами. Если на вход подается связь с выхода другого типа, то при выполнении программы происходит преобразование типов. Раздел библиотеки: Арифметические. Выход инициализируется 1.
Назначение входов и выходов:
i1 – делимое;
i2 – делитель;
out – частное от деления;
rem – остаток от деления;
zf – флаг ошибки.
Инициализация:
out = 1;
rem = 0;
zf = 0
Алгоритм:
Если i2 = 0 → zf = 1, out = out_old,
иначе out = i1/i2, rem = i1 - (out ∙ i2), zf = 0,
где out_old – значение выхода в предыдущем цикле выполнения программы

Корень квадратный (Sqrt)
Функция Sqrt вычисляет корень квадратный своего аргумента. Если аргумент отрицательный, то выставляется флаг ошибки, на выходе корень квадратный из модуля аргумента. Аргумент является вещественным числом. Раздел библиотеки: Арифметические. Выходы инициализируются 0.
Назначение входов и выходов:
in – аргумент;
out – значение корня квадратного от аргумента;
nf – флаг ошибки.
Инициализация:
out = 0;
zf = 0
Алгоритм:
Если in ≤ 0 → nf = 1, out = √(|in|),
иначе out = √in, nf = 0

Инверсия значения (Inv)
Функция Inv инвертирует знак входного значения. Аргумент является вещественным числом. Раздел библиотеки: Арифметические. Выход инициализируется 0.
Назначение входов и выходов:
in – аргумент;
out – инвертированный вход.
Инициализация:
out = 0
Алгоритм:
out = -in

Абсолютное значение (Abs)
Функция Abs определяет модуль и знак числа. Если на вход подается отрицательное значение, то выставляется флаг знака. Аргумент является вещественным числом. Раздел библиотеки: Арифметические. Выходы инициализируются 0.
Назначение входов и выходов:
in – аргумент;
out – модуль входа;
sf – флаг знака.
Инициализация:
out = 0,
sf = 0
Алгоритм:
out = |in|, sf – знак in,
если in > 0 → sf = 0,
иначе sf = 1

Минимальное/максимальное значение (MinMax)
Функция MinMax ищет минимальное и максимальное значения среди набора входов. Число входов задается при создании функционального блока, его можно изменить в процессе редактирования программы. Аргументы являются вещественными числами. Раздел библиотеки: Арифметические. Выходы инициализируются 0.
Назначение входов и выходов:
in0, in1, …,inn – входы;
max – максимальное значение;
min – минимальное значение.
Инициализация:
max = 0,
min = 0
Алгоритм:
min = min (in0, in1, …, inn),
max = max (in0, in1, …, inn)

Селектор минимального/максимального значения (MinMax2)
Функция MinMax2 ищет минимальное и максимальное значения среди набора входов, и определяет индекс минимального и максимального входа. Число входов задается при создании функционального блока, его можно изменить в процессе редактирования программы. Аргументы являются вещественными числами. Раздел библиотеки: Арифметические. Выходы инициализируются 0.
Назначение входов и выходов:
in0, in1, …,inn – входы;
max – максимальное значение;
min – минимальное значение;
mxn – индекс максимума;
mnn – индекс минимума.
Инициализация:
max = 0,
min = 0,
mxn = 0,
mnn = 0
Алгоритм:
min = min (in0, in1, …, inn),
max = max (in0, in1, …, inn),
mxn – индекс максимального значения,
mnn – индекс минимального значения

Сравнение (Cmpr)
Функция Cmpr сравнивает два входа. В зависимости от их отношения выставляет флаги больше, меньше или равно. Аргументы являются вещественными числами. Раздел библиотеки: Арифметические. Выходы инициализируются 0.
Назначение входов и выходов:
- in1 – вход 1;
in2 – вход 2;
uf – флаг «больше»;
ef – флаг «равно»;
if – флаг «меньше».
Инициализация:
uf = 0,
ef = 0,
if = 0
Алгоритм:

Маскирование (Mask)
Функция Mask производит побитное умножение аргумента на маску. Аргументы являются целыми числами. Раздел библиотеки: Арифметические. Выход инициализируется 0.
Назначение входов и выходов:
i1 – вход;
i2 – маска;
out – выход.
Инициализация:
out = 0
Алгоритм:
out = i1 & i2

Сдвиг влево (Shrl)
Функция Shrl производит побитовый сдвиг влево числа i1 на i2 бит. Аргументы являются целыми числами. Раздел библиотеки: Арифметические. Выход инициализируется 0.
Назначение входов и выходов:
i1 – вход;
i2 – величина сдвига;
out – выход.
Инициализация:
out = 0
Алгоритм:
out = i1 ≪ i2

Сдвиг вправо (Shrr)
Функция Shrr производит побитовый сдвиг вправо числа i1 на i2 бит. Аргументы являются целыми числами. Раздел библиотеки: Арифметические. Выход инициализируется 0.
Назначение входов и выходов:
i1 – вход;
i2 – величина сдвига;
out – выход.
Инициализация:
out = 0
Алгоритм:
out = i1 ≫ i2

Табличная функция (TabF)
Функциональный блок производит кусочно-линейную аппроксимацию зависимости y = f(x), заданной табличной функцией, и вычисление в заданной точке. Табличная функция задается набором пар (x, y). Для корректной работы блока наборы пар (x, y) должны быть упорядочены по возрастанию x. Аргументы являются вещественными числами. Раздел библиотеки: Арифметические. Выход инициализируется 0.
Назначение входов и выходов:
val – значение x;
x0, x1, ..., xn – набор абсцисс;
y0, y2, ..., yn – набор соответствующих ординат;
out – значение y.
Инициализация:
out = 0
Алгоритм: при нахождении значения функции используется алгоритм кусочно-линейной аппроксимации
Если val < x0 → out = y0,
если val > xn → out = yn

Экспонента (Exp)
Функция Exp производит вычисление экспоненциальной функции от своего аргумента. Аргумент является вещественным числом. Раздел библиотеки: Арифметические. Выход инициализируется 0.
Назначение входов и выходов:
in – аргумент;
out – выход, значение ограничено интервалом [exp(-37), exp(10)].
Инициализация:
out = 0
Алгоритм:
out = exp(in)

Логарифм (Ln)
Функция Ln вычисляет натуральный логарифм своего аргумента. Аргумент является вещественным числом. Раздел библиотеки: Арифметические. Выход инициализируется 1.
Назначение входов и выходов:
in – аргумент;
out – выход, снизу ограничен ln(1.0e - 15).
Инициализация:
out = 1
Алгоритм:
out = ln(in)

Возведение в степень (Pow)
Функция Pow производит возведение в степень аргумента функции. Если производится возведение в степень отрицательного числа в нецелочисленную степень, то степень округляется до ближайшей целой. Аргументы являются вещественными числами. Раздел библиотеки: Арифметические. Выход инициализируется 1.
Назначение входов и выходов:
in – аргумент;
pw – степень;
out – выход, значение ограничено интервалом [1.0e - 18; 1.0e + 18].
Инициализация:
out = 1
Алгоритм:
out = inpw

Сложение некоторых слагаемых (SumGR)
Блок SumGR вычисляет сумму входов, у которых en ≠ 0. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Аргументы являются вещественными числами. Раздел библиотеки: Арифметические. Выходы инициализируются 0.
Назначение входов и выходов:
in0, in1, ..., inn – слагаемые;
en0, en1, ..., enn – разрешающие флаги;
sum – сумма;
cnt – количество слагаемых.
Инициализация:
sum = 0,
cnt = 0
Алгоритм: при нахождении значения функции используется алгоритм кусочно-линейной аппроксимации
Если en0, en1, …, enn ≠ 0 → sum = in0 + in1 + … + inn, cnt = n

Пакетное умножение и округление (mb_ai)
Блок mb_ai производит умножение входа на множитель. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Аргументы являются вещественными числами. Раздел библиотеки: Арифметические. Выходы инициализируются 0.
Назначение входов и выходов:
x0, x1, ..., xn – аргументы;
m0, m1, ..., mn – множители;
y0, y1, ..., yn – выходы.
Инициализация:
y0, y1, ..., yn = 0
Алгоритм:
yi = xi ∙ mi, I = 1, 2, …, n

Пакетное умножение (mb_ao)
Блок mb_ao производит умножение входа на множитель. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Аргументы являются целыми числами. Раздел библиотеки: Арифметические. Выходы инициализируются 0.
Назначение входов и выходов:
x0, x1, ..., xn – аргументы;
m0, m1, ..., mn – множители;
y0, y1, ..., yn – выходы.
Инициализация:
y0, y1, ..., yn = 0
Алгоритм:
yi = xi ∙ mi, I = 1, 2, …, n

Округление (flt_round)
Блок flt_round вычисляет несколько вариантов округления для входного значения. Аргумент является вещественным числом. Раздел библиотеки: Арифметические. Выходы инициализируются 0.
Назначение входов и выходов:
in – значение;
rnd – до ближайшего целого;
up – в большую сторону;
dn – в меньшую сторону.
Инициализация:
rnd = 0,
up = 0,
dn = 0

Определение знака (Sign)
Функция Sign производит определение знака входного значения относительно базового. Аргументы являются вещественными числами. Раздел библиотеки: Арифметические. Выходы инициализируются 0.
Назначение входов и выходов:
in – вход;
x0 – базовое значение;
out – знак;
inv – инверсия знака;
zer– признак равенства.
Инициализация:
out = 0,
inv = 0,
zer = 0
Алгоритм:

Переворачивание байт в слове (SwapBytes)
Функция SwapBytes меняет местами байты в двухбайтном числе. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Аргументы являются целыми числами. Раздел библиотеки: Арифметические. Выходы инициализируются 0.
Назначение входов и выходов:
in0, in1, ..., inn – входы
o0,o1, ..., on – выходы.
Инициализация:
o0, o1, ..., on = 0
Алгоритм:
ini [byte1, byte2] → oi = ini [byte2, byte1], I = 1, 2, …, n

Арифметические блоки для аргументов double, long, Uint64
Арифметические блоки для аргументов double, long, Uint64 представлены в соответствующих группах в разделе библиотеки Арифметические. Описание представленных блоков аналогично описанию соответствующих блоков, приведенному выше.
Логические блоки
Логическое И (AND)
Функциональный блок AND производит логическое умножение своих входов. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Логические. Выход инициализируется 0.
Назначение входов и выходов:
b0, b1, ..., bn – входы;
q – логическое произведение;
inv – инвертированное логическое произведение.
Инициализация:
q = 0,
inv = 1
Алгоритм:
q = b0 & b1 &…& bn, inv = !(q)
Пример для блока с двумя входами:

Логическое ИЛИ (OR)
Функциональный блок OR производит логическое сложение своих входов. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Логические. Выход инициализируется 0.
Назначение входов и выходов:
b0, b1, ..., bn – входы;
q – логическое сложение;
inv – инвертированное логическое сложение.
Инициализация:
q = 0,
inv = 1
Алгоритм:
q = b0 ∪ b1 ∪ … ∪ bn, inv = !(q)
Пример для блока с двумя входами:

Логическое НЕ-И (nAND)
Функциональный блок nAND производит логическое умножение с инверсией своих входов. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Логические. Выход инициализируется 0.
Назначение входов и выходов:
b0, b1, ..., bn – входы;
q – логическое произведение инверсных входов;
inv – инвертированное q.
Инициализация:
q = 0,
inv = 1
Алгоритм:
q = !(b0) & !(b1) & … & !(bn), inv = !(q)
Пример для блока с двумя входами:

Логическое НЕ (NOT)
Функциональный блок NOT производит логическую инверсию своего входа. Раздел библиотеки: Логические. Выход инициализируется 0.
Назначение входов и выходов:
b1 – вход;
q – логическое отрицание.
Инициализация:
q = 0
Алгоритм:
q = !(b1)

Логическое НЕ-ИЛИ (nOR)
Функциональный блок nOR производит логическое сложение с инверсией своих входов. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Логические. Выход инициализируется 0.
Назначение входов и выходов:
b0, b1, ..., bn – входы;
q – логическое сложение инверсных входов;
inv – инвертированное q.
Инициализация:
q = 0,
inv = 1
Алгоритм:
q = !(b0) ∪ !(b1) ∪ … ∪ !(bn), inv = !(q)

Логическое сложение по модулю два (XOR)
Функциональный блок XOR производит логическое суммирование по модулю два своих входов. Раздел библиотеки: Логические. Выход инициализируется 0.
Назначение входов и выходов:
b1, b2 – входы;
q – сумма по модулю два.
Инициализация:
q = 0
Алгоритм:
q = b1 ⊕ b2

Логическое ИЛИ с блокировкой (Bl_Or)
Функциональный блок Bl_Or осуществляет алгоритм логического ИЛИ среди входов x и y. Наличие единицы на входе блокировки запрещает все выходы, кроме собственного. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Логические. Выходы инициализируются 0.
Назначение входов и выходов:
x0, x1, ..., xn – входы;
y0, y1, ..., yn – соответствующие блокировки;
out0, out1, ..., outn – выходы.
Инициализация:
out0, out1, ..., outn = 0
Алгоритм:
outi = xi | yi & !(y0 | y1 | … | yi – 1 | yi + 1 │ … | yn)

Детектор фронтов (Fronts)
Функциональный блок Fronts сравнивает предыдущее значение входа с настоящим и анализирует на наличие фронтов и спадов. Раздел библиотеки: Логические. Выходы инициализируются 0.
Назначение входов и выходов:
i – вход;
f01 – бит, сигнализирующий о приходе фронта на входе;
f10 – бит, сигнализирующий о приходе спада на входе.
Инициализация:
f01 = 0,
f10 = 0
Алгоритм:
Если i_old = 0 & i = 1 → f01 = 1,
если i_old = 1 & i = 0 → f10 = 1,
где i_old – значение входа на предыдущем цикле выполнения программы

Детектор логического канала (bDetect)
Функциональный блок bDetect определяет номер входа, на котором произошел перепад значения из 0 в 1. Если перепад произошел на нескольких входах, обнаруживается только самый поздний. Если перепада нет ни на одном входе, то num = -1. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Логические. Выход инициализируется 0.
Назначение входов и выходов:
b0, b1, ..., bn – входы;
num – номер входа, на котором произошел перепад.
Инициализация:
num = 0
Алгоритм: num – номер входа, на котором произошел перепад из 0 в 1, начинается с 0

Контроль ключа (LogContr)
Функциональный блок LogContr определяет запрещенные состояния ключа, которые задаются двумя логическими сигналами. Раздел библиотеки: Логические. Выход инициализируется 0.
Назначение входов и выходов:
b0, b1 – входы;
n_z – запрещенное состояние;
m_1 – больше одной единицы.
Инициализация:
n_z = 0,
m_1 = 0
Алгоритм:

Тригонометрические функции
Синус (Sin)
Функция Sin вычисляет синус аргумента. Раздел библиотеки: Тригонометрические функции. Выход инициализируется 0.
Назначение входов и выходов:
in – вход;
out – выход.
Инициализация:
out = 0
Алгоритм:
out = sin(in)

Косинус (Cos)
Функция Cos вычисляет косинус аргумента. Раздел библиотеки: Тригонометрические функции. Выход инициализируется 0.
Назначение входов и выходов:
in – вход;
out – выход.
Инициализация:
out = 0
Алгоритм:
out = cos(in)

Тангенс (Tan)
Функция Tan вычисляет тангенс аргумента. Раздел библиотеки: Тригонометрические функции. Выход инициализируется 0.
Назначение входов и выходов:
in – вход;
out – выход.
Инициализация:
out = 0
Алгоритм:
out = tan(in)

Арктангенс (ATan)
Функция ATan вычисляет арктангенс аргумента. Раздел библиотеки: Тригонометрические функции. Выход инициализируется 0.
Назначение входов и выходов:
in – вход;
out – выход, диапазон изменения [-π/2 ≤ out ≤ π/2].
Инициализация:
out = 0
Алгоритм:
out = atan(in)

Арксинус (ASin)
Функция ASin вычисляет арксинус аргумента. Раздел библиотеки: Тригонометрические функции. Выход инициализируется 0.
Назначение входов и выходов:
in – вход, диапазон изменения [-1.0 ≤ in ≤ 1.0];
out – выход, диапазон изменения [-π/2 ≤ out ≤ π/2]
;q – флаг ошибки.
Инициализация:
out = 0,
q = 0
Алгоритм:
Если -1.0 ≤ in ≤ 1.0 → out = asin(in), q = 0,
если in > 1 → out = π/2, q = 1,
если in < -1 → out = -π/2, q = 1

Арккосинус (ACos)
Функция ACos вычисляет арксинус аргумента. Раздел библиотеки: Тригонометрические функции. Выход инициализируется 0.
Назначение входов и выходов:
in – вход, диапазон изменения [-1.0 ≤ in ≤ 1.0];
out – выход, диапазон изменения [0 ≤ out ≤ π];
q – флаг ошибки.
Инициализация:
out = 0,
q = 0
Алгоритм:
Если -1.0 ≤ in ≤ 1.0 → out = acos(in), q = 0,
если in > 1 → out = 0, q = 1,
если in <-1 → out = π, q = 1

Переключатели, реле и мультиплексоры
Дешифратор (Decoder)
Функциональный блок Decoder выставляет 1 на одном из своих выходов. Индекс выхода задает входная переменная. Если значение входа выходит за рамки интервала [0…количество выходов - 1], то все выходы равны 0. Число выходов задается при создании функционального блока, которые задаются в процессе редактирования программы. Раздел библиотеки: Переключатели, реле и мультиплексоры.
Назначение входов и выходов:
sel – номер выхода;
o0, o1, ..., on – выходы.
Алгоритм:
o[sel] = 1

Ключ (Key)
Функциональный блок Key передает значение своего входа на выход при 1 на управляющем входе и выдает 0 на выходе при 0 на управляющем входе. Раздел библиотеки: Переключатели, реле и мультиплексоры.
Назначение входов и выходов:
x – вход;
i – управляющий вход;
out – выход.
Алгоритм:
Если i = 1 → out = x,
иначе out = 0

Коммутатор 8-битных регистров (R8Switch)
Функциональный блок R8Switch передает на свой выход значение одного из своих входов в зависимости от управляющего сигнала i. Раздел библиотеки: Переключатели, реле и мультиплексоры.
Назначение входов и выходов:
Алгоритм:
Если i = 1 → out = in1,
иначе out = in2

Коммутатор вещественных переменных (fSwitch)
Функциональный блок fSwitch передает на свой выход значение одного из своих входов в зависимости от управляющего сигнала i. Раздел библиотеки: Переключатели, реле и мультиплексоры.
Назначение входов и выходов:
Алгоритм:
Если i = 1 → out = x1,
иначе out = x2

Коммутатор логических переменных (lSwitch)
Функциональный блок lSwitch передает на свой выход значение одного из своих входов в зависимости от управляющего сигнала i. Раздел библиотеки: Переключатели, реле и мультиплексоры.
Назначение входов и выходов:
x1, x2 – входы логического типа;
i – управляющий бит;
out – выход логического типа.
Алгоритм:
Если i = 1 → out = x1,
иначе out = x2
Если i = 1 → out = x1,
иначе out = x2

Коммутатор строковых переменных (txtSwitch)
Функциональный блок txtSwitch передает на свой выход значение одного из своих входов в зависимости от управляющего сигнала i. Раздел библиотеки: Переключатели, реле и мультиплексоры.
Назначение входов и выходов:
Алгоритм:
Если cross = 1 → str1o = str2, str2o = str1,
иначе str1o = str1, str2o = str2

Коммутатор целых переменных (iSwitch)
Функциональный блок iSwitch передает на свой выход значение одного из своих входов в зависимости от управляющего сигнала i. Раздел библиотеки: Переключатели, реле и мультиплексоры.
Назначение входов и выходов:
x1, x2 – входы целого типа;
i – управляющий бит;
out – выход целого типа.
Алгоритм:
Если i = 1 → out = x1,
иначе out = x2

Релейный каскад вещественных переменных (fltRelay)
Функциональный блок fltRelay в зависимости от управляющего входа передает на каждый свой выход значение одного из входов группы с тем же индексом. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Переключатели, реле и мультиплексоры.
Назначение входов и выходов:
x0, x1, …, xn – входы типа flt;
y0, y1, …, yn – входы типа flt;
upr – управляющий бит;
o0, o1, …, on – выходы типа flt.
Алгоритм:
Если upr = 1 → oi = xi,
иначе oi = yi, где i = 1, 2, …, n

Релейный каскад логических переменных (logRelay)
Функциональный блок logRelay в зависимости от управляющего входа передает на каждый свой выход значение одного из входов группы с тем же индексом. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Переключатели, реле и мультиплексоры.
Назначение входов и выходов:
x0, x1, …, xn – входы логического типа;
y0, y1, …, yn – входы логического типа;
upr – управляющий бит;
o0, o1, …, on – выходы логического типа.
Алгоритм:
Если upr = 1 → oi = xi,
иначе oi = yi, где i = 1, 2, …, n

Управление реле (SetSW)
Блок SetSW осуществляет потенциальное и импульсное управление реле с обратной связью. Выход потенциального управления out = 1, если управление inp и разрешение enb равны 1.
На выходах импульсного управления on и off выдаются импульсы длиной в один таймерный интервал (если блок находится в Таймере) соответственно при включении и выключении выхода out.
Ошибка err выдается, если обратный сигнал ret не появился в течение таймаута cnt (задается в миллисекундах). Для правильной работы таймера ошибки данный блок необходимо размещать в Таймере, а значения cnt задавать кратными времени таймерного цикла. Раздел библиотеки: Переключатели, реле и мультиплексоры.
Назначение входов и выходов:
inp – управление;
ret – обратная связь;
cnt – таймер ошибки, мс;
enb – разрешение;
out – потенциальное управление;
on – включение (импульсное);
off – выключение (импульсное);
err – ошибка.

Выбор одного из целых значений (SelectUI)
Блок SelectUI выводит на выход первое из входных значений, для которого en = 1. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Переключатели, реле и мультиплексоры.
Назначение входов и выходов:
val0, val1, …, valn – входы;
en0, en1, …, enn – выбор входа;
out – выбранное значение.
Алгоритм:
Если eni = 1 → out = vali, где i = 1, 2, …, n

Вывод значения на заданный выход (ShowSW)
Блок ShowSW выводит значение входа spc на соответствующий выход o при появлении его номера на входе num (входы нумеруются от 1). Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Переключатели, реле и мультиплексоры.
Назначение входов и выходов:
num – номер входа;
def – значение по умолчанию;
spc0, spc1, …, spcn – входы;
o0, o1, …, on – выходы.
Инициализация:
oi = def
Алгоритм:
Для каждого входа, если i = num - 1, oi = spci, иначе oi = def

Мультиплексор вещественных значений (MuxFlt)
Функциональный блок MuxFlt передает значение своего входа с индексом sel на выход. Если индекс выходит за рамки интервала [0…количество входов - 1], то на выходе остается предыдущее значение. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Переключатели, реле и мультиплексоры. Изначально выход инициализируется 0.
Назначение входов и выходов:
sel – номер входа;
in0, in1, …, inn – входы;
out – выход.
Инициализация:
out = 0
Алгоритм:
out = in[sel]

Мультиплексор целых значений (MuxInt)
Функциональный блок MuxFlt передает значение своего входа с индексом sel на выход. Если индекс выходит за рамки интервала [0…количество входов - 1], то на выходе остается предыдущее значение. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Переключатели, реле и мультиплексоры. Изначально выход инициализируется 0.
Назначение входов и выходов:
sel – номер входа;
in0, in1, …, inn – входы;
out – выход.
Инициализация:
out = 0
Алгоритм:
out = in[sel]

Выбор одного из вещественных значений (FCascSw)
Блок FCascSw выводит на выход первое из входных значений, для которого l = 1. Если все l = 0, то на выход выводится значение по умолчанию DEF, и признак Q выставляется в 1. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Переключатели, реле и мультиплексоры. Изначально выход инициализируется 0.
Назначение входов и выходов:
DEF – значение выхода по умолчанию;
x0, x1, …, xn – входы;
l0, l1, …, ln – выбрать значение;
Y – выход;
Q – признак значения по умолчанию.
Алгоритм:
Если li = 1 → Y = xi, где i = 1, 2, …n,
если l0, l1, …, ln = 0 → Y = DEF, Q = 1

Выбор строки (Switch_str)
Блок Switch_str выводит на выход строку, для которой cond = 1. Если несколько входов имеют значение cond = 1, то на выход выводится значение строки из входа, у которого наибольший порядковый номер и cond = 1. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Переключатели, реле и мультиплексоры.
Назначение входов и выходов:
str0, str1, …, strn – входы;
cond0, cond1, …, condn – выбрать строку;
str_out – выход.
Алгоритм:
Если condi = 1 → str_out = stri, где i = 1, 2, …, n

Дешифратор уставок (Settings)
Блок Settings представляет собой дешифратор уставок. Раздел библиотеки: Переключатели, реле и мультиплексоры.
Назначение входов и выходов Settings
Элемент | Описание |
---|---|
Входы | |
nust | Текущий номер уставки |
val | Значение текущей уставки |
nout | Номер уставки для вывода на выход vout |
n0 | Начальный номер уставок in |
wen | Разрешение записи из val в o |
ren | Разрешение чтения из o в vout |
in | Значение инициализации уставки (циклический) |
Выходы | |
vout | Последнее прочитанное/записанное значение уставки с номером nout |
wrtng | Фронт записи |
rdng | Фронт чтения |
o | Текущее значение уставки (циклический) |

Генераторы и таймеры
Генератор импульсов (Pulse)
Функциональный блок Pulse генерирует импульсы заданной ширины в ответ на появление фронта на его управляющем входе. Ширина импульса T задается в миллисекундах. Длительность паузы соответствует величине цикла, в котором размещен блок. Раздел библиотеки: Генераторы и таймера.
Для адекватной работы блока следует размещать его только в Таймере. Не рекомендуется задавать ширину импульса меньше времени таймерного цикла. Оптимальными значениями ширины импульса являются числа, кратные величине таймерного цикла (не кратные значения округляются до времени таймерного цикла в большую сторону).
Назначение входов и выходов:
I – управление;
T – ширина импульса, мс;
q – выход.
Инициализация:
q = 0


Включение с задержкой (DelayOn)
Функциональный блок DelayOn реагирует на фронт на управляющем входе I через заданное время задержки T. Если управляющий бит сбросится, логический таймер также сбросится и будет ожидать следующего фронта на управляющем входе. Раздел библиотеки: Генераторы и таймера.
Для адекватной работы блока следует размещать его только в Таймере. Не рекомендуется задавать время задержки меньше времени таймерного цикла. Оптимальными значениями времени задержки являются числа, кратные величине таймерного цикла (не кратные значения округляются до времени таймерного цикла в большую сторону).
Назначение входов и выходов:
I – управление;
T – время задержки, мс;
q – выход.
Инициализация:
q = 0


Выключение с задержкой (DelayOff)
Функциональный блок DelayOff при установлении управляющего бита I устанавливает выходной бит q, инициализирует логический таймер – блок переходит в режим ожидания спада управляющего бита. После спада управляющего бита выходной бит сбрасывается через время задержки T. Если до истечения времени задержки выставится управляющий бит, логический таймер сбросится и будет ожидать следующего спада управляющего бита. Раздел библиотеки: Генераторы и таймера.
Для адекватной работы блока следует размещать его только в Таймере. Не рекомендуется задавать время задержки меньше времени таймерного цикла. Оптимальными значениями времени задержки являются числа, кратные величине таймерного цикла (не кратные значения округляются до времени таймерного цикла в большую сторону).
Назначение входов и выходов:
I – управление;
T – время задержки, мс;
q – выход.
Инициализация:
q = 0


Половинный импульс после половины паузы (HalfPulse)
Блок HalfPulse выдает импульс длительности T/2 после паузы T/2 по перепаду 0 в 1 на входе I. Раздел библиотеки: Генераторы и таймера.
Для адекватной работы блока следует размещать его только в Таймере. Не рекомендуется задавать время длительности меньше времени таймерного цикла. Оптимальными значениями времени длительности являются числа, кратные величине таймерного цикла (не кратные значения округляются до времени таймерного цикла в большую сторону).
Назначение входов и выходов:
I – управление;
T – длительность, мс;
q – выход.
Инициализация:
q = 0


Генератор сигналов (GenSign)
Блок GenSign генерирует сигналы различной формы. Раздел библиотеки: Генераторы и таймера.
Для адекватной работы блока следует размещать его только в Таймере. Не рекомендуется задавать время длительности меньше времени таймерного цикла. Оптимальными значениями времени длительности являются числа, кратные величине таймерного цикла (не кратные значения округляются до времени таймерного цикла в большую сторону).
Назначение входов и выходов:
Tsg – период сигнала в секундах;
Amp – амплитуда сигнала;
Shf – смещение сигнала по оси ординат;
Aut – включение периодичности сигнала;
Dis – сброс сигнала;
sin – синусоида;
line – пила;
sqw – меандр;
l1,l2 – логические биты.
Инициализация:
sin = line = sqw = l1 = l2 = 0
Алгоритм:
Если Aut = 0, тогда сигналы на выходе имеют следующий вид:
Алгоритм блока GenSign при Aut = 0 Если Aut = 1, тогда сигналы на выходе имеют следующий вид:
Алгоритм блока GenSign при Aut = 1 Если установить и сбросить бит Dis, сигнал начнет генерироваться со значения Shf.

Логический таймер со взводом (AdvTimer)
Блок AdvTimer передает на выход q с управляющего входа после задержки по времени T. Взвод осуществляется по входу set при I = 1. Раздел библиотеки: Генераторы и таймера.
Для адекватной работы блока следует размещать его только в Таймере. Не рекомендуется задавать время задержки меньше времени таймерного цикла. Оптимальными значениями времени задержки являются числа, кратные величине таймерного цикла (не кратные значения округляются до времени таймерного цикла в большую сторону).
Назначение входов и выходов:
I – управление;
T – задержка, мс;
set – задержка;
q – выход;
t – значение таймера.
Инициализация:
q = 0,
t = T


Генератор импульсов с заданной скважностью (PulseGeneratorEx)
Блок PulseGeneratorEx при enbl = 1 на входе формирует на выходе логические импульсы заданной скважности: длительность импульса задается входом t1, длительность паузы –входом t2. Выходы t_on и t_off ведут отсчет текущего времени импульса и паузы, соответственно. Раздел библиотеки: Генераторы и таймера.
Для адекватной работы блока, следует размещать его только в Таймере. При работе блока в Фоне присутствует погрешность. Не рекомендуется задавать время задержки меньше времени таймерного цикла. Оптимальными значениями времени задержки являются числа, кратные величине таймерного цикла (не кратные значения округляются до времени таймерного цикла в большую сторону).
Назначение входов и выходов:
t1 – длительность импульса, мс;
t2 – длительность паузы, мс;
enbl – разрешение работы;
out – выход;
t_on – текущее время импульса, мс;
t_off – текущее время паузы, мс.
Инициализация:
out = 0


Генератор случайных чисел (rndgen)
Блок rndgen выдает на выходе случайные числа в диапазоне от -amp до +amp. Раздел библиотеки: Генераторы и таймера.
Назначение входов и выходов:
amp – амплитуда;
out – случайное значение.

Универсальный счетчик (CounterCTN)
Универсальный счетчик CounterCTN используется для прямого и обратного счета. Операция «прямой счет» выполняется по переднему фронту импульса на входе прямого счета inU, что увеличивает значение выходного сигнала out. Импульсы, приходящие на вход inD («обратный счет»), уменьшают значение выхода out. Если на вход rst поступает сигнал логической 1, то выход счетчика out устанавливается в значение входа n. Раздел библиотеки: Генераторы и таймера.
Если на входы inU и inD одновременно поступают сигналы, то приоритетным является сигнал входа inU. Допустимый диапазон значений числа импульсов n: от 0 до 65535.
Назначение входов и выходов:
inU – вход импульсов прямого счета;
inD – вход импульсов обратного счета;
rst – логический вход;
n – установленное значение импульсов;
out – выход.


Инкрементный счетчик (CounterCTU)
Инкрементный счетчик CounterCTU используется для подсчета числа импульсов, приходящих на вход in. На выходе out счетчика появится импульс сигнала логической 1, если число приходящих на вход импульсов достигнет установленного значения на входе n. Счетчик сбрасывается в 0 по переднему фронту импульса на входе rst. Раздел библиотеки: Генераторы и таймера.
Если сигналы поступают на входы одновременно, то приоритетным является сигнал входа rst. Допустимый диапазон значений числа импульсов n: от 0 до 65535.
Назначение входов и выходов:
in – вход импульсов прямого счета;
rst – импульсный вход для сброса выхода счетчика в 0;
n – установленное значение импульсов;
out – выход.


Инкрементный счетчик с автосбросом (CounterCT)
Инкрементный счетчик с автосбросом CounterCT используется для подсчета заданного числа импульсов n. На выходе out счетчика появится импульс сигнала логической 1 длительностью в один цикл, если число приходящих на вход in импульсов достигнет установленного значения n. Раздел библиотеки: Генераторы и таймера.
Допустимый диапазон значений числа импульсов n: от 0 до 65535.
Назначение входов и выходов:
in – вход импульсов;
n – устанавливаемое значение импульсов;
out – выход.


Обработка сигналов
Cимметричный ограничитель сигнала (LimSim)
Функциональный блок LimSim является симметричным (на величину val) ограничителем входного сигнала inp. Раздел библиотеки: Обработка сигналов.
Назначение входов и выходов:
inp – входной сигнал;
val – величина ограничения (абсолютное значение);
dis – команда обнуления выхода;
out – выходной сигнал ограничителя.
Инициализация:
out = 0
Алгоритм:
dis = 0 → out = inp, если inpval → out = val,
если inp < -val → out = -val,
dis = 1 → out = 0

Аппроксимация обратной функции (Approx)
Блок Approx для заданной табличной функции y = f(x) производит аппроксимацию обратной функции x = g(y). Табличная функция y = f(x) задается массивом tab_y значений y, соответствующих значениям x аргумента, выбранным из диапазона [minx...maxx] с шагом hx. Раздел библиотеки: Обработка сигналов.
Назначение входов и выходов:
y – табличная функция;
hx – шаг x;
minx – минимум x;
maxx – максимум x;
ty0, ty1, …, tyn – значения y для x0, x1, …, xn
;x – обратная функция.
Инициализация:
out = 0
Алгоритм: используется кусочно-линейная аппроксимация по двум соседним точкам.

Кусочно-линейная интерполяция (KL_Interp)
Блок вычисляет значение функции y, заданную таблично (x0, y0, ...), при значении аргумента, равном in. Используется кусочно-линейная интерполяция. Значение dlt задает смещение значения y относительно значений в точках x0, x1, …, которое используется, если edl = 1. Если значение x не входит в диапазон, заданный точками x0, x1, …, то выставляется флаг ошибки err. Раздел библиотеки: Обработка сигналов.
Назначение входов и выходов:
in – значение x;
dlt – смещение y;
edl – учитывать смещение;
;t0, t1, …, tn – значение y0, y1, …, yn;
c0, c1, …, cn – значение x0, x1, …, xn;
out – значение y;
err – флаг ошибки.
Инициализация:
out = 0, err = 0
Алгоритм: вычисление значения функции основано на кусочно-линейной интерполяции.

Несимметричный ограничитель сигнала (Lim)
Функциональный блок Lim является Функциональный блок является ограничителем входного сигнала inp. Раздел библиотеки: Обработка сигналов.
Назначение входов и выходов:
inp – входной сигнал;
max – верхняя граница;
min – нижняя граница;
out – выход;
uf – inp > max;
if – inp < min.
Инициализация:
out = 0
Алгоритм:
out = inp, если inp > max → out = max, uf = 1,
если inp < min → out = min, if = 1

Группа ограничителей сигнала (Lims)
Функциональный блок Lims представляет собой группу ограничителей сигнала val. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Обработка сигналов.
Назначение входов и выходов:
vali – входы;
maxi – верхняя граница i-го входа;
mini – нижняя граница i-го входа;
oi – выходы.
Инициализация:
oi = 0
Алгоритм:
o = val, если val > max → o = max,
если val < min → o = min

Градиентный фильтр (GradLim)
Функциональный блок GradLim ограничивает рост входного сигнала Q, сравнивая приращение этой величины с заданной величиной допустимого приращения dQ. Если приращение не превышает заданного, блок работает как усредняющий по двум значениям фильтр. В противном случае на выходе блока устанавливается величина out[i - 1] ± dQ, а индикатор lf устанавливается в единицу. Дискретизация по времени задается стробирующим входом enbl. Раздел библиотеки: Обработка сигналов.
Назначение входов и выходов:
Q – вход;
dQ – допустимое приращение;
enbl – стробирующий вход;
out – выход;
if – приращение больше заданного.
Инициализация:
out = 0, if = 0
Алгоритм:
out = out[i - 1] ± dQ, при -dQ < Q - out[i - 1] < dQ,
out = out[i - 1] + Q, иначе

Определение принадлежности к диапазону (Inside)
Функциональный блок Inside определяет принадлежность значения входной переменной val к заданному диапазону (a…b) с допуском нечувствительности eps (от -eps/2 до +eps/2). Если значение val находится внутри диапазона, то блок устанавливает выход isd = 1 (внутри). Если же значение val находится вне диапазона, блок задает выход osd = 1 (снаружи). Единица на выходе apx указывает на то, что значение val находится вблизи границы диапазона (в зоне нечувствительности). Это свойство может оказаться полезным для задания гистерезисных зависимостей. Если это не нужно, необходимо задать eps = 0. Раздел библиотеки: Обработка сигналов.
Назначение входов и выходов:
val – вход;
a – нижняя граница;
b – верхняя граница;
eps – гистерезис;
enbl – разрешение на работу блока;
isd – внутри;
osd – снаружи;
apx – в зоне нечувствительности.
Инициализация:
isd = 0, osd = 0, apx = 0

Параболический ограничитель (SqLim)
Блок SqLim обнаруживает выход входного значения за ограничивающие параболы. Раздел библиотеки: Обработка сигналов.
Назначение входов и выходов:
dp – вход;
q – x параболы;
k1 – коэффициент 1;
k2 – коэффициент 2;
gt – больше верхней;
lt– ниже нижней;
alm – выход за пределы.
Инициализация:
gt = 0, lt = 0, alm = 0
Алгоритм:
Если q > 0.01 → gt = 1, если dqk2∙q∙q, itlt1, если dq < k1∙q∙q,
иначе gt = 1, если dq > 0, lt = 1, если dq < 0,
alm = gt∪lt

Фильтр Баттерворта (BatterFilter)
Блок BatterFilter представляет из себя фильтр Баттерворта с постоянной времени Tx и коэффициентом демпфирования g. Для адекватной работы фильтра необходимо размещать данный блок в Таймере. Раздел библиотеки: Обработка сигналов.
Назначение входов и выходов:
in – вход;
Tx – постоянная времени;
g – коэффициент демпфирования;
out – выход.
Инициализация:
out = 0

Нормализация шкалы (Scale)
Блок Scale осуществляет линейное преобразование диапазонов без ограничителя. Аргументы являются вещественными числами. Раздел библиотеки: Обработка сигналов. Выход инициализируется 0.
Назначение входов и выходов:
x – вход;
minx – минимум входа;
maxx – максимум входа;
miny – минимум выхода;
maxy – максимум выхода;
y – выход.
Инициализация:
y = 0
Алгоритм:
Если (max(x) - min(x)) > 0.001 → y = (max(y) - min(y))/(max(x) - min(x))∙(x - min(x)) + min(y),
иначе y = min(y)

Преобразователь для модуля термосопротивления (5B34Conv)
Блок 5B34Conv предназначен для согласования 50-Омных термосопротивлений типа 50П и 50М с входными модулями типа 50П. Для согласования точки 0 °C последовательно с датчиком подключается постоянное сопротивление 50 Ом. Для пересчета показаний результат измерения с функционального блока аналогового входа заводится на вход t блока 5B34Conv. При использовании датчика типа 50М вход type устанавливается в 1, а для 50П – в 2. Раздел библиотеки: Обработка сигналов.
Диапазон работы функционального блока: для 50П -150 °C … 200 °C, для 50М -50 °C … 200 °C.
Назначение входов и выходов:
t – вход;
type – тип (1, 2);
out – выход.
Инициализация:
out = 0
Алгоритм:
type = 1: t > -50,5 → out = 2,02∙t,
иначе out = 1.33∙t-32.8.
type = 2: t > -10,8 → out = 1,83∙t,
иначе out = 4.62∙t + 29.9

Интерполяция (Interpolation)
Блок Interpolation производит интерполяцию функции, заданной на входах x и y. Если функция задана неправильно, либо количество num превышает заданное, выставляется признак ошибки sts. Если en = 0, то out = in. Раздел библиотеки: Обработка сигналов.
Блок можно размещать только в Фоне.
Назначение входов и выходов:
en – включение блока;
typ – тип (0 – линейная, 1 – сплайн Акима);
num – количество точек;
ctrl –не используется;
cfg – не используется;
in – вход;
x0, x1, …, xn – значения x;
y0, y1, …, yn – значения y;
out – выход;
sts – ошибка.

Симметричная мертвая зона с гистерезисом (FdeadS)
Функциональный блок FdeadS является симметричной (на величину val) мертвой зоной по отношению к сигналу inp. Отличие данного ФБ от блока Симметричная мертвая зона состоит в том, что при выходе сигнала inp за пределы мертвой зоны в блоке формируется внутренний флаг, который скачком отключает ее. Сброс флага происходит в момент смены полярности входного сигнала inp. Раздел библиотеки: Обработка сигналов.
Назначение входов и выходов:
inp – вход;
val – мертвая зона;
dis – отключение мертвой зоны;
out – выход.
Инициализация:
out = 0

Симметричная мертвая зона (DbandS)
Функциональный блок DbandS является симметричной (на величину val) мертвой зоной по отношению к сигналу inp. Раздел библиотеки: Обработка сигналов.
Назначение входов и выходов:
inp – вход;
val – мертвая зона;
dis – отключение мертвой зоны;
out – выход.
Инициализация:
out = 0
Алгоритм:
dis = 0: out = 0, если inp > val → out = inp - val,
если inp < -val → out = inp + val.
type = 2:t > -10,8 → out = 1,83∙t,
dis = 1: out = inp

Диагностика сигналов датчиков (SensSpd)
Блок SensSpd анализирует скорость изменения входного сигнала inp и ограничивает его, если скорость превышает заданную spd. Блок сравнивает текущее значение сигнала inp и его значение на предыдущем цикле выполнения программы, а скорость spd задает максимально допустимое изменение сигнала в секунду. При отключении диагностики dis = 0 сигнал inp передается на выход out без изменений, hsp = 0 и nul = 0. Первые 10 циклов программы диагностика отключена независимо от значения dis. Раздел библиотеки: Обработка сигналов.
Назначение входов и выходов:
inp – вход;
spd – скорость;
dis – включить;
out – выход;
hsp – высокая скорость;
nul – не изменился.
Инициализация:
out = 0, hsp = 0, nul = 0
Алгоритм:
Если inp = inp[i - 1] → nul = 1, out = inp,
если inp - out[i - 1] > spd∙таймерный интервал,
out = inp + spd∙таймерный интервал,
hsp = 1,
если inp - out[i - 1] < -spd∙таймерный интервал,
out = inp - spd∙таймерный интервал,
hsp = 1,
иначе out = inp, hsp = 0, nul = 0

Изменение значения за заданное время (ValDif)
Функциональный блок ValDif передает на выход изменение значения val за установленное время time. Раздел библиотеки: Обработка сигналов.
Назначение входов и выходов:
val – вход;
time – время, мс;
diff – разница за время time.

Арифметическое скользящее среднее (MovAverage)
Блок MovAverage реализует алгоритм определения среднего значения исходного входного сигнала за предыдущие периоды (циклы). При инициализации блока выделяется память под массив сохраняемых значений входного сигнала с заданными пользователем максимальными размерами. В дальнейшем пользователь может динамически изменять фактическую величину выборки, участвующей в расчете для определения оптимальных параметров фильтрации. При подаче активного логического сигнала на вход балансировки значение входного сигнала передается на выход блока без фильтрации. Раздел библиотеки: Обработка сигналов.
Назначение входов и выходов:
in – вход;
W – количество значений входного сигнала для расчета (должно быть меньше mW);
mW –максимально количество значений входного сигнала для расчета, неизменяемый вход, значение которого принимается один раз при компиляции, допустимые значения в диапазоне 2…255;
bal – максимально количество значений входного сигнала для расчета, неизменяемый вход, значение которого принимается один раз при компиляции, допустимые значения в диапазоне 2…255;
out – выход.
Инициализация:
out = in
Алгоритм:
out = 1/W∙∑in_i
где in_i – исходные сохраненные за предыдущие периоды значения входного сигнала,
W = k - l – сглаживающий интервал – количество значений входного сигнала,
используемых для расчета.
Если bal = 1 → out = in

Операции с регистрами
Объединение 20 битов в регистр (ToReg20)
Блок ToReg20 объединяет 20 битов в регистр. Бит 0 – младший бит регистра, бит 19 – старший. Раздел библиотеки: Операции с регистрами.

Объединение 8-ми битов в регистр (ToReg8)
Блок ToReg8 объединяет 8 битов в регистр. Бит 0 – младший бит регистра, бит 7 – старший. Раздел библиотеки: Операции с регистрами.

Выбор 8 битов из регистра (FromReg8)
Блок FromReg8 раскладывает байт на 8 бит. Первый выходной бит будет младшим битом байта, последний – старшим. Раздел библиотеки: Операции с регистрами.

Объединение 16-ти битов в регистр (ToReg16)
Блок ToReg16 объединяет в слово 16 бит. Первый входной бит будет младшим битом слова, последний – старшим. Раздел библиотеки: Операции с регистрами.

Выбор 20 битов из регистра (FromReg20)
Блок FromReg20 раскладывает 4 байта в 20 бит. Первый выходной бит будет младшим битом слова, последний – старшим. Раздел библиотеки: Операции с регистрами.

Выбор 16 битов из регистра (FromReg16)
Блок FromReg16 раскладывает слово в 16 бит. Первый выходной бит будет младшим битом слова, последний – старшим. Раздел библиотеки: Операции с регистрами.

Логическое И для 16-битных регистров (rAND)
Функциональный блок rAND работает аналогично блоку И, но обрабатывает параллельно 16 логических сигналов, предварительно объединенных в 16-битный регистр. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Операции с регистрами.

Логическое ИЛИ для 16-битных регистров (rOR)
Функциональный блок rOR работает аналогично блоку ИЛИ, но обрабатывает параллельно 16 логических сигналов, предварительно объединенных в 16-битный регистр. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Операции с регистрами.

Логическое НЕ для 16-битных регистров (rNOT)
Функциональный блок rNOT работает аналогично блоку НЕ, но обрабатывает параллельно 16 логических сигналов, предварительно объединенных в 16-битный регистр. Раздел библиотеки: Операции с регистрами.

Логическое И с отрицанием для 16-битных регистров (rnAND)
Функциональный блок rnAND работает аналогично блоку И с отрицанием, но обрабатывает параллельно 16 логических сигналов, предварительно объединенных в 16-битный регистр. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Операции с регистрами.

Логическое ИЛИ с отрицанием для 16-битных регистров (rnOR)
Функциональный блок rnNOR работает аналогично блоку ИЛИ с отрицанием, но обрабатывает параллельно 16 логических сигналов, предварительно объединенных в 16-битный регистр. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Операции с регистрами.

Сложение по модулю для 16-битных регистров (rXOR)
Функциональный блок rXOR работает аналогично блоку XOR, но обрабатывает параллельно 16 логических сигналов, предварительно объединенных в 16-битный регистр. Раздел библиотеки: Операции с регистрами.

Склеивание байта из двух тетрад (R4to8)
Блок R4to8 собирает 8-ми битный регистр из младшей тетрады регистра low и старшей тетрады регистра high. Раздел библиотеки: Операции с регистрами.

Детектор фронтов для 16-битных регистров (Fronts2)
Функциональный блок Fronts2 работает аналогично блоку детектора фронтов, но обрабатывает параллельно 16 логических сигналов, предварительно объединенных в 16-битный регистр. Раздел библиотеки: Операции с регистрами.

Склеивание слова из двух байт (R8to16)
Блок R8to16 собирает 16-ти битный регистр из младшего регистра low и старшего регистра high. Раздел библиотеки: Операции с регистрами.

Преобразование 16-битного регистра в два 8-битных (R16to8)
Блок R16to8 разбивает 16-битный регистр на два 8-битных. Раздел библиотеки: Операции с регистрами.

Преобразование двух 16-битных регистров в 32-битный (R16to32)
Блок R16to32 склеивает 32-битный регистр из двух 16-битных. Раздел библиотеки: Операции с регистрами.

Преобразование 32-битного регистра в два 16-битных (R32to16)
Блок R32to16 разбивает 32-битный регистр на два 16-битных. Раздел библиотеки: Операции с регистрами.

Объединение 32 битов в регистр (ToReg32)
Блок ToReg32 объединяет 32 бита в регистр. Бит 0 – младший бит регистра, бит 31 – старший. Раздел библиотеки: Операции с регистрами.

Выбор 32 битов из регистра (FromReg32)
Блок FromReg32 раскладывает 4 байта в 32 бита. Первый выходной бит будет младшим битом слова, последний – старшим. Раздел библиотеки: Операции с регистрами.

Включение с задержкой для 16-битных регистров (rDelayOn)
Функциональный блок rDelayOn работает аналогично блоку Включение с задержкой, но обрабатывает параллельно 16 логических сигналов, предварительно объединенных в 16-битный регистр. Раздел библиотеки: Операции с регистрами.

Выключение с задержкой для 16-битных регистров (rDelayOff)
Функциональный блок rDelayOff работает аналогично блоку Выключение с задержкой, но обрабатывает параллельно 16 логических сигналов, предварительно объединенных в 16-битный регистр. Раздел библиотеки: Операции с регистрами.

Выбор бита из регистра (BitReg16)
Функциональный блок BitReg16 выбирает бит из регистра ireg по указанному номеру ibit. Раздел библиотеки: Операции с регистрами.
Назначение входов и выходов:
ireg – регистр;
ibit – номер бита;
obit – выходной бит.

Операции с массивами
Массив вещественных чисел (FloatArray)
Блок FloatArray создает массив из элементов. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Операции с массивами.
Назначение входов и выходов:
in0, in1, …, inn – элементы типа flt;
p_a – массив.

Массив 4-байтных целых (i32Array)
Блок i32Array создает массив из элементов. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Операции с массивами.
Назначение входов и выходов:
in0, in1, …, inn – элементы типа i32;
p_a – массив.

Линейная аппроксимация массивов (LineAprox)
Блок LineAprox рассчитывает значение таблично заданных функций при значении аргумента inp. Текущие значения функций выдаются на соответствующие выходы o. Функция задается массивом аргументов arg (общим для всех функций) и массивом значений fun. Размерности всех массивов должны совпадать, иначе на выход будет выдана ошибка err - (-1 - [номер функции]).
Массив аргументов arg должен быть упорядочен либо по возрастанию, либо по убыванию. Если порядок нарушен, то на выход err выдается номер этого элемента (считая с 1). Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Операции с массивами.

На входы arg и fun должны быть проведены связи только с выходов блоков Массив вещественных чисел, в противном случае работа программы будет некорректной.
Назначение входов и выходов:
inp – аргумент;
arg – аргументы;
fun0, fun1, …, funn – функции;
err – ошибка;
o0, o1, …, on – значения функций.

Значения массива вещественных чисел (From_fArr)
Блок From_fArr позволяет получить значения элементов вещественного массива, поданного на вход. Раздел библиотеки: Операции с массивами.
Коды ошибок статуса err:
0 – ошибок нет;
1 – выходов блока меньше, чем элементов у входного массива;
2 – выходов больше, чем элементов у входного массива;
3 – на входе отсутствует массив (может быть связано с порядком выполнения блоков).
Назначение входов и выходов:
in – массив элементов типа flt
;err – статус;
out0, out1, …, outn – значения элементов массива.

Элемент из массива (one_From_fArr)
Блок one_From_fArr позволяет получить значение i-го элемента из массива, поданного на вход. Раздел библиотеки: Операции с массивами.
Коды ошибок статуса err:
0 – ошибок нет;
1 – выбранный номер элемента находится за пределами массива;
2 – на входе отсутствует массив (может быть связано с порядком выполнения блоков).
Назначение входов и выходов:
in – массив элементов типа flt;
i – номер элемента;
err – статус;
out – значения элемента.

Нахождение минимума/максимума в массиве (minmax_fArr)
Блок minmax_fArr определяет минимальное и максимальное значение из элементов массива, поданного на вход. Раздел библиотеки: Операции с массивами.
Коды ошибок статуса err:
0 – ошибок нет;
1 – на входе отсутствует массив (может быть связано с порядком выполнения блоков).
Назначение входов и выходов:
in – массив элементов типа flt;
err – статус;
min – минимум;
max – максимум.

Нахождение разницы между элементами массива (minmax_sub_fArr)
Блок minmax_sub_fArr минимальное и максимальное значение разницы соседних элементов массива, поданного на вход. Раздел библиотеки: Операции с массивами.
Коды ошибок статуса err:
0 – ошибок нет;
1 – на входе отсутствует массив (может быть связано с порядком выполнения блоков).
Назначение входов и выходов:
in – массив элементов типа flt;
err – статус;
min – минимальная разница соседей;
max – максимальная разница соседей.

Переключатель массивов (switch_fArr)
Блок switch_fArr принимает на входы два массива вещественных чисел и выдает на выход один из них, в зависимости от состояния управляющего входа i: при i = 0 — массив in2, в остальных случаях — массив in1. Раздел библиотеки: Операции с массивами.
Коды ошибок статуса err:
0 – ошибок нет;
1 – на входе отсутствует массив (может быть связано с порядком выполнения блоков).
Назначение входов и выходов:
in1, in2 – массивы элементов типа flt;
err – статус;
p_a – выходной массив.

Значения массива целых (From_i32Arr)
Блок From_i32Arr позволяет получить значения элементов целочисленного массива, поданного на вход. Раздел библиотеки: Операции с массивами.
Коды ошибок статуса err:
0 – ошибок нет;
1 – выходов блока меньше, чем элементов у входного массива;
2 – выходов больше, чем элементов у входного массива;
3 – на входе отсутствует массив (может быть связано с порядком выполнения блоков).
Назначение входов и выходов:
in – массивы элементов типа i32;
err – статус;
out0, out1, …, outn – значения элементов массива.

Триггеры
Триггер Шмидта (SmTrig)
Блок SmTrig осуществляет алгоритм симметричного триггера Шмидта. Раздел библиотеки: Триггеры.
Назначение входов и выходов:
x – аргумент;
m – уставка;
dm – гистерезис;
fu – больше;
fl – меньше.
Алгоритм:
fl = 1 при x ≤ m+ dm,
fu = 1 при x > m + dm


Двойной триггер Шмидта (SmTrig2)
Блок SmTrig осуществляет алгоритм двойного симметричного триггера Шмидта. Раздел библиотеки: Триггеры.
Назначение входов и выходов:
x – аргумент;
m – центр уставки;
dm – гистерезис;
l – отклонение уставки;
fu – больше;
fm – между;
fl – меньше.
Алгоритм:
fl = 1 при x < m – l + dm,
fm = 1 при m – l + dm ≤ x < m + l - dm,
fu = 1 при x ≥ m + l - dm


RSS-триггер (RSS)
RSS – RS-триггер с S-доминантой. Раздел библиотеки: Триггеры.
Назначение входов и выходов:
s – бит установить (set);
r – бит сбросить (reset);
q – выход;
inv – инверсный выход.
Инициализация:
q = 0
Алгоритм:

RSR-триггер (RSR)
RSR – RS-триггер с R-доминантой. Раздел библиотеки: Триггеры.
Назначение входов и выходов:
s – бит установить (set);
r – бит сбросить (reset);
q – выход;
inv – инверсный выход.
Инициализация:
q = 0
Алгоритм:

D-триггер с инициализацией выхода (DFR_i)
DFR_i – D-триггер с R- доминантой. Раздел библиотеки: Триггеры.
Назначение входов и выходов:
i – перепад;
d – потенциал;
s – бит установить (set);
r – бит сбросить (reset);
ini – инициализация;
q – выход;
qn – инверсный выход.
Инициализация:
q = ini
Алгоритм:

JK-триггер с инициализацией (JK _i)
JK _i – JK-триггер с инициализацией. Раздел библиотеки: Триггеры.
Назначение входов и выходов:
j – бит job;
k – бит keep;
s – бит установить (set);
r – бит сбросить (reset);
ini – начальное значение q;
q – выход;
qn – инверсный выход.
Инициализация:
q = ini
Алгоритм:

RSS-триггер с инициализацией выхода (RSS_i)
RSS – RS-триггер с S-доминантой с инициализацией. Раздел библиотеки: Триггеры.
Назначение входов и выходов:
s – бит установить (set);
r – бит сбросить (reset);
i – начальное значение q;
q – выход.
Инициализация:
q = i
Алгоритм:

RSR-триггер с инициализацией выхода (RSR)
RSR – RS-триггер с R-доминантой с инициализацией. Раздел библиотеки: Триггеры.
Назначение входов и выходов:
s – бит установить (set);
r – бит сбросить (reset);
i – начальное значение q;
q – выход.
Инициализация:
q = i
Алгоритм:

D-триггер (DFR)
DFR – D-триггер с R- доминантой. Раздел библиотеки: Триггеры.
Назначение входов и выходов:
i – перепад;
d – потенциал;
s – бит установить (set);
r – бит сбросить (reset);
q – выход;
qn – инверсный выход.
Инициализация:
q = 0
Алгоритм:

DV-триггер (DFRV)
DFRV– DV-триггер с R- доминантой. Раздел библиотеки: Триггеры.
Назначение входов и выходов:
is – потенциал;
i – перепад;
s – бит установить (set);
r – бит сбросить (reset);
q – выход;
qn – инверсный выход.
Инициализация:
q = 0
Алгоритм:

Несимметричный триггер Шмидта (asymSmTrig)
Блок SmTrig осуществляет алгоритм несимметричного триггера Шмидта. Раздел библиотеки: Триггеры.
Назначение входов и выходов:
x – аргумент;
min – нижний гистерезис;
max – верхний гистерезис;
l – отклонение уставки;
fu – больше;
fl – меньше.
Инициализация:
fu = 0, fl = 0
Алгоритм: первые три цикла fu = 1 при x > max, fl = 1 при x ≤ max, затем см. рисунок ниже.


Шаговая последовательность (Steper)
Блок Steper осуществляет последовательное переключение заданного количества шагов. Раздел библиотеки: Триггеры.
Назначение входов и выходов Steper
Элемент | Описание |
---|---|
Входы | |
enb | Разрешение работы |
str | Пуск |
rst | Сброс |
t_f | Не используется |
i | Разрешение (циклический) |
t | Таймаут (циклический) |
a | Сигнал (циклический) |
Выходы | |
ind | Номер шага |
s_w | Идет работа |
s_t | Таймаут |
s_r | Сброс |
s_f | Конец работы |
w | Признак работы (циклический) |
t | Признак таймаута (циклический) |
r | Авария (циклический) |
Работа последовательности возможна только при наличии 1 на входе разрешения enb:
если enb = 0 до запуска, то запуск не произойдет;
если enb = 0 после запуска, то последовательность сбрасывается и на выходы выдается авария: s_r = 1 и ri = 1 (для всех i).
Запуск последовательности происходит при появлении перепада 0 → 1 на входе str.
Каждый шаг представлен группой входов i, t и a и выходов w, t и r. Включение шага происходит после завершения предыдущего шага и при i = 1, а на выходе признака работы w выставляется 1. Если к моменту включения шага его разрешение i не равно 1, то последовательность сбрасывается и на выходы выдается авария: s_r = 1 и ri = 1 (для всех i). Шаг завершается, когда блок получает 1 на входе ответного сигнала a. Если сигнал a не получен в течение времени t (задается в мс) с момента включения шага, то последовательность сбрасывается и на выход выдается признак таймаута: s_t = 1 и t = 1.

Системные
В данном разделе приведено описание основных блоков библиотеки paCore из раздела Системные.
Информация о временах выполнения (SysInfo)
Блок SysInfo выдает информацию о временах выполнения. Раздел библиотеки: Системные.
Назначение входов и выходов SaverEx
Элемент | Описание |
---|---|
Входы | |
fmap | Имя map-файла |
rst | Сброс |
Выходы | |
init | Не используется |
IT | Заданный таймерный цикл ввода-вывода |
ic | Текущий таймерный цикл ввода-вывода |
im | Максимальный таймерный цикл ввода-вывода |
MT | Заданный таймерный цикл |
tc | Текущий таймерный цикл |
tm | Максимальный таймерный цикл |
fc | Текущий фон |
fm | Максимальный фон |
crc | Не используется |
inm0 | Не используется (циклический) |
cnt0 | Не используется (циклический) |

Получить время и дату, день недели (getTDN)
Блок getTDN выдает на выходы текущее время и дату, день недели, установленные в ОС контроллера. Блок можно размещать как в Таймере, так и в Фоне. Раздел библиотеки: Системные.
Назначение входов и выходов:
f – не используется;
h – часы;
m – минуты;
s – секунды;
dw – день недели;
d – число;
mn – месяц;
y – год.

Получить время и дату (getTD)
Блок getTD выдает на выходы текущее время и дату, установленные в ОС контроллера. Блок можно размещать как в Таймере, так и в Фоне. Раздел библиотеки: Системные.
Назначение входов и выходов:
f – не используется;
h – часы;
m – минуты;
s – секунды;
d – число;
mn – месяц;
y – год.

Завершение программы (Exit)
Блок Exit осуществляет корректное завершение программы, когда на входе b1 появляется 1. Раздел библиотеки: Системные.
Назначение входов и выходов:
b1 – выйти;
q – значение входа.

Разность тиков процессора (GetTicksDiff)
Блок GetTicksDiff предназначен для проведения высокоэффективных измерений малых временных промежутков. Раздел библиотеки: Системные.
Блок определяет разность между двумя входными значениями start и end (полученными при помощи блоков Счетчик тиков процессора), переводя ее в единицы измерения времени (мс) на выходе ms.
На выходе ms фиксируется последнее полученное значение до момента изменения на входе end.

Назначение входов и выходов:
start – тик начала;
end – тик окончания;
ms – разница между входами, мс;
pday – частота процессорного счетчика, кГц;
min – не используется для контроллеров ОВЕН.

Счетчик тиков процессора (GetTicks)
Блок GetTicks в связке с блоком Разность тиков процессора позволяет выполнять высокоэффективные измерения малых временных промежутков. Раздел библиотеки: Системные.
Если на вход блока enb подан ненулевой сигнал, то на выходе tcks текущее значение внутреннего независимого цикличного счетчика.
При нулевом сигнале на входе, на выходе фиксируется последнее полученное значение счетчика (если измерений не было – 0).
Назначение входов и выходов:
end – включение;
tcks – тик.

Загруженность таймерного потока (Effect)
Блок Effect выдает информацию о загруженности таймерного потока. Раздел библиотеки: Системные.
Назначение входов и выходов Effect
Элемент | Описание |
---|---|
Входы | |
rst | Сброс |
Выходы | |
mt | Таймерный цикл основной |
it | Таймерный цикл ввода-вывода |
ctm | Средний процент заполнения таймерного цикла основного программой таймера |
cti | Средний процент заполнения ввода-вывода цикла программой ввода-вывода |
mtm | Средний процент заполнения ввода-вывода цикла программой ввода-вывода |
mti | Максимальный процент заполнения ввода-вывода цикла программой ввода-вывода |
cf | Средний процент от величины таймера работы фоновой программы |
mf | Максимальный процент от величины таймера работы фоновой программы |

Событие по фронту (Event)
Блок Event предназначен для определения времени между событиями. На вход блока front заводится бит события. По входному фронту на выходе time блока будет значение времени в наносекундах. Раздел библиотеки: Системные.
Назначение входов и выходов:
front – входной фронт;
me – событие;
time – время срабатывания, нс.

TCP/IP клиент (TcpIpClA)
Блок TcpIpClA представляет собой TCP/IP-клиент для обеспечения работы протоколов (например, Modbus TCP Master). Раздел библиотеки: Системные.
Так как работа блока занимает значительное время, его можно размещать только в Фоне.
Назначение входов и выходов:
lprt – локальный порт;
lip – локальный IP-адрес;
sdr – сетевой стек, для ПЛК ОВЕН "/";
rprt – удаленный порт;
ip – IP адрес удаленного сервера;
cnc – связь с блоком протокола;
stat – статус работы (0 – есть связь с TCP/IP сервером, >0 – нет связи).

TCP/IP сервер (TcpIpSrA)
Блок TcpIpSrA представляет собой TCP/IP-сервер для обеспечения работы протоколов (например, Modbus TCP Slave). Сервер поддерживает одновременно не более 20 подключений. Раздел библиотеки: Системные.
Назначение входов и выходов:
prt – порт;
lip – локальный IP-адрес;
sdr – сетевой стек, для ПЛК ОВЕН "/";
wait – время в миллисекундах до закрытия пустого канала (0 – никогда);
cnc – связь с блоком протокола;
stat – статус работы (0 – есть подключения, >0 – нет подключений).

Информация о сборке (BuildVersionInfo)
Блок BuildVersionInfo передает на свои выходы информацию о сборке. Раздел библиотеки: Системные.
Назначение выходов:
ver – версия проекта;
date – дата и время трансляции;
guid – уникальный идентификатор (GUID);
usr – имя пользователя;
pc – имя компьютера.

Информация о накопителе (DriveInfo)
Функциональный блок DriveInfo используется для получения информации о накопителе по имени (адресу устройства). Раздел библиотеки: Системные.
По факту наличия восходящего фронта на вход start ФБ выполняет разовую выдачу информации о накопителях.
Для цикличного обновления информации о накопителе необходимо обеспечить цикличную подачу восходящего фронта на вход start.
Назначение входов и выходов:
start – запуск работы блока по восходящему фронту (0 → 1);
driveName – адрес накопителя в системе (до 49 символов);
error – накопитель отсутствует или недоступен;
capacity – общий объем накопителя, Кбайт;
used – занятый объем накопителя, Кбайт;
available – доступный объем накопителя, Кбайт.

Асинхронное выполнение команд Linux (SysExecute)
Функциональный блок SysExecute используется для отправки команды в терминал Linux и получения ответа. Раздел библиотеки: Системные.
Интерфейс данного блока соответствует CAA Behavior Model (PLCopen Behavior Model).
Бизнес-логика ФБ выполняется в отдельном потоке и не оказывает влияние на время работы циклов таймера и фона.

Если результат выполнения команды содержит более 1023 символов, выполнение команды будет прервано, будут подняты флаги done, error, но результат работы будет содержаться в output.
Запуск выполнения команды не произойдет, если поднят флаг прерывания abort.
Назначение входов и выходов:
execute – запуск выполнения команды по восходящему фронту (0 → 1);
command – текст команды;
abort – запуск прерывания исполнения команды по восходящему фронту (0 → 1);
priority – приоритет потока ожидания выполнения команды, по умолчанию 5;
output – результат выполнения команды (менее 1024 символов);
done – выполнение завершено;
aborted – выполнение было прервано;
busy – идет работа;
error – работа была прервана из-за переполнения результирующей строки.

Менеджер потоков (ThreadMan)
Блок ThreadMan предоставляет возможности управления и диагностики фоновых потоков исполнительной системы. Раздел библиотеки: Системные.
Назначение входов и выходов:
slp – время сна (простоя) фоновых потоков в мкс, в этот промежуток времени управление передается другим потокам. Если задано значение 0 или блок ThreadMan не добавлен в проект, то время простоя задается таймерным промежутком места работы Таймер;
btd – включение диагностики времени выполнения блоков: 0 – выключена, 1 – включена. Если диагностика включена, то в отладчике у каждого блока отображается время его выполнения, если выключена, то время выполнения всегда отображается как 1 мкс, что означает, что блок работает. На некоторых контроллерах выключение диагностики может существенно оптимизировать время выполнения всей программы;
num – количество запущенных дополнительных фоновых потоков (не включает Таймер, Ввод-вывод и Фон);
prio_max – максимально разрешенный приоритет для дополнительных фоновых потоков, зависит от ОС и не может быть изменен. Для места работы Поток в проекте следует выбирать приоритет ниже prio_max;
pmin – минимальный приоритет из запущенных дополнительных фоновых потоков;
pmax – максимальный приоритет из запущенных дополнительных фоновых потоков.

Последовательный порт (SerialPort)
Блок SerialPort представляет собой драйвер COM-порта, поддерживает системный последовательный порт под Linux и Windows. Раздел библиотеки: Системные.
Назначение входов и выходов SerialPort
Элемент | Описание |
---|---|
Входы | |
dev | Имя устройства (например, ser1, COM2) |
spd | Скорость в бодах: 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 128000, 256000, 153600, 230400, 460800, 921600 |
par | Контроль четности: 0 – нет; 1 – нечетный; 3 – четный |
stb | Количество стоповых бит: 1 или 2 |
dtb | Количество бит данных: 7 или 8 |
Выходы | |
cnc | Связь с блоком протокола |
stat | Статус: 1 – корректная работа; -1 – в системе не найдено устройство с именем dev; -2 – к выходу cnc не подключен блок протокола |
rcnt | Количество полученных байт |
wcnt | Количество отправленных байт |
diag | Диагностический – счетчик разности между количеством ошибок и принятыми (не может быть меньше 0) |

Работа со строками
Длина строки (StrLen)
Блок StrLen осуществляет подсчет количества символов len в строке s. Раздел библиотеки: Работа со строками.
Назначение входов и выходов:
s – строка;
len – длина.

Часть строки (StrNmp)
Блок StrNmp выделяет часть входной строки начиная с позиции n и длиной m (1-й символ строки имеет позицию 0). Если n и m заданы так, что длины исходной строки недостаточно, то выходная строка res ограничивается концом входной строки. Раздел библиотеки: Работа со строками.
Назначение входов и выходов:
s – строка;
n – начало;
m – длина;
res – выходная строка.

Слияние строк (StrApp)
Блок StrApp сливает входные строки s в одну результирующую строку str. В выходной строке строки расположены в том же порядке, что и входы s. Длина каждой строки s не должна превышать 60 символов. Раздел библиотеки: Работа со строками.
Назначение входов и выходов:
s0, s1, …, sn – строки;
res – результирующая строка.

Сохранение данных
Хранение параметров на диске (SaverEx)
Блок SaverEx обеспечивает хранение данных в архиве на диске контроллера в виде бинарного файла. Раздел библиотеки: Сохранение данных.
Поскольку операции файлового ввода/вывода занимают значительное время, данный блок следует размещать только в Фоне.
Назначение входов и выходов SaverEx
Элемент | Описание |
---|---|
Входы | |
rst | Сброс ошибок записи |
fnm | Абсолютный путь и имя файла на диске (может быть пустым – задается автоматически), расширение игнорируется. При сохранении данных на внешнем накопителе следует использовать путь, указанный на выходе блока 210-SD-USB из библиотеки paOwenIO (константный) |
wr | Запись на диск |
in | Значение параметра (циклический) |
typ | Тип параметра (циклический, константный): DI – 8-ми битный регистр; AI – вещественное значение; II – 16-ти битный регистр |
ini | Значение для инициализации (циклический, константный) |
Выходы | |
next | Имя следующего файла |
enb | Запись разрешена |
sts | Статус: 0 – после сброса; 1 – записан; 2 – прочитан; <0 – ошибка |
good | Количество удачных записей |
bad | Количество ошибок записи |
rej | Количество отклоненных записей |
o | Текущее значение параметров (циклический) |
Имя файла и путь к нему задается на входе fnm. Имя может быть пустым, тогда имя файла будет выбрано автоматически по индексу блока, а файл сохранится в рабочую директорию контроллера.
Данные организуются в виде переменных in с жестко заданным типом typ.
Поскольку входы in имеют тип any, следует строго соблюдать правила преобразования типов при проведении связей.
Если файла не существует на диске – выходы инициализируются значениями инициализации ini, происходит запись в файл.
Если файл существует на диске, выходы инициализируются сохраненными значениями. Запись в файл осуществляется только при изменении значений на входах in.
Запись на диск можно осуществить принудительно, подав команду wr.
Для надежной сохранности данных одновременно на диске находятся два файла, соответствующие одному архиву. Если контроллер будет перезагружен в момент записи на диск, данные не пропадут, а будут доступны предыдущие значения переменных, записанные в другом файле.
При чтении содержимое файла контролируется с помощью контрольной суммы, и только при ее корректности выдается на выходы (например, если добавить новую переменную, то значения, записанные в файл, сбросятся на инициализирующие ini).
Если происходит однократная ошибка при записи файла на диск, блок пытается переименовать текущий файл и снова произвести запись. Если повторная запись оказывается удачной, то продолжается работа в обычном режиме, а выход bad инкрементируется. Следует следует принять меры по диагностике или замене носителя, поскольку сбои при записи могут быть следствием скорого выхода его из строя. Файл, на котором произошел сбой, остается на диске под тем же именем с добавленным к нему суффиксом, равным метке времени сбоя (в мс от 1 января 1970 г). Удалять его не желательно, чтобы повторно не использовать потенциально сбойный сектор.
Если происходит повторный сбой записи, то блок блокируется (выход enb = 0) и больше не производит попыток переименований файлов и записи до тех пор, пока ошибки не будут сброшены фронтом на входе rst.

Подробнее о возможностях и работе блока SaverEx см. в документе Архивирование и сохранение уставок.

Счетчик времени наработки (CounterMEx)
Блок CounterMEx предназначен для сохранения в файл наработки устройств, например, насосов. Раздел библиотеки: Сохранение данных.
Поскольку операции файлового ввода/вывода занимают значительное время, данный блок следует размещать только в Фоне.
Назначение входов и выходов CounterMEx
Элемент | Описание |
---|---|
Входы | |
rst | Сброс ошибок записи |
fn | Абсолютный путь и имя файла (может быть пустым – задается автоматически), расширение игнорируется. При сохранении данных на внешнем накопителе следует использовать путь, указанный на выходе блока 210-SD-USB из библиотеки paOwenIO (константный) |
ask | Запись на диск |
slv | Используется для изменения значений счетчиков, если slv = 1, то cnt = mas, cfrn = mcfrn |
enbl | Работа устройства (циклический): пока enbl = 1, увеличивается время наработки cfrn, при изменении enbl с 0 на 1 число включений cnt увеличивается на 1 |
rst | Сброс времени наработки cnt (циклический) |
frm | Формат отображения для времени наработки. Не используется |
rfr | Сброс числа включений cfrn (циклический) |
mas | Балансировка времени наработки cnt (циклический), если slv = 1, то cnt = mas |
mcfrn | Балансировка числа включений cfrn (циклический), если slv = 1, то cfrn = mcfrn |
Выходы | |
next | Имя следующего файла |
enb | Запись разрешена |
good | Количество удачных записей |
bad | Количество ошибок записи |
cnt | Время наработки в секундах (циклический) |
hour | Время наработки в формате часы (циклический) |
min | Время наработки в формате минуты (циклический) |
sec | Время наработки в формате секунды (циклический) |
day | Текущий день (циклический) |
mnth | Текущий месяц (циклический) |
year | Текущий год (циклический) |
cfrn | Число включений (циклический) |
Блок анализирует входы enbl.
На выходе cfrn отображается число включений устройства (количество изменений enbl c 0 на 1), на выходе cnt отображается время наработки устройства (сколько секунд enbl был равен 1).
Блок может сохранять число включений и время наработки в файл по фронту на входе. Сохраненные значения считываются из файла при инициализации.
Имя файла и путь к нему задается на входе fnm. Имя может быть пустым, тогда имя файла будет выбрано автоматически по индексу блока, а файл сохранится в рабочую директорию контроллера.
Для изменения числа включений и времени наработки следует подать 1 на вход slv, тогда cnt = mas, cfrn = mcfrn. Это может быть полезно для синхронизации в дублированных системах.
Для надежной сохранности данных одновременно на диске находятся два файла, соответствующие одному архиву. Если контроллер будет перезагружен в момент записи на диск, данные не пропадут, а будут доступны предыдущие значения наработки, записанные в другом файле.
При чтении содержимое файла контролируется с помощью контрольной суммы, и только при ее корректности выдается на выходы (например, если добавить новую переменную, то значения, записанные в файл, сбросятся на инициализирующие ini).
Если происходит однократная ошибка при записи файла на диск, блок пытается переименовать текущий файл и снова произвести запись. Если повторная запись оказывается удачной, то продолжается работа в обычном режиме, а выход bad инкрементируется. Следует принять меры по диагностике или замене носителя, поскольку сбои при записи могут быть следствием скорого выхода его из строя. Файл, на котором произошел сбой, остается на диске под тем же именем с добавленным к нему суффиксом, равным метке времени сбоя (в мс от 1 января 1970 г). Удалять его не желательно, чтобы повторно не использовать потенциально сбойный сектор.
Если происходит повторный сбой записи, то блок блокируется до тех пор, пока ошибки не будут сброшены фронтом на входе rst.

Подробнее о возможностях и работе блока CounterMEx см. в документе Архивирование и сохранение уставок.

Буфер чтения/записи уставок (BufSupEx)
Блок BufSupEx представляет собой двунаправленный буфер данных интерфейса, а данные сохраняются в бинарном файле на диске контроллера. Блок сохраняет все значения на диске контроллера аналогично блоку SaverEx. Раздел библиотеки: Сохранение данных.
Поскольку операции файлового ввода/вывода занимают значительное время, данный блок следует размещать только в Фоне.
Назначение входов и выходов BufSupEx
Элемент | Описание |
---|---|
Входы | |
inter | Cвязь от интерфейса, к которому принадлежит данный буфер |
group | Номер группы (константный) |
fnm | Абсолютный путь и имя файла (может быть пустым – задается автоматически), расширение игнорируется. При сохранении данных на внешнем накопителе следует использовать путь, указанный на выходе блока 210-SD-USB из библиотеки paOwenIO (константный) |
mask | Не используется |
rst | Сброс ошибок записи |
wr | Запись на диск |
dan | Значение, которое записывается в буфер при czap = 1 (циклический) |
czap | Запись значения dan (циклический) |
typ | Тип параметра (циклический, константный): DI, DO – 8-ми битный регистр; AI, AO – вещественное значение; II, IO – 16-ти битный регистр |
adr | Адрес параметра (циклический, константный) |
ini | Значение для инициализации (циклический, константный) |
min | Минимум. Если принятое значение меньше min, то оно игнорируется (циклический) |
max | Максимум. Если принятое значение больше max, то оно игнорируется (циклический) |
Выходы | |
pkt | Подключение к блокам OpcUAClient, UABufSups из библиотеки paOpcUA |
next | Имя следующего файла |
enb | Запись разрешена |
sts | Статус: 0 – после сброса; 1 – записан; 2 – прочитан; <0 – ошибка |
good | Количество удачных записей |
bad | Количество ошибок записи |
rej | Количество отклоненных записей |
dan | Значение параметра, полученное по интерфейсу или на вход dan (после проверки на min и max) |
chn | Признак изменения, выставляется в 1 на один цикл выполнения программы, если значение dan изменилось |
zap | Признак записи, выставляется в 1 на один цикл выполнения программы, если значение с входа dan было записано |
Номер группы group используется в качестве Slave ID при подключении к блоку интерфейса Modbus Slave.
Имя файла и путь к нему задается на входе fnm. Имя может быть пустым, тогда имя файла будет выбрано автоматически по индексу блока, а файл сохранится в рабочую директорию контроллера.
Адрес переменной adr зависит от интерфейса, к которому подключен буфер, например, адрес регистра Modbus.
Поскольку входы dan имеют тип any, следует строго соблюдать правила преобразования типов при проведении связей.
Если файл существует на диске, выходы инициализируются сохраненными значениями. Если файла не существует – выходы инициализируются значениями инициализации ini.
Запись в файл осуществляется при изменении значений на входах dan или по интерфейсу. Если файла на диске не существует и выходы dan приняли значения ini, то можно записать их на диск принудительно, подав команду wr.
Для надежной сохранности данных одновременно на диске находятся два файла, соответствующие одному архиву. Если контроллер будет перезагружен в момент записи на диск, данные не пропадут, а будут доступны предыдущие значения переменных, записанные в другом файле.
При чтении содержимое файла контролируется с помощью контрольной суммы, и только при ее корректности выдается на выходы (например, если добавить новую переменную, то значения, записанные в файл, сбросятся на инициализирующие ini).
Имя файла и путь к нему задается на входе fnm. Имя может быть пустым, тогда имя файла будет выбрано автоматически по индексу блока, а файл сохранится в рабочую директорию контроллера. Если повторная запись оказывается удачной, то продолжается работа в обычном режиме, а выход bad инкрементируется. Следует принять меры по диагностике или замене носителя, поскольку сбои при записи могут быть следствием скорого выхода его из строя. Файл, на котором произошел сбой, остается на диске под тем же именем с добавленным к нему суффиксом, равным метке времени сбоя (в мс от 1 января 1970 г). Удалять его не желательно, чтобы повторно не использовать потенциально сбойный сектор.
Если происходит повторный сбой записи, то блок блокируется (выход enb = 0) и больше не производит попыток переименований файлов и записи до тех пор, пока ошибки не будут сброшены фронтом на входе rst.

При изменении числа входов блока BufSupEx файлы на диске перезаписываются.
Подробнее о возможностях и работе блока BufSupEx см. в документе Архивирование и сохранение уставок.

Запись логов в оперативную память (RamLog)
Блок RamLog обеспечивает возможность сбора логов по заданным параметрам для сохранения в оперативную память. Запись происходит в несколько буферов, которые при заполнении или по таймауту попадают в очередь для передачи на выход (сама передача происходит при условии, что предыдущий прочтен). Раздел библиотеки: Сохранение данных.
Так как работа блока занимает значительное время, данный блок следует размещать только в Фоне.
Назначение входов и выходов RamLog
Элемент | Описание |
---|---|
Входы | |
enb | Включение блока |
bsize | Размер буфера – позволяет задать максимальное количество символов, хранимых в отдельном буфере: 128…4096 |
bnum | Количество буферов: 2…64 |
init | Создать ли все буферы при инициализации. Полезно, если требуемые диагностические сообщения имеют большой объем и генерируются с самого начала работы программы. Изначально, при инициализации создается минимальное количество буферов и, если требуется, увеличивается в процессе работы. Если init = 1, то сразу будет создано bnum буферов |
tmout | Таймаут неполного буфера, мс - определяет временной промежуток, через который буфер, не заполненный до конца, будет считаться готовым к выдаче. Отсчет ведется с момента последнего дописанного сообщения. Полезно, если диагностические сообщения генерируются редко или имеют малый объем |
glvl | Уровень ошибок, если у сообщения уровень меньше или равен заданному, то оно будет напечатано независимо от кодов и индексов (ERR = 1, WRN = 2, INF = 3, DBG = 10, DBG + N) |
dbglvl | Уровень отладки, если у сообщения уровень превышает заданный, оно не будет напечатано |
dscrd | Сброс, очищает списки отслеживаемых блоков и кодов. Срабатывает при изменении значения с 0 на 1 |
code | Код отладки – значение, которое будет добавлено в список отслеживаемых при изменении входа addcd или удалено при изменении входа delcd |
addcd | Добавить код |
delcd | Удалить код |
indx | Индекс блока – значение, которое будет добавлено в список отслеживаемых при изменении входа addix или удалено при изменении входа delix |
addix | Добавить индекс |
delix | Удалить индекс |
Выводить записываемые логи в консоль | |
Выходы | |
sts | Статус: 0 – нормальная работа; +2 – сообщение, записываемое в буфер, превышает его максимальный размер, часть сообщения обрезана; +4 – все буферы заполнены, происходит периодическая потеря сообщений. Для устранения ошибок следует изменить соответствующие входные параметры: размер bsize или количество bnum |
log | Текущий буфер, доступный для чтения |
cds | Список отслеживаемых диагностических кодов |
indxs | Список индексов отслеживаемых блоков |

Очереди
Очередь битов qb
Тип данных qb позволяет накапливать очередь битовых значений в таймерном потоке. Если выход типа qb использовать в обмене по протоколу OPC UA, то будут переданы все накопленные данные, независимо от настроек подписки.


Если передача слишком медленная или входной сигнал изменяется слишком часто, то очередь может переполниться, что будет видно на выходе блока-источника очереди (например, R2toQuBit). Для изменения размера очереди необходимо перетранслировать программу.
При соединении выхода типа qb с битовым входом, расположенным в фоновом потоке, будет автоматически выполнено преобразование (блок QuBit_Bit), которое обеспечит гарантированную передачу бита. Пример ниже показывает разницу между обычным битом и битов с накоплением очереди. Обычный импульс, сформированный в таймере, ннельзя гарантированно получить в фоновом потоке, если длительность импульса достаточно мала.


Преобразование регистра в очереди битов (R2toQuBit)
Блок R2toQuBit разбирает входной регистр на биты, каждый из которых может накапливать очередь значений в таймерном потоке. Раздел библиотеки: Очереди.
Назначение входов и выходов:
qus – размер очереди (на каждый выходной бит);
reg – входной регистр;
ov – количество переполнений очереди;
n – текущее количество очередей;
b0, …, b15 – биты.

Преобразование очереди битов в бит (QuBit_Bit)
Блок QuBit_Bit преобразует очередь битов в бит, который можно дальше использовать в фоновом потоке. Среда разработки автоматически добавляет этот блок, если проведена связь между выходом типа qb и входом типа b. Раздел библиотеки: Очереди.
Назначение входов и выходов:
in – входная очередь;
val – какое значение ловить;
out – выход.
Алгоритм работы: значения из входной очереди сравниваются с заданным (вход val), и если встречается хотя бы одно, то выход out устанавливается равным val.
