При создании пользовательского блока необходимо учитывать следующее:
Моделирует ли блок непрерывное или дискретное поведение?
Важна ли производительность моделирования?
Нужно ли создавать код для модели, содержащей пользовательский блок?
В этой таблице показано, как каждый пользовательский тип блока решает эти три проблемы.
Соображения по моделированию
| Пользовательский тип блока | Динамика состояния модели | Производительность моделирования | Создание кода |
|---|---|---|---|
| Интерпретированная функция MATLAB | Нет | Менее быстрый | Не поддерживается |
| Level-2 S-функция MATLAB | Да | Менее быстрый | Требуется файл TLC |
| Функция MATLAB | Нет | Быстро | Поддерживается с исключениями |
| Система MATLAB | Да | Быстро | Поддерживается с исключениями |
| S-функция | Да | Быстро | Требуется файл TLC или поддержка нелинейной S-функции |
| Вызывающий абонент C | Нет | Быстро | Поддержанный |
| Функция C | Да | Быстро | Поддержанный |
| Построитель S-функций | Да | Быстро | Поддержанный |
| Функция симулятора | Да | Быстро | Поддержанный |
| Подсистема | Да | Быстро | Поддержанный |
При детальном проектировании пользовательских блоков необходимо учитывать следующее:
Требуется ли для пользовательского блока несколько портов ввода и вывода?
Каковы методы обратного вызова для взаимодействия с модулем Simulink ® и какие пользовательские блоки позволяют реализовать все или подмножество этих методов обратного вызова?
Насколько важно влияние пользовательского блока на скорость обновления диаграммы Simulink?
Необходимо смоделировать поведение состояния для блока, который требует некоторых или всех своих предыдущих выходов для вычисления своих текущих выходов. Дополнительные сведения см. в разделе Переменные состояния.
| Пользовательский тип блока | Примечания |
|---|---|
| Интерпретированная функция MATLAB, вызывающий абонент C | Не позволяет моделировать поведение состояния. |
| Функция MATLAB, функция C | Позволяет моделировать дискретное состояние с помощью persistent переменные. |
| Level-2 Функция MATLAB ® S | Позволяет моделировать как непрерывное, так и дискретное состояние с помощью ContStates или Dwork методы объекта времени выполнения в сочетании с методами блочного обратного вызова. Для списка поддержанных методов посмотрите, что Методы Отзыва Уровня 2 MATLAB S-Function в Пишут Уровню 2 MATLAB S-Functions. |
| Система MATLAB | Позволяет моделировать поведение дискретного состояния с помощью DiscreteState свойства объекта System в сочетании с методами блочного обратного вызова. Этот блок использует методы System object™ для методов обратного вызова: mdlOutputs (stepImpl, outputImpl), mdlUpdate (updateImpl), mdlInitializeConditions (resetImpl), mdlStart (setupImpl), mdlTerminate (releaseImpl). Дополнительные сведения см. в разделе Что такое системные объекты?. |
| C MEX S-функция, построитель S-функций | Позволяет моделировать как непрерывное, так и дискретное поведение в сочетании с методами блочного обратного вызова. Дополнительные сведения см. в разделе Методы обратного вызова для S-функций C MEX |
| Функция симулятора | Взаимодействует непосредственно с двигателем. Поведение состояния можно моделировать с помощью соответствующих блоков из непрерывной и дискретной библиотек блоков Simulink. Когда несколько вызовов этой функции поступают от разных вызывающих абонентов, значения состояния также являются постоянными между этими вызовами. Дополнительные сведения см. в разделе Вызов функционального блока Simulink из нескольких узлов. |
| Подсистема | Взаимодействует непосредственно с двигателем. Поведение состояния можно моделировать с помощью соответствующих блоков из непрерывной и дискретной библиотек блоков Simulink. |
Для большинства приложений все пользовательские типы блоков обеспечивают удовлетворительную производительность моделирования. Используйте профилировщик Simulink для получения фактической индикации производительности. Дополнительные сведения см. в разделе Как приложение Profiler захватывает данные о производительности.
Двумя категориями индикации производительности являются стоимость интерфейса и стоимость алгоритма. Стоимость интерфейса - это время, необходимое для перемещения данных из модуля Simulink в блок. Стоимость алгоритма - это время, необходимое для выполнения алгоритма, реализуемого блоком.
| Пользовательский тип блока | Примечания |
|---|---|
| Интерпретированная функция MATLAB | Имеет более низкую производительность из-за интерфейса, но имеет ту же стоимость алгоритма, что и функция MATLAB. Когда данные блока (такие как входы и выходы) получают доступ или возвращаются из блока интерпретируемой функции MATLAB, модуль Simulink упаковывает эти данные в массивы MATLAB. Эта упаковка занимает дополнительное время и вызывает временное увеличение памяти во время связи. При передаче больших объемов данных через этот интерфейс, например кадров или массивов, производительность может быть значительно медленной. После преобразования данных модуль выполнения MATLAB выполняет алгоритм. В результате стоимость алгоритма такая же, как для функции MATLAB. |
| Level-2 S-функция MATLAB | Несет те же затраты на алгоритм, что и блок интерпретированной функции MATLAB, но с несколько более высокой стоимостью интерфейса. Поскольку S-функции MATLAB могут обрабатывать несколько входов и выходов, упаковка сложнее, чем для блока интерпретируемой функции MATLAB. Кроме того, механизм Simulink вызывает механизм выполнения MATLAB для каждого реализуемого блочного метода, тогда как блок интерпретируемой функции MATLAB вызывает механизм выполнения MATLAB только для Outputs способ. |
| Функция MATLAB | Выполняет моделирование посредством генерации кода и несет ту же стоимость интерфейса, что и другие встроенные блоки Simulink. Стоимость алгоритма этого блока труднее анализировать из-за реализации блока. В среднем функция для этого блока и функция MATLAB работают примерно с одинаковой скоростью. Если функциональный блок MATLAB имеет код, который использует coder.extrinsic для вызова механизма выполнения MATLAB он несет все расходы, которые несет блок S-функции MATLAB или интерпретируемый функциональный блок MATLAB. Вызов модуля выполнения MATLAB из функционального блока MATLAB приводит к появлению предупреждения, предотвращающего непреднамеренное выполнение этого действия. Для снижения стоимости алгоритма можно отключить отладку для всех функциональных блоков MATLAB. |
| Система MATLAB | В интерпретируемом режиме выполнения производительность аналогична производительности Level-2 MATLAB S-функции, поскольку модель моделирует блок с использованием механизма выполнения MATLAB. В режиме генерации кода производительность аналогична производительности функции MATLAB, поскольку модель моделирует блок с использованием сгенерированного кода. Для получения дополнительной информации см. запись MATLAB Function в этой таблице. |
| Вызывающий абонент C, функция C | Моделирование модели в первый раз с может быть медленнее из-за синтаксического анализа и построения пользовательского кода. Чтобы ускорить моделирование после первой компиляции, в разделе Параметры конфигурации (Configuration parameters) выберите Более быстрые сборки (Faster Builds) для более быстрой компиляции и выберите Более быстрые выполнения (Faster Runs) для более быстрого моделирования. |
| C MEX S-функция | Имитирует через скомпилированный код и несет ту же стоимость интерфейса, что и встроенные блоки Simulink. Стоимость алгоритма зависит от сложности S-функции. |
| Построитель S-функций | Этот блок создает S-функцию только из заданных спецификаций и кода C. Этот блок можно также использовать в качестве оболочки для созданной S-функции в моделях. Стоимость алгоритма этого блока по сравнению с C MEX S-Function возникает только из обертки. |
| Функция симулятора, подсистема | Если блок включен в библиотеку, он не содержит затрат на интерфейс или алгоритм сверх тех, которые обычно возникают, если блок существует в модели как обычная подсистема. Производительность пропорциональна сложности алгоритма, реализуемого в подсистеме. Если подсистема содержится в библиотеке, некоторые затраты возникают, когда Simulink загружает все выгруженные библиотеки при первом обновлении или подготовке диаграммы к моделированию. Если все блоки библиотеки, на которые имеются ссылки, остаются неизменными, Simulink не загружает библиотеку повторно. Компиляция модели выполняется быстрее, чем если бы модель не использовала библиотеки. |
Вам нужна генерация кода, если ваша модель является частью более крупной системы. Не все пользовательские типы блоков поддерживают создание кода с помощью Simulink Coder™.
| Пользовательский тип блока | Примечания |
|---|---|
| Интерпретированная функция MATLAB | Не поддерживает создание кода. |
| Вызывающий абонент C, функция C | Поддерживает создание кода. |
| Level-2 S-функция MATLAB | Генерирует код только при реализации алгоритма с помощью функции TLC. В ускоренном и внешнем моделировании можно выбрать выполнение S-функции в интерпретирующем режиме путем обратного вызова механизма выполнения MATLAB без реализации алгоритма в TLC. Если S-функция MATLAB имеет значение SimViewingDevice, продукт Simulink Coder автоматически пропускает блок во время генерации кода. |
| Функция MATLAB, система MATLAB | Поддерживает создание кода. Однако, если ваш блок вызывает модуль выполнения MATLAB, он будет построен с продуктом Simulink Coder только в том случае, если вызовы модуля выполнения MATLAB не влияют на выходные данные блока. При этом условии продукт Simulink Coder пропускает эти вызовы из сгенерированного кода C. Эта функция позволяет оставлять код визуализации на месте даже при создании встроенного кода. |
| C MEX S-функция, построитель S-функций | Оба варианта поддерживают генерацию кода.
Для получения дополнительной информации см. S-Функции и создание кода (Simulink Coder). |
| Функция симулятора | Поддерживает создание кода. |
| Подсистема | Поддерживает генерацию кода, пока блоки, содержащиеся в подсистеме, поддерживают генерацию кода. Дополнительные сведения см. в разделе Управление созданием функций для подсистем (встроенный кодер) |
Эти типы пользовательских блоков поддерживают несколько портов ввода и вывода.
| Пользовательский тип блока | Примечания |
|---|---|
| Интерпретированная функция MATLAB | Поддерживает только один входной и один выходной порт. |
| Функция MATLAB | Поддерживает несколько портов ввода и вывода, включая сигналы шины. Для получения дополнительной информации см. раздел Как структура входов и выходов интерфейса с сигналами шины. |
| Система MATLAB | Поддерживает несколько портов ввода и вывода, включая сигналы шины. Кроме того, можно изменить количество портов ввода и вывода на основе свойств системных объектов с помощью getNumInputs и getNumOutputs методы. |
| Вызывающий абонент C, функция C | Поддерживает несколько портов ввода и вывода, включая сигналы шины. |
| Level-2 S-функция MATLAB, S-функция C MEX, построитель S-функций | Поддерживает несколько портов ввода и вывода. Кроме того, можно изменить количество портов ввода и вывода на основе пользовательских параметров. C MEX S-Function и S-Function Builder поддерживают сигналы шины. |
| Функция симулятора | Поддерживает несколько портов ввода и вывода, включая сигналы шины. |
| Подсистема | Поддерживает несколько портов ввода и вывода, включая сигналы шины. Кроме того, можно изменить количество портов ввода и вывода на основе пользовательских параметров. Дополнительные сведения см. в разделе Самодифицируемые связанные подсистемы. |
Simulink обновляет схему перед каждым моделированием и по запросу пользователя. Каждый блок вносит некоторые издержки в процесс обновления диаграммы.
| Пользовательский тип блока | Примечания |
|---|---|
| Интерпретированная функция MATLAB | Низкая стоимость обновления диаграммы. |
| Функция MATLAB, вызывающий абонент C, функция C | Моделирование выполняется посредством генерации кода, поэтому эти блоки могут занимать значительное время при первом обновлении. Однако, поскольку генерация кода является инкрементной, Simulink не обновляет блок повторно, если блок и связанные с ним сигналы не изменились. |
| Система MATLAB | Быстрее, чем функция MATLAB, так как не создается код для обновления диаграммы. Поскольку генерация кода является инкрементной, Simulink не обновляет блок повторно, если блок и связанные с ним сигналы не изменились. |
| C MEX S-функция, Level-2 MATLAB S-функция | Несет больше затрат, чем другие блоки Simulink, только если переопределяет методы, выполняемые при обновлении диаграммы. Если эти методы становятся сложными, они могут внести значительный вклад в время, необходимое для обновления диаграммы. Список методов, выполняемых при обновлении диаграммы, см. в представлении процесса в разделе Взаимодействие Simulink Engine с C S-функциями. При обновлении диаграммы Simulink вызывает все соответствующие методы на этапе инициализации модели до, но не включая, mdlStart. |
| Функция симулятора, подсистема | Скорость пропорциональна сложности алгоритма, реализуемого в подсистеме. Если подсистема содержится в библиотеке, некоторые затраты возникают, когда Simulink загружает все выгруженные библиотеки при первом обновлении или подготовке диаграммы к моделированию. Если все блоки библиотеки, на которые имеются ссылки, остаются неизменными, Simulink не загружает библиотеку повторно. Компиляция модели выполняется быстрее, чем если модель не использует библиотеки. |
Блоки Simulink взаимодействуют с механизмом Simulink посредством методов блочного обратного вызова, которые полностью задают поведение блоков (кроме блока Simulink Function). Каждый пользовательский тип блока позволяет реализовать различный набор методов обратного вызова. Сведения о взаимодействии блоков с механизмом Simulink см. в разделе Взаимодействие модуля Simulink с функциями C S. В этой таблице в качестве эквивалентов используются имена S-Function Callback Methods.
| Пользовательский тип блока | Примечания |
|---|---|
| Интерпретируемая функция MATLAB, функция MATLAB, вызывающий абонент C | Все создают mdlOutputs способ вычисления значения выходных сигналов, заданного значением входных сигналов. Нельзя реализовать другие методы обратного вызова, используя один из этих блоков, и, следовательно, нельзя моделировать поведение состояния. |
| Функция C | Позволяет реализовать методы запуска, вывода и завершения обратного вызова. Позволяет моделировать дискретные состояния с постоянными данными. |
| Level-2 S-функция MATLAB | Позволяет реализовать большее подмножество методов обратного вызова, включая методы, которые можно использовать для моделирования непрерывных и дискретных состояний. Для списка поддержанных методов посмотрите, что Методы Отзыва Уровня 2 MATLAB S-Function в Пишут Уровню 2 MATLAB S-Functions. |
| Система MATLAB | Использует методы объекта System для методов обратного вызова: mdlOutputs (stepImpl, outputImpl), mdlUpdate (updateImpl), mdlInitializeConditions (resetImpl), mdlStart (setupImpl), mdlTerminate (releaseImpl). Дополнительные сведения см. в разделе Взаимодействие Simulink Engine с методами системных объектов |
| C MEX S-функция | Позволяет реализовать полный набор методов обратного вызова. |
| Построитель S-функций | Позволяет реализовать mdlOutputs, mdlDerivatives и mdlUpdate. |
| Функция симулятора | Упаковывается как автономная функция. Любой вызывающий абонент этой функции становится частью одного из методов обратного вызова в зависимости от местоположения вызывающего абонента. |
| Подсистема | Взаимодействует непосредственно с двигателем. Поведение состояний можно моделировать с помощью соответствующих блоков из библиотек блоков Simulink непрерывного и дискретного типа. |
S-функции MATLAB и MATLAB для генерации кода имеют некоторые фундаментальные различия.
Продукт Simulink Coder может генерировать код как для S-функций MATLAB, так и для функций MATLAB для генерации кода. Однако для генерации кода для S-функций MATLAB требуется файл компилятора целевого языка (TLC). Функции MATLAB для генерации кода не требуют файла TLC.
S-функции MATLAB могут использовать любую функцию MATLAB, тогда как функции MATLAB для генерации кода являются подмножеством языка MATLAB. Список поддерживаемых функций для генерации кода см. в разделе Функции и объекты, поддерживаемые для генерации кода C/C + +.
S-функции MATLAB могут моделировать дискретную и непрерывную динамику состояния, тогда как функции MATLAB для генерации кода не могут моделировать динамику состояния.
Функциональные возможности любого пользовательского блока можно расширить с помощью обратных вызовов и графики MATLAB.
Блокирующие обратные вызовы выполняют пользовательские действия в определенных точках моделирования. Например, обратный вызов может загрузить данные в рабочую область MATLAB перед моделированием или создать график данных моделирования в конце моделирования. Можно назначить обратные вызовы блоков любому из пользовательских типов блоков. Список доступных обратных вызовов и дополнительные сведения об их использовании см. в разделе Указание блоковых обратных вызовов.
App Designer, графическая среда разработки пользовательского интерфейса MATLAB, предоставляет инструменты для простого создания пользовательских пользовательских интерфейсов. Дополнительные сведения об использовании App Designer см. в разделе Создание приложений.
Вызывающий абонент C | Функция C | Интерпретированная функция MATLAB | Level-2 S-функция MATLAB | Функция MATLAB | Система MATLAB | S-функция | Построитель S-функций | Функция симулятора | Подсистема