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

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

Эта таблица показывает, как каждый тип пользовательского блока обращается к трем проблемам.

Моделирование факторов

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

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

Блочная блок-схема

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

Примечание

В блок-схеме Legacy обозначает существующий код или модели.

Поведение состояния модели

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

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

Производительность симуляции

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

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

Тип пользовательского блокаПримечания
Interpreted MATLAB FunctionИмеет более медленную производительность из-за интерфейса, но стоили того же алгоритма как функция MATLAB.
Когда к данным о блоке (таким как вводы и выводы) получают доступ или возвращают в блок Interpreted MATLAB Function, механизм Simulink группирует эти данные в массивы MATLAB. Эта упаковка занимает время и вызывает временное увеличение памяти во время коммуникации. Если вы передаете большие объемы данных через этот интерфейс, такие как системы координат или массивы, производительность может быть существенно медленной.
Если данные были преобразованы, механизм выполнения MATLAB выполняет алгоритм. В результате стоимость алгоритма эквивалентна для функции MATLAB.
Уровень 2 S-функция MATLABНесет те же расходы алгоритма как блок Interpreted MATLAB Function, но с немного более высокой интерфейсной стоимостью. Поскольку S-функции MATLAB могут обработать несколько вводов и выводов, упаковка более сложна, чем для блока 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В первый раз симуляция модели с могла произойти медленнее из-за парсинга и создания пользовательского кода. Чтобы ускорить симуляцию после первой компиляции, от Configuration parameters, выбирают Faster Builds для более быстрой компиляции и выбирают Faster Runs для более быстрой симуляции.
C MEX S-FunctionСимулирует через скомпилированный код и несет те же интерфейсные расходы как Simulink встроенные блоки. Стоимость алгоритма зависит от сложности S-функции.
S-Function BuilderЭтот блок только создает S-функцию из спецификаций и кода С, который вы предоставляете. Можно также использовать этот блок в качестве обертки для сгенерированной S-функции в моделях. Стоимость алгоритма этого блока по сравнению с S-функцией MEX C понесена только от обертки.
Функция Simulink, SubsystemЕсли бы включено в библиотеку, не вводит интерфейса или затрат алгоритма вне того, что обычно поносилось бы, если бы блок существовал как регулярная подсистема в модели.
Производительность пропорциональна сложности алгоритма, реализованного в подсистеме. Если подсистема содержится в библиотеке, некоторая стоимость понесена, когда Simulink загружает любые разгруженные библиотеки в первый раз, когда схема обновляется или подготавливается для симуляции. Если все блоки ссылочной библиотеки остаются неизменными, Simulink впоследствии не перезагружает библиотеку. Компиляция модели становится быстрее, чем если бы модель не пользовалась библиотеками.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Тип пользовательского блокаПримечания
Interpreted MATLAB Function, MATLAB Function, C CallerВсе создают mdlOutputs метод, чтобы вычислить значение выходных параметров, учитывая значение входных параметров. Вы не можете реализовать никакие другие методы коллбэка с помощью одного из этих блоков и, поэтому, не можете смоделировать поведение состояния.
Уровень 2 S-функция MATLABПозволяет реализацию большего подмножества методов коллбэка, включая методы, которые можно использовать, чтобы смоделировать непрерывные и дискретные состояния. Для списка поддерживаемых методов смотрите Уровень 2 Методы Коллбэка S-функции MATLAB на Уровне 2 Записи S-функции MATLAB.
MATLAB SystemМетоды Системного объекта использования для методов коллбэка: mdlOutputs stepImploutputImpl), mdlUpdate updateImpl), mdlInitializeConditions resetImpl), mdlStart setupImpl), mdlTerminate releaseImpl). Для получения дополнительной информации смотрите Взаимодействие Engine Simulink с Методами Системного объекта
C S-функция MEXПозволяет реализацию полного набора методов коллбэка.
S-Function BuilderПозволяет реализацию mdlOutputs, mdlDerivatives и mdlUpdate.
Функция SimulinkГруппированный как автономная функция. Любая вызывающая сторона к этой функции становится частью одного из методов коллбэка на основе местоположения вызывающей стороны.
ПодсистемаСвязывается непосредственно с механизмом. Можно смоделировать поведения состояния с помощью соответствующих блоков из непрерывных и дискретных библиотек блока Simulink.

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

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

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

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

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

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

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

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

GUIDE, среда разработки графического интерфейса пользователя MATLAB, обеспечивает инструменты для того, чтобы легко создать настроенные пользовательские интерфейсы. См. App Building (MATLAB) для получения дополнительной информации об использовании GUIDE.

Смотрите также

| | | | | | |

Похожие темы

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