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

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

Смотрите также

Похожие темы