При создании пользовательского блока примите во внимание:
Моделирует ли блок непрерывное или дискретное поведение в состоянии?
Важна ли эффективность симуляции?
Вам нужно сгенерировать код для модели, содержащей пользовательский блок?
В этой таблице показано, как каждый пользовательский тип блока решает три проблемы.
Факторы о моделировании
Пользовательский блок тип | Динамика состояния модели | Область Эффективности | Генерация кода |
---|---|---|---|
Interpreted MATLAB Function | Нет | Менее быстро | Не поддерживается |
Level-2 MATLAB S-function | Да | Менее быстро | Требуется файл TLC |
MATLAB Function | Нет | Быстро | Поддерживается за исключением |
MATLAB System | Да | Быстро | Поддерживается за исключением |
S-Function | Да | Быстро | Требуется поддержка TLC- файла или неинлайн-функции S-Function |
C Caller | Нет | Быстро | Поддержанный |
C Function | Да | Быстро | Поддержанный |
S-Function Builder | Да | Быстро | Поддержанный |
Simulink Function | Да | Быстро | Поддержанный |
Subsystem | Да | Быстро | Поддержанный |
Для детального проекта пользовательских блоков рассмотрите:
Пользовательскому блоку нужно несколько входных и выходных портов?
Каковы методы коллбэка для связи с Simulink® engine и какие пользовательские блоки позволяют вам реализовать все или подмножество этих методов коллбэка?
Насколько важно эффект пользовательского блока на скорость обновления схемы Simulink?
Вы должны смоделировать поведение состояния для блока, который требует некоторых или всех его предыдущих выходов, чтобы вычислить его текущие выходные параметры. Смотрите Переменные состояния для получения дополнительной информации.
Пользовательский блок тип | Примечания |
---|---|
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) для получения дополнительной информации. |
Функция 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 обновляет схему перед каждой симуляцией и по запросу пользователя. Каждый блок вводит некоторые накладные расходы в процесс обновления схемы.
Пользовательский блок тип | Примечания |
---|---|
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. |
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.
C Caller | C Function | Interpreted MATLAB Function | Level-2 MATLAB S-Function | MATLAB Function | MATLAB System | S-Function | S-Function Builder | Функция Simulink | Subsystem