Индексируйте и присвойте значения структурам Stateflow

В этом примере показано, как получить доступ и изменить содержимое структуры Stateflow® или массив структур Stateflow. Структура Stateflow является типом данных, который вы задаете от Simulink.Bus (Simulink) объект. Можно использовать структуры Stateflow, чтобы связать данные различных размеров и типов вместе в один объект данных. Для получения дополнительной информации смотрите доступ к Сигналам Шины Через Структуры Stateflow.

Индексируйте подструктуры и поля

Чтобы индексировать подструктуры и поля структур Stateflow, используйте запись через точку. Первая часть имени идентифицирует первичную структуру. Последующие части идентифицируют дочерние элементы вдоль иерархического пути. Дочерние элементы могут быть отдельными полями или полями, которые содержат другие структуры (также названный подструктурами). Имена полей структуры Stateflow совпадают с именами элементов Simulink.Bus объект, который задает структуру. Когда поле содержит вектор, матрицу или массив, можно получить доступ к его элементам при помощи обозначения индексации, поддержанного языком действия графика.

Например, график в этой модели содержит входную структуру (in), структура output (out), локальная структура (localbus), и локальный массив структур (subBusArray).

  • График задает входную структуру in, структура output out, и локальная структура localbus при помощи Simulink.Bus объект BusObject. Эти структуры имеют четыре поля: sbAB, и 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 матрица и скаляр. Функция возвращает эти компоненты как поля aB, и c из его выхода. Для получения дополнительной информации об этой функции смотрите доступ к Сигналам Шины Simulink в функциях MATLAB.

  • subBusArray(1) = in.sb — Структура subBusArray(1) и подструктура in.sb заданы от того же Simulink.Bus объект SubBus.

  • subBusArray(2) = abc2sb(in) — Структура subBusArray(2) и выходной аргумент графической функции abc2sb заданы от того же Simulink.Bus объект SubBus. Функция комбинирует значения полей aB, и 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 из входной структуры, чтобы заполнить поля aB, и c из структуры output. Параметр idx выбирает элемент массива структур subBusArray использовать в качестве подструктуры sb из выхода. В этом примере, idx равняется 2, таким образом, график использует значения полей aBC из входной структуры, чтобы заполнить подструктуру.

Когда вы используете другие значения для idx, подструктура out.sb содержит те же значения как in.sb, транспонирование in.sb, или 3х3 магический квадрат.

Смотрите также

(Simulink)

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте