exponenta event banner

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

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

  • Усиление контроля за доступом к данным модели

  • Возможность создания нескольких экземпляров классов модели

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

Инкапсуляция класса C++ также работает для построений невиртуальных подсистем правой кнопкой мыши. (Сведения о применимых требованиях см. в разделе Создание интерфейса класса C++ к коду невиртуальной подсистемы.)

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

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

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

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

  3. Проверьте настройку диагностики ошибок кода нескольких экземпляров. Оставить значение параметра по умолчанию 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 для вашей модели, используйте дополнительные параметры панели «Создание кода» > «Интерфейс» для настройки созданного интерфейса класса C++.

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

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

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

  • Подсистема может преобразовываться в блок модели с помощью функции 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 диалогового окна Configuration Parameters, поддерживается только интерфейс C API для C++ class формирование кода. При выборе внешнего режима или интерфейса ASAP2 создание кода завершается ошибкой проверки.

  • Если значение корневого входа модели соединяется с блоком преобразования Simscape™, необходимо вставить блок преобразования сигнала Simulink между корневым входом и блоком преобразования Simscape. В диалоговом окне параметров блока преобразования сигналов Simulink выберите Исключить этот блок из оптимизации «Сокращение блоков».

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

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

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

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