Вы используете 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-функцию для симуляции и генерации кода, включают:
“I не обеспокоена эффективностью. Я хочу записать, что одна версия моего алгоритма и иметь его работает в Simulink и продуктах генератора кода автоматически”.
“Я хочу реализовать высоко оптимизированный алгоритм в Simulink и продуктах генератора кода, который похож на встроенный блок и генерирует эффективный код”.
“У меня есть много рукописного кода, с которым я должен соединить интерфейсом. Я хочу вызвать свою функцию от Simulink и продуктов генератора кода эффективно”.
Соответственно, предыдущие ситуации сопоставляют со следующей терминологией MathWorks®:
Невстроенная S-функция
Встроенная 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-функций, чтобы работать в окружении Simulink, сгенерирован некоторый служебный код. Когда генератор кода производит код из моделей, которые содержат S-функции (без файлов
), это встраивает часть этого служебного кода в сгенерированном коде. Если вы хотите оптимизировать свой код в реальном времени и устранить часть служебного кода, необходимо встроить (или встроить) S-функции. Это включает запись TLC (sfunction.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-функции Встраивания
Если необходимо вызвать рукописный код C/C++ в модели, рассмотрите использование Legacy Code Tool Simulink. Legacy Code Tool может автоматизировать генерацию полностью встроенной S-функции и соответствующего файла TLC на основе информации, которую вы указываете в структуре данных Legacy Code Tool.
Для получения дополнительной информации смотрите, Интегрируйте Функции C Используя Legacy Code Tool (Simulink) и смотрите Вызовы Импорта Внешнего Кода в Сгенерированный код с Legacy Code Tool.
Эта тема кратко описывает что файлы и необходимые функции, чтобы создать невстроенные и встроенные S-функции.
Невстроенные S-функции требуют C или исходного кода S-функции C++ MEX (
или sfunction.c
). sfunction.cpp
Полностью встроенные S-функции требуют файла
. Полностью встроенные S-функции производят оптимальный код для параметризованной S-функции. Это - S-функция, которая действует в определенном режиме, зависящем от фиксированных S-параметров-функции, которые не изменяются во время образцового выполнения. Для данного рабочего режима sfunction.tlc
файл
задает точный код, который сгенерирован, чтобы реализовать алгоритм для того режима. Например, S-функция интерполяционной таблицы прямого индекса в Записи Полностью Встроенные S-функции с mdlRTW Стандартной программой содержит два рабочих режима — один для равномерно расположенного с интервалами sfunction.tlc
x-data
и один для неравномерно расположенного с интервалами x-data
.
Полностью встроенные S-функции, которые сгенерированы, чтобы вызвать устаревший или пользовательский код C/C++ также, требуют файла
, который сгенерирован Legacy Code Tool.sfunction.tlc
Полностью встроенные S-функции могут потребовать размещения стандартной программы mdlRTW
в вашем файле MEX S-функции
или sfunction.c
. Стандартная программа sfunction.cpp
mdlRTW
позволяет вам поместить информацию в
. model.rtw
является файлом записи, который задает модель, и который генератор кода вызывает Target Language Compiler к процессу прежде, чем выполнить model.rtw
при генерации кода.sfunction.tlc
Включая mdlRTW
стандартная программа полезна когда это необходимо, чтобы ввести ненастраиваемые параметры в ваш файл TLC. Такие параметры используются, чтобы определить, какой рабочий режим активен в приведенном примере S-функции. На основе этой информации файл TLC для S-функции может сгенерировать высокоэффективный, оптимальный код для того рабочего режима.
Можно использовать MEX C/C++, язык MATLAB и S-функции Фортрана MEX с генерацией кода.
Можно встроить S-функции для генерации кода путем обеспечения встраиванию файла TLC. Смотрите, что S-функция Встраивает в Компиляторе Выходного языка. MATLAB и S-функции Фортрана MEX должны быть встроены. S-функции MEX C/C++ могут быть встроены для эффективности кода или не встроены.
Чтобы автоматически сгенерировать полностью встроенную S-функцию MEX C для вызова наследия или пользовательского кода, используйте Legacy Code Tool. Для получения дополнительной информации смотрите, Интегрируйте Функции C Используя Legacy Code Tool (Simulink) и смотрите Вызовы Импорта Внешнего Кода в Сгенерированный код с Legacy Code Tool.
Если эффективность кода не является переопределяющим фактором, например, если вы - быстрое прототипирование, можно выбрать not to inline a C/C ++ MEX S-function. Для получения дополнительной информации смотрите Запись Невстроенная S-функция.