exponenta event banner

Simulink.importExternalCTypes

Создание представлений Simulink пользовательских типов данных, определенных кодом C или C++

Описание

пример

importInfo = Simulink.importExternalCTypes(headerFiles) выполняет синтаксический анализ заголовочных файлов C или C++ (.h или .hpp), идентифицированные headerFiles для typedef, struct, и enum и создает представления типов Simulink ®. Выходные данные ,importInfo, определяет успешно и неудачно импортированные типы.

Представления Simulink можно использовать для:

По умолчанию функция:

  • Импорт перечисляемого типа путем создания файла сценария, производного класса перечисления от Simulink.IntEnumType, как описано в разделе Определение перечислений Simulink. При необходимости можно отредактировать определение класса для его настройки (например, путем реализации addClassNameToEnumNames метод).

  • Импорт типа структуры путем создания Simulink.Bus в базовой рабочей области.

  • Импорт примитива typedef оператор путем генерации Simulink.AliasType в базовой рабочей области.

  • Интерпретирует типовые типы данных C, такие как int или short, в соответствии с длинами слов вашего хост-компьютера. Например, для большинства современных машин, int имеет 32-битную длину слова, поэтому функция представляет int структурное поле как элемент шины, использующий тип данных Simulink int32.

    Чтобы переопределить это поведение по умолчанию, определите целевую аппаратную плату с помощью HardwareImplementation парный аргумент.

Дополнительные сведения о поведении по умолчанию см. в разделе Советы.

пример

importInfo = Simulink.importExternalCTypes(modelName) создает представления Simulink пользовательских типов данных C путем анализа модели, идентифицируемой с помощью modelName. При использовании параметров конфигурации цели моделирования в модели для определения файлов заголовков для включения во время моделирования используйте этот синтаксис для импорта типов с целью моделирования модели на хост-компьютере. Функция интерпретирует типовые типы данных C в соответствии с длинами слов главного компьютера.

При использовании этого синтаксиса не используйте аргументы пары, такие как HardwareImplementation, что может противоречить параметрам конфигурации целевой модели. При использовании таких аргументов пары с таким синтаксисом функция генерирует предупреждение.

пример

importInfo = Simulink.importExternalCTypes(___,Name,Value) указывает дополнительные параметры, использующие один или несколько аргументов пары имя-значение. Этот синтаксис можно использовать для:

  • Укажите имена типов для импорта с помощью Names парный аргумент.

  • Управление способом хранения импортированных типов в Simulink, например, путем создания типов в словаре данных Simulink. Используйте MATFile и DataDictionary аргументы пары.

  • Управление тем, как функция интерпретирует типовые типы данных C. Используйте HardwareImplementation парный аргумент.

  • Обеспечьте синхронизацию определений C-кода и представлений Simulink путем повторной попытки импорта обновленных определений C-кода. Можно выбрать, следует ли перезаписывать существующие представления Simulink. Используйте Overwrite и Verbose аргументы пары.

Примеры

свернуть все

В этом примере показано, как создавать представления Simulink типа структуры C (struct) и перечисленный (enum) тип данных из файла заголовка.

  1. В текущей папке создайте файл ex_cc_simpleTypes.h.

    typedef enum {
      PWR_LOSS = 0,                 /* Default value */
      OVERSPD,
      PRESS_LOW,
    } fault_T;
    
    typedef struct {
        double coeff;
        double init;
    } params_T;

  2. Создание представлений типов Simulink путем вызова Simulink.importExternalCTypes.

    Simulink.importExternalCTypes('ex_cc_simpleTypes.h');

    Функция создает Simulink.Bus объект, params_T, в базовом рабочем пространстве.

  3. Для проверки свойств объекта откройте редактор шины.

    buseditor

    Каждый элемент шины использует имя и тип данных (double), которые соответствуют соответствующему полю структуры в ex_cc_simpleTypes.h.

  4. В текущей папке проверьте созданный файл, fault_T.m, который определяет перечисляемый тип fault_T как класс перечисления.

    Объект шины и класс перечисления можно использовать для задания типов данных сигналов и параметров в моделях Simulink.

В этом примере показано, как создать представление Simulink структурного типа, в полях которого используются пользовательские типы данных (typedef).

Создание файла ex_integer_aliases.h в текущей папке.

typedef int sint_32;

typedef unsigned short uint_16;

Создание файла ex_cc_struct_alias.h в текущей папке.

#include "ex_integer_aliases.h"

typedef struct {
    sint_32 accum;
    uint_16 index;
} my_ints_T;

Импорт типа структуры в Simulink в качестве Simulink.Bus в базовой рабочей области. Импорт typedef заявления как Simulink.AliasType объекты.

Simulink.importExternalCTypes('ex_cc_struct_alias.h');

Проверьте типы данных элементов шины в объекте шины. Например, проверьте DataType свойство первого элемента шины, соответствующее полю структуры accum.

my_ints_T.Elements(1)
ans = 

  BusElement with properties:

              Name: 'accum'
        Complexity: 'real'
        Dimensions: 1
          DataType: 'sint_32'
               Min: []
               Max: []
    DimensionsMode: 'Fixed'
        SampleTime: -1
              Unit: ''
       Description: ''

Simulink.importExternalCTypes функция использует сгенерированный Simulink.AliasType объекты для установки типов данных элементов шины.

Осмотрите Simulink.AliasType объектов в базовом рабочем пространстве. Например, объект с именем sint_32 соответствует одному из typedef операторы в ex_integer_aliases.h.

sint_32
sint_32 = 

  AliasType with properties:

    Description: ''
      DataScope: 'Imported'
     HeaderFile: 'ex_integer_aliases.h'
       BaseType: 'int32'

Для большинства хост-компьютеров (на которые по умолчанию нацелена функция) длина слова int 32 бита и длина слова unsigned short 16 бит. Карты функций int и unsigned short к типам Simulink int32 и uint16.

При наличии встроенного кодера код, генерируемый на основе модели, может использоваться sint_32 и uint_16 вместо стандартных имен типов данных, int32_T и uint16_T.

В этом примере показано, как сохранить импортированные типы данных в словаре данных Simulink. Словарь данных хранит спецификации данных (например, для сигналов и значений параметров блоков), типы данных и другие конструкторские данные для одной или нескольких моделей Simulink.

В текущей папке создайте файл ex_cc_simpleTypes.h.

typedef enum {
  PWR_LOSS = 0,            /* Default value */
  OVERSPD,
  PRESS_LOW,
} fault_T;

typedef struct {
    double coeff;
    double init;
} params_T;

Создание подпапки с именем myDictionaries.

mkdir('myDictionaries')

Создание представлений типов Simulink путем вызова Simulink.importExternalCTypes. Постоянное сохранение определений типов путем создания нового словаря данных. ex_cc_myTypes.sldd, в новой подпапке.

Simulink.importExternalCTypes('ex_cc_simpleTypes.h',...
    'DataDictionary','ex_cc_myTypes.sldd',...
    'OutputDir','myDictionaries');

Для проверки содержимого словаря установите текущую папку в значение myDictionaries и дважды щелкните файл словаря.

Для использования представлений Simulink в словаре необходимо связать модель или модели со словарем. См. раздел Перенос моделей для использования словаря данных Simulink.

В этом примере показано, как создавать представления Simulink только для перечисляемых и структурных типов данных, которые идентифицируются по имени.

В текущей папке создайте файл ex_cc_manySimpleTypes.h. Файл определяет три типа структуры: params_T, signals_T, и states_T.

typedef struct {
    double coeff;
    double init;
} params_T;

typedef struct {
    double flow_rate;
    double steam_press;
} signals_T;

typedef struct {
    double accum;
    double error;
} states_T;

Создание представлений Simulink только для params_T и signals_T.

Simulink.importExternalCTypes('ex_cc_manySimpleTypes.h',...
    'Names',{'params_T','signals_T'});

Simulink.Bus объекты, params_T и signals_T, отображаются в базовой рабочей области.

По умолчанию Simulink.importExternalCTypes представляет перечисляемый тип данных путем создания класса перечисления, производного от встроенного класса Simulink.IntEnumType. При моделировании или генерации кода из модели, использующей созданный класс, параметры конфигурации, выбранные для модели (например, на панели «Реализация оборудования»), определяют конкретную целочисленную длину, которая Simulink.IntEnumType и класс перечисления использует.

По умолчанию функция интерпретирует базовые примитивные типы данных C, такие как short и int, в соответствии с длинами слов вашего хост-компьютера. Например, для представления int структурное поле, функция обычно применяет 32-разрядный тип данных int32 к соответствующему элементу шины. При необходимости моделирования и создания кода для оборудования, отличного от хост-компьютера, используйте HardwareImplementation парный аргумент для идентификации целевого аппаратного обеспечения и, по расширению, длины слов аппаратного обеспечения.

В этом примере показано, как импортировать типы данных из кода, который предполагается использовать на 16-разрядном оборудовании. Для этой платы, int имеет 16-разрядную длину, и каждый элемент перечисляемых данных (enum) потребляет 16 бит.

В текущей папке создайте файл ex_cc_intTypes.h.

typedef enum {
  PWR_LOSS = 0,            /* Default value */
  OVERSPD,
  PRESS_LOW,
} fault_T;

typedef struct {
    int coeff;
    int init;
} params_T;

Код определяет перечисляемый тип данных и структурный тип, в полях которого используется универсальный тип данных C. int.

Чтобы создать точное представление типа структуры Simulink, сначала откройте существующую модель или создайте новую модель. Для этого примера создайте новую модель с именем ex_hdwImpl_16bit.

В новой модели выберите Параметры конфигурации > Реализация оборудования > Поставщик устройства Atmel. Установить тип устройства в AVR.

Кроме того, в командной строке используйте следующие команды для создания и настройки модели:

new_system('ex_hdwImpl_16bit','Model');
set_param('ex_hdwImpl_16bit','ProdHWDeviceType','Atmel->AVR')

Создание представлений типов Simulink. Чтобы указать длину слов целевого 16-разрядного аппаратного обеспечения, извлеките параметры конфигурации модели (которые включают в себя настройки реализации аппаратного обеспечения) в виде Simulink.ConfigSet объект.

configSet = getActiveConfigSet('ex_hdwImpl_16bit');
Simulink.importExternalCTypes('ex_cc_intTypes.h','HardwareImplementation',configSet);

Simulink.Bus объект params_T отображается в базовой рабочей области. Элементы шины, такие как coeff, используйте тип данных Simulink int16.

params_T.Elements(1)
ans = 

  BusElement with properties:

              Name: 'coeff'
        Complexity: 'real'
        Dimensions: 1
          DataType: 'int16'
               Min: []
               Max: []
    DimensionsMode: 'Fixed'
              Unit: ''
       Description: ''

В текущей папке файл fault_T.m определяет класс перечисления fault_T. Класс, производный от Simulink.IntEnumType, поэтому необходимо использовать параметры конфигурации модели для идентификации целевого оборудования и, по расширению, правильной собственной длины целого числа.

Создание файла ex_cc_fixpt_struct.h в текущей папке.

typedef struct {
    
    int coeff;   /* Word length 16, 
       binary fraction length 7 */
    
    int init;   /* Word length 16, 
       binary fraction length 3 */
    
} params_T;

Файл определяет тип структуры, в полях которого используются типы данных с фиксированной точкой. Например, структура хранит поле. coeff в знаковом, 16-разрядном целочисленном типе данных. Длина двоичной дроби 7 связывает сохраненное целое значение с реальным значением.

Предположим, что этот код работает на 16-разрядных аппаратных средствах (таких, что универсальный тип данных C int имеет 16-разрядную длину слова). Чтобы создать представление типа Simulink, сначала создайте coder.HardwareImplementation объект, идентифицирующий оборудование.

hdw = coder.HardwareImplementation;
hdw.ProdHWDeviceType = 'Atmel->AVR';

Создайте представление Simulink типа структуры.

Simulink.importExternalCTypes('ex_cc_fixpt_struct.h',...
    'HardwareImplementation',hdw);

Simulink.Bus объект, params_T, появляется в базовой рабочей области. Каждый элемент шины, например, coeff, использует тип данных int16.

params_T.Elements(1)
ans = 

  BusElement with properties:

              Name: 'coeff'
        Complexity: 'real'
        Dimensions: 1
          DataType: 'int16'
               Min: []
               Max: []
    DimensionsMode: 'Fixed'
              Unit: ''
       Description: ''

Simulink.importExternalCTypes невозможно вывести масштабирование с фиксированной точкой (длина двоичной дроби) из кода C. Необходимо вручную указать типы данных элементов шины. Чтобы указать типы данных в командной строке, используйте команду fixdt функция.

params_T.Elements(1).DataType = 'fixdt(1,16,7)';
params_T.Elements(2).DataType = 'fixdt(1,16,3)';

Чтобы указать типы данных в интерактивном режиме (с помощью помощника по типам данных), используйте редактор шины.

buseditor

В этом примере показано, как поддерживать представления Simulink типов данных C, определения которых вы изменяете в течение жизненного цикла проекта моделирования.

Импорт пользовательских типов C

Создание файла ex_cc_myTypes_rec.h в текущей папке. Файл определяет пользовательский тип структуры.

typedef struct {
    double flow;
    double pres;
    double tqe;
} sigStructType;

Создать Simulink.Bus объект, представляющий тип.

Simulink.importExternalCTypes('ex_cc_myTypes_rec.h');

Изменение определения типа в коде C

В ex_cc_myTypes_rec.h, добавить поле с именем spd кому sigStructType.

В том же файле создайте новый тип структуры, stateStructType.

typedef struct {
    double flow;
    double pres;
    double tqe;
    double spd;
} sigStructType;

typedef struct {
    double err;
    double read;
    double write;
} stateStructType;

Повторить попытку импорта типов

Попытайтесь создать объекты шины, представляющие типы.

importInfo = Simulink.importExternalCTypes('ex_cc_myTypes_rec.h');

Функция генерирует предупреждения в командной строке. Вместо того, чтобы полагаться на предупреждения, можно проверить выходные данные, importInfo, чтобы определить, не удалось ли функции импортировать какие-либо типы.

importInfo.failedToImport.Bus
ans =

  1×1 cell array

    {'sigStructType'}

Функция не импортирована sigStructType. Соответствующий объект шины в базовом рабочем пространстве по-прежнему имеет только три элемента шины. Определение причины, по которой функция не была импортирована sigStructType, осмотрите report поле importInfo.

Импорт sigStructType снова. На этот раз перезапишите существующий объект шины.

importInfo = Simulink.importExternalCTypes('ex_cc_myTypes_rec.h',...
    'Names',importInfo.failedToImport.Bus,'Overwrite','on');

При перезаписи существующих представлений Simulink все настройки, внесенные в представления Simulink (например, применение типов данных с фиксированной точкой к элементам шины), перезаписываются.

Входные аргументы

свернуть все

Имена и пути файлов заголовков для синтаксического анализа, заданные как символьный вектор, массив ячеек символьных векторов, строка или строковый массив. Включить .h или .hpp расширение файла.

Если используется иерархия включенных (#include) заголовочные файлы для определения типов при указании HeaderFiles, необходимо идентифицировать только файлы точек входа. Функция анализирует включенные файлы, а также идентифицированные файлы точек входа. Если включенные файлы находятся не в той же папке, что и соответствующий файл точки входа, используйте IncludeDirs парный аргумент для идентификации дополнительных папок.

Пример: 'myHeader.h'

Пример: {'thisHeader.hpp','thatHeader.hpp'}

Типы данных: char | cell | string

Имя загруженной модели Simulink, для которой требуется импортировать типы, указанное как вектор символов или скаляр строки. Модель загружается, например, при открытии модели или использовании load_system функция. При использовании этого аргумента функция:

  • Поиск параметров конфигурации модели для пользовательских файлов заголовков и анализ этих файлов заголовков для импортируемых типов данных. На этот поиск влияют только параметры конфигурации на панели Цель моделирования (Simulation Target).

    Например, если в модели для параметра Конфигурация (Configuration) > Цель моделирования (Simulation Target) > Вставить пользовательский код C (Insert custom C code in generated) > Файл заголовка (Header file) задано значение #include "myTypes.h", функция анализирует myTypes.h для импортируемых типов.

  • Интерпретирует типовые типы данных C, такие как int или short в соответствии с длинами слов главного компьютера. Не используйте HardwareImplementation пара аргументов для переопределения этой интерпретации.

Пример: 'myModel'

Типы данных: char | string

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: Simulink.importExternalCTypes('myHdr.h','DataDictionary','myDictionary.sldd')

Имя и, при необходимости, путь к MAT-файлу, создаваемому для хранения сгенерированного Simulink.Bus и Simulink.AliasType объекты, указанные как символьный вектор или строка. Если вы не используете MATFileпо умолчанию функция генерирует объекты в базовой рабочей области.

Функция не создает определения перечисления в MAT-файлах.

При импорте некоторых struct типы и примитивные typedef операторы с помощью MATFile а затем снова импортировать некоторые из тех же типов с помощью MATFile, функция полностью заменяет старый MAT-файл новым. Функция отменяет все изменения, внесенные в содержимое старого MAT-файла.

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

Пример: 'myMat.mat'

Пример: 'myMat'

Пример: fullfile('subfolder','myMat')

Типы данных: char | string

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

Сведения о словарях данных см. в разделе Что такое словарь данных?.

При необходимости можно указать .sldd расширение.

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

Пример: 'myDict.sldd'

Пример: 'myDict'

Пример: fullfile('subfolder','myDict.sldd')

Типы данных: char | string

Имена импортируемых типов, указанных как символьный вектор, массив ячеек символьных векторов, строка или строковый массив. По умолчанию, если вы не используете Names, функция пытается импортировать все пользовательские типы, определяемые определяемыми файлами заголовков.

Чтобы сопоставить имена нескольких типов с одним символьным вектором, используйте звездочку (*).

Пример: 'myEnumType'

Пример: {'myEnumType','myStructType'}

Пример: 'my*Type'

Типы данных: char | cell | string

Параметры компилятора для определения макросов, влияющих на определения типов C, заданные как вектор символов или скаляр строки. Например, макрос влияет на определение типа, если включить определение в #ifdef блок, проверяющий, определен ли макрос.

Использовать Defines определение определений макросов, которые в противном случае определяются с помощью параметров компилятора, таких как -D.

Пример: 'SIGSTRUCT=1'

Пример: 'SIGSTRUCT=1 ENUM=1'

Типы данных: char | string

Параметры компилятора для удаления макросов, влияющих на определения типов C, заданные как вектор символов или скаляр строки. Например, макрос влияет на определение типа, если включить определение в #ifdef блок, проверяющий, определен ли макрос.

Использовать UnDefines чтобы указать удаления макросов, которые в противном случае определяются с помощью параметров компилятора, таких как -U.

Пример: 'SIGSTRUCT'

Пример: 'SIGSTRUCT ENUM'

Типы данных: char | string

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

Если вы используете modelName вместо синтаксиса headerFiles в целевой модели можно использовать параметры конфигурации цели моделирования, чтобы указать пути включения. В этом случае нет необходимости использовать IncludeDirs парный аргумент.

Пример: 'myHeaders'

Пример: fullfile('myProject','myHeaders')

Пример: {fullfile('myProject','myHeaders'),fullfile('myProject','myOtherHeaders')}

Типы данных: char | cell | string

Папка для хранения созданных файлов, заданная как символьный вектор или строка. Функция размещает созданные файлы, такие как classdef файлы сценариев и файлы словаря данных в этой папке.

Указанная папка должна существовать перед использованием функции.

Пример: 'myDictionaries'

Пример: fullfile('myProject','myDictionaries')

Типы данных: char | string

Анализ и импорт совместимых типов данных из заголовочных файлов C и C++. Если указаны заголовочные файлы, содержащие функции C++, укажите Language кому 'C++' для импорта совместимых типов данных C.

При импорте типов данных из файла заголовка с расширением hpp, если Language параметр не указан или установлен в значение 'Auto', 'C++' выбран для синтаксического анализа заголовочных файлов. Классы C++ и типы структуры C++ игнорируются. Пустые структуры не импортируются.

При импорте файлов заголовков из загруженной модели и Language не указан или установлен в значение 'Auto', Language параметр наследуется из пользовательских настроек модели. Если импортированная модель уже имеет Language параметр в меню «Параметры конфигурации» > «Цель моделирования», этот параметр перекрывается параметром импортированной модели.

Длины слов для интерпретации базовых, примитивных типов данных C, указанных как Simulink.ConfigSet или coder.HardwareImplementation (Кодер MATLAB).

  • Использование Simulink.ConfigSet объект, можно извлечь набор конфигурации из модели с помощью таких функций, как getConfigSet и getActiveConfigSet. Этот метод позволяет использовать диалоговое окно Configuration Parameters для идентификации целевого оборудования (через параметры конфигурации Hardware Implementation).

  • Использование coder.HardwareImplementation (который создается и настраивается программно), укажите свойства объекта, такие как ProdHWDeviceType, для идентификации целевого оборудования. Затем объект задает другие свойства, такие как ProdBitPerInt, которые отражают собственный целый размер аппаратного обеспечения.

Функция проверяет объект, чтобы определить, какие целочисленные типы данных Simulink использовать при интерпретации общих типов данных C, таких как int. Например, при создании coder.HardwareImplementation объект для идентификации 16-разрядного оборудования и последующего использования функции для импорта типа структуры, в полях которого используется тип данных C int, функция генерирует объект шины, элементы шины которого используют тип данных Simulink int16. Функция использует параметры производственного оборудования, а не настройки тестового оборудования.

Дополнительные сведения о параметрах реализации аппаратного обеспечения для моделей Simulink см. в разделе Настройка параметров среды выполнения (кодер Simulink).

Спецификация для перезаписи существующих представлений Simulink, указанная как 'on' или 'off'. Если импортированный тип уже имеет представление в Simulink:

  • При указании 'off' или если вы не указываете Overwrite, функция не импортирует тип. В выходном аргументе importInfo, failedToImport определяет тип.

  • При указании 'on'функция перезаписывает существующее представление Simulink.

При использовании функции для импорта некоторых типов в базовую рабочую область или словарь данных и последующей адаптации созданных представлений Simulink при повторном использовании функции и установке Overwrite кому 'on', функция не сохраняет ваши настройки. Эти настройки могут включать:

  • В определении класса перечисления реализация дополнительных методов или изменение созданных методов, таких как getDataScope (см. раздел Настройка перечисления Simulink).

  • Изменение свойств созданного Simulink.Bus или Simulink.AliasType (например, ручная настройка типов данных элементов шины на тип данных с фиксированной точкой).

Спецификация для генерации сообщений для успешных операций импорта, указанная как 'on' или 'off'.

  • При указании 'off' или если вы не указываете Verbose, функция автоматически импортирует типы. Сообщения не отображаются в окне команд, если функция не может импортировать тип.

  • При указании 'on', функция генерирует сообщение в окне команд для каждой операции в процессе импорта.

Выходные аргументы

свернуть все

Информация об импортированных и не импортированных типах, возвращенная в виде структуры с этими полями.

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

Типы, которые не были импортированы, возвращены в виде структуры с этими полями.

Имя поляЗначение поляЦель
BusМассив ячеек символьных векторовНазвания структуры (struct) типы, которые не были импортированы.
EnumМассив ячеек символьных векторовИмена перечисляемых типов (enum), которые не были импортированы.
AliasTypeМассив ячеек символьных векторовИмена примитивных typedef инструкции, которые не были импортированы.

Типы, которые были успешно импортированы, возвращены в виде структуры с этими полями.

Имя поляЗначение поляЦель
BusМассив ячеек символьных векторовНазвания структуры (struct) импортированных типов. Произведенный Simulink.Bus объекты используют эти имена.
EnumМассив ячеек символьных векторовИмена перечисляемых типов (enum), которые были импортированы. Созданные классы перечисления или Simulink.data.dictionary.EnumTypeDefinition объекты используют эти имена.
AliasTypeМассив ячеек символьных векторовИмена примитивных typedef инструкции, которые были импортированы. Произведенный Simulink.AliasType объекты используют эти имена.

Ограничения

  • Функция не поддерживает:

    • Типы данных C, не соответствующие типу, поддерживаемому Simulink. Например, Simulink не распознает эквивалент для long double. Сведения о типах данных, поддерживаемых Simulink, см. в разделе Типы данных, поддерживаемые Simulink.

    • Типы указателей, например структура, определяющая поле, значением которого является указатель или typedef оператор, базовый тип которого является типом указателя.

    • Структуры, определяющие поле, значение которого имеет несколько измерений.

      Если значением поля является массив 1-D, функция создает элемент шины, который представляет вектор, а не матрицу.

    • Профсоюзы.

  • Если поле структуры представляет данные с фиксированной точкой или если typedef оператор сопоставляется с базовым типом с фиксированной точкой, функция устанавливает тип данных соответствующего элемента шины или Simulink.AliasType объект к соответствующему целочисленному типу Simulink (например, int16). Импортер не может определить масштабирование с фиксированной точкой путем синтаксического анализа кода C. После использования функции необходимо вручную указать тип данных элемента шины или базовый тип Simulink.AliasType с помощью fixdt функция.

Совет

  • Если функциональный блок MATLAB или диаграмма Stateflow ® в модели использует импортированный тип перечисления или структуры, настройте параметры конфигурации модели для включения (#include) определение типа из внешнего файла заголовка. См. разделы Управление импортированными определениями типов шины и перечисления (для функционального блока MATLAB) и Доступ к переменным и функциям пользовательского кода в диаграммах Stateflow (Stateflow Charts) и Интеграция пользовательских структур в диаграммы Stateflow (Stateflow Charts) (для диаграммы).

  • По умолчанию:

    • Для импортированного перечисления, поскольку класс перечисления Simulink является производным от Simulink.IntEnumType, при моделировании или создании кода из модели перечисление использует размер целого числа, который является собственным для целевого оборудования. Характеристики целевого оборудования задаются с помощью таких параметров конфигурации модели, как Поставщик и тип производственного устройства и Собственный размер слова на производственном оборудовании.

    • Для импортированного типа структуры:

      • Функция импортирует поле структуры как численно сложное, только если поле использует один из соответствующих типов структуры Simulink Coder в качестве типа данных. Например, если поле структуры во внешнем коде использует тип данных. cint8_T, функция импортирует поле как элемент шины (Simulink.BusElement object), тип данных которого - int8 и Complexity свойство имеет значение 'complex'.

      • Для вложенных структур функция создает объект шины для каждого уникального типа структуры.

    • Для импортированного типа структуры или перечисления, если внешний код использует typedef оператор для наименования типа, имя созданного объекта шины или класс перечисления Simulink соответствует typedef имя. Если код не использует typedef оператор, имя объекта или класса struct_type или enum_type где type - имя тега типа. Если имя тега не указано или применяется typedef имя, Simulink создает произвольное имя для объекта или класса.

    • Функция настраивает созданные представления Simulink как импортированные для целей моделирования и создания кода. Например, для объектов шины функция устанавливает DataScope свойство для 'Imported' и HeaderFile с именем внешнего файла заголовка. Для моделирования или создания кода из модели, использующей одно из этих представлений Simulink, необходимо сделать файл заголовка доступным для модели.

  • При указании файлов для Simulink.importExternalCTypes для использования или генерации, например, с помощью DataDictionary аргумент пары:

    • Если существующие файлы находятся в текущей папке или в пути MATLAB, указывать путь к файлу не требуется. Имя файла можно указать самостоятельно.

    • Для управления расположением папки созданных файлов можно указать пути, а также имена файлов. Вы также можете использовать OutputDir парный аргумент.

Представлен в R2017a