Дизайн интерфейса

Почему интерфейсные определения важны

Задавание “интерфейса” компонента программного обеспечения, такого как C или функция MATLAB® кода или подсистема Simulink®, является ключевым первым шагом, прежде чем другие смогут использовать его по этим причинам:

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

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

  • Изменение интерфейса между компонентами является дорогим. Это требует изменений по крайней мере в двух компонентах (источник и любые приемники) и к любым тестовым обвязкам. Это также делает все предыдущие версии тех компонентов несовместимыми с текущими и будущими версиями.

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

Рекомендации для дизайна интерфейса

Предложения для определения интерфейсов компонентов для нового проекта:

  • Основывайте контуры компонентов на те из соответствующих действительных систем. Это особенно полезно, когда модель содержит:

    • И физический (объект и среда) и системы управления

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

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

  • Рассмотрите будущее повторное использование компонента.

  • Рассмотрите использование соглашения о присвоении имен сигнала.

  • Используйте объекты данных для:

    • Определение интерфейсов компонента

    • Точное управление атрибутами данных

  • Упростите дизайн интерфейса путем группировки сигналов в шины. Шины сигнала хорошо подходят для использования на высоком уровне моделей, где компоненты часто имеют большое количество сигналов, входящих и, и не используют все доступные сигналы. Используя шины может упростить изменение интерфейса до компонента. Например, если необходимо добавить или удалить сигналы, используемые компонентом, может быть более просто изменить шину, чем добавить или удалить импорт или выходные порты к тому компоненту. Однако использование шины, которая пересекает контуры модели - ссылки, требует использования объекта шины.

    Лучшые практики для использования Simulink соединяют шиной объекты шины и сигналы:

    • Сделайте шины виртуальными, за исключением контуров компонента модели - ссылки.

    • Используйте невиртуальные шины при определении интерфейсов между компонентами. Однако это требует соединения шины с объектом шины. Соедините шиной объекты, полностью задают свойства сигналов на шине, давая однозначное интерфейсное определение.

      Включайте объекты шины в словарь данных или сохраните объекты шины как .mat или файл .m в порядке разместить их при управлении версиями.

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

    • Убедитесь, что интерфейс задает точно, что использует компонент.

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

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

    • К сигналам пакета или параметрам в структуры, которые соответствуют определению типа struct, которое задает ваш внешний код С, импортируйте тип, когда шина возражает и использует объект в качестве типа данных для сигналов шины и структур MATLAB. Чтобы создать объект, используйте функцию Simulink.importExternalCTypes.

Разделение данных

Явным образом управляйте осциллографом данных для ваших компонентов. Некоторые методы:

  • Глобальные параметры — общий подход в автомобильном мире является к абсолютно отдельному проблемой устройства хранения данных параметра от образцового устройства хранения данных. Параметры для модели прибывают из базы данных калибровочных данных, и определенный калибровочный используемый файл становится частью настройки. Калибровочные данные обработаны как глобальные данные и находятся в основном рабочем пространстве MATLAB. Можно переместить данные о базовом рабочем пространстве на словарь данных для большего количества управления.

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

    Методы для того, чтобы хранить локальные данные о параметре включают:

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

    • С Моделью - ссылкой можно использовать рабочие пространства модели.

    • Используйте файлы параметра (.m или .mat) и коллбэки отдельных моделей Simulink (например, функция preload).

      Можно также автоматически загрузить требуемые данные с помощью ярлыков проекта.

    • Рабочие области маски, с или без использования функций инициализации маски.

    • Для подсистем можно управлять осциллографом данных для подсистемы с помощью Параметров Подсистемы, диалогового окна Permit Hierarchical Resolution.

Сконфигурируйте интерфейс данных для компонента

Используете ли вы модели, на которые ссылаются, или подсистемы, чтобы повредить большую систему на компоненты, компоненты могут обмениваться данными сигнала через блоки Inport и Outport. Можно явным образом сконфигурировать атрибуты проекта (такие как тип данных и числовая сложность) интерфейса, чтобы предотвратить ошибки моделирования и сделать интеграцию компонентов легче.

После того, как вы создадите блоки Inport и Outport, можно использовать Model Data Editor и интерфейсное отображение, чтобы сконфигурировать атрибуты проекта (такие как тип данных и числовая сложность) блоков. Используйте этот метод, чтобы просмотреть интерфейс компонента в целом целиком и проследить части интерфейса к точкам использования во внутреннем алгоритме блока. Можно также использовать этот метод, чтобы сконфигурировать интерфейс компонента, прежде чем вы разработаете внутренний алгоритм, в этом случае компонент содержит несвязанные блоки Inport и Outport.

Модель sldemo_fuelsys_dd в качестве примера содержит два компонента, которые являются моделями, на которые ссылаются:

  • Компонент объекта, sldemo_fuelsys_dd_plant.

  • Компонент контроллера, sldemo_fuelsys_dd_controller.

Используйте Model Data Editor и интерфейсное отображение, чтобы исследовать и сконфигурировать интерфейс компонента объекта.

  1. Откройте компонент объекта.

    sldemo_fuelsys_dd_plant

  2. Выберите Display> Interface.

  3. Выберите View> Model Data Editor.

    По умолчанию, в Model Data Editor, вкладка Inports/Outports выбрана. Каждая строка в таблице представляет блок Inport или Outport. По умолчанию Change view выпадающий список установлен в Design.

    Совет

    Чтобы просмотреть только блоки Inport и Outport на корневом уровне модели (исключением блоков в подсистемах), деактивируйте кнопку Change Scope.

  4. Используйте столбцы в Model Data Editor, чтобы явным образом сконфигурировать атрибуты проекта интерфейса. Например, задайте минимальные и максимальные значения для каждого блока Inport и Outport при помощи столбцов Max и Min.

Чтобы сконфигурировать настройки генерации кода для интерфейса компонента контроллера, в Model Data Editor, устанавливают Change view выпадающий список на Code.

Для получения дополнительной информации об использовании интерфейсного отображения смотрите, что Связи Трассировки Используют Интерфейсное Отображение. Для получения дополнительной информации о Model Data Editor, смотрите Configure Data Properties при помощи Model Data Editor.

Связанные примеры

Больше о