exponenta event banner

Получение описания сгенерированного кода

Для получения метаинформации о сгенерированном коде можно использовать 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 дескриптора кода.

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