Можно создать вложенные структуры данных сигнала в сгенерированном коде.
typedef struct { double signal1; double signal2; double signal3; } B_struct_type; typedef struct { double signal1; double signal2; } C_struct_type; typedef struct { B_struct_type subStruct_B; C_struct_type subStruct_C; } A_struct_type;
Чтобы представлять тип структуры в модели, создайте Simulink.Bus
объект. Используйте объект в качестве типа данных сигналов шины в вашей модели.
Чтобы вложить структуру в другой структуре, используйте объект шины в качестве типа данных элемента сигнала в другом объекте шины.
1. Создайте ex_signal_nested_struct
модель с блоками Усиления, блоками Создателя Шины и блоком Unit Delay. Усиление и блоки Unit Delay делают структуру более идентифицирующейся в сгенерированном коде.
2. Чтобы сконфигурировать блок Bus Creator, чтобы принять три входных параметров, в диалоговом окне блока, определяют Номер входных параметров к 3
.
3. В панели инструментов, на вкладке Modeling, в соответствии с Проектом, нажимают Bus Editor.
В Редакторе Шины нажмите File> Add Bus, чтобы создать Simulink.Bus
объект и имя это A_struct_type
. Нажмите File> Add/Insert BusElement, чтобы добавить два элемента сигнала: subStruct_B
и subStruct_C
. Для получения дополнительной информации смотрите, Создают и Задают Объекты Simulink.Bus. Этот объект шины представляет тип структуры верхнего уровня, который вы хотите, чтобы сгенерированный код использовал.
4. Точно так же создайте Simulink.Bus
объекты B_struct_type
(с тремя элементами сигнала) и C_struct_type
(с двумя элементами сигнала).
5. В A_struct_type
объект, для subStruct_B
элемент, набор DataType к Bus: B_struct_type
и subStruct_C
к Bus: C_struct_type
.
Каждый элемент сигнала в A_struct_type
использование другая шина возражает как тип данных. Теперь эти элементы представляют подструктуры.
6. В диалоговом окне блока Bus Creator, который собирает три сигнала Усиления, тип Выходных данных набора к Bus: B_struct_type
. Нажмите Apply.
7. Выберите Output как невиртуальную шину и нажмите ОК.
8. В диалоговом окне другого зависимого блока Bus Creator Выходные данные набора вводят к Bus: C_struct_type
и выберите Output как невиртуальную шину. Нажать ОК.
9. В последнем диалоговом окне блока Создателя Шины Выходные данные набора вводят к Bus: A_struct_type
и выберите Output как невиртуальную шину. Нажать ОК.
10. Откройте приложение Simulink Coder. Во вкладке C Code выберите Code Interface> Individual Element Code Mappings.
11. Откройте вкладку Signals/States. В модели выберите выходной сигнал A_struct_type
Соедините шиной блок Creator, который питает блок Unit Delay. Нажмите Add выбрал сигналы закодировать кнопку отображений в редакторе Отображений Кода.
12. Для добавленного сигнала, Класса памяти набора к ExportedGlobal
.
13. В Property Inspector, набор свойство Code> Identifier к sig_struct_var
. Выход блока Bus Creator появляется в сгенерированном коде как отдельная глобальная переменная структуры под названием sig_struct_var
.
14. Сгенерируйте код из модели.
Сгенерированный заголовочный файл ex_signal_nested_struct_types.h
задает типы структуры. Каждый тип структуры соответствует Simulink.Bus
объект.
typedef struct { real_T signal1; real_T signal2; real_T signal3; } B_struct_type; typedef struct { real_T signal1; real_T signal2; } C_struct_type; typedef struct { B_struct_type subStruct_B; C_struct_type subStruct_C; } A_struct_type;
Сгенерированный исходный файл ex_signal_nested_struct.c
выделяет память для глобальной переменной sig_struct_var
структуры. По умолчанию, имя
A_struct_type
Блоком Creator шины является Bus Creator2
.
/* Exported block signals */ A_struct_type sig_struct_var; /* '<Root>/Bus Creator2' */
В том же файле, в модели step
функция, доступы к алгоритму sig_struct_var
и поля sig_struct_var
.