Вычислите выход на основе размера входного сигнала

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

См. также

Похожие темы