exponenta event banner

Подключение структур в функциях 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. Затем диаграмма записывает данные в структуру вывода путем объединения значений этих локальных структур. Дополнительные сведения о структурах Stateflow см. в разделе Сигналы шины доступа через структуры Stateflow.

Функция MATLAB ® sb2abc принимает структуру Stateflow типа SubBus и возвращает структуру Stateflow типа BusObject. Функция разлагает значение поля ele из его ввода в три компонента: вектор, матрица 3 на 2 и скаляр. Эти компоненты сохраняются в локальном MATLAB. struct Y который имеет ту же структуру, что и Simulink.Bus объект BusObject. Затем функция присваивает значение MATLAB. struct Y в структуру вывода 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. В инспекторе свойств задайте для свойства «Тип» значение Bus: <object name>. Замените < имя объекта > на имя Simulink.Bus объект, определяющий структуру потока состояний.

Например, в функции sb2abc:

  • Свойство Type структуры ввода u указывается как Bus: SubBus.

  • Свойство Type структуры вывода y указывается как Bus: BusObject.

Дополнительные сведения см. в разделе Определение структур потока состояний.

Определение локальных и постоянных структурных переменных

Для сохранения связанных данных в одной переменной в функции MATLAB можно создать MATLAB. struct как локальная или постоянная переменная. Например, функция sb2abc определяет две локальные структуры MATLAB для временного хранения данных, извлеченных из структуры ввода u перед записью в структуру вывода 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).

См. также

| (Симулинк)

Связанные темы