Обзор функций Simulink

Что такое функции Simulink?

Функция Simulink® является вычислительным модулем, который вычисляет набор выходных параметров, когда предоставлено набор входных параметров. Функциональный заголовок использует обозначение, подобное языкам программирования, таким как MATLAB® и C++. Можно задать и реализовать функцию Simulink несколькими способами:

  • Функциональный блок Simulink — Функция, определяемая с помощью блоков Simulink в Функциональном блоке Simulink. Смотрите ссылку Функционального блока Simulink.

  • Экспортируемая графическая функция Stateflow® — Функция, определяемая с изменениями состояния в диаграмме Stateflow, и затем экспортируемый в модель Simulink.

  • Экспортируемая функция MATLAB Stateflow — Функция, определяемая с операторами языка MATLAB в диаграмме Stateflow, и затем экспортируемый в модель Simulink.

  • S-функция — Функция, определяемая с помощью Блока s-function. Для примера с S-функцией откройте sfcndemo_simulinkfunction_getset.

Кто такие вызывающие стороны функции Simulink?

Вызывающая сторона функции Simulink вызывает выполнение функции Simulink отовсюду в иерархии модели или графика.

  • Функциональный блок Caller — Вызов функция, определяемая в Simulink или экспортируемый из Stateflow. Смотрите ссылку блока Function Caller.

  • Переход диаграммы Stateflow — В диаграмме Stateflow, вызовите функцию, определяемую в Simulink или экспортируемый из Stateflow.

  • Блок MATLAB function — Вызывает функцию из скрипта языка MATLAB.

  • Блок s-function — Вызов функция с помощью системных методов. Смотрите ssDeclareFunctionCaller и ssCallSimulinkFunction.

  • Блок MATLAB System — Вызов функция с помощью Системного объекта и языка MATLAB.

Соединитесь с локальными сигналами

В дополнение к Аргументу Inport и блоки Выходного порта Аргумента, Функциональный блок Simulink может взаимодействовать через интерфейс к сигналам в окружении блока через блоки Inport или Outport. Эти сигналы скрыты от вызывающей стороны. Можно использовать блокировки порта, чтобы соединиться и связаться между двумя Функциональными блоками Simulink или подключением к корневым блокам Inport и Outport, которые представляют внешний ввод-вывод.

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

Функциональный блок Simulink может вывести событие вызова функции к блоку Outport.

Допускающая повторное использование логика с функциями

Используйте функции, когда вам будет нужна допускающая повторное использование логика через иерархию модели. Рассмотрите пример, где Функция Simulink с допускающей повторное использование логикой задана в диаграмме Stateflow.

Можно переместить допускающую повторное использование логику из диаграммы Stateflow к Функциональному блоку Simulink. Логика является затем допускающей повторное использование функциональными вызывающими сторонами в Подсистемах Simulink (Подсистема и блоки Model) и в диаграммах Stateflow на любом уровне в иерархии модели.

Результатом является добавленная гибкость для структурирования вашей модели для повторного использования.

Примечание

Имена аргумента ввода и вывода (x2, y2) для того, чтобы вызвать функцию от диаграммы Stateflow не должны совпадать с именами аргумента в прототипе функции (u, y) Функционального блока Simulink.

Поведение Аргумента ввода/вывода

Прототип функции для Функционального блока Simulink может иметь идентичные аргументы ввода и вывода. Например, функция, которая фильтрует шум, могла ввести сигнал и затем возвратить сигнал после фильтрации.

mySignal = filter(mySignal)

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

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

void filter(real_T *rtuy_mySignal)
{
		. . .
		*rtuy_mySignal = model_P.DiscreteFilter_NumCoef * DiscreteFilter_tmp; 
	}

Совместно используемые ресурсы с функциями

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

Как функциональная вызывающая сторона идентифицирует функцию

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

  • Аргументы в параметре Function prototype для блока Function Caller совпадают с аргументами, заданными в функции. Например, функция с двумя входными параметрами и одним выходным аргументом появляется как:

    y = MyFunction(u1, u2)

  • Тип данных, размерность и сложность аргументов должны согласиться. Для блока Function Caller можно установить Input argument specifications и параметры Output argument specifications, но обычно вы не должны задавать эти параметры вручную. Simulink выводит спецификацию от функции.

    Единственный случай, где необходимо задать параметры аргумента, - когда блок Function Caller не может найти, что функция в модели или в любом дочернем элементе моделирует его ссылки. Эта ситуация может произойти, когда блок Function Caller и вызванная функция находятся в отдельных моделях, на которые ссылается общая родительская модель. Смотрите Функциональные блоки Simulink в Спецификации Аргумента Modelsand, на которую Ссылаются, для Функциональных блоков Simulink.

Причины использовать функциональный блок Simulink

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

  • Устраните маршрутизацию сигнальных линий. Блок Function Caller позволяет вам выполнять функции, определяемые с Функциональным блоком Simulink без соединяющейся сигнальной линии. Кроме того, функции и их вызывающие стороны могут находиться в различных моделях или подсистемах. Этот подход устраняет проблемы маршрутизации сигнала через иерархическую образцовую структуру и позволяет большее повторное использование компонентов модели.

  • Используйте несколько вызывающих сторон для той же функции. Несколько Функциональная Вызывающая сторона блокируется, или диаграммы Stateflow могут вызвать ту же функцию. Если функция содержит состояние (например, блок Unit Delay), состояние совместно используется различными вызывающими сторонами.

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

Выберите Simulink функциональная или допускающая повторное использование подсистема

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

  • Для Функционального блока Simulink, когда один блок имеет несколько вызывающих сторон, код всегда генерируется для одной функции. Если Функциональный блок Simulink содержит блоки с состоянием (например, Задержка или Память), состояние является персистентным и разделяемым между функциональными вызывающими сторонами. В этом случае порядок вызовов является важным соображением.

  • Для блока Subsystem, когда блок имеет несколько экземпляров и сконфигурирован как допускающая повторное использование функция, код обычно генерируется для одной функции как оптимизация. Если блок Subsystem содержит блоки с состоянием, код все еще сгенерирован для одной функции, но различная переменная состояния передается функции. Состояние не совместно используется экземплярами.

Если не использовать функциональный блок Simulink

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

Например, при моделировании ПИД-регулятора или цифровой фильтр и вы должны смоделировать уравнения, задающие динамическую систему. Используйте S-функцию, Подсистему или блок Model, чтобы реализовать системы уравнений, но не используйте Функциональный блок Simulink, потому что эти условия могут произойти:

  • Персистентность состояния между вызовами функции. Если Функциональный блок Simulink содержит какие-либо блоки с состоянием (например, Единичная задержка или Память), то их значения состояния являются персистентными между вызовами функции. Если существуют множественные вызовы этой функции, значения состояния являются также персистентными между вызовами, происходящими от различных вызывающих сторон.

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

Трассировка функций Simulink

Визуально отобразите связи между функцией Simulink и их вызывающими сторонами со строками, которые соединяют вызывающие стороны с функциями:

  • При превращении строк трассировки включения - выключения — Из меню Simulink Editor, выберите Display> Function Connectors.

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

  • Навигация к функциям — функциональная вызывающая сторона может быть в подсистеме.

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

    Если функция на корневом уровне модели, функция открывается. Если функция в подсистеме, подсистема, содержащая функцию, открывается.

Контролируйте состояние чернил на общем принтере Используя функции Simulink

После выбора Display> Function Connectors, модель slexPrinterExample показывает отношения между вызывающими сторонами и функциями.

В этом примере, Функциональной Вызывающей стороне в Функциональном блоке Simulink addPrintJob, вызывает экспортируемую функцию Stateflow queuePrintJob. Подграфик Busy вызывает Функциональный блок Simulink printerInk. Прослеживающие строки вовлечены и из диаграммы Stateflow.

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

Блоки

Похожие темы

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