exponenta event banner

Вызовы функции Simulink: Блок вызова функции, Блок функции MATLAB, Диаграмма статусов

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

  • Блоки вызова функции

  • Функциональные блоки MATLAB

  • Диаграммы Stateflow ®

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

Чтобы открыть законченную модель с функциями Simulink и вызывающими функциями, см. раздел ex_simulink_functions_and_function_callers.

Использование блока вызова функции для вызова блока функции Simulink

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

  1. Добавьте в модель блок вызывающего абонента функции.

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

    Примечание

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

  3. Добавьте и настройте функциональный блок Simulink, как описано в разделе Создание функции Simulink с помощью функционального блока Simulink.

    Примечание

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

Проверка вызова функции

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

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

Использование функционального блока MATLAB для вызова функционального блока Simulink

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

  1. Добавьте в модель функциональный блок MATLAB.

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

    Примечание

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

    Примечание

    Функциональные блоки MATLAB поддерживают только дискретное и фиксированное время выборки.

  3. Добавьте и настройте функциональный блок Simulink, как описано в разделе Создание функции Simulink с помощью функционального блока Simulink.

Проверка вызова функции

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

  2. Для блока синусоидальной волны установите значение «Sample time» (Время выборки). 0.01. Для модели откройте диалоговое окно Параметры конфигурации (Configuration Parameters) на панели решателя. Задать тип для Fixed-step и Фиксированный размер шага до 0.01.

  3. Запустите моделирование.

Для вызова функционального блока Simulink используется диаграмма Stateflow

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

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

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

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

  4. Добавьте входной порт к диаграмме. Откройте обозреватель моделей. На левой панели выберите Chart. В меню выберите Добавить > Данные. Задать для имени значение x1 и Объем по Input.

    Примечание

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

  5. Добавьте выходной порт к диаграмме. В меню выберите Добавить > Данные. Задать для имени значение y1 и Объем по Output.

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

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

    {y1=timestwo_sf(x1);}

    Примечание

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

  8. Добавьте и настройте функциональный блок Simulink, как описано в разделе Создание функции Simulink с помощью функционального блока Simulink.

Проверка вызова функции

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

  2. Для блока синусоидальной волны установите значение «Sample time» (Время выборки). 0.01. Для модели откройте диалоговое окно Параметры конфигурации (Configuration Parameters) на панели решателя. Задать тип для Fixed-step и Фиксированный размер шага до 0.01.

  3. Запустите моделирование.

Вызов функционального блока Simulink из нескольких узлов

При вызове блока функции Simulink из нескольких узлов все узлы вызова совместно используют состояние функции. Например, предположим, что имеется диаграмма 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 показывают подобное поведение. Единственным отличием является сдвиг наблюдаемого сигнала из-за последовательности выполнения вызовов функции.

Диагностические настройки с несколькими вызывающими абонентами

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

Выберите решатель с фиксированным шагом. Задайте для параметра Обработать каждую дискретную скорость как отдельную задачу следующее:

  • Снимите флажок (однозадачность), а затем установите для параметра Single task rate transition значение none (по умолчанию), warning, или error.

  • Выберите (многозадачность), а затем установите для параметра Многозадачная скорость перехода значение error (по умолчанию) или warning.

См. также

Блоки

Связанные темы