В этом примере показано, как изменить размер выходных данных в графике Stateflow® в процессе моделирования.
В этой модели, диаграмме Stateflow под названием VarSizeSignalSource
использует временную логику, чтобы сгенерировать сигнал переменного размера. Второй график под названием SizeBasedProcessing
вычисляет выход на основе размера сигнала, сгенерированного первым графиком. Отобразитесь блоки показывают значения и размер сигналов.
Диаграмма Stateflow VarSizeSignalSource
использование MATLAB® как язык действия. Временная логика в этом графике инициировала переходы между четырьмя состояниями. Каждое состояние генерирует выходное значение с различным размером: скаляр, двухэлементный вектор-столбец, четырехэлементный вектор-строка, и 2 4 матрица.
График ведет себя как исходный блок. Это не имеет никакого входа и одного переменного размера выход, y
. Для переменного размера выходные параметры необходимо явным образом задать размер и верхние границы для каждой размерности. В этом случае, Переменное свойство размера для y
включен и его свойство Size установлено в [2 4]
, максимальный размер для сигнала.
В графиках, которые используют MATLAB в качестве языка действия, состояние и действия перехода могут читать и записать непосредственно в данные переменного размера. Например, действия входа состояний в этом графике явным образом вычисляют значение y
.
Диаграмма Stateflow SizeBasedProcessing
использование C как язык действия. Эти графики могут обмениваться данными переменного размера с другими графиками и блоками в модели. Однако состояние и действия перехода в графиках C не могут читать из или записать в данные переменного размера непосредственно. Все расчеты включающие данные переменного размера должны произойти в функциях MATLAB, функциях Simulink® и таблицах истинности MATLAB в графике.
Этот график имеет два объекта данных переменного размера:
Введите u
сигнал переменного размера, сгенерированный VarSizeSignalSource
график. Свойство Size для u
установлен в -1
указать, что этот вход наследовал свой размер от модели Simulink. Обратите внимание на то, что только входные параметры к графикам C могут наследовать свой размер.
Выведите y
сигнал переменного размера, размер которого и значение зависят от ли u
скаляр, вектор или матрица. Свойство Size для u
установлен в [2 4]
, максимальный размер для сигнала.
Поскольку этот график использует C в качестве языка действия, имена данных переменного размера не появляются в логике перехода или состояниях активности. Вместо этого логика перехода в графике вызывает функцию MATLAB readInputSize
определить размер входа u
. Точно так же действия в состояниях вызывают функцию MATLAB computeOutput
произвести значения различного размера для переменного размера выход y
. Поскольку функции MATLAB могут получить доступ к данным уровня графика непосредственно, вы не должны передавать данные переменного размера как вводы или выводы к этим функциям.
Функция MATLAB isScalarInput
определяет размер входа u
графика. Этот сигнал, который сгенерирован графиком
VarSizeSignalSource
, может быть скаляр, вектор столбцов 2 на 1, вектор-строка 1 на 4, или 2 4 матрица. Функция хранит размерности u
как уровень графика выход z
.
function readInputSize %#codegen z = size(u); end
Функция MATLAB computeOutput
вычисляет значение графика выход y
на основе размера и значения входа u
графика.
Если u
скаляр, функциональные присвоения к y
скалярное значение нуля.
Если u
вектор-столбец, функция вычисляет синуса каждого из его элементов и хранит их в y
.
Если u
вектор-строка, функция вычисляет косинуса каждого из его элементов и хранит их в y
.
Если u
матрица, функция вычисляет квадратного корня из каждого из его элементов и хранит их в y
.
В каждом случае, значении выхода y
имеет тот же размер как вход u
.
function computeOutput(key) %#codegen switch key case 0 % scalar y = 0; case 1 % column vector y = sin(u); case 2 % row vector y = cos(u); case 3 % matrix y = sqrt(u); end end
Вкладки, расположенные выше Панели Проводника, позволяют вам переключиться между моделью Simulink и этими двумя диаграммами Stateflow. В процессе моделирования:
Анимации графика показывают активное состояние для каждого графика, циклически повторяющегося между Scalar
, ColumnVector
, RowVector
, и VectorPartial
, и Matrix
состояния.
В модели Simulink отображение блокирует Signal Source
и Processed Signal
периодически показывайте между одним и восемью значениями для сигналов переменного размера.
Блок Size of Signal
отображения и блок Scope показывает количество строк и столбцов в сигналах переменного размера.