Составной блок
Классификация | Графическое обозначение |
---|---|
Наименование: Составной блок Группа: Составные блоки Версия CannyLab: с 2.0 |
Внешний вид функционального блока: Иконка функционального блока: |
Общее описание
Специальный элемент функциональной диаграммы, который предоставляет пользователю возможность инкапсуляции частей алгоритма общей функциональной диаграммы путем создания собственного функционального блока - контейнера для вложенной в него функциональной диаграммы. Внутренняя логика работы составного блока задается пользователем в виде функциональной диаграммы, аналогичной диаграмме верхнего, «корневого» уровня, за исключением возможности непосредственного доступа к регистрам контроллера и именованным константам.
Для составного блока вместо «Регистра записи» и «Регистра чтения», применяются вход и выход составного блока. Максимальное количество входов или выходов составного блока ограничено размерами рабочего поля диаграммы. Приблизительно, количество входов/выходов может достигать ~2500 штук, при этом за одну команду можно добавить или удалить не более 1000 входов/выходов.
Составной блок может не иметь ни одного входа, но должен иметь минимум один выход.
Допускается многоуровневое вложение составных блоков друг в друга.
В функциональной диаграмме составного блока не допускается применение элементов: «Регистр записи», «Регистр чтения», а также «Именованная константа».
Размещение в пространстве функциональной диаграммы нескольких функциональных блоков имеющих одинаковое имя, но при этом разные функциональные диаграммы приведет к появлению ошибки.
Особенности <
По умолчанию составной блок не имеет управляющего входа и всегда исполняется, наряду с элементарыми функциональными блоками. Добавление составному блоку управляющего входа одного из двух типов - «EN» (ENABLE) или «nRST» (negative RESET), позволяет запускать либо приостанавливать его работу в процессе исполенния диаграммы контроллером.
При этом, при подаче на управляющий вход «EN» значений отличного от «0» составной блок исполняется в нормальном режиме. При подаче на управляющий вход «EN» значения «0» исполнение составного блока приостанавливается, с сохранением его внутреннего состояния и значений его выходов. Общее время исполенния диаграммы сокращается.
При этом, при подаче на управляющий вход «nRST» значений отличного от «0» составной блок исполняется в нормальном режиме. При подаче на управляющий вход «nRST» значения «0» исполнение составного блока приостанавливается, со сбросом его внутреннего состояния и значений его выходов. Общее время исполенния диаграммы сокращается.
Примеры <
Пример 1. Демонстрация работы пользовательского составного блока «Выбрать большее число»:
В качестве примера рассмотрим реализацию пользовательского составного блока, «Выбрать большее число». Данный блок имеет два числовых входа: «Значение 1» и «Значение 2», на выходе блока устанавливается наибольшее значение из поступивших на оба входа. В случае равенства значений, поступивших на входы на выходе составного блока устанавливается значение, поступившее на вход «Значение 2».
Пример 2. Демонстрация работы пользовательского составного блока с входом “EN”
В качестве примера рассмотрим реализацию пользовательского составного блока, «2 в степени N». На вход блока «Степень (N)» поступает значение степени, в которую необходимо установить 2. На выходе «2^N» представлен результат возведения в степень, максимальное значение 32768. В случае превышения значения на выходе Выход «2^N», на выходе «Переполнение» устанавливается «1». У блока «2 в степени N» добавлен вход «EN», в целях демонстрации его работы.
Внутренняя диаграмма составного блока «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» соответствуют подаваемому на вход.