exponenta event banner

Повторное использование функций с помощью атомных блоков

Атомарный блок - это графический объект, который помогает инкапсулировать графическую таблицу истинности, функции MATLAB ® и Simulink ® в отдельное пространство имен. Атомарные коробки поддерживаются только в диаграммах Stateflow ® в моделях Simulink. Атомные коробки допускают:

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

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

  • Простота разработки команды для людей, работающих над различными частями одной диаграммы

  • Ручная проверка сгенерированного кода для определенной функции в диаграмме

Атомная коробка выглядит непрозрачной и содержит метку Atomic в левом верхнем углу. При использовании связанного атомарного поля из библиотеки в левом верхнем углу появляется метка Связь (Link).

Пример атомарного ящика

В этом примере показано, как использовать связанный атомарный ящик для повторного использования графической функции в нескольких диаграммах и моделях.

Функция GetTime определяется в диаграмме в библиотечной модели sf_timer_utils_lib. Графическая функция возвращает время моделирования в диаграммах C, где эквивалентная функция MATLAB ®getSimulationTime недоступен.

Модель sf_timer_function_calls состоит из двух диаграмм с аналогичной структурой. Каждая диаграмма содержит пару состояний (A и B) и атомную коробку (Time), связанный из диаграммы библиотеки. Действие записи в состоянии A вызывает функцию GetTime и сохраняет его значение как t0. Условие, охраняющее переход от A кому B снова вызывает функцию и сравнивает ее выходные данные с параметром T.

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

Преимущества использования атомных коробок

Атомарные боксы объединяют функциональные возможности обычных боксов и атомных подшаблонов. Атомные коробки:

  • Улучшение организации и четкости сложных диаграмм.

  • Поддержка использования в качестве ссылок на библиотеки.

  • Поддержка создания многократно используемого кода.

  • Разрешить отображение входов, выходов, параметров, памяти хранения данных и входных событий.

Атомарные ящики содержат только функции. Они не могут содержать состояния. Добавление состояния в атомарный ящик приводит к ошибке времени компиляции.

Чтобы вызвать функцию, которая находится в атомарном ящике из расположения за атомарным ящиком, используйте точечную нотацию, чтобы указать полный путь:

atomic_box_name.function_name
Использование полного пути для вызова функции:

  • Удаление зависимости от функции в связанном атомарном поле.

  • Позволяет избежать загрязнения глобального пространства имен.

  • Не влияет на эффективность генерируемого кода.

Создание атомарного ящика

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

Преобразование обычного ящика в атомарный

Чтобы создать контейнер для функций, позволяющий ускорить отладку и генерацию кода, преобразуйте существующий ящик в атомарный. На диаграмме щелкните правой кнопкой мыши нормальное поле и выберите «Группа и подшаблон» > «Атомарный подшаг». Метка Атомарный (Atomic) появится в левом верхнем углу поля.

Процесс преобразования предоставляет атомарному ящику собственную копию каждого объекта данных, к которому он обращается на диаграмме. Локальные данные копируются как память хранилища данных. Объем других данных, включая входные и выходные данные, не изменяется.

Примечание

Если поле содержит какие-либо состояния или сообщения, его нельзя преобразовать в атомарное поле.

Связывание атомарного ящика из библиотеки

Чтобы создать коллекцию функций для повторного использования в нескольких диаграммах и моделях, создайте связь из библиотечной модели. Скопируйте диаграмму в библиотечной модели и вставьте ее в диаграмму в другой модели. Если библиотечная диаграмма содержит только функции и не содержит состояний, она отображается в виде связанного атомарного поля с меткой Связь (Link) в левом верхнем углу.

Этот метод моделирования сводит к минимуму ведение многократно используемых функций. При изменении атомарного поля в библиотеке изменения распространяются на ссылки во всех диаграммах и моделях.

Если библиотечная диаграмма содержит какие-либо состояния, то она отображается на диаграмме как связанная атомарная вложенная диаграмма. Дополнительные сведения см. в разделе Создание повторно используемых подкомпонентов с помощью атомных субчарт.

Преобразование атомарного ящика в обычный ящик

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

  1. Если атомарным полем является ссылка на библиотеку, щелкните ее правой кнопкой мыши и выберите «Связь с библиотекой» > «Отключить связь».

  2. Чтобы преобразовать атомарный прямоугольник в вложенный прямоугольник, щелкните его правой кнопкой мыши и снимите флажок «Группа и подшаблон» > «Атомарный подшаблон».

  3. Чтобы преобразовать подшаблон обратно в обычный, щелкните его правой кнопкой мыши и снимите флажок «Группа и подшаблон» > «Подшаблон».

  4. При необходимости измените порядок графических объектов на диаграмме.

Нельзя преобразовать атомарный ящик в обычный, если:

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

    • 3

    • data2(3)

    • data2 + 3

  • Оба этих условия верны:

    • Атомарный блок содержит функции MATLAB или функции таблицы истинности, использующие MATLAB в качестве языка действий.

    • Атомарное поле не сопоставляет каждую переменную с переменной с тем же именем в главной диаграмме.

Когда использовать атомарные ящики

Функции отладки пошагово

Предположим, что требуется проверить последовательность изменений в библиотеке функций. Функции являются частью диаграммы, содержащей множество состояний или нескольких уровней иерархии, поэтому перекомпиляция всей диаграммы может занять длительное время. При определении функций в атомарном поле повторная компиляция выполняется только для поля, а не для всей диаграммы. Дополнительные сведения см. в разделе Сокращение времени компиляции диаграммы.

Повторное использование функций

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

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

  • Свяжите библиотечную диаграмму как атомарную рамку в каждой диаграмме модели.

Модели, использующие эти функции, могут отображаться в верхней модели в виде ссылочных блоков. При экспорте функций для каждой модели верхнего уровня можно использовать только один экземпляр этого ссылочного блока. Дополнительные сведения см. в разделе Ссылочные требования и ограничения модели (Simulink).

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

Разработка диаграмм, используемых несколькими людьми

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

Проверка сгенерированного кода

Предположим, что код, созданный Simulink Coder™ или Embedded Coder ®, необходимо проверить вручную для определенной функции. Можно указать, что код атомарного поля отображается в отдельном файле, чтобы избежать поиска по несвязанному коду. Дополнительные сведения см. в разделе Создание кода из атомных субчартов.

Связанные темы