Соедините структуры в функциях MATLAB с сигналами шины Simulink

В этом примере показано, как использовать структуры MATLAB ® в графике Stateflow ®. Структуры MATLAB позволяют объединять данные разных размеров и типов в одну переменную в функции MATLAB. Вы можете создать структуру MATLAB для:

  • Сохраните связанные данные в локальной или постоянной переменной функции MATLAB

  • Чтение или запись в локальную структуру Stateflow

  • Интерфейс с сигналом шины Simulink ® во входном или выходном порте

Функции MATLAB поддерживают только невиртуальные шины. Для получения дополнительной информации смотрите Типы составных сигналов (Simulink).

Определите структуры в функциях MATLAB

В этом примере диаграмма 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 путем определения входной и выходной структур для функции:

  1. В базовом рабочем пространстве создайте Simulink.Bus объект, который определяет тип данных структуры.

  2. На панели «Символы» выберите входной параметр функции или вывод.

  3. В 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).

См. также

| (Simulink)

Похожие темы