exponenta event banner

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

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

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

Сведения о цели S-функции

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

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

  • Преобразование модели в компонент. Для модели можно создать S-функциональный блок. m1. Затем сгенерированный блок S-Function можно поместить в другую модель. m2. Регенерация кода для m2 не требует регенерации кода для m1.

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

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

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

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

Примечание

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

Примечание

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

  • Защищенная модель - ссылочная модель, скрывающая информацию о блоках и линиях. Дополнительные сведения см. в разделе Ссылки на защищенные модели от третьих лиц.

  • Целевой файл системы общей библиотеки, используемый для создания общей библиотеки для модели или подсистемы для использования в моделировании системы вне 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 может наследовать время выборки из модели, в которую он помещается, если выполняются определенные критерии. Условия, регулирующие распространение времени выборки как для блоков модели, так и для сгенерированных блоков S-функций, описаны в разделах Ссылочное время выборки модели и S-функции, определяющие правила наследования времени выборки.

Чтобы создать S-функциональный блок, соответствующий критериям наследования времени выборки, необходимо ограничить решатель для модели, из которой создается S-функциональный блок. Задайте для параметра конфигурации модели Тип значение Fixed-step и Периодическая выборка временных ограничений Ensure sample time independent. Если модель не может наследовать образцы времени, этот параметр приводит к отображению в программе Simulink сообщения об ошибке при построении модели. Дополнительные сведения об этом параметре см. в разделе Временное ограничение периодической выборки.

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

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

Параметры и примеры времени решателя модели верхнего уровня

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

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

Создание S-функциональных блоков из подсистемы

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

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

  • Блок Step с временем выборки 1

  • Блок синусоидальной волны с временем выборки 0,5

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

    SourceModel

    SourceSubsys

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

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

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

Построить SourceSubsys как компонент S-функции,

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

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

  3. Сгенерированный блок S-Function должен иметь три входа и один выход. Подключение портов ввода и порта вывода к SourceSubsys, как показано на следующем рисунке.

    Ширина сигнала и время выборки распространяются на эти порты.

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

  5. Задайте для параметра конфигурации модели System target file значение rtwsfcn.tlc.

  6. Выберите панель S-Function Target. Убедитесь, что выбрана опция Создать новую модель (Create new model), как показано на следующем рисунке:

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

    Нажмите кнопку «Применить».

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

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

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

    При необходимости можно сохранить созданную модель, например, как SourceSubsys_Sfunction.

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

    Примечание

    Список файлов, необходимых для развертывания блока S-Function для моделирования или генерации кода, см. в разделе Необходимые файлы для развертывания S-Function.

    На следующем рисунке показан блок S-Function, подключенный к исходной модели. При идентичных входных сигналах блок S-Function работает идентично исходной подсистеме.

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

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

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

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

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

Дополнительные сведения о вызовах MEX API см. в разделах О C MEX S-функциях и Выбор MATLAB API для вашего приложения.

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

Можно выбрать отображение значения параметра, а не его имени переменной, выбрав параметр конфигурации модели Использовать значение для настраиваемых параметров.

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

Системный целевой файл

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

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

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

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

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

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

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

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

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

  • Ссылка на модель - если текущая контрольная сумма модели совпадает с контрольной суммой при построении модели, процесс построения не восстанавливает ссылочные модели.

  • Внешний режим - если текущая контрольная сумма модели не совпадает с контрольной суммой кода, который выполняется на целевом оборудовании, процесс построения генерирует ошибку.

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

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

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

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

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

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

Настройка блоков ввода и вывода с непрерывным временем выборки

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

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

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

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

Блок S-Function не поддерживает настройку настраиваемых параметров с помощью:

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

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

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

  • Типы данных с плавающей запятой, не эквивалентные встроенному типу.

При выборе этих настраиваемых параметров (в диалоговом окне «Создание S-функции для подсистемы»):

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

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

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

Если задан параметр конфигурации модели, необходимо обновить S-функцию для warning или errorгенератор кода дает команду обновить S-функции, созданные с помощью функции «Создать S-функцию». Это происходит потому, что целевой файл системы S-функций не регистрирует параметры времени выполнения. Параметры времени выполнения поддерживаются только для встроенных S-функций, а сгенерированная S-функция поддерживает функции, препятствующие ее встраиванию (например, она может вызывать или содержать другие неинлинированные S-функции).

Можно обойти это ограничение, установив для параметра S-function обновления, необходимые для none.

Перейти к и из блока

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

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

Пример перед обходом

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

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

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

Пример после обхода

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

Построение и обновление S-функций

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

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

  • Модель можно построить с помощью:

    • Цепь инструментов только в том случае, если она поддерживает создание MEX-файлов.

    • make-файл шаблона, только если make-файл шаблона связан с цепочкой инструментов, поддерживающей создание файлов MEX.

  • При изменении модели, в которой был создан блок S-Function, процесс построения не выполняет автоматическое перестроение моделей, содержащих созданный блок S-Function. Это противоречит практике автоматического перестроения моделей, на которые ссылаются блоки модели, при их изменении (в зависимости от настройки конфигурации «Перестроение ссылок на модель»).

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

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

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

  • Интерпретируемый функциональный блок MATLAB

  • S-Функциональные блоки, содержащие любое из следующего:

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

    • S-функции Fortran (если для генерации кода C не указан файл TLC)

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

  • Блок области

  • В блок рабочей области

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

SimState Не поддерживается для создания кода

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

Профилирование производительности кода с помощью функции TLC Hook не поддерживается

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

Примечание

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

Вложение S-функций

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

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

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

Определяемые пользователем типы данных

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

Создание правой кнопкой мыши целевого объекта S-функции

Если создать целевой объект S-функции, щелкнув правой кнопкой мыши блок Function-Call Subsystem, исходная подсистема и сгенерированная S-функция могут быть непротиворечивыми. Несогласованность возникает, когда для параметра Stations при активизации блока Trigger Port в блоке Function-Call Subsystem установлено значение inherit. Необходимо установить состояния при включении параметра для сброса или удержания, в противном случае Simulink сообщает об ошибке.

Сигналы ввода/вывода шины

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

Подсистемы с функциональными сигналами ввода-вывода вызовов

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

Шаблон моделирования подсистемы Function-Call

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

Подсистема функционального вызова подключается непосредственно к блоку Outport, а сигнальная линия, соединяющая подсистему с блоком Outport, ответвляется к блоку, имеющему Update функция (блок, который обновляется на каждом основном временном шаге, например, Unit Delay и Memory). Ветвь может находиться внутри или снаружи подсистемы. В модели, включающей подсистему вызова функций, необходимо вставить блок преобразования сигналов в одно из следующих расположений:

  1. Между блоком подсистемы и ветвью

  2. Между ветвью и корневым блоком Outport

  3. Между ветвью и блоком, который имеет Update функция

Перед генерацией блока S-Function для подсистемы установите следующие параметры блока преобразования сигнала:

  • Установить выход в копию сигнала

  • Выберите Исключить этот блок из оптимизации сокращения блоков

Если не применить обходной путь, при добавлении сгенерированного блока S-Function в модель, а затем моделировать эту модель, MATLAB может потерпеть сбой.

Доступ к хранилищу данных

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

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

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

    • Глобальные хранилища данных

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

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

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

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

Связанные темы