Функция Simulink ® - это графический объект, который заполняется блоками Simulink и вызывает действия состояний и переходов. Функции Simulink поддерживаются только в диаграммах Stateflow ® в моделях Simulink. Дополнительные сведения см. в разделе Повторное использование компонентов Simulink в диаграммах Stateflow.
Целью этого учебного пособия является использование функции Simulink в диаграмме Stateflow для улучшения конструкции модели с именем old_sf_car.

old_sf_car модель содержит подсистему вызова функции с именем Threshold Calculation и диаграмму Stateflow с именем shift_logic. Два блока взаимодействуют следующим образом:
Диаграмма транслирует выходное событие CALC_TH для запуска подсистемы вызова функций.
Подсистема использует таблицы подстановки для интерполяции двух значений для диаграммы shift_logic.
Выходы подсистемы (up_th и down_th) непосредственно в схему в качестве входных данных.
Другие блоки в модели не имеют доступа к выходам подсистемы.
Подсистему вызова функции можно заменить функцией Simulink на диаграмме, если:
Подсистема выполняет вычисления, требуемые диаграммой.
Другие блоки в модели не нуждаются в доступе к выходам подсистемы.
В следующих разделах описывается, как заменить подсистему вызова функции в модели Simulink функцией Simulink в диаграмме Stateflow. Эта процедура позволяет уменьшить количество объектов в модели при сохранении тех же результатов моделирования.
| Шаг | Задача | Ссылка |
|---|---|---|
| 1 | Откройте модель. | Открытие модели |
| 2 | Переместите содержимое подсистемы вызова функции в функцию Simulink на диаграмме. | Добавление функции Simulink в диаграмму |
| 3 | Изменение объема определенных данных на уровне диаграммы на Local. | Изменение области данных диаграммы |
| 4 | Замените широковещательную передачу события вызовом функции. | Обновить действие состояния в диаграмме |
| 5 | Убедитесь, что определены входы и выходы функций. | Добавление данных в диаграмму |
| 6 | Удаление неиспользуемых элементов в модели. | Удаление неиспользуемых элементов в модели |
Примечание
Чтобы пропустить шаги преобразования, откройте модель sf_car.
Открытие модели old_sf_car. При моделировании модели эти результаты отображаются в двух областях.


Выполните следующие действия, чтобы добавить функцию Simulink в диаграмму shift_logic.
В модели Simulink щелкните правой кнопкой мыши блок «Расчет порога» в левом нижнем углу и выберите в контекстном меню «Вырезать».

Откройте диаграмму shift_logic.
На диаграмме щелкните правой кнопкой мыши ниже selection_state и выберите «Вставить» в контекстном меню.
Разверните новую функцию Simulink, чтобы сигнатура помещалась в поле функции.

Совет
Чтобы изменить размер шрифта функции, щелкните правой кнопкой мыши поле функции и выберите новый размер в меню «Размер шрифта».
Расширение границы selection_state для включения новой функции.

Примечание
Функция находится в этом состоянии, а не на уровне диаграммы, поскольку ни одно другое состояние диаграммы не требует вывода функции up_th и down_th. См. раздел Привязка функции Simulink к состоянию.
Переименование функции Simulink из Threshold_Calculation кому calc_threshold путем ввода [down_th, up_th] = calc_threshold(gear, throttle) в поле функции.
В обозревателе моделей измените область данных на уровне диаграммы. up_th и down_th кому Local потому что вычисления для этих данных теперь происходят внутри диаграммы.
В редакторе Stateflow измените during действие в selection_state вызов функции Simulink calc_threshold.
during: [down_th, up_th] = calc_threshold(gear, throttle);

Потому что функция calc_threshold берет throttle в качестве входных данных необходимо определить эти данные в качестве входных данных диаграммы. (Дополнительные сведения см. в разделе Добавление данных потока состояний.)
Добавление входных данных throttle к диаграмме со свойством Port, равным 1.
Использование порта 1 предотвращает перекрытие сигнальных линий в модели Simulink.
В модели Simulink добавьте сигнальную линию для throttle между входом блока Engine и входом диаграммы shift_logic.
В обозревателе моделей удалите событие вывода вызова функции. CALC_TH поскольку блок вычисления порога больше не существует.
Удалите все пунктирные сигнальные линии из модели.
Ваша новая модель выглядит примерно так:

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