Документация Engee

Практическая работа с архитектурой моделей в Engee

Страница в процессе разработки.

Теория построения архитектуры моделей в Engee описана в статье. Рекомендуем ознакомиться с ней прежде, чем приступать к изучению текущей статьи.

Подсистемы и подмодели служат для группировки блоков. Подсистему можно рассматривать как функцию, а подмодель — как подключаемый файл. В Engee они реализованы следующим образом:

Виды подсистем Подмодели Другие блоки реализации поведения подсистемы

Классическая

Блок Subsystem classic subsystem

Блок Model (подмодель)

Блок Chart

Срабатывающие по условию

Активируемая (Enabled Subsystem) enabled subsystem

Триггируемая (Triggered Subsystem) triggered subsystem

Триггируемая и активируемая (Triggered & Enabled Subsystem) triggered enabled subsystem

Сбрасываемая (Resettable Subsystem) resettable subsystem

Function-Call (вызов функции) function call subsystem

Логики управления

Action

Многократного выполнения (вычислительных циклов)

For Each

For Iterator

Для ознакомления с примером реализации различных подсистем перейдите по ссылке.
Любая подсистема Engee может быть настроена с помощью масок (подробнее читайте здесь).

Классическая подсистема (Subsystem)

Классическая подсистема classic subsystem — это блок Subsystem, используемый для разделения модели на модули без дополнительных условий или необходимости управления внешним сигналом.

Когда использовать классическую подсистему:

  • Для упрощения крупных моделей путем разбиения их на более мелкие модули;

  • Для улучшения структуризации и читабельности модели;

  • Для переноса готовых модулей между моделями (копирование подсистем).

Подробнее о классической подсистеме

Блок Subsystem содержит подмножество блоков внутри модели или системы и может быть невиртуальной или виртуальной подсистемой:

  • Невиртуальная подсистема выполняется как единое целое и может быть настроена на выполнение только при определенных событиях.

  • Виртуальная подсистема не выполняется как единое целое и не зависит от событий. Такая подсистема помогает сделать модель более понятной, не влияя на ее работу.

Чтобы переключить виртуальную подсистему в невиртуальную, установите параметр Treat as atomic unit в значение true.

Классическая подсистема имеет следующие особенности:

  • Не является управляемой подсистемой;

  • Позволяет создавать иерархическую структуру моделей, где одна подсистема может содержать другую;

  • Не может быть сохранена как отдельный файл или подсистема. Для сохранения подсистемы как отдельной модели используется блок Model (подмодель);

  • Не влияет на функционал и логику работу модели.

Как использовать классическую подсистему:

  • Добавить блок Subsystem на холст и добавить желаемые блоки в подсистему;

    или

  • Объединить блоки в подсистему комбинацией клавиш Shift+ЛКМ и выбрать Подсистема:

classic subsystem

Срабатывающие по условию

Активируемая подсистема (Enabled Subsystem)

Активируемая подсистема enabled subsystem — это тип блока Subsystem, выполнение которого управляется внешним сигналом. Активируемая подсистема выполняется один раз на каждом основном временном шаге, пока управляющий сигнал имеет положительное значение.

Когда использовать активируемую подсистему:

  • Для выполнения операций, которые зависят от внешних условий или сигналов.

  • Для реализации сложной логики управления, где исполнение модели необходимо только при выполнении определенных условий.

Подробнее об активируемой подсистеме

Активируемая подсистема имеет следующие особенности:

  • Является управляемой подсистемой;

  • Блок Enable добавляет внешний сигнал для управления выполнением подсистемы;

  • Управляющий сигнал может быть скаляром или вектором:

    • Если скалярное значение больше нуля, то подсистема выполняется;

    • Если хотя бы одно из значений вектора больше нуля, то подсистема выполняется;

  • Если сигнал управления пересекает ноль во время меньшего временного шага, то подсистема не включается и не отключается до следующего основного временного шага.

Как использовать активируемую подсистему:

  • Добавить блок Subsystem на холст и добавить блок Enable в подсистему. Если Enable используется на корневом уровне модели на который ссылается блок Model, то требуется выполнить следующее:

    • Для многоскоростных моделей установите для решателя однозадачный режим.

    • Для моделей с фиксированным размером шага хотя бы один блок в модели должен работать с заданной скоростью фиксированного размера шага

    или

  • Объединить нужные блоки в подсистему комбинацией клавиш Shift+ЛКМ и выбрать Активируемая подсистема:

    enabled subsystem 1

    В случае объединения в активируемую подсистему с помощью комбинации клавиш, блок Enable будет добавлен автоматически.

Триггируемая (Triggered Subsystem)

Триггируемая подсистема triggered subsystem — это тип блока Subsystem, выполнение которого инициируется внешним сигналом триггера. Триггируемая подсистема будет выполняться один раз на каждом шаге, когда значение управляющего сигнала изменяется указанным способом.

Подробнее о триггируемой подсистеме

Триггируемая подсистема имеет следующие особенности:

  • Является управляемой подсистемой;

  • Блок Trigger добавляет внешний сигнал для управления выполнением подсистемы;

  • В отличие от активируемой подсистемы, которая выполняется при положительном значении управляющего сигнала, триггируемая подсистема удерживает свои выходные параметры на последнем значении между триггерами;

  • Состояния дискретных блоков внутри подсистемы сохраняются между триггерами.

Когда использовать триггируемую подсистему:

  • Для выполнения операций, которые должны запускаться при определенных событиях;

  • Для реализации систем, где определенные действия должны выполняться в ответ на прерывания или другие асинхронные события;

  • Для реализации задач, которые должны выполняться с заданной периодичностью, определяемой внешним сигналом триггера.

Как использовать триггируемую подсистему:

  • Добавить блок Subsystem на холст и добавить блок Trigger в подсистему;

    или

  • Объединить нужные блоки в подсистему комбинацией клавиш Shift+ЛКМ и выбрать Триггируемая подсистема:

    triggered subsystem 1

    В случае объединения в триггируемую подсистему с помощью комбинации клавиш, блок Trigger будет добавлен автоматически.

Триггируемая и активируемая (Triggered & Enabled Subsystem)

Триггируемая и активируемая подсистема triggered enabled subsystem — это объединение функционала двух подсистем (триггируемую и активируемую) в одну подсистему. Такая подсистема будет выполняться только тогда, когда управляющий сигнал активации имеет положительное значение и происходит событие триггера.

Когда использовать триггируемую и активируемую подсистему:

  • Для выполнения операций, которые зависят как от активации, так и от триггерного события;

  • Для реализации систем, в которых подсистема выполняется только тогда, когда оба условия истинны (сигналы с блоков Trigger и Enable).

  • Для реализации сложной логики управления, где требуется активация при определенных условиях и выполнение при триггерном событии.

Подробнее об триггируемой и активируемой подсистеме
Блок Trigger может быть добавлен к блоку Enable для получения триггируемой и активируемой подсистемы.

Триггируемая и активируемая подсистема имеет следующие особенности:

  • Является управляемой подсистемой;

  • Выполнение подсистемы управляется одновременно двумя внешними сигналами: сигналом триггера и сигналом активации;

  • Подсистема должна быть активирована положительным значением скалярного или векторного сигнала. Если скалярное значение больше нуля или любое из значений вектора больше нуля, то подсистема активируется.

  • Подсистема выполняется один раз на каждом шаге, когда значение управляющего сигнала изменяется указанным образом. Блок Trigger управляет выполнением подсистемы.

  • Подсистема удерживает свои выходные параметры на последнем значении между триггерами.

  • Состояния дискретных блоков внутри подсистемы сохраняются между триггерами.

Как использовать триггируемую и активируемую подсистему:

  • Добавить блок Subsystem на холст и добавить блоки Trigger и Enable в подсистему;

    или

  • Объединить нужные блоки в подсистему комбинацией клавиш Shift+ЛКМ и выбрать Триггируемая и активируемая подсистема:

    triggered enabled subsystem 1

    В случае объединения в триггируемую и активируемую подсистемы с помощью комбинации клавиш, блоки Trigger и Enable будут добавлены автоматически.

Сбрасываемая подсистема (Resettable Subsystem)

Сбрасываемая подсистема resettable subsystem — это тип блока Subsystem, состояние блоков которого могут быть сброшены внешним триггером. Эта подсистема выполняется на каждом временном шаге, но состояния всех блоков внутри нее сбрасываются к их начальному состоянию, когда на порту Reset происходит триггерное событие.

Когда использовать сбрасываемую подсистему:

  • Для выполнения операций, которые требуют сброса состояний всех блоков внутри подсистемы при определенных условиях;

  • Для сброса подсистемы к начальному состоянию в ответ на внешние события (например, перезапуск системы или ошибка);

  • Для управления состоянием системы, обеспечивая сброс подсистемы в определенные моменты времени.

Подробнее об сбрасываемой подсистеме

Сбрасываемая подсистема имеет следующие особенности:

  • Является управляемой подсистемой;

  • Блок Reset добавляет внешний сигнал для управления выполнением подсистемы;

  • Состояния всех блоков внутри подсистемы сбрасываются к начальному состоянию при срабатывании триггера на порту Reset;

  • Подсистема выполняется на каждом временном шаге, но сбрасывает состояния блоков только при условии срабатывания триггера на порту Reset;

  • Аналогично поведению сброса блоков с портами Reset, за исключением того, что сбрасываемая подсистема сбрасывает состояния всех блоков внутри себя.

Как использовать сбрасываемую подсистему:

  • Добавить блок Subsystem на холст и добавить блок Reset в подсистему;

    или

  • Объединить нужные блоки в подсистему комбинацией клавиш Shift+ЛКМ и выбрать Сбрасываемая подсистема:

    resettable subsystem 1

    В случае объединения в сбрасываемую подсистему с помощью комбинации клавиш, блок Reset будет добавлен автоматически.

Function-Call (подсистема вызова функции)

Function-Call (подсистема вызова функции) function call subsystem — это тип блока 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 subsystem 1

    В случае объединения в 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 на холст.

  • В настройках блока указать на какую модель будет ссылаться подмодель, нажав Выбрать модель.

  • Для появления входных/выходных портов у блока Model добавьте блоки Input и Output в ссылаемую модель и выберите опцию Обновить коннекторы:

    model 1

Для ознакомления с примером реализации подмоделей перейдите по ссылке.

Chart (Диаграмма)

Chart — это графическое представление конечного автомата. Блок Chart используется для моделирования логики управления конечного автомата — математической модели устройства, которая описывает систему с конечным числом состояний (state).

Когда использовать Chart:

  • Для реализации логики конечных автоматов.

  • Для реализации диаграмм состояний и потоковых диаграмм.

  • Для моделирования систем с явной логикой управления и событиями.

  • Для визуального представления состояний и переходов в системе.

  • Для реализации сложных алгоритмов управления.

  • Для реализации конструкций языка Julia с помощью генерации кода.

Подробнее о Chart

Chart имеет следующие особенности:

  • Библиотека состоит из уникальных компонентов:

    stateflow library

  • Можно работать только с теми внутренними переменными, которые были объявлены в меню добавления сигналов (в блоке Chart).

    stateflow settings 3

  • Для появления входных/выходных портов необходимо задать соответствующие локальные переменные.

Как использовать Chart:

  • Добавить блок Chart на холст.

  • Настроить локальные переменные (входные/выходные) для добавления входных/выходных портов блока Chart.

Подробнее о конечных автоматах в Engee читайте здесь.

Полезные ссылки