Чтобы сгенерировать интерфейс класса C++ для кода модели, установите параметр конфигурации модели Упаковка интерфейса кода на C++ class
. Сгенерированный интерфейс инкапсулирует необходимые данные модели в атрибуты класса C++ и моделирует функции точки входа в методы класса C++. Преимущества инкапсуляции класса C++ включают:
Больший контроль за доступом к данным моделям
Возможность создать несколько образцы классов модели
Более лёгкое интегрирование кода модели в окружения программирования C++
Инкапсуляция классов C++ также работает для построений невиртуальных подсистем с правой кнопкой мыши. (Для получения информации о применимых требованиях смотрите Сгенерируйте интерфейс класса C++ к невиртуальному коду подсистемы.)
Чтобы сгенерировать инкапсулированный код класса C++ из модели:
Установите Language параметра конфигурации модели в C++
. Этот выбор также включает упаковку кода кода класса C++ для модели.
Проверьте, что значение параметра конфигурации модели Code interface packaging установлено на C++ class
.
Осмотрите настройку Multi-instance code error diagnostic. Оставьте параметр на своём значении по умолчанию Error
если вам не нужно изменить уровень серьезности для диагностики, отображаемой, когда модель нарушает требования к генерации кода мультиобразцов.
Сгенерируйте код для модели.
Исследуйте код класса модели C++ в сгенерированных файлах
и model
.h
. Например, следующий фрагмент кода из файла H, сгенерированного для модели примера model
.cpprtwdemo_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++ class
упаковка интерфейса кода.
Подсистема преобразовывается в блок Model с помощью функции Simulink.SubSystem.convertToModelReference
. Для ссылочных требований к преобразованию модели см. Simulink® страница с описанием Simulink.SubSystem.convertToModelReference
.
Чтобы сконфигурировать интерфейсы класса C++ для подсистемы, которая соответствует требованиям:
Откройте содержащую модель и выберите блок подсистемы.
Щелкните подсистему правой кнопкой мыши и выберите C/C++ Code > Build This Subsystem.
Когда сборка подсистемы завершится, исследуйте интерфейсы класса C++ в сгенерированных файлах и отчете генерации кода HTML. Для получения дополнительной информации о генерации и вызове методов точки входа модели, смотрите Сконфигурируйте генерацию кода C для функций точки входа модели.
Если у вас есть лицензия Embedded Coder, и вы выбрали системный целевой файл на основе ERT для вашей модели, можно использовать MATLAB® команда RTW.configSubsystemBuild
для настройки сгенерированного интерфейса класса 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++ в случаях, когда ссылочная модель не может иметь объединенную функцию вывода/обновления. Случаи включают модель, которая
Имеет непрерывный шаг расчета
Сохраняет состояния