Для получения метаинформации о сгенерированном коде можно использовать API дескриптора кода. Для каждой сборки модели генератор кода по умолчанию создает codedescriptor.dmr в папке построения. При моделировании модели в режимах Ускоритель (Accelerator) и Ускоритель (Rapid) codedescriptor.dmr не сгенерирован.
После создания кода можно использовать API дескриптора кода. Используйте API дескриптора кода для описания этих элементов в сгенерированном коде:
Интерфейсы данных: входы, выходы, параметры, хранилища данных и внутренние данные.
Функциональные интерфейсы: инициализация, вывод, обновление и завершение.
Информация о времени выполнения интерфейсов данных и функций, например, требования к синхронизации каждого объекта интерфейса.
Сведения о иерархии модели и описание кода ссылочных моделей.
coder.descriptor.DataInterface объект описывает различные свойства для указанного интерфейса данных в сгенерированном коде. В модели rtwdemo_commentsсуществует четыре входа, один выход и настраиваемый внешний параметр. Для получения дополнительной информации об интерфейсах данных в модели используйте coder.codedescriptor.CodeDescriptor объект и его методы.
1. Создайте временную папку для процесса сборки и проверки.
currentDir = pwd; [~,cgDir] = rtwdemodir();
2. Откройте и создайте модель.
open_system('rtwdemo_comments'); evalc('slbuild(''rtwdemo_comments'')');

3. Создать coder.codedescriptor.CodeDescriptor для требуемой модели с помощью getCodeDescriptor функция.
codeDescriptor = coder.getCodeDescriptor('rtwdemo_comments');
4. Для получения списка всех типов интерфейса данных в сгенерированном коде используйте getDataInterfaceTypes способ.
dataInterfaceTypes = codeDescriptor.getDataInterfaceTypes()
dataInterfaceTypes =
5x1 cell array
{'Inports' }
{'Outports' }
{'Parameters' }
{'ExternalParameterObjects'}
{'InternalData' }
Для получения списка всех поддерживаемых интерфейсов данных используйте getAllDataInterfaceTypes способ.
5. Для получения дополнительной информации об определенном типе интерфейса данных используйте getDataInterfaces способ.
dataInterface = codeDescriptor.getDataInterfaces('Inports');
Этот метод возвращает свойства блоков Inport в сгенерированном коде.
6. Поскольку эта модель имеет четыре входа, dataInterface является массивом coder.descriptor.DataInterface объекты. Получение сведений о первом Inport модели путем доступа к первому расположению в массиве.
dataInterface(1)
ans =
DataInterface with properties:
Type: [1x1 coder.descriptor.types.Type]
SID: 'rtwdemo_comments:99'
GraphicalName: 'In1'
VariantInfo: [1x0 coder.descriptor.VariantInfo]
Implementation: [1x1 coder.descriptor.DataImplementation]
Timing: [1x1 coder.descriptor.TimingInterface]
Unit: ''
Range: [1x0 coder.descriptor.Range]
Интерфейсы функций являются функциями точки входа в сгенерированном коде. В модели rtwdemo_roll, начальные функции: model_initialize, model_step, и model_terminate. Для получения дополнительной информации об интерфейсах функций в модели используйте coder.descriptor.FunctionInterface объект.
1. Создайте временную папку для процесса сборки и проверки.
currentDir = pwd; [~,cgDir] = rtwdemodir();
2. Откройте и создайте модель.
open_system('rtwdemo_roll'); evalc('slbuild(''rtwdemo_roll'')');

3. Создать coder.codedescriptor.CodeDescriptor для требуемой модели с помощью getCodeDescriptor функция.
codeDescriptor = coder.getCodeDescriptor('rtwdemo_roll');
4. Для получения списка всех типов интерфейса функции в сгенерированном коде используйте getFunctionInterfaceTypes способ.
functionInterfaceTypes = codeDescriptor.getFunctionInterfaceTypes()
functionInterfaceTypes =
2x1 cell array
{'Initialize'}
{'Output' }
Для получения списка всех поддерживаемых функциональных интерфейсов используйте getAllFunctionInterfaceTypes способ.
5. Для получения дополнительной информации об определенном типе интерфейса функции используйте getFunctionInterfaces способ.
functionInterface = codeDescriptor.getFunctionInterfaces('Initialize')
functionInterface =
FunctionInterface with properties:
Prototype: [1x1 coder.descriptor.types.Prototype]
ActualReturn: [1x0 coder.descriptor.DataInterface]
VariantInfo: [1x0 coder.descriptor.VariantInfo]
FunctionOwner: [1x0 coder.descriptor.TypedRegion]
Timing: [1x1 coder.descriptor.TimingInterface]
ActualArgs: [1x0 coder.descriptor.DataInterface Sequence]
6. Для получения подробной информации можно дополнительно развернуть свойства. Чтобы получить возвращаемое функцией значение, имя и аргументы:
functionInterface.Prototype
ans =
Prototype with properties:
Name: 'rtwdemo_roll_initialize'
Return: [1x0 coder.descriptor.types.Argument]
HeaderFile: 'rtwdemo_roll.h'
SourceFile: 'rtwdemo_roll.c'
Arguments: [1x0 coder.descriptor.types.Argument Sequence]
Используйте coder.codedescriptor.CodeDescriptor для получения всей информации о иерархии модели. Модель rtwdemo_async_mdlreftop имеет модель rtwdemo_async_mdlrefbot в качестве ссылочной модели.
1. Создайте временную папку для процесса сборки и проверки.
currentDir = pwd; [~,cgDir] = rtwdemodir();
2. Откройте и создайте модель.
open_system('rtwdemo_async_mdlreftop'); evalc('slbuild(''rtwdemo_async_mdlreftop'')');

3. Создать coder.codedescriptor.CodeDescriptor для требуемой модели с помощью getCodeDescriptor функция.
codeDescriptor = coder.getCodeDescriptor('rtwdemo_async_mdlreftop');
4. Получение списка всех ссылочных моделей с помощью getReferencedModelNames способ.
refModels = codeDescriptor.getReferencedModelNames()
refModels =
1x1 cell array
{'rtwdemo_async_mdlrefbot'}
5. Чтобы получить coder.codedescriptor.CodeDescriptor для ссылочной модели используйте getReferencedModelCodeDescriptor способ.
refCodeDescriptor = codeDescriptor.getReferencedModelCodeDescriptor('rtwdemo_async_mdlrefbot');
Теперь вы можете использовать refCodeDescriptor объект для получения дополнительной информации о ссылочной модели с помощью всех доступных методов в API дескриптора кода.