Ускорьте симуляцию, код повторного использования, или защитите интеллектуальную собственность при помощи цели S-функции

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

Следующие разделы описывают свойства целей S-функции и иллюстрируют, как сгенерировать их. Для получения дополнительной информации на структуре S-функций, смотрите Основы S-функции C/C++ (Simulink).

О цели S-функции

Используя цель S-функции, можно создать компонент S-функции и использовать ее в качестве Блока s-function в другой модели. Следующие разделы описывают рекомендации по развертыванию для цели S-функции.

Значение 'S-Function' для переменной CodeFormat TLC, используемой целью S-функции, генерирует код, который соответствует прикладному программному интерфейсу (API) S-функции Simulink® C MEX. Приложения этого формата включают

  • Преобразование модели к компоненту. Можно сгенерировать Блок s-function для модели, m1. Затем можно поместить сгенерированный Блок s-function в другую модель, m2. Регенерация кода для m2 не требует кода регенерации для m1.

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

  • Ускорение симуляции. Часто, S-функция, сгенерированная из модели, выполняет более эффективно, чем исходная модель.

  • Повторное использование кода. Можно включить несколько экземпляров одной модели в другом, не реплицируя код для каждого экземпляра. Каждый экземпляр продолжает поддерживать свои собственные уникальные данные.

Можно поместить сгенерированный Блок s-function в другую модель, из которой можно сгенерировать другую S-функцию. Этот подход позволяет любой уровень вложенных S-функций. Для ограничений, связанных с вложением, смотрите Ограничения на Вложенные S-функции.

Примечание

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

  • Защищенная модель, модель, на которую ссылаются, которая скрывает весь блок и информацию о строке. Для получения дополнительной информации см. Ссылочные Защищенные Модели от Третьих лиц (Simulink).

  • Совместно использованный системный конечный файл библиотеки, используемый, чтобы сгенерировать разделяемую библиотеку для модели или подсистему для использования в системной симуляции, внешней к Simulink. Для получения дополнительной информации смотрите Сгенерированный код Пакета как Разделяемые Библиотеки.

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

Существуют различные файлы, требуемые развернуть сгенерированный Блок s-function для симуляции по сравнению с генерацией кода.

Чтобы развернуть ваш сгенерированный Блок s-function для включения в другие модели для симуляции, вы должны только обеспечить бинарный объект файла MEX, который был сгенерирован в текущей рабочей папке, когда Блок s-function был создан. Необходимый файл:

  • subsys_sf.mexext

где subsys является именем подсистемы, и mexext является зависимым платформой расширением файла MEX (см. mexext). Например, SourceSubsys_sf.mexw64.

Чтобы развернуть ваш сгенерированный Блок s-function для включения в другие модели для генерации кода, необходимо обеспечить все файлы, которые были сгенерированы в текущей рабочей папке, когда Блок s-function был создан. Необходимые файлы:

  • subsys_sf.c или .cpp, где subsys является именем подсистемы (например, SourceSubsys_sf.c)

  • subsys_sf.h

  • subsys_sf.mexext, где mexext является зависимым платформой расширением файла MEX (см. mexext),

  • Подпапка subsys_sfcn_rtw и его содержимое

Примечание

Сгенерированный код S-функции использует Configuration Parameters> значения параметров Hardware Implementation, которые совпадают с хост-системой, в которой была создана функция. Когда вы используете S-функцию в модели для генерации кода, убедитесь, что эти значения параметров для модели совпадают со значениями параметров S-функции.

Распространение шага расчета в сгенерированных S-функциях

Сгенерированный Блок s-function может наследовать свой шаг расчета от модели, в которую он помещается, если определенным критериям соответствуют. Условия, которые управляют распространением шага расчета для обоих блоков Model и сгенерированных Блоков s-function, описаны в Образцовых Шагах расчета, на которые Ссылаются (Simulink) и Наследованный Шаг расчета для Моделей, на которые Ссылаются.

Чтобы сгенерировать Блок s-function, который соответствует критериям для наследования шага расчета, необходимо ограничить решатель для модели, из которой сгенерирован Блок s-function. На панели диалогового окна параметров конфигурации Solver, набор Type к Fixed-step и Periodic sample time constraint к Ensure sample time independent. Если модель не может наследовать шаги расчета, эта установка заставляет программное обеспечение Simulink отображать сообщение об ошибке при создавании модели. Для получения дополнительной информации об этой опции, смотрите Периодическое ограничение шага расчета (Simulink).

Выберите тип решателя

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

Образцовые опции решателя верхнего уровня и шаги расчета

 Образцовые Параметры конфигурации: настройка модели верхнего уровня
Шаги расчетаОпции решателя, введите: переменный шагОпции решателя, введите: фиксированный шаг
ДискретныйСгенерированная S-функция требует решателя переменного шагаСгенерированная S-функция может иметь решатель переменного шага или решатель фиксированного шага
НепрерывныйСгенерированная S-функция требует решателя переменного шагаСгенерированная S-функция требует решателя фиксированного шага

Примечание

S-функции, сгенерированные от подсистемы, имеют параметры, которые являются hardcoded в блок. Simulink вычисляет параметры, такие как шаг расчета, когда это генерирует блок, не в течение времени выполнения симуляции. Важно проверить, работает ли сгенерированный Блок s-function как ожидалось в целевой модели.

Создайте блоки s-function из подсистемы

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

Следующие данные показывают SourceModel, простую модель, что входные параметры сигнализируют к подсистеме. Последующие данные показывают подсистему, SourceSubsys. Сигналы, которые имеют различные ширины и шаги расчета:

  • Блок Step с шагом расчета 1

  • Блок Sine Wave с шагом расчета 0.5

  • Блок Constant, значение которого является вектором [-2 3]

    SourceModel

    SourceSubsys

Цель состоит в том, чтобы извлечь SourceSubsys из модели и создать Блок s-function из него, с помощью цели S-функции. Блок s-function должен выполнить тождественно к подсистеме, от которой он был сгенерирован.

В этой модели SourceSubsys наследовал шаги расчета и ширины сигнала от его входных сигналов. Однако Блоки s-function, созданные из модели с помощью цели S-функции, имеют все атрибуты сигнала (такие как ширины сигнала или шаги расчета) соединенный проводами. (Единственное исключение к этому правилу касается шагов расчета, как описано в Распространении Шага расчета в Сгенерированных S-функциях.)

В этом примере вы хотите, чтобы Блок s-function сохранил свойства SourceSubsys, когда это существует в SourceModel. Поэтому, прежде чем вы создаете подсистему как отдельный компонент S-функции, необходимо установить шаги расчета импорта и ширины явным образом. Кроме того, параметры решателя компонента S-функции должны совпасть с теми параметрами исходной модели. Сгенерированный компонент S-функции действует тождественно к исходной подсистеме (см., Выбирают Solver Type для получения дополнительной информации).

Создавать SourceSubsys как компонент S-функции,

  1. Создайте новую модель и скопировать/вставить блок SourceSubsys в пустое окно.

  2. Установите ширины сигнала и шаги расчета импорта в SourceSubsys, таким образом, что они совпадают с теми из сигналов в исходной модели. Inport 1, Filter, имеет ширину 1 и шаг расчета 1. Inport 2, Xferfcn, имеет ширину 1 и шаг расчета 0,5. Inport 3, offsets, имеет ширину 2 и шаг расчета 0,5.

  3. Сгенерированный Блок s-function должен иметь три импорта и один выходной порт. Соедините импорт и выходной порт к SourceSubsys, как показано в следующей фигуре.

    Ширины сигнала и шаги расчета распространены к этим портам.

  4. Установите тип решателя, режим и другие параметры решателя, таким образом, что они идентичны тем из исходной модели. Это является самым легким сделать, если вы используете Model Explorer.

  5. В диалоговом окне Configuration Parameters перейдите к панели Code Generation.

  6. Нажмите Browse, чтобы открыть Системный Браузер Конечного файла.

  7. В Системном Браузере Конечного файла выберите цель S-функции, rtwsfcn.tlc, и нажмите OK.

  8. Выберите панель S-Function Target. Убедитесь, что Create new model выбран, как показано в следующей фигуре:

    Когда эта опция выбрана, процесс сборки создает новую модель после того, как это создает компонент S-функции. Новая модель содержит Блок s-function, соединенный с компонентом S-функции.

    Нажмите Apply.

  9. Сохраните новую модель, содержащую вашу подсистему, например, как SourceSubsys.

  10. Создайте модель.

  11. Процесс сборки производит компонент S-функции в рабочей папке. После сборки отображено новое окно модели.

    Опционально можно сохранить сгенерированную модель, например, как SourceSubsys_Sfunction.

  12. Можно теперь скопировать Блок s-function, сгенерированный с новой модели, и использовать его в других моделях или в библиотеке.

    Примечание

    Для списка файлов, требуемых развернуть ваш Блок s-function для симуляции или генерации кода, смотрите Необходимые Файлы для Развертывания S-функции.

    Следующие данные показывают, что Блок s-function включил исходную модель. Учитывая идентичные входные сигналы, Блок s-function выполняет тождественно к исходной подсистеме.

    Сгенерированная S-функция, сконфигурированная как SourceModel

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

Настраиваемые параметры в сгенерированных S-функциях

Можно использовать настраиваемые параметры в сгенерированных S-функциях двумя способами:

Параметры блоков, которые объявляются настраиваемые с классом памяти auto в исходной модели, становятся настраиваемыми параметрами сгенерированной S-функции. Эти параметры не становятся частью сгенерированного model_P (раньше rtP) структура данных параметра, как они были бы в коде, сгенерированном от других целей. Вместо этого сгенерированный код получает доступ к этим параметрам при помощи вызовов API MEX, таких как mxGetPr или mxGetData. Ваш код должен получить доступ к этим параметрам таким же образом.

Для получения дополнительной информации о вызовах API MEX займитесь S-функциями MEX C (Simulink) и Выбор MATLAB API for Your Application (MATLAB).

Блоки s-function, созданные при помощи цели S-функции, автоматически маскируются. Маска отображает каждый настраиваемый параметр в поле редактирования. По умолчанию поле редактирования отображает параметр именем переменной, как в следующем примере.

Можно принять решение отобразить значение параметра, а не его имени переменной путем выбора Use value for tunable parameters на Code Generation> панель S-Function Target диалогового окна Configuration Parameters.

Когда эта опция выбрана, значение переменной (во время генерации кода) отображено в поле редактирования, как в следующем примере.

Системный конечный файл

Системный конечный файл rtwsfcn.tlc обеспечивается для использования с целью S-функции.

Контрольные суммы и цель S-функции

Генератор кода создает контрольную сумму для модели и использует контрольную сумму во время процесса сборки для повторного использования кода, модели - ссылки и функций режима external mode.

Генератор кода вычисляет образцовую контрольную сумму

  1. Вычисление контрольной суммы для каждой подсистемы в модели. Контрольная сумма подсистемы является комбинацией свойств (тип данных, сложность, шаг расчета, размерности порта, и т.д) блоков подсистемы.

  2. Объединение контрольных сумм подсистемы и другой информации об образцовом уровне.

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

Генератор кода применяет подсистему и образцовые контрольные суммы можно следующим образом:

  • Повторное использование кода — Если две подсистемы в модели имеют ту же контрольную сумму, генератор кода, производит код для одной функции только.

  • Модель - ссылка — Если контрольная сумма текущей модели совпадает с контрольной суммой, когда модель была создана, процесс сборки, не восстанавливает модели, на которые ссылаются.

  • Режим external mode — Если контрольная сумма текущей модели не совпадает с контрольной суммой кода, который работает на целевом компьютере, процесс сборки, генерирует ошибку.

Сгенерированная совместимость S-функции

То, когда вы создаете S-функцию MEX из своей модели, генератор кода создает уровень 2, не встроило S-функцию. Перекрестный выпустите ограничения использования на сгенерированный код и бинарный файл MEX (например, *.mexw64) включайте:

  • Целевой сгенерированный код S-функции из предыдущего программного обеспечения релиза MATLAB не совместим с более новыми релизами. Не перекомпилируйте сгенерированный код от предыдущего релиза с более новым программным обеспечением релиза MATLAB. Используйте то же программное обеспечение релиза MATLAB, чтобы сгенерировать код для S-функции, предназначаются и компилируют код в файл MEX.

  • Можно использовать бинарные файлы MEX S-функции, сгенерированные из предыдущего программного обеспечения релиза MATLAB с теми же или более новыми релизами с теми же вопросами совместимости как рукописные S-функции. Для получения дополнительной информации смотрите Совместимость S-функции (Simulink).

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

Целевые ограничения S-функции

Ограничения на Использование настраиваемых переменных в выражениях

Определенные ограничения применяются к использованию настраиваемых переменных в выражениях. Когда генератор кода сталкивается с неподдерживаемым выражением при создании кода, предупреждение появляется, и эквивалентное числовое значение сгенерировано в коде. Для списка ограничений смотрите Настраиваемые Ограничения Выражения.

Настройка параметра

Блок s-function не поддерживает настройку настраиваемых параметров с:

  • Комплексные числа.

  • Значения или типы данных, которые преобразовываются к константе (путем установки образцового параметра конфигурации Optimization > Default parameter behavior к Inlined).

  • Типы данных, которые не встроены.

Если вы выбираете эти настраиваемые параметры (через Сгенерировать S-функцию для диалогового окна Subsystem):

  • Программное обеспечение производит предупреждения во время процесса сборки.

  • Сгенерированная маска Блока s-function не отображает эти параметры.

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

Если вы устанавливаете опцию S-function upgrades needed на Diagnostics> панель Compatibility диалогового окна Configuration Parameters к warning или error, генератор кода дает вам команду обновлять S-функции, которые вы создаете с функцией Generate S-function. Это вызвано тем, что системный конечный файл S-функции не указывает параметры периода выполнения. Параметры периода выполнения только поддержаны для встроенных S-функций, и сгенерированная S-функция поддерживает функции, которые препятствуют тому, чтобы она была встроена (например, она может вызвать или содержать другие невстроенные S-функции).

Можно работать вокруг этого ограничения путем установки опции S-function upgrades needed на none.

Ограничения на Использование Goto и от блока

При использовании системного конечного файла S-функции генератор кода ограничивает ввод-вывод, чтобы соответствовать корневым блокам модели Inport и Outport (или блоки Inport и Outport блока Subsystem, от которого цель S-функции была сгенерирована). Никакой код не сгенерирован для Goto или От блоков.

Чтобы работать вокруг этого ограничения, создайте свою модель и подсистему с необходимыми блоками Inport и Outport, вместо того, чтобы использовать Goto и От блоков, чтобы передать данные между корневой моделью и подсистемой. В модели, которая включает сгенерированную S-функцию, вы затем добавили бы Goto и От блоков.

Пример перед работой вокруг

  • Корневая модель с блоком From и подсистемой, Subsystem1

  • Subsystem1 с блоком Goto, который имеет глобальную видимость и передает ее вход блоку From в корневой модели

  • Subsystem1 заменил на S-функцию, сгенерированную с целью S-функции — предупреждение заканчивается, когда вы запускаете модель, потому что сгенерированная S-функция не реализует блок Goto

Пример после работы вокруг

Блок Outport заменяет блок GoTo в Subsystem1. Когда вы включаете сгенерированную S-функцию в корневую модель, ее вывод соединяется непосредственно с блоком To Workspace.

Ограничения на создание и обновление S-функций

Следующие ограничения применяются к созданию и обновлению S-функций с помощью системного конечного файла S-функции:

  • Вы не можете создать модели, которые содержат блоки Model с помощью системного конечного файла S-функции. Это также означает, что вы не можете создать модуль подсистемы путем щелчка правой кнопкой (или при помощи Code> C/C++ Code> Build Selected Subsystem), если подсистема содержит блоки Model. Это ограничение применяется только к S-функциям, сгенерированным с помощью цели S-функции, не к S-функциям ERT.

  • Если вы изменяете модель, которая сгенерировала Блок s-function, процесс сборки автоматически не восстанавливает модели, содержащие сгенерированный Блок s-function. Это в отличие от практики автоматического восстановления моделей, на которые ссылаются блоки Model, когда они изменяются (в зависимости от Модели - ссылки параметр конфигурации Rebuild).

  • Рукописные S-функции без соответствующих файлов TLC должны содержать код без исключений. Для получения дополнительной информации о коде без исключений смотрите Исключение Свободный Код (Simulink).

Неподдерживаемые блоки

Формат S-функции не поддерживает следующие встроенные блоки:

  • Интерпретированный блок MATLAB function

  • Блоки s-function, содержащие любое следующее:

    • S-функции языка MATLAB® (если вы не предоставляете файл TLC для генерации кода C),

    • S-функции Фортрана (если вы не предоставляете файл TLC для генерации кода C),

    • S-функции MEX C/C++, которые вызывают в среду MATLAB

  • Блок Scope

  • К блоку Workspace

Формат S-функции не поддерживает блоки от библиотеки блоков embeddedtargetslib.

SimState, не поддержанный для генерации кода

Можно использовать SimState в S-функциях языка MATLAB C-MEX и Уровня 2, чтобы сохранить и восстановить состояние симуляции. Смотрите Соответствие S-функции с ModelOperatingPoint (Simulink). Однако SimState не поддержан для генерации кода, включая с системным конечным файлом S-функции.

Профилирование производительности кода с функцией рычага TLC, не поддерживаемой

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

Примечание

Если у вас есть лицензия Embedded Coder®, смотрите, что Выполнение кода Профилирует для альтернативного и более простого подхода на основе программного обеспечения в цикле (SIL) или процессоре в цикле (PIL) симуляции.

Ограничения на вложенные S-функции

Следующие ограничения применяются к вложению сгенерированный Блок s-function в модели или подсистеме, от которой вы генерируете другую S-функцию:

  • Программное обеспечение не поддерживает невиртуальные сигналы ввода и вывода шины для вложенной S-функции.

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

Ограничения на пользовательские типы данных

Системный конечный файл S-функции не поддерживает свойство HeaderFile, которое может быть задано на пользовательских типах данных, включая тех на основе Simulink.AliasType, Simulink.Bus и объектов Simulink.NumericType. Если пользовательский тип данных в вашей модели использует свойство HeaderFile задать связанный заголовочный файл, генерация кода с системным конечным файлом S-функции игнорирует значение и не генерирует соответствие, включают оператор.

Ограничение на генерацию щелчка правой кнопкой цели S-функции

Если вы генерируете цель S-функции путем щелчка правой кнопкой по блоку Function-Call Subsystem, исходная подсистема и сгенерированная S-функция не могут быть сопоставимыми. Несоответствие происходит, когда параметр States when enabling Триггерной Блокировки порта в блоке Function-Call Subsystem устанавливается на inherit. Необходимо установить параметр States when enabling на reset или held, в противном случае Simulink сообщает об ошибке.

Ограничение на S-функции с сигналами ввода-вывода шины

Если сгенерированное использование S-функции цели S-функции имеет сигналы ввода или вывода шины, сгенерированные структуры данных шины могут включать дополнение, чтобы выровнять поля элементов шины с представлением Simulink, используемым во время симуляции. Однако, если вы вставляете S-функцию в модель и генерируете код с помощью образцовой цели, такой как grt.tlc, выравнивание структуры шины, сгенерированное для сборки модели, может быть несовместимым с дополнением, сгенерированным для S-функции, и может влиять на числовые результаты выполнения кода. Чтобы сделать выравнивание структуры сопоставимым между симуляцией модели и выполнением типового кодекса, для каждого объекта Simulink.Bus, можно изменить свойство HeaderFile удалить незаполненный заголовочный файл структуры шины. Это заставит определения типов шины, сгенерированные для S-функции быть снова использованными в типовом кодексе.

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

Цель S-функции не поддерживает создание Блока s-function от подсистемы, которая имеет триггерный вход вызова функции или вызов функции вывод.

Хранилище данных доступ

Когда S-функция в ваших доступах модели хранилище данных во время симуляции, Simulink отключает диагностику хранилища данных.

  • Если вы создали S-функцию из модели, диагностика отключена для хранилищ глобальных данных также.

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

    • Хранилища глобальных данных

    • Хранилища данных, помещенные вне подсистемы, но, получили доступ блоками Записи Чтения или Хранилища данных Хранилища данных.

Не может задать параметры блоков Inport или выходного порта через маску подсистемы

Вы не можете задать параметры блоков Inport или Outport через переменные маски подсистемы, если вы хотите сгенерировать Блок s-function от подсистемы. Программное обеспечение производит ошибку, когда вы пытаетесь запустить симуляцию, которая использует Блок s-function, например:

Invalid setting in 'testSystem/Subsystem/__OutputSSForSFun__/Out2' 
for parameter 'PortDimensions'
...

Похожие темы