Simulink.importExternalCTypes

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

Описание

пример

importInfo = Simulink.importExternalCTypes(headerFiles) анализирует файлы заголовков C или C++ (.h или .hpp) идентифицировано по headerFiles для typedef, struct, и enum type definitions и генерирует 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. Когда вы используете параметры конфигурации Simulation Target в модели, чтобы идентифицировать заголовочные файлы для включения во время симуляции, используйте этот синтаксис для импорта типов с целью симуляции модели на вашем хосте-компьютере. Функция интерпретирует родовые типы данных C в соответствии с размерами слова вашего хоста-компьютера.

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

пример

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

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

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

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

  • Обеспечьте синхронизацию между определениями кода С и представлениями Simulink путем повторного импорта обновленных определений кода С. Можно выбрать, следует ли перезаписывать существующие представления 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: ''

The 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.

Если у вас есть Embedded Coder, код, который вы генерируете из модели, может использовать 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'});

The 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);

The 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);

The 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 невозможно вывести масштабирование с фиксированной точкой (длина двоичной дроби) из кода С Необходимо вручную задать типы данных элементов шины. Чтобы задать типы данных в командной строке, используйте 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');

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

В 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 Parameters> Simulation Target> 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 синтаксис, в целевой модели можно использовать параметры конфигурации Simulation Target, чтобы задать пути включения. В этом случае вам не нужно использовать 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++ и типы struct C++ игнорируются. Пустые структуры не импортируются.

Если вы импортируете файлы заголовков из загруженной модели и Language не задан или установлен на 'Auto', а Language установка наследуется от пользовательских настроек модели. Если импортированная модель уже имеет Language установка в Configuration Parameters > Simulation Target, эта настройка затмевается настройкой импортированной модели.

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

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

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

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

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

Спецификация для перезаписи существующих представлений 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). Импортер не может определить масштабирование с фиксированной точкой путем анализа кода С После использования функции необходимо вручную задать тип данных элемента шины или базовый тип Simulink.AliasType объект при помощи fixdt функция.

Совет

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

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

    • Для импортированного перечисления, потому что класс перечисления Simulink происходит от Simulink.IntEnumType, когда вы моделируете или генерируете код из модели, в перечислении используется целый размер, который является собственным для вашего целевого компьютера. Вы задаете характеристики вашего целевого компьютера при помощи параметров конфигурации модели, таких как Production device vendor and type и Native word size in production hardware.

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

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

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

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

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

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

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

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

Введенный в R2017a