Ускорьте симуляцию, код повторного использования, или защитите интеллектуальную собственность при помощи цели 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. Для получения дополнительной информации смотрите Сгенерированный код Пакета как Разделяемые Библиотеки (Embedded Coder).

Необходимые файлы для развертывания 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-функции Что Правила Наследования Настройки времени выборки.

Чтобы сгенерировать Блок s-function, который соответствует критериям для наследования шага расчета, необходимо ограничить решатель для модели, из которой сгенерирован Блок s-function. Установите параметр конфигурации модели 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. Установите параметр конфигурации модели System target parameter на rtwsfcn.tlc.

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

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

    Нажмите Apply.

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

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

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

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

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

    Примечание

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

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

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

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

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

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

Параметры блоков, которые вы объявляете как настраиваемые с auto класс памяти в исходной модели становится настраиваемыми параметрами сгенерированной S-функции. Эти параметры не становятся частью сгенерированного modelP (раньше 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.

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

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

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 на warning или error, генератор кода дает вам команду обновлять S-функции, которые вы создаете с функцией Generate S-function. Это вызвано тем, что системный конечный файл S-функции не указывает параметры периода выполнения. Параметры периода выполнения только поддержаны для встроенных S-функций, и генерированная S-функция поддерживает функции, которые препятствуют тому, чтобы она была встроена (например, она может вызвать или содержать другие невстроенные S-функции).

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

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

При использовании системного конечного файла S-функции генератор кода ограничивает ввод-вывод, чтобы соответствовать корневым блокам модели Inport и Outport (или блоки Inport и Outport блока Subsystem, от которого цель S-функции была сгенерирована). Генератор кода не производит код для блоков From или 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-функции. Это также означает, что вы не можете создать подсистему при помощи контекстного меню щелчка правой кнопкой, если подсистема содержит блоки Model. Это ограничение применяется только к S-функциям, сгенерированным с помощью цели S-функции, не к S-функциям ERT.

  • Можно создать модель с:

    • Набор инструментальных средств, только если набор инструментальных средств поддерживает генерацию файла MEX.

    • Make-файл шаблона, только если make-файл шаблона сопоставлен с набором инструментальных средств, который поддерживает генерацию файла MEX.

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

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

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

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

  • Блок Interpreted MATLAB Function

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

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

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

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

  • Блок Scope

  • Блок To Workspace

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

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

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

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

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

Примечание

Если у вас есть лицензия Embedded Coder®, смотрите, что Выполнение кода Профилирует (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 блока Trigger Port в блоке 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-Function в ваших доступах модели хранилище данных в процессе моделирования, Simulink отключает диагностику хранилища данных.

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

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

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

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

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

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

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

Похожие темы