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

На диалоговом окне Configuration Parameters, набор интерфейс Code Generation> Interface Code, упаковочный (Simulink Coder) параметр к C++ class для генерации класса C++, взаимодействуют через интерфейс к типовому кодексу. Сгенерированный интерфейс инкапсулирует требуемые данные модели в атрибуты класса C++ и образцовые функции точки входа в методы класса C++. Преимущества инкапсуляции класса C++ включают:

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

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

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

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

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

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

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

  2. На Code Generation> панель Interface, проверьте, что параметр Code interface packaging (Simulink Coder) устанавливается на C++ class.

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

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

  5. Исследуйте код класса модели C++ в сгенерированных файлах model.h и 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();
    ...
    };

    Для получения дополнительной информации о генерации и вызывании образцовых функций точки входа, смотрите, Конфигурируют Генерацию кода для Образцовых Функций Точки входа (Simulink Coder).

Примечание

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

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

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

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

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

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

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

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

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

Примечание

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

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

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

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

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

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

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

Похожие темы