Сравнение функциональности пользовательских блоков

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

В этой таблице показано, как каждый пользовательский тип блока решает три проблемы.

Факторы о моделировании

Пользовательский блок типДинамика состояния моделиОбласть Эффективности Генерация кода
Interpreted MATLAB FunctionНет Менее быстроНе поддерживается
Level-2 MATLAB S-functionДаМенее быстроТребуется файл TLC
MATLAB FunctionНетБыстроПоддерживается за исключением
MATLAB SystemДаБыстроПоддерживается за исключением
ДаБыстроТребуется поддержка TLC- файла или неинлайн-функции S-Function
C CallerНетБыстроПоддержанный
C FunctionДаБыстроПоддержанный
ДаБыстроПоддержанный
Simulink FunctionДаБыстроПоддержанный
ДаБыстроПоддержанный

Для детального проекта пользовательских блоков рассмотрите:

Модель поведения в состоянии

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

Пользовательский блок типПримечания
Interpreted MATLAB Function, C CallerНе позволяет вам моделировать поведение состояния.
MATLAB Function, C FunctionПозволяет вам смоделировать дискретное состояние, используя persistent переменные.
Level-2 MATLAB® S-функцияПозволяет вам моделировать как непрерывное, так и дискретное поведение в состоянии с помощью ContStates или Dwork методы объекта во время выполнения в сочетании с методами блочного коллбэка. Список поддерживаемых методов см. Level-2 MATLAB S-Function Callback Methods in Write Level-2 MATLAB S-Functions.
MATLAB SystemПозволяет вам смоделировать поведение дискретного состояния с помощью DiscreteState свойства Системного объекта, в комбинацию с блоком коллбэка методами. Этот блок использует методы System object™ для методов коллбэка: mdlOutputs (stepImpl, outputImpl), mdlUpdate (updateImpl), mdlInitializeConditions (resetImpl), mdlStart (setupImpl), mdlTerminate (releaseImpl). Для получения дополнительной информации см. раздел «Что такое системные объекты?».
C MEX S-Function, S-Function BuilderПозволяет вам моделировать как непрерывное, так и дискретное поведение в комбинацию с блоком методами коллбэка. Для получения дополнительной информации смотрите Методы коллбэка для S-функций C MEX
Функция SimulinkВзаимодействует непосредственно с двигателем. Можно смоделировать поведение состояния с помощью соответствующих блоков из непрерывных и дискретных библиотек блоков Simulink. Когда несколько вызовов этой функции исходят от различных вызывающих абонентов, значения состояния также являются постоянными между этими вызовами. Для получения дополнительной информации смотрите Вызов функции Simulink блока с нескольких сайтов.
SubsystemВзаимодействует непосредственно с двигателем. Можно смоделировать поведение состояния с помощью соответствующих блоков из непрерывных и дискретных библиотек блоков Simulink.

Область Эффективности

Для большинства приложений все типы пользовательского блока обеспечивают удовлетворительную эффективность симуляции. Используйте профилировщик Simulink, чтобы получить фактическое значение эффективности. Дополнительные сведения см. в разделе «Как профилировщик собирает данные о эффективности».

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

Пользовательский блок типПримечания
Interpreted MATLAB FunctionИмеет более медленную эффективность из-за интерфейса, но имеет ту же стоимость алгоритма, что и функция MATLAB.
Когда к блочным данным (таким как входы и выходы) обращаются или возвращаются из блока Interpreted MATLAB Function, механизм Simulink упаковывает эти данные в массивы MATLAB. Эта упаковка занимает дополнительное время и вызывает временное увеличение памяти во время связи. Если вы передаете через этот интерфейс большие объемы данных, такие как системы координат или массивы, эффективность может быть существенно медленной.
После преобразования данных механизм выполнения MATLAB выполняет алгоритм. В результате стоимость алгоритма такая же, как и для функции MATLAB.
Level-2 S-функцию MATLABНесет те же затраты алгоритма, что и блок Interpreted MATLAB Function, но с несколько более высокой стоимостью интерфейса. Поскольку MATLAB S-Functions может обрабатывать несколько входов и выходов, упаковка сложнее, чем для блока Interpreted MATLAB Function. В сложение механизм Simulink вызывает механизм выполнения MATLAB для каждого реализуемого метода блока, в то время как блок Interpreted MATLAB Function вызывает механизм выполнения MATLAB только для Outputs способ.
MATLAB FunctionВыполняет симуляцию через генерацию кода и несет ту же стоимость интерфейса, что и другие встроенные блоки Simulink.
Стоимость алгоритма этого блока труднее проанализировать из-за реализации блока. В среднем функция для этого блока и функция MATLAB выполняются примерно с той же скоростью.
Если блок MATLAB Function имеет код, который использует coder.extrinsic чтобы вызвать механизм выполнения MATLAB, он несет все затраты, которые несет блок MATLAB S-Function или Interpreted MATLAB Function. Вызов механизма выполнения MATLAB из блока MATLAB Function выдает предупреждение, чтобы предотвратить непреднамеренное выполнение.
Чтобы уменьшить стоимость алгоритма, можно отключить отладку для всех блоков MATLAB Function.
MATLAB SystemВ интерпретированном режиме выполнения производительность аналогична эффективности Level-2 MATLAB S-function, потому что модель моделирует блок с помощью механизма выполнения MATLAB. В режиме генерации кода производительность аналогична эффективности MATLAB Function, потому что модель моделирует блок с помощью сгенерированного кода. Для получения дополнительной информации см. запись MATLAB Function в этой таблице.
C Caller, C FunctionПервый раз симуляции модели с может быть медленнее из-за анализа и создания пользовательского кода. Чтобы ускорить симуляцию после первой компиляции, из Configuration parameters, выберите Faster Builds для более быстрой компиляции и выберите Faster Runs для более быстрой симуляции.
C MEX S-FunctionСимулирует через скомпилированный код и несет ту же стоимость интерфейса, что и встроенные блоки Simulink. Стоимость алгоритма зависит от сложности S-Функции.
S-Function BuilderЭтот блок создает только S-функцию из спецификаций и кода С, которые вы поставляете. Можно также использовать этот блок в качестве обертки для сгенерированной S-функции в моделях. Стоимость алгоритма этого блока по сравнению с C MEX S-Function возникает только из оболочки.
Функция Simulink, SubsystemЕсли он включен в библиотеку, не вводит интерфейсов или затрат алгоритма сверх того, что обычно будет происходить, если блок существовал как регулярная подсистема в модели.
Эффективность пропорциональна сложности алгоритма, реализованного в подсистеме. Если подсистема содержится в библиотеке, некоторые затраты возникают при загрузке Simulink любых выгруженных библиотек при первом обновлении или подготовке схемы к симуляции. Если все ссылочные библиотечные блоки остаются без изменений, Simulink не перезагружает библиотеку. Компиляция модели становится быстрее, чем если бы модель не использовала библиотеки.

Генерация кода

Вам нужна генерация кода, если ваша модель является частью большей системы. Не все типы пользовательского блока поддержки генерацию кода с Simulink Coder™.

Пользовательский блок типПримечания
Interpreted MATLAB FunctionНе поддерживает генерацию кода.
C Caller, C FunctionПоддерживает генерацию кода.
Level-2 S-функцию MATLABГенерирует код только, если вы реализуете алгоритм с помощью функции Target Language Compiler (TLC). В симуляциях ускоренного и внешнего режимов можно выбрать выполнение S-Function в режиме интерпретации путем обратного вызова механизма выполнения MATLAB без реализации алгоритма в TLC. Если MATLAB S-Function SimViewingDeviceПродукт Simulink Coder автоматически опускает блок во время генерации кода.
MATLAB Function, MATLAB SystemПоддерживает генерацию кода. Однако, если ваш блок вызывает механизм выполнения MATLAB, он будет создавать с помощью продукта Simulink Coder, только если вызовы механизма выполнения MATLAB не влияют на выходы блоков. При этом условии продукт Simulink Coder опускает эти вызовы из сгенерированного кода C. Эта функция позволяет оставить код визуализации на месте, даже при генерации встраиваемого кода.
C MEX S-Function, S-Function Builder

Оба поддерживают генерацию кода.

  • Для нелинейных S-функций продукт Simulink Coder использует функцию C MEX во время генерации кода.

  • В случае С MEX S-Functions, если вам нужно либо встроить S-Function, либо создать оболочку для рукописного кода, необходимо написать файл TLC для S-Function.

  • В случае S-Function Builder можно выбрать опцию Generate wrapper TLC, чтобы автоматически сгенерировать файл.

Смотрите S-функции и генерацию кода (Simulink Coder) для получения дополнительной информации.

Функция SimulinkПоддерживает генерацию кода.
SubsystemПоддерживает генерацию кода, пока блоки, содержащиеся в коде поддержки подсистемы. Для получения дополнительной информации смотрите Генерация управления функций для подсистем (Embedded Coder)

Несколько входных и выходных портов

Эти типы пользовательских блоков поддерживают несколько входных и выходных портов.

Пользовательский блок типПримечания
Interpreted MATLAB FunctionПоддерживает только один входной и один выходной порт.
MATLAB FunctionПоддерживает несколько входных и выходных портов, включая сигналы шины. Смотрите, Как Структура Входы и Выходы Интерфейс с Шинными Сигналами для получения дополнительной информации.
MATLAB SystemПоддерживает несколько входных и выходных портов, включая сигналы шины. В сложение можно изменить количество входа и выходных портов на основе свойств системного объекта, используя getNumInputs и getNumOutputs методы.
C Caller, C FunctionПоддерживает несколько входных и выходных портов, включая сигналы шины.
Level-2 MATLAB S-Function, C MEX S-Function, S-Function BuilderПоддерживает несколько входных и выходных портов. В сложение можно изменить количество входа и выходных портов на основе пользовательских параметров. Сигналы MEX S-Function и S-Function Builder поддержки C.
Функция SimulinkПоддерживает несколько входных и выходных портов, включая сигналы шины.
ПодсистемаПоддерживает несколько входных и выходных портов, включая сигналы шины. В сложение можно изменить количество входа и выходных портов на основе пользовательских параметров. Для получения дополнительной информации см. раздел «Самомодифицируемые связанные подсистемы».

Скорость обновления схемы Simulink

Simulink обновляет схему перед каждой симуляцией и по запросу пользователя. Каждый блок вводит некоторые накладные расходы в процесс обновления схемы.

Пользовательский блок типПримечания
Interpreted MATLAB FunctionНизкая стоимость обновления схем.
MATLAB Function, C Caller, C FunctionСимуляция выполняется через генерацию кода, поэтому эти блоки могут занять значительное количество времени при первом обновлении. Однако, поскольку генерация кода является инкрементной, Simulink неоднократно не обновляет блок, если блок и сигналы, подключенные к нему, не изменились.
MATLAB SystemБыстрее, чем MATLAB Function, поскольку код не генерируется для обновления схемы. Поскольку генерация кода является инкрементной, Simulink неоднократно не обновляет блок, если блок и сигналы, подключенные к нему, не изменились.
S-функция C MEX, Level-2 S-функция MATLABНесет большие затраты, чем другие блоки Simulink, только если он переопределяет методы, выполненные при обновлении схемы. Если эти методы становятся сложными, они могут внести значительный вклад во время обновления схемы. Список методов, выполненных при обновлении схемы, см. в представлении процесса в Simulink Engine Interaction with C S-Functions. При обновлении схемы Simulink вызывает все релевантные методы на фазе инициализации модели до, но не включая mdlStart.
Функция Simulink, подсистемаСкорость пропорциональна сложности алгоритма, реализованного в подсистеме. Если подсистема содержится в библиотеке, некоторые затраты возникают при загрузке Simulink любых выгруженных библиотек при первом обновлении или подготовке схемы к симуляции. Если все ссылочные библиотечные блоки остаются без изменений, Simulink не перезагружает библиотеку. Компиляция модели становится быстрее, чем если модель не использует библиотеки.

Методы коллбэка

Блоки Simulink взаимодействуют с движком Simulink посредством методов коллбэка блоков, которые полностью определяют поведение блоков (кроме блока Simulink Function). Каждый пользовательский тип блока позволяет вам реализовать другой набор методов коллбэка. Чтобы узнать, как блоки взаимодействуют с движком Simulink, смотрите Simulink Engine Interaction with C S-Functions. Эта таблица использует имена методов коллбэка S-функции в качестве эквивалентов.

Пользовательский блок типПримечания
Interpreted MATLAB Function, MATLAB Function, C CallerВсе создайте mdlOutputs способ вычисления значения выходов с учетом значения входов. Вы не можете реализовать какие-либо другие методы коллбэка, используя один из этих блоков и, следовательно, не можете моделировать поведение состояния.
C FunctionПозволяет реализовать методы запуска, выхода и завершения коллбэка. Позволяет моделировать дискретные состояния с постоянными данными.
Level-2 S-функцию MATLABПозволяет реализация большее подмножество коллбэка методов, включая методы, которые вы можете использовать для моделирования непрерывных и дискретных состояний. Список поддерживаемых методов см. Level-2 MATLAB S-Function Callback Methods in Write Level-2 MATLAB S-Functions.
MATLAB SystemИспользует методы системного объекта для методов коллбэка: mdlOutputs (stepImpl, outputImpl), mdlUpdate (updateImpl), mdlInitializeConditions (resetImpl), mdlStart (setupImpl), mdlTerminate (releaseImpl). Для получения дополнительной информации см. «Взаимодействие Simulink Engine с методами системных объектов»
S-функция MEX на CПозволяет реализовать полный набор методов коллбэка.
S-Function BuilderПозволяет осуществлять mdlOutputs, mdlDerivatives и mdlUpdate.
Функция SimulinkУпакован как автономная функция. Любой вызывающий абонент этой функции становится частью одного из методов коллбэка на основе местоположения вызывающего абонента.
ПодсистемаВзаимодействует непосредственно с двигателем. Можно смоделировать поведение состояний с помощью соответствующих блоков из непрерывных и дискретных библиотек блоков Simulink.

Сравнение S-функций MATLAB с функциями MATLAB для генерации кода

MATLAB S-функции и Функции MATLAB для генерации кода имеют некоторые фундаментальные различия.

  • Продукт Simulink Coder может сгенерировать код как для S-функций MATLAB, так и для функций MATLAB для генерации кода. Однако для генерации кода для S-функций MATLAB требуется файл Target Language Compiler (TLC). Функции MATLAB для генерации кода не требуют файла TLC.

  • MATLAB S-функции могут использовать любую функцию MATLAB, в то время как функции MATLAB для генерации кода являются подмножеством языка MATLAB. Список поддерживаемых функций для генерации кода смотрите в Функции и Объекты, Поддерживаемые для Генерации кода C/C + +.

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

Расширение функциональности пользовательских блоков

Расширить функциональность любого пользовательского блока можно с помощью коллбэков и графики MATLAB.

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

App Designer, среда разработки графического интерфейса MATLAB, предоставляет инструменты для простого создания пользовательских интерфейсов. Дополнительные сведения об использовании App Designer см. в разделе App Building.

См. также

| | | | | | | | |

Похожие темы