Практическая работа с архитектурой моделей в Engee
Страница в процессе разработки. |
Теория построения архитектуры моделей в Engee описана в статье. Рекомендуем ознакомиться с ней прежде, чем приступать к изучению текущей статьи. |
Подсистемы и подмодели служат для группировки блоков. Подсистему можно рассматривать как функцию, а подмодель — как подключаемый файл. В Engee они реализованы следующим образом:
Виды подсистем | Подмодели | Другие блоки реализации поведения подсистемы | |
---|---|---|---|
Классическая |
Блок Subsystem |
Блок Model (подмодель) |
Блок Chart |
Срабатывающие по условию |
Активируемая (Enabled Subsystem) Триггируемая (Triggered Subsystem) Триггируемая и активируемая (Triggered & Enabled Subsystem) Сбрасываемая (Resettable Subsystem) Function-Call (вызов функции) |
||
Логики управления |
Action |
||
Многократного выполнения (вычислительных циклов) |
For Each For Iterator |
Для ознакомления с примером реализации различных подсистем перейдите по ссылке. |
Любая подсистема Engee может быть настроена с помощью масок (подробнее читайте здесь). |
Классическая подсистема (Subsystem)
Классическая подсистема — это блок Subsystem, используемый для разделения модели на модули без дополнительных условий или необходимости управления внешним сигналом.
Когда использовать классическую подсистему:
-
Для упрощения крупных моделей путем разбиения их на более мелкие модули;
-
Для улучшения структуризации и читабельности модели;
-
Для переноса готовых модулей между моделями (копирование подсистем).
Подробнее о классической подсистеме
Блок Subsystem содержит подмножество блоков внутри модели или системы и может быть невиртуальной или виртуальной подсистемой:
-
Невиртуальная подсистема выполняется как единое целое и может быть настроена на выполнение только при определенных событиях.
-
Виртуальная подсистема не выполняется как единое целое и не зависит от событий. Такая подсистема помогает сделать модель более понятной, не влияя на ее работу.
Чтобы переключить виртуальную подсистему в невиртуальную, установите параметр Treat as atomic unit в значение true
.
Классическая подсистема имеет следующие особенности:
-
Не является управляемой подсистемой;
-
Позволяет создавать иерархическую структуру моделей, где одна подсистема может содержать другую;
-
Не может быть сохранена как отдельный файл или подсистема. Для сохранения подсистемы как отдельной модели используется блок Model (подмодель);
-
Не влияет на функционал и логику работу модели.
Как использовать классическую подсистему:
-
Добавить блок Subsystem на холст и добавить желаемые блоки в подсистему;
или
-
Объединить блоки в подсистему комбинацией клавиш Shift+ЛКМ и выбрать Подсистема:
Срабатывающие по условию
Активируемая подсистема (Enabled Subsystem)
Активируемая подсистема — это тип блока Subsystem, выполнение которого управляется внешним сигналом. Активируемая подсистема выполняется один раз на каждом основном временном шаге, пока управляющий сигнал имеет положительное значение.
Когда использовать активируемую подсистему:
-
Для выполнения операций, которые зависят от внешних условий или сигналов.
-
Для реализации сложной логики управления, где исполнение модели необходимо только при выполнении определенных условий.
Подробнее об активируемой подсистеме
Активируемая подсистема имеет следующие особенности:
-
Является управляемой подсистемой;
-
Блок Enable добавляет внешний сигнал для управления выполнением подсистемы;
-
Управляющий сигнал может быть скаляром или вектором:
-
Если скалярное значение больше нуля, то подсистема выполняется;
-
Если хотя бы одно из значений вектора больше нуля, то подсистема выполняется;
-
-
Если сигнал управления пересекает ноль во время меньшего временного шага, то подсистема не включается и не отключается до следующего основного временного шага.
Как использовать активируемую подсистему:
-
Добавить блок Subsystem на холст и добавить блок Enable в подсистему. Если Enable используется на корневом уровне модели на который ссылается блок Model, то требуется выполнить следующее:
-
Для многоскоростных моделей установите для решателя однозадачный режим.
-
Для моделей с фиксированным размером шага хотя бы один блок в модели должен работать с заданной скоростью фиксированного размера шага
или
-
-
Объединить нужные блоки в подсистему комбинацией клавиш Shift+ЛКМ и выбрать Активируемая подсистема:
В случае объединения в активируемую подсистему с помощью комбинации клавиш, блок Enable будет добавлен автоматически.
Триггируемая (Triggered Subsystem)
Триггируемая подсистема — это тип блока Subsystem, выполнение которого инициируется внешним сигналом триггера. Триггируемая подсистема будет выполняться один раз на каждом шаге, когда значение управляющего сигнала изменяется указанным способом.
Подробнее о триггируемой подсистеме
Триггируемая подсистема имеет следующие особенности:
-
Является управляемой подсистемой;
-
Блок Trigger добавляет внешний сигнал для управления выполнением подсистемы;
-
В отличие от активируемой подсистемы, которая выполняется при положительном значении управляющего сигнала, триггируемая подсистема удерживает свои выходные параметры на последнем значении между триггерами;
-
Состояния дискретных блоков внутри подсистемы сохраняются между триггерами.
Когда использовать триггируемую подсистему:
-
Для выполнения операций, которые должны запускаться при определенных событиях;
-
Для реализации систем, где определенные действия должны выполняться в ответ на прерывания или другие асинхронные события;
-
Для реализации задач, которые должны выполняться с заданной периодичностью, определяемой внешним сигналом триггера.
Как использовать триггируемую подсистему:
-
Добавить блок Subsystem на холст и добавить блок Trigger в подсистему;
или
-
Объединить нужные блоки в подсистему комбинацией клавиш Shift+ЛКМ и выбрать Триггируемая подсистема:
В случае объединения в триггируемую подсистему с помощью комбинации клавиш, блок Trigger будет добавлен автоматически.
Триггируемая и активируемая (Triggered & Enabled Subsystem)
Триггируемая и активируемая подсистема — это объединение функционала двух подсистем (триггируемую и активируемую) в одну подсистему. Такая подсистема будет выполняться только тогда, когда управляющий сигнал активации имеет положительное значение и происходит событие триггера.
Когда использовать триггируемую и активируемую подсистему:
-
Для выполнения операций, которые зависят как от активации, так и от триггерного события;
-
Для реализации систем, в которых подсистема выполняется только тогда, когда оба условия истинны (сигналы с блоков Trigger и Enable).
-
Для реализации сложной логики управления, где требуется активация при определенных условиях и выполнение при триггерном событии.
Подробнее об триггируемой и активируемой подсистеме
Блок Trigger может быть добавлен к блоку Enable для получения триггируемой и активируемой подсистемы. |
Триггируемая и активируемая подсистема имеет следующие особенности:
-
Является управляемой подсистемой;
-
Выполнение подсистемы управляется одновременно двумя внешними сигналами: сигналом триггера и сигналом активации;
-
Подсистема должна быть активирована положительным значением скалярного или векторного сигнала. Если скалярное значение больше нуля или любое из значений вектора больше нуля, то подсистема активируется.
-
Подсистема выполняется один раз на каждом шаге, когда значение управляющего сигнала изменяется указанным образом. Блок Trigger управляет выполнением подсистемы.
-
Подсистема удерживает свои выходные параметры на последнем значении между триггерами.
-
Состояния дискретных блоков внутри подсистемы сохраняются между триггерами.
Как использовать триггируемую и активируемую подсистему:
-
Добавить блок Subsystem на холст и добавить блоки Trigger и Enable в подсистему;
или
-
Объединить нужные блоки в подсистему комбинацией клавиш Shift+ЛКМ и выбрать Триггируемая и активируемая подсистема:
В случае объединения в триггируемую и активируемую подсистемы с помощью комбинации клавиш, блоки Trigger и Enable будут добавлены автоматически.
Сбрасываемая подсистема (Resettable Subsystem)
Сбрасываемая подсистема — это тип блока Subsystem, состояние блоков которого могут быть сброшены внешним триггером. Эта подсистема выполняется на каждом временном шаге, но состояния всех блоков внутри нее сбрасываются к их начальному состоянию, когда на порту Reset происходит триггерное событие.
Когда использовать сбрасываемую подсистему:
-
Для выполнения операций, которые требуют сброса состояний всех блоков внутри подсистемы при определенных условиях;
-
Для сброса подсистемы к начальному состоянию в ответ на внешние события (например, перезапуск системы или ошибка);
-
Для управления состоянием системы, обеспечивая сброс подсистемы в определенные моменты времени.
Подробнее об сбрасываемой подсистеме
Сбрасываемая подсистема имеет следующие особенности:
-
Является управляемой подсистемой;
-
Блок Reset добавляет внешний сигнал для управления выполнением подсистемы;
-
Состояния всех блоков внутри подсистемы сбрасываются к начальному состоянию при срабатывании триггера на порту Reset;
-
Подсистема выполняется на каждом временном шаге, но сбрасывает состояния блоков только при условии срабатывания триггера на порту Reset;
-
Аналогично поведению сброса блоков с портами Reset, за исключением того, что сбрасываемая подсистема сбрасывает состояния всех блоков внутри себя.
Как использовать сбрасываемую подсистему:
-
Добавить блок Subsystem на холст и добавить блок Reset в подсистему;
или
-
Объединить нужные блоки в подсистему комбинацией клавиш Shift+ЛКМ и выбрать Сбрасываемая подсистема:
В случае объединения в сбрасываемую подсистему с помощью комбинации клавиш, блок Reset будет добавлен автоматически.
Function-Call (подсистема вызова функции)
Function-Call (подсистема вызова функции) — это тип блока Subsystem. Подсистема запускается каждый раз, когда порт управления получает событие вызова функции. Эти события могут поступать от блока Chart, блока Function-Call Generator или блока Engee Function.
Когда использовать Function-Call подсистему:
-
Для создания функциональности, аналогичной процедурам в языках программирования, где выполнение необходимо только при вызове функции.
-
Для реализации сложной логики управления, где определенные действия должны выполняться по запросу.
Подробнее о Function-Call подсистеме
Function-Call подсистема имеет следующие особенности:
-
Является управляемой подсистемой;
-
Блок Trigger с параметром Trigger Type в значении
function-call
превращается в блок Function и добавляет внешний сигнал для управления выполнением подсистемы; -
Подсистема выполняется только при получении события вызова функции на порту управления;
-
Вызов подсистемы инициирует выполнение всех блоков внутри нее в заданном порядке, аналогично функции в процедурном языке программирования.
Как использовать Function-Call подсистему:
-
Добавить блок Subsystem на холст и добавить блок Trigger в подсистему. Установить значение параметра Trigger Type в
function-call
. Блок Trigger сменит вид на Function.или
-
Объединить нужные блоки в подсистему комбинацией клавиш Shift+ЛКМ и выбрать Function-Call подсистема:
В случае объединения в Function-Call подсистему с помощью комбинации клавиш блок Function будет добавлен автоматически.
Логика управления
Action (действие)
Action подсистема — это подсистема, выполнение которой контролируется сигналом действия блока Action Port. Подсистема используется в моделях, содержащих блоки If и Switch Case.
Когда использовать Action подсистему:
-
Для реализации моделей с логикой If и Switch-Case;
-
Для реализации условного выполнения частей модели на основе сигналов действия (с блока Action Port);
-
Для создания сложной логики ветвления, где выполнение блоков зависит от условий, определяемых внешними сигналами.
Подробнее об Action подсистеме
Action подсистема имеет следующие особенности:
-
Является управляемой подсистемой;
-
Блок If реализует логику If-Else для управления выполнением Action Subsystem;
-
Блок Switch Case реализует логику переключения для управления выполнением Action Subsystem;
-
Сигнал действия управляет выполнением блоков внутри подсистемы, аналогично конструкциям If и Switch-Case в языках программирования.
Как использовать Action подсистему:
-
Добавить блок Subsystem на холст и добавить блок Action Port в подсистему. Блок добавляет в подсистему внешний входной порт Action.
Многократное выполнение
For Each (для каждого элемента)
For Each подсистема — это подсистема, которая позволяет обрабатывать каждый элемент входного сигнала. Управляющим блоком для такой подсистемы является блок For Each.
Когда использовать For Each подсистему:
-
Для обработки входных сигналов для каждого элемента, например, в задачах фильтрации или преобразования данных;
-
Для выполнения параллельных вычислений над элементами или подмассивами входных сигналов;
-
Для реализации сложной логики обработки, требующей отдельного учета состояний для каждого элемента данных.
Подробнее о For Each подсистеме
For Each подсистема имеет следующие особенности:
-
Является управляемой подсистемой;
-
Подсистема обрабатывает каждый элемент входных сигналов;
-
Каждый блок внутри подсистемы поддерживает отдельный набор состояний для каждого элемента или подмассива, который он обрабатывает;
-
По мере обработки элементов или подмассивов, подсистема объединяет результаты для формирования выходных сигналов;
-
Блок позволяет формировать индексы для входных данных и выдавать их как порт.
Как использовать For Each подсистему:
-
Добавить блок Subsystem на холст и добавить блок For Each в подсистему.
For Iterator (итеративная подсистема)
For Iterator подсистема — это итеративная подсистема с программируемой логикой For. Представляет собой подсистему, которая повторяет выполнение в течение текущего временного шага до тех пор, пока переменная итерации не превысит заданный предел итерации. Это позволяет реализовать логику, эквивалентную циклу For в Engee с помощью блока For Iterator.
Когда использовать итеративную подсистему:
-
В моделях, где необходимо накопление или суммирование данных в течение одного временного шага;
-
Для реализации сложных алгоритмов обработки данных, требующих многократного выполнения одной и той же операции;
-
В задачах, требующих выполнения многократных вычислений над элементами массива данных.
Подробнее о For Iterator подсистеме
Итеративная подсистема имеет следующие особенности:
-
Является управляемой подсистемой;
-
Подсистема выполняется повторно в течение текущего временного шага на основе переменной итерации;
-
Блок For Iterator управляет количеством итераций (параметр Iteration limit), аналогично циклу For;
-
Выход блока For Iterator не может быть сигналом вызова функции, и Engee выдаст ошибку при обновлении модели, если это условие нарушается.
Как использовать итеративную подсистему:
-
Добавить блок Subsystem на холст и добавить блок For Iterator в подсистему.
-
Включите параметр Show iteration variable для появления выходного порта. Включите параметр Set next i (iteration variable externally) для появления входного порта. Определите количество итераций подсистемы в параметре Iteration limit. С помощью параметра Index mode укажите начальный номер итерации.
Model (подмодель)
Model — это блок, который ссылается на отдельный файл модели. Его можно встраивать в другие модели с помощью блока Model.
Когда использовать подмодель:
-
Для создания иерархии системной модели;
-
Для повторного использования и распространения модулей между проектами;
-
Для разработки сложных систем с множеством взаимосвязанных компонентов;
-
Для разделения проекта на независимые части, которые могут разрабатываться и тестироваться отдельно.
Подробнее о подмодели
Подмодель имеет следующие особенности:
-
В отличие от классической подсистемы, подмодель уже должна находиться в файловой системе по пути поиска, чтобы ее можно было использовать в других моделях;
-
Отображает порты ввода и вывода, соответствующие портам ввода и вывода верхнего уровня подмодели. Эти порты позволяют подключать подмодель к другим блокам родительской модели;
-
Подмодель может ссылаться на другую подмодель и поддерживает многоуровневое вложение любых подсистем и других подмоделей;
|
Как использовать подмодель:
-
Добавить блок Model на холст.
-
В настройках блока указать на какую модель будет ссылаться подмодель, нажав Выбрать модель.
-
Для появления входных/выходных портов у блока Model добавьте блоки Input и Output в ссылаемую модель и выберите опцию Обновить коннекторы:
Для ознакомления с примером реализации подмоделей перейдите по ссылке. |
Chart (Диаграмма)
Chart — это графическое представление конечного автомата. Блок Chart используется для моделирования логики управления конечного автомата — математической модели устройства, которая описывает систему с конечным числом состояний (state).
Когда использовать Chart:
-
Для реализации логики конечных автоматов.
-
Для реализации диаграмм состояний и потоковых диаграмм.
-
Для моделирования систем с явной логикой управления и событиями.
-
Для визуального представления состояний и переходов в системе.
-
Для реализации сложных алгоритмов управления.
-
Для реализации конструкций языка Julia с помощью генерации кода.
Подробнее о Chart
Chart имеет следующие особенности:
-
Библиотека состоит из уникальных компонентов:
-
Можно работать только с теми внутренними переменными, которые были объявлены в меню добавления сигналов (в блоке Chart).
-
Для появления входных/выходных портов необходимо задать соответствующие локальные переменные.
Как использовать Chart:
-
Добавить блок Chart на холст.
-
Настроить локальные переменные (входные/выходные) для добавления входных/выходных портов блока Chart.
Подробнее о конечных автоматах в Engee читайте здесь. |