- iRidium studio 2019
- Блок-схемы
Блок-схемы при помощи логических блоков
Работает только на iRidium server
Редактор схем предназначен для создания программ на языке FBD (функциональных диаграмм) для ПЛК. FBD - один из языков стандарта IEC 61131-3. Наша реализация совместима со стандартом не полностью(будет оптимизироваться), но базовые его требования реализованы.
Схема - это набор элементов, значений их параметров и соединений (цепей) между элементами.
Элемент схемы - это минимальный функциональный блок, выполняющий определенную операцию (логическую, арифметическую, задержку и т.п.), или обеспечивающий подключение схемы к входным или выходным цепям программируемого контроллера.
Связь блоков - линия, соединяющая выход одного блока с входом другого. Передает значение между блоками и показывает последовательность выполнения схемы.
Функциональные блоки в iRidium Studio 2019 используют собственные методы реализации и не имеют ничего общего с бета-версией функциональных блоков в старой студии (версии 1.3.8 и ниже). Преобразование схем в проектах, созданных в старой студии, на логику новых блок-схем невозможно. Для редактирования старых проектов используйте iRidium Studio версии 1.3.8 или воссоздайте эту логику в новой студии.
Для реализации блочной логики в iRidium studio разработана панель SCHEMES, она позволяет настроить блочную логику для iRidium server.
Назначение инструментов панели:

- Шаблон схемы;
- Список блоков Inputs/Outputs;
- Рабочая область, в которой вы можете разместить, настроить блоки и соединить их связями;
- Каталог логических блоков, доступных для использования в схеме;
- Схемы;
- Панель отладки схемы;
- Лог последнего запуска схемы. Исходный код сформированный на основе блочной логики;
- Свойства схемы;
- Свойства блока.
1. Template (шаблон схемы)
Template (шаблон схемы) - позволяет создать и многократно использовать схему. Схемы, созданные внутри одного шаблона, отличаются только входами и выходами. Редактирование шаблона (логической составляющей, количества входов и выходов) затрагивает каждую схему, созданную на базе этого шаблона. Изменение переменной, к которой обращается вход или выход схемы, затрагивает только эту схему, сохраняя входы и выходы других схем уникальными.
Первый шаблон будет создан при перетаскивании логических блоков на рабочую область. Добавить новый шаблон схемы можно с помощью кнопки + .
Щелкнув правой кнопкой по листу схемы будет доступно меню с пунктами:
Rename - переименовать шаблон;
Delete - удалить шаблон;
Clone - клонирование шаблона.
Экспорт и импорт блок-схем
Экспорт/импорт схем - инструмент позволяющий осуществить перенос в новый проект часто используемых схем с сохранением связей, значений и привязок к драйверу.
Экспорт блок-схем
- Для экспорта схем нажмите на кнопку в виде дискеты, далее откроется окно проводника, для ввода имени и выбора места сохранения.
Импорт блок-схем
- Нажмите на кнопку со значком “+”, далее Add from file, откроется окно проводника для выбора файла импорта.

После импорта откроется импортированный Template и все его схемы. Блоки Value сохраняют свои значения. Блоки To tag , To command , From tag сохраняют свою привязку к драйверу и (или) токену.
2. Список блоков Inputs/Outputs
Список содержит в себе блоки, которые используются для чтения и записи внутри каждой схемы. Вычислительные блоки в этом списке не отображаются. Каждому элементу можно изменить назначение, щелкнув два раза правкой кнопкой мыши, и выбрать необходимый канал, тег, токен.
При наведении на элемент в списке появится всплывающая подсказка с полным наименованием тега\команды.

3. Рабочая область
Рабочая область - представляет собой пространство, в рамках которого вы можете разместить логически блоки и соединить их связями. Каждый вход/выход блока может быть соединен только одной связью.
Наилучшим использованием будет разделение крупной схемы на несколько отдельных схем, таким образом вам будет проще проверить её работоспособность. Эффективно разделить схему можно с помощью токенов, в которые вы будете записывать конечные значения после выполнения более простых схем.
Создание блока, создание связей между блоками.
Создание блока
Блок в рабочее поле добавляется методом "Drag&Drop", достаточно перетащить нужный элемент в рабочую область и появится блок с соответствующим цветом и характеристиками.
В качестве логических блоков могут выступать:
*Стандартные логические блоки;
*Команды и фидбеки;
*Токены (системные, пользовательские).
Создание связей между блоками
Для работы схемы, блоки внутри соединяются связями. Нарисовать связь можно следующие образом:
- Установить курсор на необходимый вход/выход блока.
- Зажмите левую кнопку мыши на нужном входе/выходе и начните передвижение. Начальный вход/выход изменит свою индикацию и получит красный цвет. Доступные входы/выходы других блоков сменят свой цвет на зеленый
3. Передвигайте курсор с зажатой левой кнопкой мыши до необходимого входа/выхода другого блока. Вслед за курсором будет вырисовываться линия связи.
4. Отпустите левую кнопку мыши на конечном входе/выходе и два блока соединятся связью.
Масштаб рабочей области
Масштаб, кнопки управления масштабом. Увеличивает, или уменьшает масштаб рабочей области.
- Поле с информацией о текущем масштабе(в процентах). Можно выбрать из числа предложенных вариантов, щелкнув ЛКМ по стрелочке вниз.
- Кнопки масштаба: *Zoom in - увеличивает текущий масштаб с шагом в 10%; *Zoom out - уменьшает текущий масштаб с шагом в 10%.
3. Координаты курсора по оси X и Y.

4. Каталог логических блоков
Math . Арифметические функции:
-
- Add (+). Сложение;
-
- Sub (-). Вычитание;
-
- Mul (*). Умножение;
-
- Div (/). Деление;
-
- Mod (%). Остаток от деления;
-
- Abs - абсолютное значение.
And. Побитовое "И";
-
- Or. Побитовое "ИЛИ";
-
- Xor. Побитовое "Исключающее ИЛИ";
-
- Not. Побитовое "НЕ";
-
- LSHIFT.
битовые сдвиг влево;
- LSHIFT.
-
- RSHIFT. битовый сдвиг вправо;
Logic operations. Логические операции: *
Logic And. Логическое "И"; *
Logic Or. Логическое "ИЛИ"; *
Xor. Логическое исключающее "ИЛИ"; *
Not. Логическое "НЕ". * Input . Входящие данные: * Value. Константа: знаковое число с плавающей запятой (float 64-bit); *
From Tag. Взять значение из тега; *
From Channel. Взять значение из канала. * Output . Исходящие данные: * To Log. Записать значение в лог; *
To Tag. Записать значение в тэг; *
To Channel. Записать значение в канал. * Conditions . Операторы сравнения:
-
- X > Y. Больше;
-
- X >= Y. Больше либо равно;
-
- X Меньше;
-
- X Меньше либо равно;
-
- X == Y. Равно;
-
- X != Y. Не равно.
-
- IF (SEL);
-
- Min;
-
- Max;
-
- Clamp.
-
- Dublicate;
-
- Caption;
-
- Timer;
-
- Map;
-
- RS - триггер;
-
- D - триггер;
-
- T - триггер;
-
- Avg Statistics;
-
- Min Statistics;
-
- Max Statistics;
-
- RGBA to сolor;
-
- Color to RGBA;
-
- Color to RGB;
-
- To Bool;
-
- To Int;
-
- To Float;
-
- Delta;
-
- Inc/Dec;
-
- Real div;
-
- P-регулятор;
-
- PI-регулятор;
-
- PD-регулятор;
-
- PID-регулятор;
-
- Threshold switch;
-
- ByteToBits;
-
- BitsToByte;
-
- TON;
-
- TOF;
-
- TP;
-
- Multiplexer;
-
- Selector;
-
- AvgMedian;
-
- PulseGenerator;
-
- Set interval;
-
- Valve control.
Math.Арифметические функции.
*Add (+) - сложение. *Sub (-) - вычитание. Mul () - умножение. *Div (/) - деление. *Mod (%) - остаток от деления. *Abs - абсолютное значение входа.
Add (+). Сложение
Add(+) Сложение - арифметическое действие, посредством которого из двух или нескольких чисел получают новое, содержащее столько единиц, сколько было во всех данных числах вместе. Имеет два входных канала и один канал выхода.
Sub(-). Вычитание
Sub(-) .Вычитание - арифметическое действие, посредством которого от одного числа отнимается другое число.Имеет два входных канала и один канал выхода.
Mul(*). Умножение
Mul(*) .Умножение - арифметическое действие повторения данного числа слагаемым столько раз, сколько единиц находится в другом данном числе, множителе.Имеет два входных канала и один канал выхода.
Div(/). Целочисленное деление
Div(/) Целочисленное деление - арифметическое действие, по которому узнаётся, сколько раз одно число содержится в другом. Имеет два входных канала и один канал выхода. Умножение и деление поможет вам с переводом из различных систем исчисления.
Mod (%). Остаток от деления
Mod (%) Остаток от деления - значение, которое остается при делении одного целочисленного значения на другое. Имеет два входных канала и один канал выхода.
Abs. Абсолютное значение входа
Abs Блок выводит абсолютное значение входа. Используется для исключения отрицательного значения.
Вход: *In - входящее значение.
Выход: *Out - абсолютное значение входа.
Bit operations. Битовые операции.
*And - Побитовое логическое "И". *Or - Побитовое "ИЛИ". *Xor - Побитовое логическое исключающее "ИЛИ". *Not - Побитовое логическое "НЕ". * LSHIFT - битовый сдвиг влево. * RSHIFT - битовый сдвиг вправо.
And. Побитовое «И»
And. Побитовое «И» — это бинарная операция, действие которой эквивалентно применению логического «И» к каждой паре битов, которые стоят на одинаковых позициях в двоичных представлениях значений входных сигналов. Другими словами, если оба соответствующих бита значений входных сигналов равны 1, результирующий двоичный разряд равен 1; если же хотя бы один бит из пары равен 0, результирующий двоичный разряд равен 0. Имеет два входа и один выход. Имеет до 16 (включительно) входов.
| Выход | 11000010 |
Or. Побитовое «ИЛИ»
Or. Побитовое «ИЛИ» — это бинарная операция, действие которой эквивалентно применению логического «ИЛИ» к каждой паре битов, которые стоят на одинаковых позициях в двоичных представлениях значений входных сигналов. Другими словами, если оба соответствующих бита значений входных сигналов равны 0, двоичный разряд результата равен 0; если же хотя бы один бит из пары равен 1, двоичный разряд результата равен 1. Имеет два входа и один выход. Имеет до 16 (включительно) входов.
| Выход | 11101010 |
Xor. Побитовое исключающее «ИЛИ»
Xor. Побитовое исключающее« ИЛИ» — это бинарная операция, результат действия которой равен 1, если число складываемых единичных битов нечетно и равен 0, если чётно. Другими словами, если оба соответствующих бита значений входных сигналов равны между собой, двоичный разряд результата равен 0; в противном случае, двоичный разряд результата равен 1. Имеет два входа и один выход.
| Выход | 00101000 |
Not. Побитовое «НЕ»
Not. Побитовое «НЕ» - Побитовое «НЕ» инвертирует состояние каждого бита исходной переменной. Имеет один вход и один выход.
| Выход | 00110101 |
LSHIFT. Битовый сдвиг влево
LSHIFT. Битовый сдвиг влево - выполняет побитовый сдвиг влево.
Подробное описание смотреть ниже в RSHIFT. (Аналогичен RSHIFT, разница лишь в направлении сдвига).
RSHIFT. Битовый сдвиг вправо
RSHIFT. Битовый сдвиг вправо - выполняет побитовый сдвиг вправо.
Входы:
- Value - 32-битное без знаковое(это важно) - входное значение
- Count - число бит, на которое необходимо осуществить сдвиг.
Выходы: *Out - результат побитового сдвига.
Свойства блока: *Cyclic - включается цикличность сдвига(False/True).
Логика: Если сдвиг циклический(Cyclic = 1), то последние Count бит станут первыми.
Пример: 15 (00000000 00000000 0000000 000011112) RHIFT 2 = 3221225475 (11000000 00000000 00000000 000000112).
Если сдвиг нециклический(Cyclic = 0), то значение сдвинется вправо, а первые Count бит станут нулями. (Поведение аналогично оператору >> в языках Си, С++, C# и т.п.).
Logic operations. Логические операции.
*Logic And - логическое "И". *Logic Or - логическое "ИЛИ". *Logic Xor - логическое исключающее "ИЛИ". *Logic Not - логическое "НЕ".
Logic And. Логическое «И»
Logic And. Логическое «И» — это логическая операция, которая сравнивает два значения и возвращает false, если хотя бы одно из значений было false. Другими словами, если оба значения входных сигналов не равны 0, то результат будет равен 1; если же хотя бы одно значение равно 0 - результат будет равен 0. Имеет два входа и один выход. Имеет до 16 (включительно) входов.
| Выход | 1.0000 |
Logic Or. Логическое «ИЛИ»
Logic Or. Логическое «ИЛИ» — это логическая операция, которая сравнивает два значения и возвращает true, если хотя бы одно из значений было true. Другими словами, если оба входных значений равны 0, то результат будет равен 0; если же хотя бы одно из значений не равно 0, то результат будет равен 1. Имеет два входа и один выход. Имеет до 16 (включительно) входов.
| Выход | 1.0000 |
Xor. Логическое исключающее «ИЛИ»
Xor. Логическое исключающее «ИЛИ» — это логическая операция, которая сравнивает два значения и возвращает true, если одно значение true, а второе false. Другими словами, если оба значения будут равны 0 или оба значения будут не равны 0, то результат будет равен 0; в противном случае, результат равен 1. Имеет два входа и один выход.
| Выход | 1.0000 |
Not. Логическое «НЕ»
Not. Логическое «НЕ» - это логическая операция, которая возвращает true, если значение равно 0 и false, если значение не равно 0. Имеет один вход и один выход.
| Выход | 0 |
Input. Входящие данные.
*Value. *From Tag.
Value
Value - Константа: знаковое число с плавающей запятой (float 64-bit). Имеет один выход, который присоединяется к вычислительному блоку, или блоку выхода.
Имеет свойства: *Name - имя блока. *Type - тип блока(Value). *Value - числовое значение. Максимальное количество цифр до запятой 9, после запятой 2. #### From Tag From Tag - Элемент позволяющий брать значение из фидбеков, токенов для дальнейшей работы в схеме.
Имеет свойства: *Name - имя блока. *Type - From Tag. *Value - отображает адрес фидбека.
- Data Type - тип отправляемых данных.
From Channel
From Channel -
Элемент позволяющий брать значение из канала, токенов для дальнейшей работы в схеме.
Имеет свойства: *Name -
имя блока. *Type - From Channel. *Value -
отображает адрес канала.
Output. Исходящие данные.
*To Log. *To Tag. *To Channel.
To Log
To Log - Записать значение в лог, отображается в окне последнего запуска схемы(№9).
Имеет свойства:
- Name - имя блока.
- Type – To Log.
- Data Type - тип отправляемых данных.
To Tag
To Tag - Записать в тег драйвера, виртуальный канал, токен.
Имеет свойства:
- Name - имя блока.
- Type – To Tag.
- Value - отображает адрес канала.
To Channel
To Channel - Записать в команду драйвера, виртуальный канал, токен.
Имеет свойства:
- Name - имя блока.
- Type – To Channel
- Value - отображает адрес канала.
Conditions. Операторы сравнения.
Возвращают false/true, как результат сравнения. *X > Y. Больше. *X >= Y. Больше либо равно. *X Меньше. *X Меньше либо равно. *X == Y. Равно. *X != Y. Не равно.
X>Y. Больше
X>Y. Больше - Оператор выдает на выходе True, если значение X больше Y. False в противном случае.
X>Y. Больше или равно ====
X>=Y. Больше или равно - Оператор выдает на выходе True, если значение X больше, или равно Y. False в противном случае.
===='''X
'''X
===='''X
'''X
X Y. Равно ====
X == Y. Равно - Оператор сравнивает значение X и Y, True в случае их равенства. False во всех остальных случаях.
X ! Y. Не равно ====
X != Y. Не равно - Оператор сравнивает значение X и Y и выдает False в случае равенства. True во всех остальных случаях.
Selection. Операторы выбора.
Возвращает значение, удовлетворяющее условию блока:
- IF (SEL);
- Min;
- Max;
- Clamp.
IF (SEL)
SEL – эта функция выбирает один из двух входов в зависимости от значения первого входа IF.
Входы:
- IF - (BOOL) - Выбор входного значения;
- TRUE(THEN) - (Любой) - Входное значение;
- FALSE(ELSE) - (Любой) - Входное значение.
Выходы:
- OUT - (Любой) - Выходное значение.
Логика:
В зависимости от входящего значения на IF:
-
Если IF = 0, то значение входа FALSE(ELSE) отображается на выходе OUT.
-
Если IF = любое значение не равное 0, то значение входа TRUE(THEN) отображается на выходе OUT.
-
Если данных на входе IF нет = то значение входа FALSE(ELSE) отображается на выходе OUT.
Имеет свойства:
- Name - имя блока.
- Type – IF (SEL).
- Data Type - тип отправляемых данных
Min
Min - вычисление меньшего из двух.
Входы: *In1 - вход первого значения; *In2 - вход второго значения.
Выходы: *Out - минимальное значение из двух входящих.
Max
Max - вычисление большего из двух
Входы: *In1 - вход первого значения; *In2 - вход второго значения.
Выходы: *Out - максимальное значение из двух входящих.
Clamp
Clamp - ограничивает значение value диапазоном min >= value
Входы: *Min - минимальное значение диапазона; *Max - максимальное значение диапазона; *Value - входное значение.
Выходы: *Out - выходное значение.
Логика: *Если значение больше максимального, то возвращается максимальное. *Если значение меньше минимального, то возвращается минимальное. *Формула: Out = max(min(Value, Max), Min)
Interlock
Interlock – выводит в интерфейс активный вход. В один момент времени может быть активен только один вход, все остальные выводят 0. Имеет до 16 (включительно) входов и выходов.
Входы:
- Clear (0/1);
- Set all (0/1);
- Входы In1, In2, ... In16 (0/1).
- Приоритет отдается входу с наименьшим номером (если поступили данные на вход Clear, то на остальных поступившие данные не будут приниматься блоком).
Выходы:
- Out1, Out2, ... Out16 (0/1)
Свойства:
- Name - имя блока;
- Type – Interlock;
- Count inputs & outputs – редактирование количества входов/выходов блока.
Логика:
- при появлении 1 на входе Сlear – на всех созданных выходах (Out1/.../Out16) = выставляется и держится 0 до момента следующего изменения;
- при появлении 1 на входе Set all – на всех созданных выходах (Out1/.../Out16) = выставляется и держится 1 до момента следующего изменения;
- при появлении 1 на любом созданном входе (In1.../In16) = выставляется и держится 1 на соответствующем выходе (o1/.../o16), остальные выходы = 0;
- при появлении 0 на входе Сlear – блок не изменяет текущее значение выходов;
- при появлении 0 на входе Set all – блок не изменяет текущее значение выходов;
- при появлении 0 на любом созданном входе (In1.../In16) = не изменяет текущее значение выхода.
Multiple NOT
Multiple NOT – Логическое «НЕ» - это логическая операция, которая возвращает true, если значение равно 0 и false, если значение не равно 0. Имеет до 16 (включительно) входов и выходов.
Входы:
- In1, In2, ... In16 (0/1)
Выходы
- Out1, Out2, ... Out16 (0/1)
Cвойства:
- Name - имя блока;
- Type – Multiple Not;
- Count inputs & outputs – редактирование количества входов/выходов блока.
Логика:
- Если на вход придёт значение типа String, то выходе будет отображаться 1;
- Если на вход придет 1, то выходе будет отображаться 0;
- Если на вход придет 0, то выходе будет отображаться 1. ## Other. Другие. *Duplicate; *Caption; *Timer; *Map; *To Bool; *To Int; *To Float; *Color to RGBA; *RGBA to Color; *Delta; *Threshold switch; *Inc/Dec.
Duplicate
Duplicate – дублирует входящее значение. Имеет до 8 (включительно) выходов, дублирующие входящее значение.
Caption
Caption - выполняет функционал блока с сообщениями, можно разместить в пределах рабочего поля. Так же может служить для заметок внутри схемы.
Имеет свойства: *Name - имя блока. *Type - From Tag. *Value - Значение для отображения на блоке.
Timer
Timer - элемент передает значение входящего сигнала, до того момента пока на входе “Switch” не появится 0. Как только на входе появляется сигнал больше 0, блок начинает работу и передает значение "In 1" на выход, повторяя его с заданным интервалом.
Имеет свойства: *Name - имя блока. *Type - From Tag. *Value - Интервал через который повторно отсылается входящее значение(мс).
Map
Map - преобразует значение из одного диапазона в другой.
Входы: *Val - входное значение.
Выходы: *Out - выход.
Свойства блока: *From min - минимальное значение исходного диапазона$ *From max - максимальное значение исходного диапазона *To min - минимальное значение нового диапазона *To max - максимальное значение нового диапазона
Логика: Формула преобразования: Out = ([Val] - [From min]) * ([To max] -[To min]) / ([From max] -[From min]) +[To min];
RS - триггер
Триггер – это устройство, имеющее два устойчивых состояния («0» или «1») и способное под действием входного сигнала скачком переходить из одного устойчивого состояния в другое. Триггер – это простейший автомат с памятью и способностью хранить 1 бит информации («0» или «1»).
RS - триггер - Отличительной особенностью триггера как функционального устройства является свойство запоминания двоичной информации. Под памятью триггера подразумевают способность оставаться в одном из двух состояний и после прекращения действия переключающего сигнала. Приняв одно из состояний за «1», а другое за «0», можно считать, что триггер хранит (помнит) один разряд числа, записанного в двоичном коде.
Входы:
- R - reset (сбросить);
- S - set (установить).
Выходы:
- Q - прямой выход;
- |Q - инверсный.
Логика: Логическое устройство будет находиться в устойчивом положении в том случае, если на С=0. В этом случае импульсы, подающиеся на информационный D-вход, никак не влияют на прибор, и выходной импульс определяется записанным ранее значением, хранящимся в памяти. Если С=1, то выходной сигнал будет зависеть от того, какой сигнал был подан на информационный D-вход. Если D=1, то на выходе будет 1, если D=0, то на выходе будет 0. Таблица истинности.
D - триггер
D - триггер - получил название от английского слова «delay» - задержка, которая реализуется подачей сигналов на вход синхронизации. В RS-триггере было два входных сигнала, но для передачи двоичного кода достаточно одного входа с разными уровнями напряжения: высокий (1) и низкий (0). На два входа нельзя было подавать единицу одновременно, поэтому в D триггере эти входы объединены с помощью инвертора (рисунок 1 а), что исключает возможность возникновения запрещенного состояния.
Входы: *D - вход (0/1) *C - вход синхронизации, флаг(0/1)
Выходы:
- Q - прямой выход;
Логика: Логическое устройство будет находиться в устойчивом положении в том случае, если на С=0. В этом случае импульсы, подающиеся на информационный D-вход, никак не влияют на прибор, и выходной импульс определяется записанным ранее значением, хранящимся в памяти. Если С=1, то выходной сигнал будет зависеть от того, какой сигнал был подан на информационный D-вход. Если D=1, то на выходе будет 1, если D=0, то на выходе будет 0. Таблица истинности.
T - триггер
- Скоро появится.
T - триггер - Реализует логику асинхронного T-триггера. Асинхронный Т-триггер не имеет входа разрешения счёта — Т и переключается по каждому тактовому импульсу на входе С.
Входы: *In - boolean (0/1) вход.
Выходы: *Out - boolean (0/1) выход.
Логика: Хранит значение(0/1) в памяти и подаёт его на выход при In = 0. При In = 1, инвертирует значение в памяти и подаёт это значение на выход Out.
Таблица истинности.
Avg Statistics
Avg Statistics - ведёт статистику среднего значения.
Входы: *Value - текущее значение *Reset - флаг (0/1), где 1 - сброс среднего значения в значение Value
Выходы: *Avg - Максимальное значение из всех ранее переданных (при Reset = 0). Значение со входа Value (при Reset = 1).
Логика: Работает схожим образом с блоками MinStatistics и MaxStatistics. У данного блока есть память, в которой хранится текущее среднее значение. Если Reset = 1, то блок находится в режиме сброса, это значит что на выход будет передано значение со входа. Если Reset = 0, то блок находится в режиме сбора статистики, это значит, что на выход будет передано среднее из двух значений: из памяти и со входа Value. Память блока работает так же как и у блока MinStatistics и MaxStatistics: она хранит значение, которое было передано на выход в прошлый раз. При первом использовании блока (когда в памяти ещё нет предыдущего значения), на выход будет передано значение со входа Value и оно же помещается в память блока.
Min Statistics
Min Statistics - ведёт статистику минимального значения.
Входы: *Value - текущее значение *Reset - флаг (0/1), где 1 - сброс минимального значения в значение Value
Выходы: *Min - минимальное значение из всех ранее переданных (при Reset = 0). Значение со входа Value (при Reset = 1).
Логика: У данного блока есть память, в которой хранится текущее минимальное значение. Если Reset = 1, то блок находится в режиме сброса, это значит что на выход будет передано значение со входа. Если Reset = 0, то блок находится в режиме сбора статистики, это значит, что на выход будет передано минимальное из двух значений: из памяти и со входа. Память блока работает очень просто: она хранит значение, которое было передано на выход в прошлый раз. При первом использовании блока (когда в памяти ещё нет предыдущего значения), на выход будет передано значение со входа Value и оно же помещается в память блока.
Max Statistics
Max Statistics - ведёт статистику максимального значения.
Входы: *Value - текущее значение *Reset - флаг (0/1), где 1 - сброс максимального значения в значение со входа Value
Выходы: *Max - максимальное значение из всех ранее переданных (при Reset = 0). Значение со входа Value (при Reset = 1).
Логика: Работает схожим образом с блоком MinStatistics. У данного блока есть память, в которой хранится текущее максимальное значение. Если Reset = 1, то блок находится в режиме сброса, это значит что на выход будет передано значение со входа. Если Reset = 0, то блок находится в режиме сбора статистики, это значит, что на выход будет передано максимальное из двух значений: из памяти и со входа. Память блока работает так же как и у блока MinStatistics: она хранит значение, которое было передано на выход в прошлый раз. При первом использовании блока (когда в памяти ещё нет предыдущего значения), на выход будет передано значение со входа Value и оно же помещается в память блока.
RGBA to сolor
RGBA to Color - блок, выполняющий преобразование из компонентов цвета(Red, Green, Blue, Alpha) в 32-битное беззнаковое целое RgbaColor.
Входы: (значения на каждом входе варьируются от 0 до 255) *Red - красный канал; *Green - зеленый канал; *Blue - синий канал; *Alpha - альфа-канал.
Выходы: *RgbaColor - 32-битное беззнаковое целое в формате 0xRRGGBBAA.
Color to RGBA
Color to RGBA - преобразование, обратное RGBA to Color, из формата 0xRRGGBBAA в отдельные значения Red, Green, Blue, Alpha.
Входы: *RgbaColor - 32-битное беззнаковое целое в формате 0xRRGGBBAA.
*В случае, если было передано 24 бита, то значение Alpha будет 0xFF, то есть получится 32-битное значение 0xRRGGBBFF
Выходы: (значения от 0 до 255) *Red - красный канал; *Green - зеленый канал; *Blue - синий канал; *Alpha - альфа-канал.
Color to RGB
Color to RGB - преобразование из формата 0xRRGGBB в отдельные значения Red, Green, Blue.
Входы: *RgbColor - 32-битное беззнаковое целое в формате 0xRRGGBB.
*В случае, если было передано 24 бита, то значение Alpha будет 0xFF, то есть получится 32-битное значение 0xRRGGBBFF.
Выходы: (значения от 0 до 255) *Red - красный канал; *Green - зеленый канал; *Blue - синий канал.
To Bool
To Bool - Автоматическое преобразование к Bool.
Входы: *In - входное значение.
Выходы: *Out - выход. Преобразование к Bool.
To Int
To Int - Автоматическое преобразование к Int.
Входы: *In - входное значение.
Выходы: *Out - выход. Преобразование к Int.
To Float
To Float - Автоматическое преобразование к Float.
Входы: *In - входное значение.
Выходы: *Out - выход. Преобразование к Float.
Delta
Delta - дельта входящего значения.
Входы: *In - входное значение.
Выходы: *Value - выходное значение; *RisingEdge - флаг (0/1), 0 - значение не увеличилось, 1 - значение увеличилось; *FallingRange - флаг (0/1), 0 - значение не уменьшилось, 1 - значение уменьшилось.
Свойства: *Delta - дельта.
Логика: Входящее значение сравнивается с предыдущим, хранимым в памяти блока значением, если разность входящего и предыдущего значения по модулю превосходит Delta - значение передаётся на выход Value, если нет - на выход подаётся предыдущее сохранённое в памяти значение.
Inc/Dec
Inc/Dec - увеличивает(если Step > 0), или уменьшает(если Step
Входы: *Value - входное значение; *Control - флаг(0/1) - не увеличивать/увеличивать.
Выходы: *Out - выходное значение.
Свойства: *Step - шаг
Логика: *Если Control = 0, возвращает на выход Out значение входа Value; *Если Control = 1, возвращает Value + Step.
Real div
Real div - деление с остатком - арифметическое действие, по которому одно число делится на другое с наличием десятичной дроби. Имеет два входных канала и один канал выхода. Умножение и деление поможет вам с переводом из различных систем исчисления.
P-регулятор
P-регулятор - реализует логику P-контроллера.
Входы: *ACT - значение регулируемой величины; *SET - значение уставки; *SUP - зона нечувствительности; *OFS - смещение; *MAN_IN - сигнал ручного ввода; *MAN - режим управления 1/0 (ручной/автоматический); *KP - коэффициент усиления П-составляющей; *LL - нижний предел управляющего сигнала; *LH - верхний предел управляющего сигнала.
Выходы: *Y - величина управляющего воздействия; *DIFF - сигнал рассогласования; *LIM - флаг 1/0 «достигнут предел для Y».
Логика: См. подробнее стр. 550.
PI-регулятор
PI-контроллер - реализует логику PI-контроллера.
Входы: *ACT - значение регулируемой величины; *SET - значение уставки; *SUP - зона нечувствительности; *OFS - смещение; *MAN_IN - сигнал ручного ввода; *MAN - режим управления 1/0 (ручной/автоматический); *RST - сигнал обнуления И-составляющей 1/0; *KP - коэффициент усиления П-составляющей; *KI - коэффициент усиления И-составляющей; *LL - нижний предел управляющего сигнала; *LH - верхний предел управляющего сигнала; *dT - delta time - время между измерениями (необходима для интегрирования).
Выходы: *Y - величина управляющего воздействия; *DIFF - сигнал рассогласования; *LIM - флаг 1/0 «достигнут предел для Y».
Логика: См. подробнее стр. 550.
PD-регулятор
PD-регулятор - реализует логику PD-контроллера.
Входы: *ACT - значение регулируемой величины; *SET - значение уставки; *SUP - зона нечувствительности; *OFS - смещение; *MAN_IN - сигнал ручного ввода; *MAN - режим управления 1/0 (ручной/автоматический); *KP - коэффициент усиления П-составляющей; *KD - коэффициент усиления Д-составляющей; *LL - нижний предел управляющего сигнала; *LH - верхний предел управляющего сигнала; *dT - delta time - время между измерениями (необходима для интегрирования).
Выходы: *Y - величина управляющего воздействия; *DIFF - сигнал рассогласования; *LIM - флаг 1/0 «достигнут предел для Y».
Логика: См. подробнее стр. 550.
PID-регулятор
PID-регулятор - реализует логику PID-контроллера.
Входы: *ACT - значение регулируемой величины; *SET - значение уставки; *SUP - зона нечувствительности; *OFS - смещение; *MAN_IN - сигнал ручного ввода; *MAN - режим управления 1/0 (ручной/автоматический); *RST - сигнал обнуления И-составляющей 1/0; *TN - постоянная времени интегрирования; *TV - постоянная времени дифференцирования; *KD - коэффициент усиления Д-составляющей; *LL - нижний предел управляющего сигнала; *LH - верхний предел управляющего сигнала; *dT - delta time - время между измерениями (необходима для интегрирования).
Выходы: *Y - величина управляющего воздействия; *DIFF - сигнал рассогласования; *LIM - флаг 1/0 «достигнут предел для Y».
Логика: См. подробнее стр. 550.
Threshold switch
Threshold switch - пороговый переключатель.
Входы: *In - входное значение; *Threshold - пороговое значение; *Range - диапазон.
Выходы: *Out - выходное значение boolean (0/1).
Логика: Если значение In отклоняется от значения Threshold по модулю не более чем на значение Range, то возвращает 1, иначе возвращает 0. Формула: Out = | In - Threshold | ByteToBits - преобразование набора байта на входе в набор битов на выходе.
Входы:
- In - входной байт.
Выходы:
- Out1 - бит 1 (отсчёт ведётся с конца, например этот выход будет отражать значение первого бита для 00000001),
- Out2 - бит 2,
- Out3 - бит 3,
- Out4 - бит 4,
- Out5 - бит 5,
- Out6 - бит 6,
- Out7 - бит 7,
- Out8 - бит 8. #### BitsToByte
BitsToByte - преобразование набора битов на входе в байт на выходе.
Входы:
- In1 - бит 1 (отсчёт ведётся с конца, например этот вход будет отражать значение первого бита для 00000001),
- In2 - бит 2,
- In3 - бит 3,
- In4 - бит 4. * In5 - бит 5,
- In6 - бит 6,
- In7 - бит 7,
- In8 - бит 8. Выходы:
- Out - выходной байт, собранный из входных битов.
TON
TON - реализует логику таймера с задержкой включения..
Входы:
- In - boolean вход (0/1).
Выходы:
- Out - boolean выход (0/1).
Свойства:
- Interval (ms) - задержка включения (в миллисекундах).
Логика: Если вход In = 1 - таймер начинает работу. Спустя время Interval, таймер начинает подавать на выход значение 1 (до этого он подавал 0).
TOF
TOF - реализует логику таймера с задержкой выключения.
Входы:
- In - boolean вход (0/1).
Выходы:
- Out - boolean выход (0/1).
Свойства:
- Interval (ms) - задержка включения (в миллисекундах).
Логика: Если вход In = 0 - таймер начинает отсчёт. Спустя время Interval, таймер начинает подавать на выход значение 0 (до этого он подавал 1).
TP
TP - блок, реализующий логику TP таймера.
Входы:
- In - вход (0/1).
Выходы:
- Out - выход (0/1).
Свойства:
- Interval (ms) - интервал времени (в миллисекундах).
Логика: Блок TP выдает импульс заданной длительности (Interval (ms)) при активации входа. Повторный импульс не продлевает замкнутое состояние.
Multiplexer
Multiplexer - блок, реализующий логику мультиплексора.
Входы:
- Control - вход контроля (беззнаковое целое),
- In1-8 - сигнальные входы.
Выходы:
- Out - значение с одного из сигнальных входов.
Логика: На управляющий вход Control подаётся беззнаковое целое число - индекс сигнального входа, с которого нужно передать значение на выход. Индекс может быть числом от 1 до 8 (включительно) и соответствует количеству сигнальных входов.
Selector
Selector - блок, хранящий в себе значение, позволяющий делать его инкремент/декремент с шагом Step, а также устанавливать новое значение со входа Set (при Reset равном 1). В случае, если изначально значение не было задано (например Reset = 0, а предыдущего значения пока нет), то на выход подаётся значение свойства MinValue и оно же сохраняется в память блока.
Входы:
- Inc - инкрементировать (1/0);
- Dec - декрементировать (1/0);
- Set - значение для установки;
- Reset - установить значение со входа Set в качестве текущего (1/0).
Выходы:
- Out - выходное значение.
Свойства:
- MinValue - минимальное значение;
- MaxValue - максимальное значение;
- Step - шаг инкремента/декремента;
- Cyclic - если 0, то при выходе за границу (MinValue, MaxValue) на выход передаётся MinValue или MaxValue соответственно (ограничение как в блоке Clamp); если 1 - при выходе за границу (MinValue, MaxValue) на выход подаётся значение с цикличным сдвигом (например: MinValue = 3, MaxValue = 6, Step = 4, Inc = 1, Dec = 0; на выход подаётся значение 4).
Сдвиг для выхода за нижнюю границу рассчитывается по формуле:
- Out = MaxValue - ( |MinValue - CurrentValue| mod |MaxValue - MinValue| ),
Сдвиг для выхода за верхнюю границу рассчитывается по формуле:
- Out = MinValue + ( |CurrentValue - MaxValue| mod |MaxValue - MinValue| ),
где CurrentValue - текущее значение, которое нужно подать на выход.
AvgMedian
AvgMedian - блок, считающий среднее значение, отбрасывая те значения, которые не входят в область 3*сигма.
Входы:
- In1-In7 - входы датчиков.
Выходы:
- Out - среднее значение.
PulseGenerator
PulseGenerator - генератор импульсов.
Входы:
- In - вход (0/1).
Выходы:
- Out - выход (0/1).
Свойства:
- Interval (ms) - интервал между импульсами (в миллисекундах);
- Duration (ms) - продолжительность импульсов (в миллисекундах).
Логика: выдает на выходе true заданной длительности (Duration) с заданным интервалом (Iterval), пока управляющий вход - true.
Set interval
Set interval - реализует логику отправки значения по интервалу.
Входы:
- In - вход.
Выходы:
- Out - выход.
Свойства:
- Interval (ms) - временной промежуток в миллисекундах.
Логика: отправляет каждый раз по истечении интервала (Interval) значение со входа In на выход Out, если интервал ещё не истёк отправляется 0. #### Valve control
Valve control - реализует логику контроля клапана.
Входы:
- In - вход (любые значения с плавающей точкой).
Выходы:
- Out - выход.
Свойства:
- Preventative closing(bool) - профилактическое закрытие клапана;
- Interval (hours) - через сколько часов необходимо осуществить профилактическое закрытие клапана;
- Duration (ms) - сколько миллисекунд держать закрытым.
Особенности блока: корректно работает только в режиме обновления схемы по интервалу.
Логика:
Под словами “закрыть клапан” имеется ввиду то, что на выход будет передаваться значение 0 всё время пока “клапан будет закрыт”. Когда “клапан открыт” - значение со входа In пересылается на выход Out.
Если Preventative closing = true - блок находится в рабочем состоянии. Он будет “закрывать клапан” через Interval часов на время Duration (мс).
Если Preventative closing = false - блок просто передаёт значение со входа In на выход Out.
5. Schemes (схемы)
Схемы - копии первичного шаблона, в которых доступны изменения пути каналов и фидебков(вкладка Inputs/Outputs). Одна и та же схема может быть использована, как стандартный сценарий логики разных команд и фидбеков.
*Изменение блоков отвечающих за логику приведет к изменению других блоков в шаблоне.
Каждая схема содержит свой список блоков Inputs/Outputs(IO). IO - уникальные переменные, к которым обращается схема. Добавление схемы можно осуществить двумя способами:
1. Add -
нажав "+" произойдет копирование блоков, связей. Путь к каналу/тегу/токену не копируется.
2. Clone -
полное копирование схемы. Путь к каналу/тегу/токену копируется.
6. Панель отладки схемы
Кнопки отладки схемы.
Кнопки предназначены только для отладки текущей схемы. Можно проверить работу схему не запуская проект.
Launch - запуск схемы и проверка работоспособности. Наличие ошибок, или результаты логирования можно увидеть в поле лога.
Clear log - удаляет записи из поля лога.
7. Лог последнего запуска схемы. Исходный код сформированный на основе блочной логики
Лог запуска схемы
Отображает информацию с результатами работы вычислительных блоков, ошибки работы схемы. Чтобы информация вычислений отображалась в этом поле, присоедините блок "To Log" к выходу вычислительного блока.
Исходные код сформированный на основе блочной логики
Выбрав вкладку "Code", можно переместиться в область с отображением кода сформированного на базе выстроенной блочной схемы.
Исходный код, сформированный на основе блочной логики. Носит информативный характер.

8. Свойства схемы
*Name, *Active:
-
- True,
-
- False. *Run Mode:
-
- On Tag Change,
-
- By Interval.
Name - Наименование схемы.
Active - Состояние схемы. True - схема работает, происходит вычисление внутри схемы. False - схема неактивна, вычисления не производятся.
Run Mode - Режим запуска схемы, имеет следующие параметры:
On Tag Change - запуск схемы при изменении значений в теге(токене);
By Interval -
запуск схемы с заданным интервалом. Добавляет в свойства схемы параметр Interval(время указывается в милисекундах). Для запуска схемы разово при старте сервера, установите значение 0. 
9. Свойства блока
Свойства блока отображают рабочие параметры блока. Имеет два обязательных параметра Name и Type. В зависимости от типа блока может иметь параметр Value.
*Name. *Type. *Value.
Name - Наименование блока.
Type - тип блока, который выбран в схеме. Можно изменить тип вручную из выпадающего меню, тип блока изменится и это отобразится на схеме. Если ваш блок имел выход/вход связанный с другим блоком, и вы изменили его тип на противоположный, то связь с последующим блоком исчезнет.
*Value - В зависимости от типа блока Value можно задавать в числовом значении, либо указывать путь к тегу, каналу, токену.