Архитектура моделей в Engee
Практические рекомендации по построению архитектуры моделей с использованием конкретных блоков описаны в статье. |
Любую, даже самую сложную модель, можно собрать из отдельных блоков. Однако с ростом их количества неизбежно возникают сложности. Так, если модель состоит из множества блоков, то понять расположение нужных элементов и их взаимодействие становится проблемным. В таких случаях на поддержку и модификацию модели уходит слишком много времени. Поэтому для наглядности и упрощения рекомендуется разделять сложные модели на семантически однородные куски с помощью подсистем.
Подсистема — это блок Subsystem, предназначенный для создания иерархии в модели. Например, с помощью подсистемы можно реализовать модель в которой:
-
20 блоков, описывающих поведение колес, соединены в подсистему «Колеса»;
-
300 блоков, связанных с двигателем, соединены в подсистему «Двигатель»;
-
50 блоков, отвечающих за корпус, соединены в подсистему «Корпус».
Такие объединения создают промежуточный уровень абстракции, где вместо отдельных блоков используются логические объекты. В итоге получим следующую условную модель:
Такой переход на определенные уровни абстракции с помощью подсистем позволяет:
-
Думать в терминах реальных объектов (двигатель, трансмиссия, шасси) вместо сигналов и блоков;
-
Группировать одни подсистемы в другие, более крупные подсистемы, повышая уровень абстракции;
-
Отключать или заменять целые подсистемы одним действием, а не модифицировать блоки вручную.
Это, в свою очередь, формирует целый ряд преимуществ:
-
Раздельная отладка — благодаря подсистемам можно изолировать и тестировать отдельные части модели. Например, сначала убедиться в работоспособности двигателя, а затем проверить, как он взаимодействует с трансмиссией;
-
Логика внутри подсистем — подсистемы теперь не просто набор блоков внутри другого блока. Они становятся объектами со своей логикой: могут реагировать на внешние сигналы, активироваться при определенных условиях (подробнее см. здесь);
-
Использование масок — маски позволяют скрыть сложные внутренние детали подсистем и вынести только важные параметры или настроить дополнительный функционал поверх подсистемы;
-
Гибкость и повторное использование — блоки можно переиспользовать в разных моделях. Также можно экспериментировать со структурами, меняя блоки или их параметры, чтобы оценить результат.
Для создания уровней абстракции в Engee могут применяться не только подсистемы. Подмодели (блок Model) — следующий этап, позволяющий работать с моделями как с отдельными объектами, что позволяет:
-
Внедрять параллельную разработку — при использовании блока Model можно распределить разработку между разными специалистами. Например, один инженер занимается подсистемой «Колеса», а другой — «Двигатель». При этом они не вносят потенциальные ошибки или лишние правки в подсистемы друг друга, отвечая только за свою область интересов. Их изменения можно легко внедрить в «Главную модель», просто обновив блок Model в нужной модели;
-
Версионировать и переиспользовать блоки — блок Model прекрасно подходит для сохранения моделей целиком для дальнейшего переиспользования или интеграции.
Основные этапы создания моделей из подсистем/подмоделей
-
Начальный этап — моделирование из отдельных блоков. Этот подход подходит для небольших моделей, где детализация важнее, чем структура.
-
Переход на подсистемы — модель начинает группироваться в функциональные модули. Например, из 100 блоков делается несколько подсистем: двигатель, трансмиссия, шасси.
-
Использование подмоделей и масок — появляются возможности:
-
1. Переиспользования компонентов.
-
2. Скрытие деталей реализации (маски)/добавление нового функционала.
-
3. Упрощения взаимодействия между модулями (подсистемы или подмодели).
-
-
Завершающий этап — создание общей системы, которая объединяет несколько подмоделей. Это подход к многоуровневому проектированию, характерный для модельно-ориентированного проектирования.
Рекомендации по созданию моделей
Количество блоков |
Старайтесь использовать не более 10 блоков на одном уровне вложенности для сохранения читаемости модели. |
Организация подсистем |
Разделяйте модель на логические узлы: каждый блок подсистемы должен представлять функциональный элемент системы. |
Что выносить в подмодели |
Для сложных компонентов с высокой детализацией используйте подмодели, оставляя подсистемы для группировки функциональных узлов. |
Гибкость и модульность |
Создавайте модель так, чтобы ее можно было легко изменять, заменяя компоненты или модифицируя логику. |
Общие рекомендации:
-
Разбивайте модели на логические части.
-
Используйте маски для скрытия сложных деталей и упрощения взаимодействия.
-
Придерживайтесь иерархического подхода: верхний уровень должен быть простым и логичным.
-
Проверяйте и тестируйте подсистемы на каждом этапе, чтобы убедиться в корректной работе модели.