Взаимодействие между Simulink и Stateflow может осуществляться по-разному. Каждая Stateflow-диаграмма является подсистемой Simulink-модели и поэтому может как запускаться другими подсистемами, так и запускать их. Stateflow-диаграммы запускаются на выполнение каждый раз, когда они модифицированы Simulink-моделью в процессе моделирования. Диаграмма Stateflow может быть модифицирована либо в том случае, когда это инициировано сигналом Simulink-модели (событием для Stateflow-диаграммы или поступающей на вход Stateflow-диаграммы переменной), либо на каждом шаге дискретизации модельного времени. В свою очередь и Stateflow-диаграмма имеет возможность запускать другие Simulink-подсистемы. С этой возможностью Stateflow нас знакомит группа примеров Function Call Outputs (Выходы вызова функции). Выходы вызова функции используются, чтобы управлять процессом активизации других Stateflow-диаграмм или Simulink-подсистем.
Первый пример - function call (subsystem and chart) вызов функции (в подсистеме и диаграмме)
Запустим Simulink-модель sf_eventfcn.mdl.
В этом демонстрационном примере Stateflow-диаграмма с именем 'Source' управляет активизацией другой Stateflow-диаграммы Function-Call Chart и подсистемы Function-Call Subsystem. Диаграмма Function-Call Chart активизируется после каждого 3-го временного шага моделирования сигналом 'out_fcn' вызова функции. Подсистема Function-Call Subsystem активизируется после каждого 2-го временного шага моделирования, получая сигнал вызова функции с именем 'out_fcn_two'. Логика работы Stateflow-диаграммы 'Source' представлена на следующем рисунке.
То, как описаны используемые в диаграмме 'Source' события и переменные, можно увидеть в окне обозревателя Stateflow Explorer.
Работа Function-Call Chart понятна из следующей диаграммы.
Для нее имеет место следующее описание переменных.
Подсистема Function-Call Subsystem организована так.
В моменты вызова подсистемы синусоидальный сигнал складывается с поступающим на первый вход постоянным единичным сигналом, а результат сохраняется на выходе неизменным до следующего обращения к этой подсистеме.
Графики выходных сигналов представлены на следующих двух рисунках.
На этих графиках интервалы дискретизации времени составляют 3 единицы для диаграммы Function-Call Chart и 2 единицы для подсистемы Function-Call Subsystem. Это легко увидеть, если увеличить масштаб изображения по оси X.
Второй пример - function call to multiple charts вызов функции в нескольких диаграммах
Так выглядит Simulink-модель sf_multfuncout.mdl.
Цель этого демонстрационного примера - проиллюстрировать применение обратной связи при использовании выходов вызова функции. Диаграмма 'Source' посылает сигнал 'out_fcn_two' когда переходит от состояния A к состоянию B или наоборот.
Каждый раз сигнал 'out_fcn_two' активизирует диаграмму 'Counter'.
Диаграмма 'Counter' выдает на выход переменную 'out_one', которая поступает назад к 'Source' как переменная 'Input from Simulink'. Если диаграмма 'Source' находится в состоянии B, то происходит переход из состояния B в состояние C, если при этом величина сигнала 'out_one' больше 10. Если этот переход состоялся, то новое событие вызова функции, 'out_fcn' отправляется диаграмме 'Delay' ('Задержка').
Диаграмма 'Delay' добавляет к своему выходу 'out_two' единицу каждый раз, когда активизируется. Из диаграммы 'Scope' видно , что имеется начальная задержка, которая определяется временем, необходимым для выдачи первого события 'out_fcn'.