В этом примере показано, как изменить размер выходных данных в диаграмме Stateflow ® во время моделирования.
В этой модели диаграмма Stateflow называется VarSizeSignalSource использует временную логику для генерации сигнала переменного размера. Вторая диаграмма под названием SizeBasedProcessing вычисляет выходной сигнал на основе размера сигнала, генерируемого первой диаграммой. Блоки отображения показывают значения и размер сигналов.

Диаграмма Stateflow VarSizeSignalSource использует MATLAB ® в качестве языка действий. Временная логика на этой диаграмме запускает переходы между четырьмя состояниями. Каждое состояние генерирует выходное значение с различным размером: скаляр, двухэлементный вектор-столбец, четырехэлементный вектор-строка и матрица 2 на 4.

Диаграмма ведет себя как исходный блок. У него нет входа и один выход переменного размера, y. Для выходов переменного размера необходимо явно указать размер и верхние границы для каждого размера. В этом случае свойство Variable size для 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 показывает количество строк и столбцов в сигналах переменного размера.
