Сгенерируйте интерфейс класса C++ к коду модели или подсистемы

Чтобы сгенерировать интерфейс класса C++ к типовому кодексу, установите упаковку интерфейса Code параметра конфигурации модели на C++ class. Сгенерированный интерфейс инкапсулирует требуемые данные модели в атрибуты класса C++ и функции точки входа модели в методы класса C++. Преимущества инкапсуляции класса C++ включают:

  • Большее управление доступом к данным модели

  • Способность создать несколько экземпляров классов модели

  • Более легкое интегрирование типового кодекса в среды программирования на C++

Инкапсуляция класса C++ также работает на сборки щелчка правой кнопкой невиртуальных подсистем. (Для получения информации о требованиях, которые применяются, смотрите, Генерируют Интерфейс Класса C++ к Невиртуальному Коду Подсистемы.)

Сгенерируйте интерфейс класса C++ к типовому кодексу

Сгенерировать инкапсулировавший код класса C++ из модели:

  1. Установите параметр конфигурации модели Language на C++. Этот выбор также включает интерфейс класса C++ кода, группирующий для модели.

  2. Проверьте, что параметр конфигурации модели Code interface packaging установлен в C++ class.

  3. Исследуйте установку Multi-instance code error diagnostic. Оставьте параметр в его значении по умолчанию Error если вы не должны изменять уровень серьезности для диагностики, отображенной, когда модель нарушает требования для генерации кода мультиэкземпляра.

  4. Сгенерируйте код для модели.

  5. Исследуйте код класса модели C++ в сгенерированных файлах modelH и model.cpp. Например, следующая выборка кода из файла H сгенерирована для модели rtwdemo_secondOrderSystem в качестве примера показывает объявление класса C++ для модели.

    /* Class declaration for model rtwdemo_secondOrderSystem */
    class rtwdemo_secondOrderSystemModelClass {
      /* public data and function members */
     public:
      /* External outputs */
      ExtY_rtwdemo_secondOrderSyste_T rtwdemo_secondOrderSystem_Y;
    
      /* Model entry point functions */
    
      /* model initialize function */
      void initialize();
    
      /* model step function */
      void step();
    
      /* model terminate function */
      void terminate();
    
      /* Constructor */
      rtwdemo_secondOrderSystemModelClass();
    
      /* Destructor */
      ~rtwdemo_secondOrderSystemModelClass();
    
      /* Real-Time Model get method */
      RT_MODEL_rtwdemo_secondOrderS_T * getRTM();
    ...
    };

    Для получения дополнительной информации о генерации и вызывании функций точки входа модели, смотрите, Конфигурируют генерацию кода C для Функций Точки входа Модели.

Примечание

Если у вас есть лицензия Embedded Coder®, и вы выбрали ERT-based system target file для своей модели, используйте дополнительный Code Generation> параметры панели Interface, чтобы настроить сгенерированный интерфейс класса C++.

Сгенерируйте интерфейс класса C++ к невиртуальному коду подсистемы

Можно сгенерировать интерфейсы класса C++ для сборок щелчка правой кнопкой невиртуальных подсистем, если следующие требования удовлетворяются:

  • Модель сконфигурирована для C++ язык и C++ class упаковка интерфейса кода.

  • Подсистема конвертируема с блоком Model с помощью функции Simulink.SubSystem.convertToModelReference. Для требований преобразования модели, на которые ссылаются смотрите страницу с описанием Simulink® Simulink.SubSystem.convertToModelReference.

Чтобы сконфигурировать интерфейсы класса C++ для подсистемы, которая удовлетворяет требования:

  1. Откройте содержание модели и выберите блок подсистемы.

  2. Щелкните правой кнопкой по подсистеме и выберите C/C++ Code> Build This Subsystem.

  3. Когда сборка подсистемы завершится, исследуйте интерфейсы класса C++ в сгенерированных файлах и отчете генерации кода HTML. Для получения дополнительной информации о генерации и вызове методов точки входа модели, смотрите, Конфигурируют генерацию кода C для Функций Точки входа Модели.

Если у вас есть лицензия Embedded Coder, и вы выбрали ERT-based system target file для своей модели, можно использовать команду MATLAB® RTW.configSubsystemBuild чтобы настроить сгенерированный класс C++ взаимодействуют через интерфейс к коду подсистемы.

Ограничения интерфейса класса C++

  • Среди интерфейсов обмена данными, доступных на панели Interface диалогового окна Configuration Parameters, только, API-интерфейс C поддерживается для C++ class генерация кода. Если вы выбираете External mode или ASAP2 interface, генерация кода перестала работать с ошибкой валидации.

  • Если корневое значение импорта модели соединяется с блоком преобразования Simscape™, необходимо вставить блок Simulink Signal Conversion между корневым импортом и блок преобразования Simscape. На диалоговом окне параметров блоков Signal Conversion Simulink выберите Exclude this block from 'Block reduction' optimization.

  • Вы не можете использовать интерфейс класса C++ в случаях, когда модель, на которую ссылаются, не может иметь объединенной функции выхода/обновления. Случаи включают модель это

    • Имеет время непрерывной выборки

    • Сохраняет состояния

Похожие темы