Составной блок
| Классификация | Графическое обозначение |
|---|---|
| Наименование: Составной блок Группа: Составные блоки Версия CannyLab: с 2.0 |
Внешний вид функционального блока:![]() Иконка функционального блока: ![]() |
Общее описание
Специальный элемент функциональной диаграммы, который предоставляет пользователю возможность инкапсуляции частей алгоритма общей функциональной диаграммы путем создания собственного функционального блока - контейнера для вложенной в него функциональной диаграммы. Внутренняя логика работы составного блока задается пользователем в виде функциональной диаграммы, аналогичной диаграмме верхнего, «корневого» уровня, за исключением возможности непосредственного доступа к регистрам контроллера и именованным константам.
Для составного блока вместо «Регистра записи» и «Регистра чтения», применяются вход и выход составного блока. Максимальное количество входов или выходов составного блока ограничено размерами рабочего поля диаграммы. Приблизительно, количество входов/выходов может достигать ~2500 штук, при этом за одну команду можно добавить или удалить не более 1000 входов/выходов.
Составной блок может не иметь ни одного входа, но должен иметь минимум один выход.
Допускается многоуровневое вложение составных блоков друг в друга.
В функциональной диаграмме составного блока не допускается применение элементов: «Регистр записи», «Регистр чтения», а также «Именованная константа».
Размещение в пространстве функциональной диаграммы нескольких функциональных блоков имеющих одинаковое имя, но при этом разные функциональные диаграммы приведет к появлению ошибки.
Особенности
По умолчанию составной блок не имеет управляющего входа и всегда исполняется, наряду с элементарными функциональными блоками. Добавление составному блоку управляющего входа одного из двух типов - «EN» (ENABLE) или «nRST» (negative RESET), позволяет запускать либо приостанавливать его работу в процессе исполнения диаграммы контроллером.
При этом, при подаче на управляющий вход «EN» значений отличного от «0» составной блок исполняется в нормальном режиме. При подаче на управляющий вход «EN» значения «0» исполнение составного блока приостанавливается, с сохранением его внутреннего состояния и значений его выходов. Общее время исполнения диаграммы сокращается.
При этом, при подаче на управляющий вход «nRST» значений отличного от «0» составной блок исполняется в нормальном режиме. При подаче на управляющий вход «nRST» значения «0» исполнение составного блока приостанавливается, со сбросом его внутреннего состояния и значений его выходов. Общее время исполнения диаграммы сокращается.


Примеры
Пример 1. Вычисление средней величины 4х последних полученных значений (скользящее среднее).

В процессе работы составной функциональный блок выполняет вычисление скользящего среднего 4 последних полученных на свой вход значений. Результат вычисления отображается на выходе блока и передается именованной сети “Усредненное значение”.

Примечание: В данном примере составной блок обрабатывается на каждом цикле выполнения диаграммы, т.е. предполагается, что на его вход постоянно поступают новые, актуальные, подлежащие обработке значения.
Пример 2. Вычисление средней величины 4х последних полученных значений (скользящее среднее) по определенному событию.
На практике, данные для обработки при вычислении скользящего среднего поступают дискретно, с какой-то периодичностью или при каком-либо событии, например, в результате опроса термодатчика, при получении определенного сообщения по CAN или UART и т.п.
В таком случае может быть использован управляющий вход «EN» составного блока.

В процессе выполнения пользовательской диаграммы, сигнал о наступлении ожидаемого события, например, о получении данных от термодатчтка, подается на управляющий вход «EN» составного блока «Скользящее среднее x4», включая его в цикл выполнения диаграммы, значение на его входе передается в диаграмму составного блока для обработки, на выходе составного блока будет отображен результат вычисления с учетом поступивших данных. Если на следующем цикле выполнения диаграммы не произойдет получение новых данных, т.е. на входе «EN» составного блока «Скользящее среднее x4» будет установлено значение “0”, то блок будет исключен из цикла выполнения диаграммы, обработка данных на его входе остановлена, при этом на его выходе сохраняется результат последнего вычисления, который является актуальным и может быть использован в дальнейшей работе диаграммы.

Внутренняя диаграмма составного блока «2 в степени N» реализует следующую функцию: \[\ {\ f(x)} = {2^x}\]
При X > 32768 на внешнем выходе «2^N» составного блока установится 0, на выходе «Переполнение» устанавливается «1».

Для демонстрации работы блока «2 в степени N» с входом «EN» подготовим диаграмму, которая в циклическом режиме увеличивает значение на входе «Степень (N)» с помощью счетчика, а в случае ненулевого значения на выходе «Переполнение» обнуляет значение на входе «Степень (N)» пользовательского составного блока «2 в степени N».
Ниже представлена диаграмма для демонстрации данного примера:

Проведем моделирование работы диаграммы в симуляторе.
Установим значение 1 на входе «EN»:

Далее проведём несколько циклов симуляции:


Приостановим выполнение блока “2 в степени N”, установив на входе “EN” блока значение равное 0.

Проведем несколько шагов симуляции:


Обратите внимание, выходы составного блока «2 в степени N» , сохранили значение, установленное на шаге 3.
Возобновим выполнение блока «2 в степени N», установив на входе «EN» блока значение равное 1.

Продолжим симуляцию диаграммы:

Значение на выходах составного блока «2 в степени N» соответствуют подаваемому на вход.


