Функции Simulink® имеют интерфейс с аргументами ввода и вывода, подобными языкам программирования. Вы создаете функциональные определения:
Графически, использование блоков Simulink в Функциональном блоке Simulink или изменений состояния Stateflow® в графической функции экспортировано от диаграммы Stateflow.
Дословно, использование кода MATLAB® в функции MATLAB экспортировано от диаграммы Stateflow.
Настройте Функциональный блок Simulink, чтобы получить данные через входной параметр от функциональной вызывающей стороны. Умножьте входной параметр на 2, и затем пасуйте назад расчетное значение через выходной аргумент.
Добавьте Функциональный блок Simulink от библиотеки User-Defined Functions в вашу модель.
Откройте Браузер Библиотеки путем выбора кнопки на панели инструментов Library Browser.
На блоке введите этого прототипа функции, чтобы определить имя функции к timestwo
, входной параметр к u
и выходной аргумент y
:
y = timestwo(u)
Дважды кликните блок, чтобы открыть подсистему, задающую функцию.
Добавьте блок Gain и установите параметр Gain на 2
.
Настройте графическую функцию в диаграмме Stateflow, чтобы получить данные через входной параметр от функциональной вызывающей стороны. Умножьте входной параметр на 2, и затем пасуйте назад расчетное значение через выходной аргумент. Установите параметры графика, чтобы экспортировать функцию в модель Simulink.
Задайте Графическую функцию. Создайте графическую функцию в диаграмме Stateflow. Задайте функциональное интерфейсное и функциональное определение.
Добавьте диаграмму Stateflow в свою модель Simulink. Из меню Simulink Editor выберите File> New> Chart.
Перетащите новый график к своей модели. Дважды кликните, чтобы открыть график.
Добавьте графическую функцию. От панели инструментов левой стороны перетащите значок графической функции на график.
Задайте функциональный интерфейс. В функциональном поле замените ?
на функциональный интерфейс y = timestwo_gf(x)
.
Задайте функцию. Кликните по стрелке перехода и замените ?
на {y = 2*x}
кода MATLAB.
Добавьте переход в графике. Соедините вход графика с входом Sine Wave и вывод к Осциллографу.
Запустите симуляцию, чтобы протестировать функцию.
Установите Параметры Аргумента для Графической функции. Задайте размер, сложность и тип входного параметра функции и выходных аргументов. График может экспортировать только функции с полностью заданными прототипами.
Открытый Model Explorer. На левой панели выберите графическую функцию.
Из списка Column View в средней панели выберите Stateflow
. Выберите значок фильтра, и затем выберите All Stateflow Objects. Из таблицы в нижней части панели выберите аргумент ввода или вывода.
На правой панели введите 1
(счетчик) для Размера, выберите Off
(вещественное число) для Complexity и выберите double
for Type.
Повторение продвигается 2
и 3
с остающимися аргументами функции.
Установите Параметры Экспорта функций для Графической функции. Установите параметры, чтобы экспортировать графическую функцию во время симуляции.
От левой панели выберите график, содержащий графическую функцию.
Также откройте график и из меню, выберите Chart> Properties.
В диалоговом окне свойства установите флажки Export Chart Level Functions (Make Global) и Allow exported functions to be called by Simulink.
Если вы вызываете экспортируемую графическую функцию от другой диаграммы Stateflow (не график, который экспортировал графическую функцию), вы не должны устанавливать флажок Allow exported functions to be called by Simulink.
Настройте функцию MATLAB в диаграмме Stateflow, чтобы получить данные через входной параметр от функциональной вызывающей стороны. Умножьте входной параметр на 2, и затем пасуйте назад расчетное значение через выходной аргумент. Установите параметры графика, чтобы экспортировать функцию в модель Simulink.
Задайте функцию MATLAB. Создайте графическую функцию в диаграмме Stateflow. Задайте функциональное интерфейсное и функциональное определение.
Добавьте диаграмму Stateflow в свою модель Simulink. Из меню Simulink Editor выберите File> New> Chart. Новый график открывается в новой модели.
Перетащите новый график к своей модели. Дважды кликните график, чтобы открыть его.
Добавьте графическую функцию. От панели инструментов левой стороны перетащите значок графической функции на график.
Задайте функциональный интерфейс. В функциональном поле замените ?
на функциональный интерфейс y = timestwo_ml(x)
.
Дважды кликните функциональное поле, чтобы открыть редактор кода MATLAB. Задайте функцию с кодом MATLAB.
Добавьте переход, чтобы протестировать функцию MATLAB. Добавьте вход Sine Wave и соедините вывод с Осциллографом.
Запустите симуляцию, чтобы протестировать функцию.
Установите Параметры Аргумента. Задайте размер, сложность и тип входного параметра функции и выходных аргументов. График может экспортировать только функции с полностью заданными прототипами.
Открытый Model Explorer. На левой панели выберите функцию MATLAB.
В средней боли, из списка Column View, выбирают Stateflow
. Из таблицы выберите аргумент ввода или вывода.
На правой панели введите 1
(счетчик) для Size, выберите Off
(вещественное число) для Complexity и выберите double
for Type.
Повторение продвигается 2
и 3
с остающимися аргументами функции.
Установите Параметры Экспорта функций. Установите параметры, чтобы экспортировать функцию MATLAB во время симуляции.
От левой панели выберите график, содержащий графическую функцию.
Также откройте график и из меню, выберите Chart> Properties.
В диалоговом окне свойства установите флажки Export Chart Level Function (Make Global) и Allow exported functions to be called by Simulink.
Если вы вызываете экспортируемую графическую функцию от другой диаграммы Stateflow (не график, который экспортировал графическую функцию), вы не должны устанавливать флажок Allow exported functions to be called by Simulink.
Следующие примеры показывают, как использовать блок Function Caller, чтобы вызвать:
Функциональный блок Simulink.
Экспортируемая Графическая функция от диаграммы Stateflow.
Экспортируемая функция MATLAB от диаграммы Stateflow.
Функции умножают значение от вызывающей стороны 2
, и затем передают расчетное значение обратно вызывающей стороне.
Поскольку блок Function Caller не может определить аргументы функции во время компиляции, необходимо назвать аргументы ввода и вывода блока Function Caller. Имена аргумента в Function prototype должны совпадать с именами аргумента функции.
Настройте блок Function Caller, чтобы отправить данные через входной параметр к Функциональному блоку Simulink. Получите данные назад от функции до выходного аргумента. Вопросы для рассмотрения:
Имена аргумента ввода и вывода Функционального блока Simulink и прототип для блока Function Caller много соответствия точно.
Если блок Function Caller в блоке Model (модель, на которую ссылаются), необходимо задать Input argument specification и Output argument specification. Смотрите Функциональные блоки Simulink в Моделях, на которые Ссылаются, и Спецификации Аргумента для Функциональных блоков Simulink.
Добавить блок Function Caller.
Добавьте блок Function Caller от библиотеки User-Defined Functions в вашу модель.
В диалоговом окне Function Caller, в поле Function prototype, вводят y = timestwo(u)
. Этот прототип функции создает входной порт u
и выходной порт y
на блоке Function Caller.
Ввод в пустом текстовом поле отображает список ранее прототипов эмпирической функции, которые совпадают с текстом, который вы вводите.
Добавьте блок Sine Wave во вход и блок Scope к выводу.
Настройте Функциональный блок Simulink, как описано в Функциональном блоке Simulink.
Моделируйте Модель. После того, как вы создадите функцию с помощью Функционального блока Simulink и установите вызов этой функции с помощью блока Function Caller, можно моделировать модель.
Возвратитесь к верхнему уровню модели.
Запустите симуляцию.
Чтобы просмотреть результаты сигнала, дважды кликните блок Scope. Входная синусоида с амплитудой 2
удвоена.
Вызывание экспортируемой графической функции из Stateflow не отличается, чем вызов Функционального блока Simulink. Вопросы для рассмотрения:
Имена аргумента ввода и вывода экспортируемой функции и прототип для блока Function Caller много соответствия точно.
Если блок Function Caller в блоке Model (модель, на которую ссылаются), необходимо задать Input argument specification и Output argument specification. Смотрите Функциональные блоки Simulink в Моделях, на которые Ссылаются, и Спецификации Аргумента для Функциональных блоков Simulink.
Вызов экспортируемой функции MATLAB из Stateflow не отличается, чем вызов Функционального блока Simulink. Вопросы для рассмотрения:
Имена аргумента ввода и вывода экспортируемой функции и прототип для блока Function Caller должны соответствовать точно.
Если блок Function Caller в блоке Model (модель, на которую ссылаются), необходимо задать Input argument specification и Output argument specification. Смотрите Функциональные блоки Simulink в Моделях, на которые Ссылаются, и Спецификации Аргумента для Функциональных блоков Simulink.
Блок MATLAB function может вызвать другую функцию. Следующие примеры показывают, как использовать блок MATLAB function, чтобы вызвать:
Функциональный блок Simulink.
Экспортируемая Графическая функция от диаграммы Stateflow.
Экспортируемая функция MATLAB от диаграммы Stateflow.
Функции умножают значение от вызывающей стороны 2
, и затем передают расчетное значение обратно вызывающей стороне.
Блоки MATLAB function только поддерживают дискретные и фиксированные-в-незначительном шаги расчета. При использовании блока Sine Wave как входной сигнал установите модель и параметры блоков для шага расчета, совместимого с блоком MATLAB function:
Дискретный — Открывают диалоговое окно модели Configuration Parameters для панели Решателя. Установите Type на Фиксированный шаг и введите значение для Fixed-step size (основной шаг расчета). Откройте диалоговое окно Sine Wave Block Parameters и установите Sample time на образцовый шаг расчета, который вы ввели.
Фиксированный на незначительном шаге — Открывают диалоговое окно Sine Wave Block Parameters. В поле Sample time введите [0 1]
.
Настройте блок MATLAB function, чтобы отправить данные через входной параметр к Функциональному блоку Simulink. Получите данные назад от функции до выходного аргумента.
Добавьте блок MATLAB function в свою модель.
Дважды кликните блок, который открывает редактора MATLAB. Введите вызов функции y1 = timestwo(u1)
.
Имена аргумента функции, которую вы задаете в блоке MATLAB function, не должны совпадать с именами аргумента функции, которую вы задаете в Функциональном блоке Simulink. Для блока Function Caller, который вызывает Функциональный блок Simulink, должны соответствовать имена аргумента.
Добавьте блок Sine Wave для входного сигнала и блок Scope, чтобы просмотреть выходной сигнал.
Для блока Sine Wave, набор Sample time к 0.01
. Для модели откройте диалоговое окно Configuration Parameters для панели решателя. Установите Type на Fixed-step
и Fixed-step size к 0.01
.
Настройте Функциональный блок Simulink, как описано в Функциональном блоке Simulink.
Вызывание экспортируемой графической функции от блока MATLAB function совпадает с вызовом Функционального блока Simulink.
Вызов экспортируемой функции MATLAB от блока MATLAB function совпадает с вызовом Функционального блока Simulink.
Следующие примеры показывают, как использовать диаграмму Stateflow, чтобы вызвать функции, внешние к графику, но доступные в модели Simulink:
Функциональный блок Simulink
Экспортируемая графическая функция Stateflow
Экспортируемая функция MATLAB Stateflow
Нет никаких ограничений к вызову функции от диаграммы Stateflow:
Имена аргумента вызывающей стороны могут отличаться от имен аргумента функции.
Входные сигналы к диаграмме Stateflow могут быть или непрерывными или дискретными.
Добавьте диаграмму Stateflow в свою модель Simulink. Из меню Simulink Editor выберите File> New> Chart. Новый график открывается в новой модели.
Перетащите новый график к своей модели. Дважды кликните график, чтобы открыть его.
Добавьте графическую функцию. От панели инструментов левой стороны перетащите значок перехода на график.
Добавьте входной порт.
Из меню выберите Chart> Add Inputs & Outputs > Data Input From Simulink.
В диалоговом окне Data, набор Name к x1
.
Добавьте выходной порт.
Из меню выберите Chart> Add Inputs & Outputs > Data Output To Simulink.
В диалоговом окне Data, набор Name к y1
.
Добавьте блок Sine Wave и сигнал подключения вывод к входному порту графика. Добавьте блок Scope и вход connect к выходному порту графика.
Отредактируйте код перехода, чтобы вызвать функцию. Например, чтобы вызвать Функциональный блок Simulink, введите:
{y1=timestwo_sf(x1);}
Настройте Функциональный блок Simulink, как описано в Функциональном блоке Simulink.
Диаграмма Stateflow, чтобы Вызвать Экспортируемую Графическую функцию. Вызывание экспортируемой графической функции от диаграммы Stateflow совпадает с вызовом Функционального блока Simulink.
Откройте диаграмму Stateflow.
Кликните по переходу и войдите
{y2=timestwo_gf(x2);}
Диаграмма Stateflow, чтобы Вызвать Экспортируемые функции MATLAB. Вызов экспортируемой функции MATLAB от диаграммы Stateflow совпадает с вызовом Функционального блока Simulink.
Открытая диаграмма Stateflow.
Кликните по переходу и войдите:
{y3=timestwo_sf(x3);}
Если вы вызываете Функциональный блок Simulink от нескольких сайтов, все сайты вызова совместно используют состояние функции. Например, предположите, что у вас есть диаграмма Stateflow с двумя вызовами и двумя Функциональными блоками Вызывающей стороны с вызовами той же функции.
Функция, определяемая с Функциональным блоком Simulink является счетчиком, который постепенно увеличивается 1
каждый раз, когда это вызвано входом 1
.
Блок Unit Delay имеет состояние, потому что значение блока является персистентным между вызовами от двух Функциональных блоков Вызывающей стороны и диаграммы Stateflow. Концептуально, можно думать об этой функции, реализовываемой в коде MATLAB:
function y = counter(u) persistent state; if isempty(state) state = 0; end y = state; state = state + u;
Simulink инициализирует значение состояния блока Unit Delay в начале симуляции. После этого, каждый раз, когда функция вызвана, значение состояния обновляется.
В этом примере выходной сигнал, наблюдаемый в Scope1, постепенно увеличивается 4
на каждом временном шаге. Scope2, Scope3 и Scope4 показывают подобное поведение. Единственной разницей является сдвиг в наблюдаемом сигнале из-за последовательности выполнения вызовов функции.
Для нескольких вызывающих сторон, которые совместно используют функцию и имеют различные уровни шага расчета, целостность данных и непротиворечивость кода в реальном времени могут быть проблемой. Рассмотрите управление серьезностью диагностики.
Выберите решатель Fixed-step. Установите Treat each discrete rate as a separate task на:
Очиститесь (однозадачность), и затем установите параметр Single task rate transition на none
(значение по умолчанию), warning
или error
.
Выберите (многозадачность), и затем set Multitask rate transition параметр к error
(значение по умолчанию) или warning
.