В этом примере показано, как использовать структуры 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 structY который имеет ту же структуру что и 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)