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

Можно использовать API дескриптора кода, чтобы получить метаинформацию о сгенерированном коде. Для каждой сборки модели генератор кода, по умолчанию, создает codedescriptor.dmr файл в папке сборки. При симуляции модели в Акселераторе и Быстрых Режимах Accelerator, 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 Дескриптора Кода.

Похожие темы