При создании пользовательского блока рассмотрите:
Действительно ли блок моделирует поведение непрерывного или дискретного состояния?
Действительно ли производительность моделирования важна?
Необходимо ли сгенерировать код для модели, содержащей пользовательский блок?
Эта таблица показывает, как каждый пользовательский тип блока обращается к трем проблемам.
Моделирование факторов
Пользовательский тип блока | Образцовая динамика состояния | Производительность моделирования | Генерация кода |
---|---|---|---|
@fcn | Нет | Очень быстро | Поддерживаемый |
Интерпретированная функция MATLAB | Нет | Менее быстрый | Не поддерживаемый |
Уровень 2 S-функция MATLAB | Да | Менее быстрый | Требует файла TLC |
Функция MATLAB | Нет | Быстро | Поддерживаемый за исключениями |
Matlab.system | Да | Быстро | Поддерживаемый за исключениями |
S-функция | Да | Быстро | Требует файла TLC или невстроенной поддержки S-функции |
Разработчик S-функции | Да | Быстро | Поддерживаемый |
Функция Simulink | Да | Быстро | Поддерживаемый |
Подсистема | Да | Быстро | Поддерживаемый |
Для детального проектирования пользовательских блоков рассмотрите:
Пользовательское блокируется, нуждаются в нескольких портах ввода и вывода?
Что методы обратного вызова должны передать с механизмом Simulink® и какие пользовательские блоки позволяют вам реализовать все или подмножество этих методов обратного вызова?
Насколько важный эффект пользовательского блока на скорости обновления схемы Simulink?
Эта схема помогает решить который блок использовать. Во-первых, определите, нужен ли вам блок для функции или системы. Функция задает отношение между набором вводов и выводов. Система задает отношение между набором состояний, а также набором вводов и выводов, параметров, Система object™ обработка методов для инициализации, вывода, обновления, завершения, и т.д.
В блок-схеме Наследие обозначает существующий код или модели.
Необходимо смоделировать поведение состояния для блока, который требует, чтобы некоторые или все его предыдущие выходные параметры вычислили его текущие производительности. Смотрите Динамические системы Моделирования для получения дополнительной информации.
Пользовательский тип блока | Примечания |
---|---|
Fcn, интерпретированная функция MATLAB | Не позволяет вам поведению состояния модели. |
Функция MATLAB | Позволяет вам моделировать дискретное состояние с помощью переменных persistent . |
Уровень 2 MATLAB® S-Function | Позволяет вам моделировать и поведение непрерывного и дискретного состояния с помощью ContStates или методов объекта периода выполнения Dwork в сочетании с блочными методами обратного вызова. Для списка поддерживаемых методов смотрите Уровень 2 Методы Обратного вызова S-функции MATLAB на Уровне 2 Записи S-функции MATLAB. |
Matlab.system | Позволяет вам моделировать поведение дискретного состояния с помощью свойств DiscreteState Системного объекта, в сочетании с блочными методами обратного вызова. Этот блок использует методы Системного объекта для методов обратного вызова: mdlOutputs (stepImpl , outputImpl ), mdlUpdate (updateImpl ), mdlInitializeConditions (resetImpl ), mdlStart (setupImpl ), mdlTerminate (releaseImpl ). Для получения дополнительной информации смотрите то, Что Системные объекты? MATLAB. |
C S-функция MEX, разработчик S-функции | Позволяет вам моделировать и поведение непрерывного и дискретного состояния в сочетании с блочными методами обратного вызова. Для получения дополнительной информации см. Методы Обратного вызова для S-функций MEX C |
Функция Simulink | Связывается непосредственно с механизмом. Можно смоделировать поведение состояния с помощью соответствующих блоков от непрерывных и дискретных библиотек блока Simulink. Когда множественные вызовы этой функции происходят от различных вызывающих сторон, значения состояния являются также персистентными между этими вызовами. Для получения дополнительной информации смотрите Вызов Функциональный блок Simulink от Нескольких Сайтов. |
Подсистема | Связывается непосредственно с механизмом. Можно смоделировать поведение состояния с помощью соответствующих блоков от непрерывных и дискретных библиотек блока Simulink. |
Для большинства приложений все пользовательские типы блока обеспечивают удовлетворительную производительность моделирования. Используйте профилировщика Simulink, чтобы получить фактическую индикацию производительности. Смотрите Как Данные о производительности Получений Профилировщика для получения дополнительной информации.
Две категории индикации производительности являются интерфейсной стоимостью и стоимостью алгоритма. Интерфейсная стоимость является временем, которое требуется, чтобы переместить данные от механизма Simulink в блок. Стоимость алгоритма является временем, которое требуется, чтобы выполнить алгоритм, который реализует блок.
Пользовательский тип блока | Примечания |
---|---|
@fcn | Имеет самую высокую производительность моделирования. Блок тесно интегрирован с механизмом Simulink и оптимизирован для моделирования и генерации кода. |
Интерпретированная функция MATLAB | Имеет более медленную производительность из-за интерфейса, но стоили того же алгоритма как функция MATLAB. Когда к блочным данным (таким как вводы и выводы) получают доступ или возвращают в Интерпретированный блок MATLAB function, механизм Simulink группирует это данные в массивы MATLAB. Эта упаковка занимает время и вызывает временное увеличение памяти во время коммуникации. Если вы передаете большие объемы данных через этот интерфейс, такие как кадры или массивы, производительность может быть существенно медленной. Однажды данные был преобразован, механизм выполнения MATLAB выполняет алгоритм. В результате стоимость алгоритма эквивалентна для функции MATLAB. |
Уровень 2 S-функция MATLAB | Несет те же расходы алгоритма как Интерпретированный блок MATLAB function, но с немного более высокой интерфейсной стоимостью. Поскольку S-функции MATLAB могут обработать несколько вводов и выводов, упаковка более сложна, чем для Интерпретированного блока MATLAB function. Кроме того, механизм Simulink вызывает механизм выполнения MATLAB для каждого блочного метода, который вы реализуете, тогда как Интерпретированный блок MATLAB function вызывает механизм выполнения MATLAB только для метода Outputs . |
Функция MATLAB | Выполняет моделирование через генерацию кода и несет те же интерфейсные расходы как другой Simulink встроенные блоки. Стоимость алгоритма этого блока более трудно анализировать из-за реализации блока. В среднем, функция для этого блока и выполнения функции theMATLAB на приблизительно той же скорости. Если блок MATLAB function имеет код, который использует coder.extrinsic , чтобы обратиться к механизму выполнения MATLAB, это несет все расходы, которым подвергаются S-функция MATLAB или Интерпретированный блок MATLAB function. Обращение к механизму выполнения MATLAB от блока MATLAB function производит предупреждение препятствовать тому, чтобы вы делали так непреднамеренно. Чтобы уменьшить стоимость алгоритма, можно отключить отладку для всех блоков MATLAB function. |
Matlab.system | В интерпретированном режиме выполнения производительность подобна тому из Уровня 2 S-функция MATLAB, потому что модель моделирует блок с помощью механизма выполнения MATLAB. В режиме генерации кода производительность подобна той из функции MATLAB, потому что модель моделирует блок с помощью сгенерированного кода. Для получения дополнительной информации смотрите запись функции MATLAB в этой таблице. |
C S-функция MEX | Моделирует через скомпилированный код и несет те же интерфейсные расходы как Simulink встроенные блоки. Стоимость алгоритма зависит от сложности S-функции. |
Разработчик S-функции | Этот блок только создает S-функцию из спецификаций и кода С, который вы предоставляете. Можно также использовать этот блок в качестве обертки для сгенерированной S-функции в моделях. Стоимость алгоритма этого блока по сравнению с S-функцией MEX C понесена только от обертки. |
Функция Simulink, подсистема | Если бы включено в библиотеку, не представляет интерфейса или затрат алгоритма вне того, что обычно поносилось бы, если бы блок существовал как регулярная подсистема в модели. Производительность пропорциональна сложности алгоритма, реализованного в подсистеме. Если подсистема содержится в библиотеке, некоторая стоимость понесена, когда Simulink загружает любые разгруженные библиотеки в первый раз, когда схема обновляется или подготавливается для моделирования. Если все блоки ссылочной библиотеки остаются неизменными, Simulink впоследствии не перезагружает библиотеку. Компиляция модели становится быстрее, чем если бы модель не пользовалась библиотеками. |
Вам нужна генерация кода, если ваша модель является частью большей системы. Не все пользовательские типы блока поддерживают генерацию кода с Simulink Coder™.
Пользовательский тип блока | Примечания |
---|---|
@fcn | Генерация кода поддержек. |
Интерпретированная функция MATLAB | Не поддерживает генерацию кода. |
Уровень 2 S-функция MATLAB | Генерирует код, только если вы реализуете алгоритм с помощью функции Компилятора выходного языка (TLC). В моделированиях ускоренного и режима external mode можно принять решение выполнить S-функцию в режиме интерпретации путем призывания обратно к механизму выполнения MATLAB, не реализовывая алгоритм в TLC. Если S-функцией MATLAB является SimViewingDevice , продукт Simulink Coder автоматически не использует блок во время генерации кода. |
Функция MATLAB, система MATLAB | Генерация кода поддержек. Однако, если ваш блок обратится к механизму выполнения MATLAB, он создаст с продуктом Simulink Coder, только если вызовы механизма выполнения MATLAB не влияют на блок выходные параметры. При этом условии продукт Simulink Coder не использует эти вызовы от сгенерированного кода C. Эта функция позволяет вам оставлять код визуализации на месте, генерируя встроенный код. |
C S-функция MEX, разработчик S-функции | Обе генерации кода поддержек.
Смотрите S-функции и Генерацию кода (Simulink Coder) для получения дополнительной информации. |
Функция Simulink | Генерация кода поддержек. |
Подсистема | Генерация кода поддержек пока блоки, содержавшие в подсистеме, поддерживает генерацию кода. Для получения дополнительной информации смотрите Генерацию Управления Функций Подсистемы (Embedded Coder) |
Эти типы пользовательских блоков поддерживают несколько портов ввода и вывода.
Пользовательский тип блока | Примечания |
---|---|
Fcn, интерпретированная функция MATLAB | Поддержки только единственный входной параметр и единственный выходной порт. |
Функция MATLAB | Поддержки несколько портов ввода и вывода, включая сигналы шины. Смотрите Как Интерфейс Вводов и выводов Структуры с Сигналами Шины для получения дополнительной информации. |
Matlab.system | Поддержки несколько портов ввода и вывода, включая сигналы шины. Кроме того, можно изменить количество портов ввода и вывода на основе свойств системного объекта с помощью методов getNumOutputs и getNumInputs . |
Уровень 2 S-функция MATLAB, C S-функция MEX, разработчик S-функции | Поддержки несколько портов ввода и вывода. Кроме того, можно изменить количество портов ввода и вывода на основе пользовательских параметров. Разработчик S-функции и S-функции MEX C поддерживает сигналы шины. |
Функция Simulink | Поддержки несколько портов ввода и вывода, включая сигналы шины. |
Подсистема | Поддержки несколько портов ввода и вывода, включая сигналы шины. Кроме того, можно изменить количество портов ввода и вывода на основе пользовательских параметров. Смотрите Самомодифицируемые Соединенные Подсистемы для получения дополнительной информации. |
Simulink обновляет схему перед каждым моделированием и, когда требовал пользователь. Каждый блок вводит немного наверху в процесс обновления схемы.
Пользовательский тип блока | Примечания |
---|---|
Fcn, интерпретированная функция MATLAB | Низко схематически изобразите стоимость обновления. |
Функция MATLAB | Моделирование выполняется через генерацию кода, таким образом, это блокируется, может занять существенное количество времени когда сначала обновленный. Однако, потому что генерация кода является инкрементной, Simulink неоднократно не обновляет блок, если блок и сигналы, соединенные с ним, не изменились. |
Matlab.system | Быстрее, чем функция MATLAB, потому что код не сгенерирован, чтобы обновить схему. С тех пор генерация кода является инкрементной, 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-функции в качестве эквивалентов.
Пользовательский тип блока | Примечания |
---|---|
Fcn, интерпретированная функция MATLAB, функция MATLAB | Все создают метод mdlOutputs , чтобы вычислить значение выходных параметров, учитывая значение входных параметров. Вы не можете реализовать никакие другие методы обратного вызова с помощью одного из этих блоков и, поэтому, не можете смоделировать поведение состояния. |
Уровень 2 S-функция MATLAB | Позволяет реализацию большего подмножества методов обратного вызова, включая методы, которые можно использовать, чтобы смоделировать непрерывные и дискретные состояния. Для списка поддерживаемых методов смотрите Уровень 2 Методы Обратного вызова S-функции MATLAB на Уровне 2 Записи S-функции MATLAB. |
Matlab.system | Методы Системного объекта использования для методов обратного вызова: mdlOutputs (stepImpl , outputImpl ), mdlUpdate (updateImpl ), mdlInitializeConditions (resetImpl ), mdlStart (setupImpl ), mdlTerminate (releaseImpl ). Для получения дополнительной информации см. Взаимодействие Engine Simulink с Методами Системного объекта |
C S-функция MEX | Позволяет реализацию полного набора методов обратного вызова. |
Разработчик S-функции | Позволяет реализацию mdlOutputs , mdlDerivatives и mdlUpdate . |
Функция Simulink | Группированный как автономная функция. Любая вызывающая сторона к этой функции становится частью одного из методов обратного вызова на основе местоположения вызывающей стороны. |
Подсистема | Связывается непосредственно с механизмом. Можно смоделировать поведения состояния с помощью соответствующих блоков от непрерывных и дискретных библиотек блока Simulink. |
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 workspace перед моделированием или сгенерировать график данных моделирования в конце моделирования. Можно присвоить блочные обратные вызовы любому из пользовательских типов блока. Для списка доступных обратных вызовов и большей информации о том, как использовать их, смотрите, Задают Блочные Обратные вызовы.
GUIDE, среда разработки графического интерфейса пользователя MATLAB, обеспечивает инструменты для того, чтобы легко создать настроенные пользовательские интерфейсы. См. App Building (MATLAB) для получения дополнительной информации об использовании GUIDE.
@fcn | Интерпретированная функция MATLAB | Уровень 2 S-функция MATLAB | Функция MATLAB | Matlab.system | S-функция | Разработчик S-функции | Функция Simulink | Подсистема