В этом примере показано, как читать из и записать в сигналы шины Simulink® в функции 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
. Функциональный sb2abc
информация об извлечениях от входной структуры и хранилищ это в локальной структуре Stateflow localbus
. Затем график пишет в структуру output путем объединения значений локальной структуры и одного из элементов массива структур subBusArray
. Для получения дополнительной информации о доступе и изменении содержимого структуры Stateflow или массива структур Stateflow, смотрите индекс и Значения Присвоения к Структурам Stateflow.
Функция MATLAB® sb2abc
берет структуру Stateflow типа SubBus
и возвращает структуру Stateflow типа BusObject
. Функция анализирует значение поля ele
от его входа на три компонента: вектор, 3-на-2 матрица и скаляр. Функция хранит эти компоненты в локальном MATLAB
это имеет те же поля как struct
Simulink.Bus
объект BusObject
. Затем функция присваивает значение struct
MATLAB к структуре output
y
.
function y = sb2abc(u)
% extract data from input structure
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',int8(zeros(3))); 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 можно создать struct
MATLAB как локальная или персистентная переменная. Например, функциональный
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)