В этом примере показано, как получить доступ и изменить содержимое структуры Stateflow® или массив структур Stateflow. Структура Stateflow является типом данных, который вы задаете от
объект. Можно использовать структуры Stateflow, чтобы связать данные различных размеров и типов вместе в один объект данных. Для получения дополнительной информации смотрите доступ к Сигналам Шины Через Структуры Stateflow.Simulink.Bus
(Simulink)
Чтобы индексировать подструктуры и поля структур Stateflow, используйте запись через точку. Первая часть имени идентифицирует первичную структуру. Последующие части идентифицируют дочерние элементы вдоль иерархического пути. Дочерние элементы могут быть отдельными полями или полями, которые содержат другие структуры (также названный подструктурами). Имена полей структуры Stateflow совпадают с именами элементов Simulink.Bus
объект, который задает структуру. Когда поле содержит вектор, матрицу или массив, можно получить доступ к его элементам при помощи обозначения индексации, поддержанного языком действия графика.
Например, график в этой модели содержит входную структуру (in
), структура output (out
), локальная структура (localbus
), и локальный массив структур (subBusArray
).
График задает входную структуру in
, структура output out
, и локальная структура localbus
при помощи Simulink.Bus
объект BusObject
. Эти структуры имеют четыре поля: sb
A
B
, и c
.
Поле sb
подструктура, заданная от Simulink.Bus
объект SubBus
. Эта подструктура имеет одно поле под названием ele
.
График задает локальный массив структур subBusArray
при помощи Simulink.Bus
объект SubBus
. Массив имеет размер 4. Каждым элементом в массиве является структура с одним полем под названием ele
.
Этот список иллюстрирует выражения, которые комбинируют запись через точку и числовые индексы на основе технических требований структуры для этого примера:
in.c
— Поле c
из входной структуры in
in.a(1)
— Первый элемент векторного поля a
из входной структуры in
out.sb
— Подструктура sb
из структуры output out
out.sb.ele
— Поле ele
из подструктуры out.sb
out.sb.ele(2,2)
— Элемент во второй строке, втором столбце поля ele
из подструктуры out.sb
subBusArray(1)
— Первый элемент массива структур subBusArray
subBusArray(1).ele
— Поле ele
из структуры subBusArray(1)
subBusArray(1).ele(3,4)
— Элемент в третьей строке, четвертом столбце поля ele
из структуры subBusArray(1)
Поскольку график использует MATLAB в качестве языка действия, вы получаете доступ к элементам массивов в этом примере при помощи индексации на основе одной, разграниченной круглыми скобками. В графиках, которые используют C в качестве языка действия, используйте основанную на нуле индексацию, разграниченную скобками. Для получения дополнительной информации смотрите Поддерживаемые Операции для Векторов и Матриц.
Можно записать в любую структуру Stateflow, которая имеет осциллограф кроме Input
. Можно присвоить значения целой структуре подструктуре, или к одному полю.
Чтобы присвоить одну структуру другой структуре, задайте обе структуры от того же Simulink.Bus
объект в базовом рабочем пространстве.
Чтобы присвоить одну структуру подструктуре отличной структуры (или наоборот), задайте структуру и подструктуру от того же Simulink.Bus
объект.
Чтобы присвоить поле одной структуры к полю другой структуры, поля должны иметь тот же тип и размер. Можно задать структуры Stateflow от различного Simulink.Bus
объекты.
Например, график в этом примере делает эти присвоения:
localbus = sb2abc(in.sb)
— Структура localbus
и выходной аргумент MATLAB® функционирует sb2abc
заданы от того же Simulink.Bus
объект BusObject
. Функция разлагает свой вход на три компонента: вектор, 3-на-2 матрица и скаляр. Функция возвращает эти компоненты как поля a
B
, и c
из его выхода. Для получения дополнительной информации об этой функции смотрите доступ к Сигналам Шины Simulink в функциях MATLAB.
subBusArray(1) = in.sb
— Структура subBusArray(1)
и подструктура in.sb
заданы от того же Simulink.Bus
объект SubBus
.
subBusArray(2) = abc2sb(in)
— Структура subBusArray(2)
и выходной аргумент графической функции abc2sb
заданы от того же Simulink.Bus
объект SubBus
. Функция комбинирует значения полей a
B
, и c
от его входа и перестраивает их в 3х3 матрице типа int8
. Это возвращает эту матрицу как поле ele
из его выхода.
subBusArray(3).ele = transpose(in.sb.ele)
— Поле subBusArray(3).ele
имеет тот же тип и размер как результат transpose(in.sb.ele)
. Оба имеют размер 3х3 матрицы типа int8
.
subBusArray(4).ele = int8(magic(3))
— Поле subBusArray(4).ele
имеет тот же тип и размер как результат int8(magic(3))
. Оба имеют размер 3х3 матрицы типа int8
.
out = localbus
— Оба out
и localbus
заданы от того же Simulink.Bus
объект BusObject
.
out.sb = subBusArray(idx)
— Подструктура out.sb
и структура subBusArray(idx)
заданы от того же Simulink.Bus
объект SubBus
.
Когда вы симулируете пример, график использует значения поля sb
из входной структуры, чтобы заполнить поля a
B
, и c
из структуры output. Параметр idx
выбирает элемент массива структур subBusArray
использовать в качестве подструктуры sb
из выхода. В этом примере, idx
равняется 2, таким образом, график использует значения полей a
B
C
из входной структуры, чтобы заполнить подструктуру.
Когда вы используете другие значения для idx
, подструктура out.sb
содержит те же значения как in.sb
, транспонирование in.sb
, или 3х3 магический квадрат.
Simulink.Bus
(Simulink)