Функции Simulink® имеют интерфейс с аргументами ввода и вывода, подобными языкам программирования. Вы создаете функциональные определения:
Графически, использование блоков Simulink в Функциональном блоке Simulink или изменений состояния Stateflow® в графической функции экспортировано от диаграммы Stateflow.
Дословно, использование кода MATLAB® в функции MATLAB экспортировано от диаграммы Stateflow.
Настройте Функциональный блок Simulink, чтобы получить данные через входной параметр от функциональной вызывающей стороны. Умножьте входной параметр на 2, и затем пасуйте назад расчетное значение через выходной аргумент.
Добавьте Функциональный блок Simulink от библиотеки User-Defined Functions в вашу модель.
Откройте Браузер Библиотеки путем выбора кнопки на панели инструментов Library Browser.
На блоке введите этого прототипа функции, чтобы определить имя функции к timestwo
, входной параметр к u
и выходной аргумент y
:
y = timestwo(u)
Дважды кликните блок, чтобы открыть подсистему, задающую функцию.
Добавьте блок Gain и установите параметр Усиления на 2
.
Настройте графическую функцию в диаграмме Stateflow, чтобы получить данные через входной параметр от функциональной вызывающей стороны. Умножьте входной параметр на 2, и затем пасуйте назад расчетное значение через выходной аргумент. Установите параметры графика на экспорт функция к модели Simulink.
Задайте Графическую функцию. Создайте графическую функцию в диаграмме Stateflow. Задайте функциональное интерфейсное и функциональное определение.
Добавьте диаграмму Stateflow к своей модели Simulink. Из меню Simulink Editor выберите File> New> Chart.
Перетащите новый график к своей модели. Дважды кликните, чтобы открыть график.
Добавьте графическую функцию. От панели инструментов левой стороны перетащите значок графической функции на график.
Задайте функциональный интерфейс. В функциональном поле замените ?
на функциональный интерфейс y = timestwo_gf(x)
.
Задайте функцию. Кликните по стрелке перехода и замените ?
на {y = 2*x}
кода MATLAB.
Добавьте переход в графике. Соедините входной параметр графика с входным параметром Синусоиды и вывод к Осциллографу.
Запустите моделирование, чтобы протестировать функцию.
Установите Параметры Аргумента для Графической функции. Задайте размер, сложность и тип входного параметра функции и выходных аргументов. График может экспорт только функционировать с полностью заданными прототипами.
Открытый Образцовый Проводник. На левой панели выберите графическую функцию.
Из списка Представлений Столбца в средней панели выберите Stateflow
. Выберите значок фильтра, и затем выберите All Stateflow Objects. Из таблицы в нижней части панели выберите аргумент ввода или вывода.
На правой панели введите 1
(счетчик) для Размера, выберите Off
(вещественное число) для Сложности и выберите double
for Type.
Повторение продвигается 2
и 3
с остающимися аргументами функции.
Установите Параметры Экспорта функций для Графической функции. Установите параметры на экспорт графическая функция во время моделирования.
От левой панели выберите график, содержащий графическую функцию.
Также откройте график и из меню, выберите Chart> Properties.
В диалоговом окне свойства выберите Export Chart Level Functions (Make Global) и Позвольте экспортируемым функциям быть вызванными полями Simulink Check.
Если вы вызываете экспортируемую графическую функцию от другой диаграммы Stateflow (не график, который экспортировал графическую функцию), вы не должны выбирать экспортируемые функции Allow, которые будут вызваны полем Simulink Check.
Настройте функцию MATLAB в диаграмме Stateflow, чтобы получить данные через входной параметр от функциональной вызывающей стороны. Умножьте входной параметр на 2, и затем пасуйте назад расчетное значение через выходной аргумент. Установите параметры графика на экспорт функция к модели Simulink.
Задайте функцию MATLAB. Создайте графическую функцию в диаграмме Stateflow. Задайте функциональное интерфейсное и функциональное определение.
Добавьте диаграмму Stateflow к своей модели Simulink. Из меню Simulink Editor выберите File> New> Chart. Новый график открывается в новой модели.
Перетащите новый график к своей модели. Дважды кликните график, чтобы открыть его.
Добавьте графическую функцию. От панели инструментов левой стороны перетащите значок графической функции на график.
Задайте функциональный интерфейс. В функциональном поле замените ?
на функциональный интерфейс y = timestwo_ml(x)
.
Дважды кликните функциональное поле, чтобы открыть редактор кода MATLAB. Задайте функцию с кодом MATLAB.
Добавьте переход, чтобы протестировать функцию MATLAB. Добавьте входной параметр Синусоиды и соедините вывод с Осциллографом.
Запустите моделирование, чтобы протестировать функцию.
Установите Параметры Аргумента. Задайте размер, сложность и тип входного параметра функции и выходных аргументов. График может экспорт только функционировать с полностью заданными прототипами.
Открытый Образцовый Проводник. На левой панели выберите функцию MATLAB.
В средней боли, из списка Представлений Столбца, выбирают Stateflow
. Из таблицы выберите аргумент ввода или вывода.
На правой панели введите 1
(счетчик) для Размера, выберите Off
(вещественное число) для Сложности и выберите double
for Type.
Повторение продвигается 2
и 3
с остающимися аргументами функции.
Установите Параметры Экспорта функций. Установите параметры на экспорт функция MATLAB во время моделирования.
От левой панели выберите график, содержащий графическую функцию.
Также откройте график и из меню, выберите Chart> Properties.
В диалоговом окне свойства выберите Export Chart Level Function (Make Global) и Позвольте экспортируемым функциям быть вызванными полями Simulink Check.
Если вы вызываете экспортируемую графическую функцию от другой диаграммы Stateflow (не график, который экспортировал графическую функцию), вы не должны выбирать экспортируемые функции Allow, которые будут вызваны полем Simulink Check.
Следующие примеры показывают, как использовать блок Function Caller, чтобы вызвать:
Функциональный блок Simulink.
Экспортируемая Графическая функция от диаграммы Stateflow.
Экспортируемая функция MATLAB от диаграммы Stateflow.
Функции умножают значение от вызывающей стороны 2
, и затем передают расчетное значение обратно вызывающей стороне.
Поскольку блок Function Caller не может определить аргументы функции во время компиляции, необходимо назвать аргументы ввода и вывода блока Function Caller. Имена аргумента в Прототипе функции должны совпадать с именами аргумента функции.
Настройте блок Function Caller, чтобы отправить данные через входной параметр к Функциональному блоку Simulink. Получите данные назад от функции до выходного аргумента. Вопросы для рассмотрения:
Имена аргумента ввода и вывода Функционального блока Simulink и прототип для блока Function Caller много соответствия точно.
Если блок Function Caller в Блоке модели (модель, на которую ссылаются), необходимо задать спецификацию Входного параметра и спецификацию Выходного аргумента. См. Функциональные блоки Simulink в Моделях, на которые Ссылаются, и Спецификации Аргумента для Функциональных блоков Simulink.
Добавить блок Function Caller.
Добавьте блок Function Caller от библиотеки User-Defined Functions в вашу модель.
В диалоговом окне Function Caller, в поле Прототипа функции, вводят y = timestwo(u)
. Этот прототип функции создает входной порт u
и выходной порт y
на блоке Function Caller.
Ввод в пустом текстовом поле отображает список ранее прототипов эмпирической функции, которые совпадают с текстом, который вы вводите.
Добавьте блок Sine Wave к входному параметру и блок Scope к выводу.
Настройте Функциональный блок Simulink, как описано в Функциональном блоке Simulink.
Моделируйте Модель. После того, как вы создадите функцию с помощью Функционального блока Simulink и установите вызов этой функции с помощью блока Function Caller, можно моделировать модель.
Возвратитесь к верхнему уровню модели.
Запустите моделирование.
Чтобы просмотреть результаты сигнала, дважды кликните блок Scope. Входная синусоида с амплитудой 2
удвоена.
Вызывание экспортируемой графической функции от Stateflow не отличается, чем вызов Функционального блока Simulink. Вопросы для рассмотрения:
Имена аргумента ввода и вывода экспортируемой функции и прототип для блока Function Caller много соответствия точно.
Если блок Function Caller в Блоке модели (модель, на которую ссылаются), необходимо задать спецификацию Входного параметра и спецификацию Выходного аргумента. См. Функциональные блоки Simulink в Моделях, на которые Ссылаются, и Спецификации Аргумента для Функциональных блоков Simulink.
Вызов экспортируемой функции MATLAB от Stateflow не отличается, чем вызов Функционального блока Simulink. Вопросы для рассмотрения:
Имена аргумента ввода и вывода экспортируемой функции и прототип для блока Function Caller должны соответствовать точно.
Если блок Function Caller в Блоке модели (модель, на которую ссылаются), необходимо задать спецификацию Входного параметра и спецификацию Выходного аргумента. См. Функциональные блоки Simulink в Моделях, на которые Ссылаются, и Спецификации Аргумента для Функциональных блоков Simulink.
Блок MATLAB function может вызвать другую функцию. Следующие примеры показывают, как использовать блок MATLAB function, чтобы вызвать:
Функциональный блок Simulink.
Экспортируемая Графическая функция от диаграммы Stateflow.
Экспортируемая функция MATLAB от диаграммы Stateflow.
Функции умножают значение от вызывающей стороны 2
, и затем передают расчетное значение обратно вызывающей стороне.
Блоки MATLAB function только поддерживают дискретные и фиксированные-в-незначительном частоты дискретизации. При использовании блока Sine Wave как входной сигнал установите модель и блочные параметры для частоты дискретизации, совместимой с блоком MATLAB function:
Дискретный — Открывают образцовое диалоговое окно Configuration Parameters для панели Решателя. Установите Тип на Фиксированный шаг и введите значение для размера Фиксированного шага (основная частота дискретизации). Откройте диалоговое окно Sine Wave Block Parameters и установите Частоту дискретизации на образцовую частоту дискретизации, которую вы ввели.
Фиксированный на незначительном шаге — Открывают диалоговое окно Sine Wave Block Parameters. В поле Частоты дискретизации введите [0 1]
.
Настройте блок MATLAB function, чтобы отправить данные через входной параметр к Функциональному блоку Simulink. Получите данные назад от функции до выходного аргумента.
Добавьте блок MATLAB function к своей модели.
Дважды кликните блок, который открывает редактора MATLAB. Введите вызов функции y1 = timestwo(u1)
.
Имена аргумента функции, которую вы задаете в блоке MATLAB function, не должны совпадать с именами аргумента функции, которую вы задаете в Функциональном блоке Simulink. Для блока Function Caller, который вызывает Функциональный блок Simulink, должны соответствовать имена аргумента.
Добавьте блок Sine Wave для входного сигнала и блок Scope, чтобы просмотреть выходной сигнал.
Для блока Sine Wave, набор Частота дискретизации к 0.01
. Для модели откройте диалоговое окно Configuration Parameters для панели решателя. Установите Тип на Fixed-step
и размер Фиксированного шага к 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, определенном Имени к x1
.
Добавьте выходной порт.
Из меню выберите Chart> Add Inputs & Outputs> Data Output To Simulink.
В диалоговом окне Data, определенном Имени к y1
.
Добавьте блок Sine Wave и сигнал подключения вывод к входному порту графика. Добавьте блок Scope и входной параметр подключения к выходному порту графика.
Отредактируйте код перехода, чтобы вызвать функцию. Например, чтобы вызвать Функциональный блок 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. Установите Обработку каждый дискретный уровень как отдельная задача к:
Очиститесь (однозадачность), и затем установите Единственный параметр перехода уровня задачи на none
(значение по умолчанию), warning
или error
.
Выберите (многозадачность), и затем установите Многозадачный параметр перехода уровня на error
(значение по умолчанию) или warning
.