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

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

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

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

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

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

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

См. также

| (Simulink)

Похожие темы

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