В этом примере показано, как изменить размер выходных данных на графике 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 показывает количество строк и столбцов в сигналах переменного размера.