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

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

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

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

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

  • График задает входную структуру in, структура output out, и локальная структура localbus при помощи Simulink.Bus объект BusObject. Эти структуры имеют четыре поля: sbAB, и c. Поле sb подструктура, заданная от Simulink.Bus объект SubBus.

  • График задает локальную структуру subbus при помощи Simulink.Bus объект SubBus. Эта структура имеет одно поле под названием ele.

Этот список иллюстрирует, как диаграмма Stateflow разрешает символы в записи через точку для индексации полей этих структур:

  • in.c — Поле c из входной структуры in.

  • out.sb — Подструктура sb из структуры output out.

  • in.a(1) — Первое значение векторного поля a из входной структуры in.

  • subbus.ele(2,2) — Значение во второй строке, втором столбце поля ele из локальной структуры subbus.

  • in.sb.ele(3,4) — Значение в третьей строке, четвертом столбце поля ele из подструктуры in.sb.

Присвойте значения структурам и полям

Можно присвоить значения любой структуре Stateflow, подструктуре или полю структуры с осциллографом, отличающимся от Input.

  • Чтобы присвоить одну структуру другой структуре, задайте обе структуры от того же Simulink.Bus объект в базовом рабочем пространстве.

  • Чтобы присвоить одну структуру подструктуре отличной структуры (или наоборот), задайте структуру и подструктуру от того же Simulink.Bus объект.

  • Чтобы присвоить поле одной структуры к полю другой структуры, поля должны иметь тот же тип и размер. Можно задать структуры Stateflow от различного Simulink.Bus объекты.

Этот список представляет допустимые и недопустимые присвоения структуры на основе технических требований структуры для этого примера:

  • in = localbus; — Недопустимый. Вы не можете записать, чтобы ввести структуры.

  • out = localbus; — Допустимый. Оба out и localbus заданы от того же Simulink.Bus объект BusObject.

  • subbus = in; — Недопустимый. Структуры subbus и in заданы от различного Simulink.Bus объекты.

  • subbus = in.sb; — Допустимый. Структура subbus и подструктура in.sb заданы от того же Simulink.Bus объект SubBus.

  • in.sb = subbus; — Недопустимый. Вы не можете записать в подструктуры входных структур.

  • out.sb = subbus; — Допустимый. Подструктура out.sb и структура subbus заданы от того же Simulink.Bus объект SubBus.

  • in.c = out.c; — Недопустимый. Вы не можете записать в поля входных структур.

  • out.sb.ele = subbus.ele; — Допустимый. Поле out.sb.ele имеет тот же тип и размер как поле subbus.ele (3х3 матрицы типа int8).

  • localbus.a(1) = in.c; — Допустимый. Значение localbus.a(1) имеет тот же тип и размер как поле in.c (скаляры типа double).

Например, в действии записи для A состояния, график вызывает функции abc2sb и sb2abc и хранит результаты в локальных структурах localbus и subbus. Затем график пишет в структуру output out путем объединения значений локальных структур localbus и subbus.

Графическая функция abc2sb берет структуру типа BusObject и возвращает структуру типа SubBus. Функция комбинирует значения полей aB, и c от его входа и перестраивает их в 3х3 матрице типа int8. Затем функция хранит эту матрицу как поле ele из структуры output.

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

Запустите симуляцию

Когда вы симулируете пример, график использует значения поля sb из входной шины, чтобы заполнить поля aBC из выходной шины. График также использует значения полей aBC из входной шины, чтобы заполнить поле sb из выходной шины.

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

|

Похожие темы