exponenta event banner

S-функции и создание кода

S-функции используются для расширения поддержки Simulink ® для моделирования и создания кода. Например, их можно использовать для:

  • Представление пользовательских алгоритмов

  • Интерфейс существующего внешнего кода с моделью Simulink и сгенерированным кодом

  • Представлять драйверы устройств для взаимодействия с оборудованием

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

  • Проверка кода, созданного для подсистемы в рамках моделирования Simulink

Интерфейс прикладных программ (API) для написания S-функций позволяет реализовать универсальные алгоритмы в среде Simulink с большой гибкостью. Если предполагается использовать S-функции в модели для генерации кода, уровень гибкости может варьироваться. Например, невозможно получить доступ к рабочей области MATLAB ® из S-функции, используемой с генератором кода. В этом разделе поясняются условия использования S-функций. Однако с помощью методов, представленных в этом разделе, можно создать S-функции для большинства приложений, работающих с сгенерированным кодом.

Хотя S-функции обеспечивают универсальное и гибкое решение для реализации сложных алгоритмов в модели, базовый API несет издержки с точки зрения памяти и вычислительных ресурсов. Чаще всего дополнительные ресурсы приемлемы для систем быстрого прототипирования в реальном времени. Однако часто дополнительные ресурсы недоступны во встроенных приложениях реального времени. Вы можете минимизировать требования к памяти и вычислениям, используя технологию компилятора целевого языка, поставляемую вместе с генератором кода для встраивания ваших S-функций. При создании S-функции для существующего внешнего кода рассмотрите возможность использования Legacy Code Tool для создания S-функции и соответствующего файла TLC.

В этом разделе предполагается понимание следующих понятий:

  • Level-2 S-функции

  • Сценарий компилятора целевого языка (TLC)

  • Как генератор кода создает и строит код C/C + +

Примечания

Эта информация предназначена для пользователей генератора кода. Даже если вы в настоящее время не используете генератор кода, следуйте этим рекомендациям при написании S-функций, особенно если вы создаете S-функции общего назначения.

Типы S-функций

Примеры, для которых можно реализовать S-функцию для моделирования и генерации кода:

  1. "Меня не волнует эффективность. Я хочу написать одну версию моего алгоритма и заставить его работать в продуктах Simulink и генератора кода автоматически ".

  2. «Я хочу реализовать высокооптимизированный алгоритм в продуктах Simulink и генератора кода, который выглядит как встроенный блок и генерирует эффективный код».

  3. "У меня много написанного вручную кода, который мне нужен для взаимодействия. Я хочу эффективно вызывать свою функцию из продуктов Simulink и генератора кода ".

Соответственно, предшествующие ситуации соответствуют следующей терминологии MathWorks ®:

  1. Неинлинированная S-функция

  2. Встроенная S-функция

  3. Автоматически генерируемая S-функция для внешнего кода

Неинлинированные S-функции

Неинлинная S-функция - это C или C++ MEX S-функция, которая обрабатывается одинаково механизмом Simulink и генерируется кодом. Как правило, алгоритм реализуется один раз в соответствии с API S-функции. Механизм Simulink и сгенерированный код вызывают подпрограммы S-функции (например, mdlOutputs) во время выполнения модели.

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

Запись неинлинной S-функции не включает в себя TLC-кодирование. Неинлинизированные S-функции - это случай по умолчанию для процесса сборки в том смысле, что после построения MEX S-функции в модели нет дополнительной подготовки перед нажатием клавиш Ctrl + B для построения модели.

Существуют некоторые ограничения в отношении имен и расположений неинлинговых файлов S-функций при создании makefile. См. раздел Запись неинлинированной S-функции.

Встроенные S-функции

Для работы S-функций в среде Simulink создается некоторый служебный код. Когда генератор кода создает код из моделей, содержащих S-функции (без sfunction.tlc ), он встраивает часть этого служебного кода в сгенерированный код. Если требуется оптимизировать код в реальном времени и исключить часть кода накладных расходов, необходимо встроить (или внедрить) S-функции. Это включает запись TLC (sfunction.tlc) файл, который исключает служебный код из созданного кода. Процессы компилятора целевого языка sfunction.tlc файлы для определения того, как встроить алгоритм S-функции в сгенерированный код.

Примечание

Не путайте термин inline с ключевым словом C++ inline. Встроенный означает указание текста вместо вызова общих процедур API S-функции (например, mdlOutputs). Например, когда файл TLC используется для встраивания S-функции, сгенерированный код содержит код C/C + +, который обычно появляется в подпрограммах S-функции и саму S-функцию, которая была удалена из процесса построения.

Полностью встроенная S-функция строит алгоритм (блок) в сгенерированный код способом, неотличимым от встроенного блока. Как правило, полностью встроенная S-функция требует реализации алгоритма дважды: один раз для модели Simulink (C/C + + MEX S-функция) и один раз для генерации кода (файл TLC). Сложность файла TLC зависит от сложности алгоритма и уровня эффективности, которую вы пытаетесь достичь в сгенерированном коде. TLC-файлы отличаются от простых до сложных по структуре. См. раздел Вложение S-функций.

Автоматически созданные S-функции для устаревшего или пользовательского кода

Если в модели необходимо вызвать написанный вручную код C/C + +, рекомендуется использовать инструмент Simulink Legacy Code Tool. Legacy Code Tool может автоматизировать создание полностью встроенной S-функции и соответствующего файла TLC на основе информации, которая регистрируется в структуре данных Legacy Code Tool.

Дополнительные сведения см. в разделах Интеграция функций C с использованием прежнего кода и Импорт вызовов внешнего кода в сгенерированный код с помощью прежнего кода.

Файлы, необходимые для реализации неинлинированных и встроенных S-функций

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

  • Для неинлинных S-функций требуется исходный код C или C++ MEX S-функции (sfunction.c или sfunction.cpp).

  • Полностью встроенные S-функции требуют sfunction.tlc файл. Полностью встроенные S-функции обеспечивают оптимальный код для параметризованной S-функции. Это S-функция, которая работает в определенном режиме в зависимости от фиксированных параметров S-функции, которые не изменяются во время выполнения модели. Для данного режима работы, sfunction.tlc указывает точный код, который создается для реализации алгоритма для этого режима. Например, таблица поиска прямого индекса S-function в записи полностью встроенных S-функций с подпрограммой mdlRTW содержит два режима работы - один для равномерно распределенных x-data и один для неравномерно разнесенных x-data.

    Примечание

    Полностью встроенные S-функции, создаваемые для вызова устаревшего или пользовательского кода C/C + +, также требуют sfunction.tlc , который создается с помощью инструмента Legacy Code Tool.

Полностью встроенные S-функции могут потребовать размещения mdlRTW подпрограмма в файле MEX с S-функцией sfunction.c или sfunction.cpp. mdlRTW подпрограмма позволяет размещать информацию в model.rtw. model.rtw является файлом записи, который определяет модель и который генератор кода вызывает компилятор целевого языка для обработки перед выполнением sfunction.tlc при формировании кода.

Включая mdlRTW процедура полезна, если требуется ввести в файл TLC неперестраиваемые параметры. Такие параметры используются для определения того, какой рабочий режим активен в данном экземпляре S-функции. На основе этой информации файл TLC для S-функции может генерировать высокоэффективный оптимальный код для этого режима работы.

Руководство по написанию S-функций, поддерживающих создание кода

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