exponenta event banner

Вложенные структуры сигналов

В созданном коде можно создать вложенные структуры сигнальных данных.

Конструкция C

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 модель с блоками усиления, блоками создания шины и блоком единичной задержки. Блоки усиления и единичной задержки делают структуру более идентифицируемой в сгенерированном коде.

2. Чтобы настроить блок Bus Creator на прием трех входов, в диалоговом окне блока задайте для параметра Количество входов значение 3.

3. На панели инструментов на вкладке «Моделирование» в разделе «Проектирование» выберите «Редактор шины».

В редакторе шины щелкните Файл > Добавить шину, чтобы создать Simulink.Bus объект и его имя A_struct_type. Щелкните Файл > Добавить/Вставить 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, который собирает три сигнала усиления, установите тип данных Output в значение Bus: B_struct_type. Нажмите кнопку «Применить».

7. Выберите Output as nonvirtual bus и нажмите OK.

8. В диалоговом окне другого подчиненного блока Bus Creator установите тип данных Output равным Bus: C_struct_type и выберите Output как nonvirtual bus. Нажмите OK.

9. В последнем диалоговом окне блока Bus Creator установите для параметра «Тип выходных данных» значение Bus: A_struct_type и выберите Output как nonvirtual bus. Нажмите OK.

10. Откройте приложение Simulink Coder. На вкладке C Code выберите Code Interface > Individual Element Code Mappings.

11. Откройте закладку Signals/States (Сигналы/Состояния). В модели выберите выходной сигнал A_struct_type Блок Bus Creator, который подает блок Unit Delay. Нажмите кнопку Add selected signals to code mappings в редакторе Code Mappings.

12. Для добавленного сигнала установите для параметра Storage Class значение ExportedGlobal.

13. В инспекторе свойств задайте для свойства «Код» > «Идентификатор» значение 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 Блок создания шины Bus Creator2.

/* Exported block signals */
A_struct_type sig_struct_var;          /* '<Root>/Bus Creator2' */

В том же файле, в модели step функция, алгоритм обращается sig_struct_var и области sig_struct_var.

См. также

Связанные темы