S-функции и генерация кода

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

  • Представляйте пользовательские алгоритмы

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

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

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

  • Проверьте код, сгенерированный для подсистемы как часть симуляции Simulink

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

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

Эта тема принимает, что вы изучаете следующие концепции:

  • Уровень 2 S-функции

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

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

Примечания

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

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

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

  1. “I не обеспокоена КПД. Я хочу записать, что одна версия моего алгоритма и иметь его работает в Simulink и продуктах генератора кода автоматически”.

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

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

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

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

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

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

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

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

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

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

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

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

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

Примечание

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

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

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

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

Для получения дополнительной информации смотрите, Интегрируйте Функции C Используя Legacy Code Tool (Simulink) и смотрите Вызовы Импорта Внешнего Кода в Сгенерированный код с Legacy Code Tool.

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

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

  • Невстроенные S-функции требуют C или исходного кода S-функции C++ MEX (sfunctionC или sfunction.cpp).

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

    Примечание

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

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

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

Инструкции для Записи S-функций той Генерации кода Поддержки

  • Можно использовать MEX C/C++, язык MATLAB и S-функции Фортрана MEX с генерацией кода.

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

  • Чтобы автоматически сгенерировать полностью встроенную S-функцию MEX C для вызова наследия или пользовательского кода, используйте Legacy Code Tool. Для получения дополнительной информации смотрите, Интегрируйте Функции C Используя Legacy Code Tool (Simulink) и смотрите Вызовы Импорта Внешнего Кода в Сгенерированный код с Legacy Code Tool (Simulink Coder).

  • Если КПД кода не является переопределяющим фактором, например, если вы - быстрое прототипирование, можно выбрать not to inline a C/C ++ MEX S-function. Для получения дополнительной информации смотрите Запись Невстроенная S-функция.

Похожие темы