Когда вы используете числовые переменные MATLAB®, чтобы установить блочные значения параметров в модели, большие модели могут накопить много переменных, увеличивание усилия по обслуживанию и заставление имен переменных растут в длине.
Вместо этого можно организовать эти значения параметров в структуры. Каждая структура является единственной переменной, и каждое поле структуры хранит числовое значение параметров. Можно присвоить понятные имена к структурам, подструктурам и полям, чтобы указать на цель каждого значения.
Используйте структуры для:
Сократите количество переменных рабочей области, которые необходимо поддержать.
Избегайте конфликтов по совпадению имен между переменными рабочей области.
Вы не можете создать две переменные, которые имеют то же имя в том же осциллографе, такой как в базовом рабочем пространстве. Когда вы создаете структуры, необходимо предоставить каждому полю имя, но несколько структур могут каждый содержать поле, которое использует то же имя. Поэтому можно использовать каждую структуру и подструктуру как пространство имен, которое препятствует тому, чтобы имена полей конфликтовали друг с другом и с другими именами переменных в том же осциллографе.
Логически наборы группы блочных значений параметров. Например, используйте вложенные структуры, чтобы ясно идентифицировать значения параметров, что каждая подсистема или сослалась на образцовое использование.
При использовании параметры маски или образцовые аргументы, чтобы передать значения параметров компонентам системы, можно использовать структуры, чтобы сократить количество отдельных параметров маски или образцовых аргументов, которые необходимо поддержать. Вместо того, чтобы передать несколько переменных, можно передать единственную переменную структуры.
Для основной информации о создании и управлении структурами MATLAB, смотрите Структуры (MATLAB). Для основной информации об установке блочных значений параметров в модели смотрите Блочные Значения параметров Набора.
Чтобы использовать структуры, чтобы инициализировать сигналы шины, смотрите, Задают Начальные условия для Сигналов Шины.
Этот пример показывает, как создать и использовать структуру параметра в модели.
Модель в качестве примера f14
использует несколько переменных от базового рабочего пространства, чтобы установить блочные значения параметров. Например, когда вы открываете модель, она создает переменные Zw
, Mw
и Mq
в базовом рабочем пространстве. Организовывать эти переменные в единственную переменную структуры:
В командной строке откройте модель в качестве примера.
f14
В командной строке создайте структуру параметра myGains
. Установите значения полей при помощи значений целевых переменных.
myGains.Zw = Zw; myGains.Mw = Mw; myGains.Mq = Mq;
В Образцовом Проводнике, на панели Иерархии модели, нажимают Base Workspace. В панели Содержимого щелкните правой кнопкой по переменному Mq
и выберите Find Where Used.
В Выборе системное диалоговое окно кликните по узлу f14 и нажмите ОК. Нажмите ОК, когда спрошено об обновлении схемы.
В панели Содержимого щелкните правой кнопкой по строке, соответствующей блоку, маркировал Gain1, и выберите Properties. Диалоговое окно блока Gain1 открывается.
Измените значение параметра Усиления от Mq
до myGains.Mq
и нажмите ОК.
В панели Содержимого щелкните правой кнопкой по строке, соответствующей блоку Transfer Fcn.1, и выберите Properties.
Измените значение содействующего параметра Знаменателя от [1,-Mq]
до [1,-myGains.Mq]
и нажмите ОК.
В панели Иерархии модели нажмите Base Workspace. Используйте Находят, Где Используется определить местоположение блоков, которые используют переменные Mw
и Zw
. В блочных диалоговых окнах замените ссылки на имена переменных согласно таблице.
Имя переменной | Заменяющее имя |
---|---|
Mw | myGains.Mw |
Zw | myGains.Zw |
Очистите старые переменные.
clear Zw Mw Mq
Каждый из измененных блочных параметров теперь использует поле структуры myGains
. Числовое значение каждого поля структуры равно значению соответствующей переменной, которую вы очистили.
Можно использовать функции Simulink.BlockDiagram.createVarStruct
и Simulink.BlockDiagram.applyVarStruct
, чтобы переместить модель, чтобы использовать единственную структуру параметра вместо нескольких переменных рабочей области. Для примера смотрите Миграцию к Параметрам Структуры.
Чтобы использовать структуру или массив структур, чтобы организовать значения параметров, которые используют тип данных кроме double
, можно явным образом задать тип, когда вы создаете структуру. Когда вы создадите структуру, используйте введенные выражения, такие как single(15.23)
, чтобы задать значения полей.
myParams.Gain = single(15.23);
Если вы хотите изменить значение поля позже, необходимо не забыть явным образом задавать тип снова. Если вы не задаете тип, значение поля использует тип данных double
вместо этого:
myParams.Gain = 15.23;
% The field 'Gain' now uses the data type 'double' instead of 'single'.
Чтобы сохранить спецификацию типа, можно использовать преобразованное в нижний индекс присвоение, чтобы присвоить новое значение полю:
% Assign value of type 'single'. myParams.Gain = single(15.23); % Assign new value while retaining type 'single'. myParams.Gain(:) = 11.79;
Чтобы совпадать с типом данных фиксированной точки, установите значение поля при помощи объекта fi
.
Объект Simulink.Parameter
позволяет вам разделять значение блочного параметра от его типа данных. При использовании объект параметра, чтобы сохранить структуру или массив структур, можно создать объект Simulink.Bus
использовать в качестве типа данных целой структуры.
Можно использовать объект шины и объект параметра, чтобы явным образом управлять:
Тип данных каждого поля. Когда вы используете этот метод, вы не должны помнить использовать введенные выражения или преобразованное в нижний индекс присвоение, чтобы установить значения полей.
Сложность, размерности и модули каждого поля.
Минимальное и максимальное значение каждого поля, если поле представляет значение настраиваемого параметра.
Форма целой структуры. Форма структуры является номером, именами и иерархией полей.
Приспособляемость структуры в коде, который вы генерируете от модели.
Создайте структуру параметра myParams
.
myParams = struct(... 'SubsystemA',struct(... 'Gain',15.23,... 'Offset',89,... 'Init',0.59),... 'SubsystemB',struct(... 'Coeffs',[5.32 7.99],... 'Offset',57,... 'Init1',1.76,... 'Init2',2.76)... );
Используйте функциональный Simulink.Bus.createObject
, чтобы создать объекты Simulink.Bus
, которые представляют структуру и подструктуры.
Simulink.Bus.createObject(myParams)
Поскольку myParams
содержит две уникальных подструктуры, функция создает три объекта Simulink.Bus
: один именованный slBus1
, чтобы представлять первичную структуру myParams
, один именованный SubsystemA
для подструктуры SubsystemA
и один именованный SubsystemB
для подструктуры SubsystemB
.
Переименуйте объект slBus1
шины как myParamsType
.
myParamsType = slBus1;
clear slBus1
Сохраните структуру myParams
в объекте Simulink.Parameter
.
myParams = Simulink.Parameter(myParams);
Свойство Value
объекта параметра содержит структуру.
Установите тип данных объекта параметра к объекту myParamsType
шины.
myParams.DataType = 'Bus: myParamsType';
Откройте Редактор Шины, чтобы просмотреть объекты шины.
buseditor
В панели Иерархии модели кликните по узлу SubsystemA. В панели Содержимого, набор полевые типы данных согласно фигуре.
Опционально, установите полевые типы данных для подструктуры SubsystemB
.
Объект параметра myParams
хранит структуру параметра. Тип данных объекта параметра является объектом myParamsType
шины. До моделирования и генерации кода, объект параметра бросает значения полей к типам данных, которые вы задали в объекте шины.
Чтобы использовать одно из полей, чтобы установить блочное значение параметров, задайте выражение, такое как myParams.SubsystemB.Init1
.
Чтобы получить доступ к значениям полей в командной строке, используйте свойство Value
объекта параметра. Поскольку объект шины управляет полевыми типами данных, вы не должны использовать введенное выражение, чтобы установить значение поля.
myParams.Value.SubsystemA.Gain = 12.79;
Объект шины строго управляет полевыми характеристиками и формой структуры. Например, если вы устанавливаете значение двухэлементного поля myParams.SubsystemB.Coeffs
к трехэлементному массиву, модель генерирует ошибку, когда вы устанавливаете блочное значение параметров. Чтобы изменить размерности поля, измените элемент Coeffs
в объекте SubsystemB
шины.
Чтобы управлять объектами шины после того, как вы создаете их, смотрите, Изменяют Объекты Шины и Сохраняют и Объекты Шины Импорта.
Предположим, что вы используете поле myParams.SubsystemA.Gain
, чтобы установить значение параметра Усиления в блоке Gain. Если вы хотите, чтобы тип данных поля совпадал с типом данных выходного сигнала блока, вы не можете полагаться на контекстно-зависимый ввод данных (см., что Контекстно-зависимые Данные Вводят). Рассмотрите использование Simulink.AliasType
или объекта Simulink.NumericType
установить тип данных поля и сигнала. Если вы не используете объект типа данных, необходимо не забыть изменять тип данных поля каждый раз, когда вы изменяете тип данных сигнала.
В командной строке создайте объект Simulink.AliasType
, который представляет тип данных single
.
myType = Simulink.AliasType; myType.BaseType = 'single';
В диалоговом окне блока Gain, на вкладке Signal Attributes, Выходные данные набора вводят к myType
.
В командной строке откройте Редактор Шины.
buseditor
В панели Иерархии модели выберите объект SubsystemA
шины. В панели Содержимого, набор тип данных поля Gain
к myType
.
Теперь, и выходной сигнал блока Gain и поле myParams.SubsystemA.Gain
структуры используют тип данных, который вы задаете при помощи свойства BaseType
myType
.
Для получения дополнительной информации об объектах типа данных, смотрите Simulink.AliasType
и Simulink.NumericType
.
Чтобы создать, измените и осмотрите переменную, значение которой является структурой, можно использовать Редактора переменных. Для получения дополнительной информации смотрите, Изменяют Структуру и Переменные типа массив В интерактивном режиме.
Чтобы далее организовать блочные значения параметров, создайте иерархию вложенных структур.
Например, предположите, что вы создаете подсистемы под названием SubsystemA
и SubsystemB
в вашей модели. Вы используете переменные, такие как Offset_SubsystemA
и Offset_SubsystemB
, чтобы установить блочные значения параметров в подсистемах.
Gain_SubsystemA = 15.23; Offset_SubsystemA = 89; Init_SubsystemA = 0.59; Coeffs_SubsystemB = [5.32 7.99]; Offset_SubsystemB = 57; Init1_SubsystemB = 1.76; Init2_SubsystemB = 2.76;
Создайте структуру параметра, которая содержит подструктуру для каждой подсистемы. Используйте значения существующих переменных, чтобы установить значения полей.
myParams = struct(... 'SubsystemA',struct(... 'Gain',Gain_SubsystemA,... 'Offset',Offset_SubsystemA,... 'Init',Init_SubsystemA),... 'SubsystemB',struct(... 'Coeffs',Coeffs_SubsystemB,... 'Offset',Offset_SubsystemB,... 'Init1',Init1_SubsystemB,... 'Init2',Init2_SubsystemB)... );
Единственная переменная структуры myParams
содержит всю информацию о параметре для блоков в подсистемах. Поскольку каждая подструктура действует как пространство имен, можно задать поле Offset
несколько раз.
Чтобы использовать поле Offset
от подструктуры SubsystemB
как значение блочного параметра, задайте значение параметров в блочном диалоговом окне как выражение myParams.SubsystemB.Offset
.
Чтобы организовать структуры параметра, которые имеют подобные характеристики, можно создать единственную переменную, значение которой является массивом структур. Этот метод помогает вам параметризовать модель, которая содержит несколько экземпляров алгоритма, таких как подсистема библиотеки или модель, на которую ссылаются, которая использует образцовые аргументы.
Предположим, что вы создаете две идентичных подсистемы в модели.
Предположим, что блоки в каждой подсистеме требуют, чтобы три числовых значения установили значения параметров. Создайте массив двух структур, чтобы сохранить значения.
myParams(1).Gain = 15.23; myParams(1).Offset = 89; myParams(1).Init = 0.59; myParams(2).Gain = 11.93; myParams(2).Offset = 57; myParams(2).Init = 2.76;
Каждая структура в массиве хранит эти три значения параметров для одной из подсистем.
Чтобы установить значение блочного параметра в одной из подсистем, задайте выражение, которое ссылается на поле одной из структур в массиве. Например, используйте выражение myParams(2).Init
.
Можно также разделить массив структур в блоке For Each Subsystem. Этот метод помогает вам организовать переменные рабочей области, когда модель неоднократно выполняет алгоритм, например путем итерации алгоритма по векторному сигналу. Для примера смотрите Повторение Алгоритм Используя Для Каждой Подсистемы.
При использовании образцовые аргументы, чтобы задать различные значения параметров через несколько экземпляров модели, на которую ссылаются, можно использовать массивы структур, чтобы организовать образцовые значения аргументов. В рабочем пространстве модели, на которое ссылаются создайте переменную структуры и сконфигурируйте модель, чтобы использовать структуру в качестве образцового аргумента. Используйте поля структуры, чтобы установить блочные значения параметров в модели. Затем создайте массив структур в базовом рабочем пространстве или словаре данных, с которым соединяются родительская модель или модели. В родительской модели или моделях, используйте каждую из структур в массиве как значение образцового аргумента в Блоке модели. Каждая структура в массиве хранит значения параметров для одного экземпляра модели, на которую ссылаются.
Модель в качестве примера sldemo_mdlref_datamngt
содержит три экземпляра (Блоки модели) образцового sldemo_mdlref_counter_datamngt
маскированного, на который ссылаются. IC1
переменных базового рабочего пространства, IC2
, Param1
и Param2
являются объектами Simulink.Parameter
, значения которых являются структурами. Родительская модель использует эти переменные, чтобы установить значения параметров маски на Блоках модели. Поскольку IC1
структурно идентичен IC2
и Param1
к Param2
, можно объединить эти четыре структуры в два массива структур.
Откройте родительскую модель в качестве примера.
sldemo_mdlref_datamngt
Модель создает четыре объекта Simulink.Parameter
в базовом рабочем пространстве.
Откройте пример модель, на которую ссылаются.
sldemo_mdlref_counter_datamngt
Рабочее пространство модели задает два образцовых аргумента, CounterICs
и CounterParams
, значения которого являются структурами. Блоки в модели используют поля этих структур, чтобы установить значения параметров.
В образцовом sldemo_mdlref_datamngt
откройте Редактор Данных модели (Представление> Редактор Данных модели). В Редакторе Данных модели осмотрите вкладку Parameters.
В модели кликните по одному из Блоков модели.
Редактор Данных модели подсвечивает строки, которые соответствуют двум параметрам маски на выбранном Блоке модели. Блок использует параметры маски, чтобы установить значения двух образцовых аргументов, заданных моделью, на которую ссылаются, sldemo_mdlref_counter_datamngt
. Каждый Блок модели использует различную комбинацию этих четырех объектов параметра от базового рабочего пространства, чтобы установить значения аргументов.
В Редакторе Данных модели Столбец значений кликните по одной из ячеек, чтобы начать редактировать значение соответствующего параметра маски (например, IC1
). Рядом со значением параметров кликните по кнопке действий и выберите Open. Диалоговое окно свойства для объекта параметра открывается.
В диалоговом окне свойства, рядом с полем Value, кликают по кнопке действий и выбирают Open Variable Editor.
Редактор переменных показывает, что объект параметра хранит структуру. Структуры в Param2
и IC2
имеют те же поля как структуры в Param1
и IC1
, но различных значениях полей.
В командной строке объедините эти четыре объекта параметра в два объекта параметра, значения которых являются массивами структур.
% Create a new parameter object by copying Param1. Param = Param1.copy; % Use the structure in Param2 as the second structure in the new object. Param.Value(2) = Param2.Value; % The value of Param is now an array of two structures. % Delete the old objects Param1 and Param2. clear Param1 Param2 % Create a new parameter object by copying IC1. % Use the structure in IC2 as the second structure in the new object. IC = IC1.copy; IC.Value(2) = IC2.Value; clear IC1 IC2
В родительской модели, в Редакторе Данных модели, используют Столбец значений, чтобы заменить значения параметров маски согласно таблице
Предыдущее значение | Новое значение |
---|---|
Param1 | Param(1) |
IC1 | IC(1) |
Param2 | Param(2) |
IC2 | IC(2) |
Каждый Блок модели устанавливает значение образцового аргумента CounterICs
при помощи одной из структур в массиве IC
. Точно так же каждый блок устанавливает значение CounterParams
при помощи одной из структур в Param
.
Все структуры в массиве структур должны иметь ту же иерархию полей. Каждое поле в иерархии должно иметь те же характеристики всюду по массиву. Можно использовать объект параметра и объект шины осуществить эту однородность среди структур.
Чтобы использовать объект параметра, чтобы представлять массив структур параметра, установите значение объекта к массиву структур:
% Create array of structures. myParams(1).Gain = 15.23; myParams(1).Offset = 89; myParams(1).Init = 0.59; myParams(2).Gain = 11.93; myParams(2).Offset = 57; myParams(2).Init = 2.76; % Create bus object. Simulink.Bus.createObject(myParams); myParamsType = slBus1; clear slBus1 % Create parameter object and set data type. myParams = Simulink.Parameter(myParams); myParams.DataType = 'Bus: myParamsType';
Чтобы использовать одно из полей, чтобы установить блочное значение параметров, задайте выражение, такое как myParams(2).Offset
.
Чтобы получить доступ к значениям полей в командной строке, используйте свойство Value
объекта параметра.
myParams.Value(2).Offset = 129;
Можно использовать структуру в блоке Константа, чтобы создать единственный сигнал шины, который передает несколько числовых констант. Для получения дополнительной информации смотрите Константа. Для получения информации о сигналах шины смотрите Шины.
Прежде чем вы переместите модель, чтобы использовать структуры параметра, обнаружить все блоки в целевой модели и в других моделях, которые используют переменные, которые вы намереваетесь заменить.
Например, предположите, что два блока в модели используют переменную рабочей области myVar
. Если вы создаете структуру myParams
с полем myVar
и устанавливаете значение параметров в только одном из блоков к myParams.myVar
, другой блок продолжает использовать переменный myVar
. Если вы удаляете myVar
, модель генерирует ошибку, потому что остающийся блок требует удаленной переменной.
Чтобы обнаружить все блоки, которые используют переменную:
Откройте все модели, которые могут использовать переменную. Если модели находятся в иерархии модели - ссылки, можно открыть только топ-модель.
В Редакторе Данных модели или в Образцовой панели Содержимого Проводника, щелкните правой кнопкой по переменной и выберите Find Where Used. Образцовый Проводник отображает все блоки, которые используют переменную.
Можно обнаружить переменное использование только в моделях, которые открыты. Прежде чем вы мигрируете на структуры параметра, откроете все модели, которые могут использовать целевые переменные. Для получения дополнительной информации об определении переменного использования в модели, смотрите Блоки Открытия Который Использование Определенная Переменная.
Также можно воздержаться от удаления myVar
. Однако, если вы изменяете значение поля структуры myParams.myVar
, необходимо не забыть изменять значение myVar
, чтобы соответствовать.
Можно объединить несколько отдельных переменных или объектов параметра (таких как Simulink.Parameter
) в структуру, которую вы храните в единственном переменном или объекте параметра (чтобы объединить объекты параметра, смотрите Объединение Существующие Объекты параметра В Структуру). Однако получившаяся переменная или объект действуют как единственная сущность. В результате вы не можете применить различные настройки генерации кода, такие как классы памяти, к отдельным полям в структуре.
Когда вы используете объекты параметра, чтобы установить блочные значения параметров (например, таким образом, можно применить классы памяти), чтобы объединить объекты в единственную структуру:
Создайте структуру MATLAB и сохраните ее в переменной. Чтобы установить значения полей, используйте значения параметров, которые хранит каждый существующий объект параметра.
Преобразуйте переменную в объект параметра. Создайте и используйте объект Simulink.Bus
в качестве типа данных объекта параметра (см. Типы данных Поля элемента управления и Характеристики путем Создания Объекта параметра).
Выберите класс памяти, чтобы примениться к получившемуся объекту параметра. Можно выбрать только один класс памяти, который применяется к целой структуре.
Передайте метаданные параметра, такие как свойства Min
и Max
существующих объектов параметра, к соответствующим свойствам объектов Simulink.BusElement
в объекте шины.
Например, предположите, что у вас есть три отдельных объекта параметра.
coeff = Simulink.Parameter(17.5); coeff.Min = 14.33; coeff.DataType = 'single'; coeff.StorageClass = 'ExportedGlobal'; init = Simulink.Parameter(0.00938); init.Min = -0.005; init.Max = 0.103; init.DataType = 'single'; init.StorageClass = 'Model default'; offset = Simulink.Parameter(199); offset.DataType = 'uint8'; offset.StorageClass = 'ExportedGlobal';
Создайте переменную структуры.
myParams.coeff = coeff.Value; myParams.init = init.Value; myParams.offset = offset.Value;
Преобразуйте переменную в объект параметра.
myParams = Simulink.Parameter(myParams);
Создайте объект шины и используйте его в качестве типа данных объекта параметра.
Simulink.Bus.createObject(myParams.Value);
paramsDT = copy(slBus1);
myParams.DataType = 'Bus: paramsDT';
Передайте метаданные от старых объектов параметра до элементов шины в объекте шины.
% coeff paramsDT.Elements(1).Min = coeff.Min; paramsDT.Elements(1).DataType = coeff.DataType; % init paramsDT.Elements(2).Min = init.Min; paramsDT.Elements(2).Max = init.Max; paramsDT.Elements(2).DataType = init.DataType; % offset paramsDT.Elements(3).DataType = offset.DataType;
Чтобы помочь вам записать скрипт, который выполняет эту операцию передачи, можно использовать функцию properties
, чтобы найти свойства, которые элементы шины и старые объекты параметра имеют вместе. Чтобы перечислить поля структуры так, чтобы можно было выполнить итерации по ним, используйте функцию fieldnames
.
Примените класс памяти к объекту параметра.
myParams.StorageClass = 'ExportedGlobal';
Теперь, можно использовать поля myParams
, вместо старых объектов параметра, чтобы установить блочные значения параметров.
Можно сконфигурировать структуры параметра, чтобы появиться в сгенерированном коде как структуры и массивы структур. Для получения информации о генерации кода со структурами параметра смотрите, Организуют Данные в Структуры в Сгенерированном коде (Simulink Coder).
Значение поля, которое вы используете, чтобы установить блочный параметр, должно быть числовым или перечислимого типа. Значение поля может быть действительным или комплексным скаляром, вектором или многомерным массивом.
Если значение какого-либо из полей структуры является многомерным массивом, вы не можете настроить ни одно из значений полей во время моделирования.
Все структуры в массиве структур должны иметь ту же иерархию полей. Каждое поле в иерархии должно иметь те же характеристики всюду по массиву:
Имя поля
Тип числовых данных, такой как single
или int32
Сложность
Размерности
Предположим, что вы задаете массив двух структур.
paramStructArray = ... [struct('sensor1',int16(7),'sensor2',single(9.23)) ... struct('sensor1',int32(9),'sensor2',single(11.71))];
Вы не можете использовать ни одно из полей в блочном параметре, потому что поле sensor1
использует различный тип данных в каждой структуре.
Структуры параметра не поддерживают контекстно-зависимый ввод данных в сгенерированном коде. Если структура параметра является настраиваемой в коде, поля структуры используют типы числовых данных, которые вы задаете или при помощи введенных выражений или при помощи объекта Simulink.Bus
. Если вы не используете введенные выражения или объект Simulink.Bus
, поля структуры используют тип данных double
.
Когда вы осуществляете обмен данными между блоками интерполяционной таблицы, рассматриваете использование Simulink.LookupTable
и объектов Simulink.Breakpoint
вместо структур, чтобы сохранить и сгруппировать данные. Этот метод улучшает удобочитаемость модели путем ясной идентификации данных как частей интерполяционной таблицы и явным образом соединения данных точки останова с табличными данными. Смотрите Пакет Разделяемые Данные Точки останова и Таблицы для Интерполяционных таблиц.
Можно создать структуру параметра, которая соответствует определению типа struct
, которое задает существующий код С. Используйте этот метод для:
Замените существующий код С на модель Simulink®.
Интегрируйте существующий код С для моделирования в Simulink (например, при помощи Legacy Code Tool). Для примера смотрите, Интегрируют Функцию C, Аргументы Которой Являются Указателями на Структуры.
Сгенерируйте код С (Simulink Coder™), который можно скомпилировать с существующим кодом С в отдельное приложение. Для примера смотрите, обмениваются Структурированными и Перечислимыми Данными Между Сгенерированным и Внешним Кодом (Embedded Coder).
В MATLAB сохраните структуру параметра в объекте параметра и используйте объект шины в качестве типа данных (см. Типы данных Поля элемента управления и Характеристики путем Создания Объекта параметра). Чтобы создать объект шины согласно вашему коду С тип struct
, используйте функцию Simulink.importExternalCTypes
.