В этом примере показано, как сконфигурировать интерфейс класса C++ для модели на основе скорости. В Simulink можно создать и сгенерировать код для основанной на скорости системы моделирования, которая позволяет вам управлять планированием компонентов модели. В этом примере показано, как настроить сгенерированное имя класса, пространство имен, члены класса и методы класса для модели примера. Этот пример, rtwdemo_cppclass
, моделирует, включен или выключен двигатель транспортного средства в зависимости от того, было ли включено зажигание.
Основной целью конфигурирования интерфейса класса C++ для модели, основанной на скорости, является настройка сгенерированного кода так, чтобы он легко интегрировался с вашим планировщиком задач. В данном примере цель состоит в том, чтобы обновить имя и пространство имен класса до более значимых значений, различить различные частоты дискретизации, а также упростить и инкапсулировать оставшиеся данные и функции в интерфейсе.
Чтобы лучше отразить, что эта модель является моделью состояния двигателя, обновите имя класса на engine_status
.
Чтобы предотвратить столкновения с другими символами в проекте и указать, что сгенерированный код из Simulink, обновите пространство имен класса на sl
.
Чтобы включить строение имени и аргументов периодической функции базовой скорости, сконфигурируйте входные и выходные порты модели как общедоступные члены класса без метода get/set.
Чтобы включить калибровку общих значений для нескольких образцов сгенерированного класса модели, сконфигурируйте параметры модели как частные члены класса с помощью метода get/set.
Чтобы упростить интерфейс, сконфигурируйте аргументы параметра и внутренние данные как частные без метода get/set.
Чтобы сделать другие имена точек входа более значимыми, обновите имена методов initialize и terminate.
Сконфигурируйте имя класса модели и пространство имен
1. На вкладке Код С++ нажмите Code Interface и выберите Class Name & Namespace.
2. Чтобы сконфигурировать имя класса, в поле C++ Class Name обновите имя на engine_status
.
3. Чтобы сконфигурировать пространство имен класса, в поле C++ Class Namespace, обновите имя на sl
.
4. Нажмите кнопку ОК.
Сконфигурируйте элементы данных моделей как члены класса
1. Откройте редактор Отображения. На вкладке Код С++ нажмите Code Interface и выберите Code Mappings.
2. Настройте видимость данных. Для категорий элементов модели:
Установите значения входных и выходных портов равными public
и None
.
Установите параметры модели равными private
и Method
.
Установите аргументы параметра модели и Signals, состояния и внутренние данные в private
и None
.
Сконфигурируйте функции модели как методы класса
1. Откройте панель «Функции». В редакторе Отображения перейдите на вкладку Functions.
2. Чтобы просмотреть полный список функций точки входа для вашей модели, нажмите кнопку Обновить схему.
3. Сконфигурируйте периодические функции, чтобы различить частоты дискретизации.
Чтобы сконфигурировать периодическую функцию базовой скорости, в столбце Method Preview, щелкните его гиперссылку для предварительного просмотра метода.
Сконфигурируйте имя функции. В диалоговом окне строения интерфейса Step Function Interface C++ Step Function Name поле обновите имя функции на EngineEntrypoint
.
Откройте средство просмотра аргументов. В диалоговом окне выберите Настроить аргументы для прототипа функции Step и нажмите Get default.
Сконфигурируйте имена аргумента. В столбце «Имя идентификатора C++» нажмите и отредактируйте имена в keyState arg_keyState
, engineState arg_engineState
, cycleTime arg_cycleTime
.
Сконфигурируйте идентификаторы аргументов. В столбце C++ Type Qualifier выберите соответствующий идентификатор из выпадающих опций. Сконфигурируйте keyState arg_keyState
как value
, engineState arg_engineState
как Pointer
, и cycleTime arg_cycleTime
как Pointer
.
Измените порядок аргументов. Щелкните и перетащите строки аргументов в средстве просмотра в следующий порядок: keyState arg_keyState
, engineState arg_engineState
, и cycleTime arg_cycleTime
.
Проверьте выбранные аргументы. Щелкните Проверить.
Чтобы применить изменения и выйти из диалогового окна, нажмите кнопку ОК.
4. Сконфигурируйте другие методы точки входа.
Сконфигурируйте имя функции Initialize. В столбце «Имя метода» щелкните и измените электронную таблицу, чтобы изменить имя на initIntegrator
.
Сконфигурируйте имя функции Terminate. В столбце «Имя метода» щелкните и измените электронную таблицу, чтобы изменить имя на terminateReadIntegrator
.
5. Проверьте прототипы методов для всех функций точки входа в столбце Method Preview.
Сгенерируйте интерфейс
1. Сгенерируйте код. Чтобы сгенерировать интерфейс класса C++, на вкладке Код С++, нажмите Build.
2. Просмотрите код. Чтобы просмотреть сгенерированный код, на вкладке нажмите View Code. Сгенерированный код появляется рядом с моделью в рабочем пространстве модели.
Программная конфигурация интерфейса класса C++ для rtwdemo_cppclass
модель, используйте этот рабочий процесс:
model ='rtwdemo_cppclass'; open_system(model); % Get the C++ mapping object cm = coder.mapping.api.get(model);
% Configure the C++ class name setClassName(cm,'engine_status'); % Configure the enclosing namespace setClassNamespace(cm,'sl');
% Configure the inports and outport to pass external data directly to % the base-rate periodic function in the modeled application. This % configuration enables you to later configure the name and arguments for % the base-rate periodic function setData(cm, 'Inports', 'DataVisibility', 'public'); setData(cm, 'Outports', 'DataVisibility', 'public'); setData(cm, 'Inports', 'MemberAccessMethod', 'None'); setData(cm, 'Outports', 'MemberAccessMethod', 'None'); % Configure model parameters so that you can adjust calibration values setData(cm, 'ModelParameters','DataVisibility','private'); setData(cm,'ModelParameters', 'MemberAccessMethod','Method'); % Configure Model Parameter Arguments and Iternal data as encapsulated and simple setData(cm, 'ModelParameterArguments', 'DataVisibility', 'private'); setData(cm, 'ModelParameterArguments', 'MemberAccessMethod', 'None'); setData(cm, 'InternalData', 'DataVisibility', 'private'); setData(cm, 'InternalData', 'MemberAccessMethod', 'None');
% To configure the periodic functions, use the find function to % retrieve the periodic functions for the model periodic_functions = find(cm, 'Periodic'); % Configure the base-rate periodic function method name setFunction(cm, periodic_functions, 'MethodName', 'EngineEntrypoint'); % Configure the base-rate periodic function arguments setFunction(cm, periodic_functions,'Arguments',... '(const & keyState arg_keyState, * engineState arg_engineState, * cycleTime arg_cycleTime)'); % Configure the initialize and terminate function names setFunction(cm,'Initialize','MethodName', 'initIntegrator'); setFunction(cm,'Terminate', 'MethodName', 'terminateReadIntegrator');
Создайте модель приложения, чтобы сгенерировать интерфейс класса C++.
Сопоставление кода Отображения Редактор C++ | coder.mapping.api.CodeMappingCPP