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

Чтобы сгенерировать интерфейс класса C++ для кода модели, установите параметр конфигурации модели Упаковка интерфейса кода на 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++ в сгенерированных файлах 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();
    ...
    };

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

Примечание

Если у вас есть Embedded Coder® лицензия, и вы выбрали для вашей модели системный целевой файл на основе ERT, используйте дополнительные параметры панели 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 для вашей модели, можно использовать MATLAB® команда RTW.configSubsystemBuild для настройки сгенерированного интерфейса класса C++ к коду подсистемы.

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

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

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

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

    • Имеет непрерывный шаг расчета

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

Похожие темы