Вызывающие стороны функции Simulink: Функциональный блок Caller, блок MATLAB function, диаграмма Stateflow

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

  • Блоки Function Caller

  • Блоки MATLAB Function

  • Графики Stateflow®

Следующие разделы показывают, как вызвать функцию Simulink. Функциональный y = timestwo(x) умножает значение (x) от вызывающей стороны 2, и затем отправляет расчетное значение (y) назад вызывающей стороне. Чтобы создать функции, смотрите функции Simulink: Функциональный блок Simulink, экспортируемый графический Stateflow и функции MATLAB.

Используйте блок Function Caller, чтобы вызвать Функциональный блок Simulink

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

  1. Добавьте блок Function Caller в свою модель.

  2. Откройте диалоговое окно Function Caller. В поле Function prototype введите y = timestwo(x). Этот прототип функции создает входной порт x и выходной порт y на блоке Function Caller.

    Примечание

    Ввод в пустом текстовом поле отображает список ранее прототипов эмпирической функции, которые совпадают с текстом, который вы вводите.

  3. Добавьте и установите блок Simulink Function как описано в, Создают функцию Simulink использование Функционального блока Simulink.

    Примечание

    Функция и имена аргумента блока Simulink Function и Function prototype для блока Function Caller должны соответствовать точно.

Протестируйте вызов функции

  1. Добавьте блок Sine Wave, чтобы обеспечить тестовые данные для входа и блока Scope, чтобы просмотреть результаты выхода.

  2. Запустите симуляцию. Входная синусоида с амплитудой 2 удвоен.

Используйте блок MATLAB function, чтобы вызвать Функциональный блок Simulink

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

  1. Добавьте блок MATLAB Function в свою модель.

  2. Дважды кликните блок, который открывает редактор MATLAB®. Введите вызов функции y1 = timestwo(x1).

    Примечание

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

    Примечание

    MATLAB Function блокирует только поддержку дискретные и фиксированные-в-незначительном шаги расчета.

  3. Добавьте и установите блок Simulink Function как описано в, Создают функцию Simulink использование Функционального блока Simulink.

Протестируйте вызов функции

  1. Добавьте блок Sine Wave, чтобы обеспечить тестовые данные для входа и блока Scope, чтобы просмотреть результаты выхода.

  2. Для блока Sine Wave, набор Sample time к 0.01. Для модели откройте диалоговое окно Configuration Parameters для панели решателя. Установите Type на Fixed-step и Fixed-step size к 0.01.

  3. Запустите симуляцию.

Используйте диаграмму Stateflow, чтобы вызвать Функциональный блок Simulink

Настройте диаграмму Stateflow, чтобы отправить данные через входной параметр с блоком Simulink Function и получить данные назад от функции до выходного аргумента.

  1. Добавьте диаграмму Stateflow в свою модель Simulink. Дважды кликните на Диаграмме Simulink. В поле поиска введите chart, и затем от результатов поиска, выберите Chart.

  2. Дважды кликните график, чтобы открыть его.

  3. От панели инструментов левой стороны перетащите значок перехода по умолчанию на график.

  4. Добавьте входной порт в график. Откройте Model Explorer. На левой панели выберите Chart. В меню выберите Add> Data. Установите Name на x1 и Scope к Input.

    Примечание

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

  5. Добавьте выходной порт в график. В меню выберите Add> Data. Установите Name на y1 и Scope к Output.

  6. Добавьте блок Sine Wave и сигнал подключения выход к входному порту графика. Добавьте блок Scope и вход connect к выходному порту графика.

  7. Отредактируйте код перехода, чтобы вызвать функцию. Например, чтобы вызвать блок Simulink Function, введите:

    {y1=timestwo_sf(x1);}

    Примечание

    Входные сигналы к диаграмме Stateflow могут быть или непрерывными или дискретными.

  8. Добавьте и установите блок Simulink Function как описано в, Создают функцию Simulink использование Функционального блока Simulink.

Протестируйте вызов функции

  1. Добавьте блок Sine Wave, чтобы обеспечить тестовые данные для входа и блока Scope, чтобы просмотреть результаты выхода.

  2. Для блока Sine Wave, набор Sample time к 0.01. Для модели откройте диалоговое окно Configuration Parameters для панели решателя. Установите Type на Fixed-step и Fixed-step size к 0.01.

  3. Запустите симуляцию.

Вызовите Функциональный блок Simulink от нескольких сайтов

Если вы вызываете блок Simulink Function из нескольких сайтов, все сайты вызова совместно используют состояние функции. Например, предположите, что у вас есть диаграмма Stateflow с двумя вызовами и двумя блоками Function Caller с вызовами той же функции.

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

Блок Unit Delay имеет состояние, потому что значение блока является персистентным между вызовами от двух блоков Function Caller и диаграммы 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.

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

Блоки

Похожие темы