В этом примере показано, как использовать структуры MATLAB ® в графике Stateflow ®. Структуры MATLAB позволяют объединять данные разных размеров и типов в одну переменную в функции MATLAB. Вы можете создать структуру MATLAB для:
Сохраните связанные данные в локальной или постоянной переменной функции MATLAB
Чтение или запись в локальную структуру Stateflow
Интерфейс с сигналом шины Simulink ® во входном или выходном порте
Функции MATLAB поддерживают только невиртуальные шины. Для получения дополнительной информации смотрите Типы составных сигналов (Simulink).
В этом примере диаграмма Stateflow обрабатывает данные из одного сигнала шины Simulink и выводит результат в другой сигнал шины Simulink. И вход, и выход сигналы шины заданы Simulink.Bus
(Simulink) объект BusObject
. Эти автобусы имеют четыре поля: sb
, a
, b
, и c
. Полевые sb
является также шинным сигналом, заданным Simulink.Bus
SubBus объекта
. В нем есть одно поле, называемое ele
.
На графике сигналы шины Simulink взаимодействуют со структурами Stateflow in
и out
. Функции abc2sb
и sb2abc
извлеките информацию из структуры входа и сохраните ее в локальных структурах Stateflow localbus
и subbus
. Затем график записывает в структуру output путем объединения значений этих локальных структур. Для получения дополнительной информации о структурах Stateflow, смотрите Сигналы шины доступа через структуры Stateflow.
Функция MATLAB ® sb2abc
принимает структуру Stateflow типа SubBus
и возвращает структуру типа Stateflow BusObject
. Функция разлагает значение поля ele
из его входов в три компонента: вектор, матрица 3 на 2 и скаляр. Функция сохраняет эти компоненты в локальном MATLAB struct
Y
который имеет ту же структуру что и Simulink.Bus
BusObject объекта
. Затем функция присваивает значение MATLAB struct
Y
в структуру output y
.
function y = sb2abc(u)
% extract data from input structure
E = int8(magic(3)); A = double(u.ele(1:2,1)); B = uint8(u.ele(:,2:3)); C = double(u.ele(3,1));
% create local structure
X = struct('ele',E); Y = struct('sb',X,'a',A,'b',B,'c',C);
% assign value to output structure
y = Y;
end
В функции MATLAB получите доступ к локальной структуре Stateflow или интерфейсу с сигналом шины Simulink путем определения входной и выходной структур для функции:
В базовом рабочем пространстве создайте Simulink.Bus
объект, который определяет тип данных структуры.
На панели «Символы» выберите входной параметр функции или вывод.
В Property Inspector задайте значение свойства Type Bus: <object name>
. Замените < имя объекта > на имя Simulink.Bus
объект, который определяет структуру Stateflow.
Для примера в функции sb2abc
:
Свойство Type структуры входа u
задается как Bus: SubBus
.
Свойство Type структуры output y
задается как Bus: BusObject
.
Для получения дополнительной информации смотрите Задать структуры Stateflow.
Чтобы хранить связанные данные в одной переменной внутри функции MATLAB, можно создать MATLAB struct
как локальная или постоянная переменная. Для примера - функция sb2abc
задает две локальные структуры MATLAB, чтобы временно сохранить данные, извлеченные из структуры входа u
перед записью в структуру output y
:
X
является скалярным struct
с одним полем, называемым ele
. Это поле содержит матрицу типа 3 на 3 int8
, который соответствует структуре Simulink.Bus
SubBus объекта
.
Y
является скалярным struct
с четырьмя полями: sb
является подструктурой типа SubBus
, a
является двумерным вектором типа double
, b
- матрица типа 3 на 2 uint8
, и c
является скаляром типа double
. Эти поля соответствуют структуре Simulink.Bus
BusObject объекта
.
Для получения дополнительной информации смотрите Задать Скалярные Структуры для Генерации Кода (Simulink).
struct
| Simulink.Bus
(Simulink)