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

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

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

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

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

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

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

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

Хотя S-функции обеспечивают общее и гибкое решение для реализации сложных алгоритмов в модели, базовый API несет накладные расходы с точки зрения памяти и вычислительных ресурсов. Чаще всего дополнительные ресурсы приемлемы для систем быстрого прототипирования в реальном времени. Однако часто дополнительные ресурсы недоступны во встраиваемых приложениях в реальном времени. Можно минимизировать требования к памяти и вычислениям с помощью технологии Target Language Compiler, поставляемой с генератором кода, чтобы встроить ваши 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-функция является S-функцией C или C++ MEX, которая обрабатывается идентично механизмом Simulink и сгенерированным кодом. В целом, вы реализуете свой алгоритм один раз согласно S-функции API. Механизм Simulink и сгенерированный код вызывают S-функцию стандартных программ (для примера, mdlOutputs) во время выполнения модели.

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

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

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

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

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

Примечание

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

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

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

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

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

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

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

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

  • Полностью встроенные S-функции требуют sfunction.tlc файл. Полностью встроенные S-функции генерируют оптимальный код для параметризованной S-функции. Это S-функция, которая действует в определенном режиме, зависимом от фиксированных параметров S-функции, которые не изменяются во время выполнения модели. Для заданного режима работы sfunction.tlc файл задает точный код, который генерируется для реализации алгоритма для этого режима. Для примера интерполяционная таблица S-функция с прямым индексом в Write Fully Inlined S-Functions with 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-функции. Основываясь на этой информации, файл для S-функции может сгенерировать высокоэффективный, оптимальный код для этого рабочего режима.

Инструкции по записи S-функций, Поддержки генерацию кода

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

  • Можно встроить S-функции для генерации кода путем предоставления встроенного файла TLC. См. «Вставка S-функций в целевой компилятор». MATLAB и Фортран MEX S-функции должны быть встроены. S-функции C/C + + MEX могут быть встроены для эффективности кода или не встроены.

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

  • Если эффективность кода не является переопределяющим фактором, например, если вы занимаетесь быстрым прототипированием, можно принять решение не вводить в строку S-функцию C/C + + MEX. Для получения дополнительной информации см. «Запись неинлинфицированной S-функции».

Похожие темы