В этом примере показано, как сконфигурировать интерфейс класса C++ для основанной на уровне модели. В Simulink можно создать и сгенерировать код для основанной на уровне системы моделирования, которая позволяет вам управлять планированием компонентов модели. Этот пример показывает вам, как настроить сгенерированное имя класса, пространство имен, члены класса и методы класса для модели в качестве примера. Этот пример, rtwdemo_cppclass
, симулирует, работает ли механизм транспортного средства или от зависимости, если воспламенение было включено.
Первичная цель по конфигурированию интерфейса класса C++ для основанной на уровне модели состоит в том, чтобы настроить сгенерированный код так, чтобы это легко объединялось с вашим планировщиком задач. В данном примере цель состоит в том, чтобы обновить имя и пространство имен класса к большему количеству значимых значений, отличить варьировавшиеся частоты дискретизации, и упростить и инкапсулировать остающиеся данные и функции в интерфейсе.
Чтобы лучше отразить, что эта модель является моделью состояния механизма, обновите имя класса к engine_status
.
Чтобы предотвратить столкновения с другими символами в проекте и указать, что сгенерированный код от Simulink, обновите пространство имен класса к sl
.
Чтобы включить настройку имени и аргументы периодической функции тарифной ставки, сконфигурируйте импорт и выходные порты модели как общедоступные члены класса без того, чтобы получать/метода установки.
Чтобы включить калибрование разделяемых значений через несколько экземпляров сгенерированного класса модели, сконфигурируйте параметры модели как частные члены класса с тем, чтобы получать/методом установки.
Чтобы упростить интерфейс, сконфигурируйте аргументы параметра и внутренние данные как частные без того, чтобы получать/метода установки.
Сделать другую точку входа называет более значимым, обновите имена инициализирования и оконечных методов уровня записи.
Сконфигурируйте имя класса модели и пространство имен
1. На вкладке C ++ Code нажмите Code Interface и выберите Class Name & Namespace.
2. Чтобы сконфигурировать имя класса, в Поле имени Класса C++, обновляют имя к engine_status
.
3. Чтобы сконфигурировать пространство имен класса, в поле C ++ Class Namespace, обновляют имя к sl
.
4. Нажать ОК.
Сконфигурируйте элементы данных модели как члены класса
1. Откройте редактор Отображений Кода. На вкладке C ++ Code нажмите Code Interface и выберите Code Mappings.
2. Сконфигурируйте видимость данных. Для категорий элемента модели:
Установите Инпортов и выходные порты к public
и None
.
Установите Параметры модели на private
и Method
.
Установите аргументы Параметра модели и Сигналы, состояния и внутренние данные к private
и None
.
Сконфигурируйте функции модели как методы класса
1. Откройте панель Функций. В редакторе Отображений Кода кликните по вкладке Functions.
2. Чтобы просмотреть полный список функций точки входа для вашей модели, нажмите кнопку Update Diagram.
3. Сконфигурируйте периодические функции, чтобы отличить частоты дискретизации.
Чтобы сконфигурировать периодическую функцию тарифной ставки, в столбце Предварительного просмотра Метода, кликают по его гиперссылке предварительного просмотра метода.
Сконфигурируйте имя функции. В диалоговом окне настройки Интерфейса Ступенчатой функции Поле имени Ступенчатой функции C++ обновите имя функции к EngineEntrypoint
.
Откройте средство просмотра аргументов. В диалоговом окне выберите аргументы Configure для Ступенчатой функции, моделируют и нажимают значение по умолчанию Get.
Сконфигурируйте имена аргумента. В столбце Имени Идентификатора C++ кликните и отредактируйте имена к keyState arg_keyState
, engineState arg_engineState
, cycleTime arg_cycleTime
.
Сконфигурируйте идентификаторы аргумента. В столбце Спецификатора Типа C++ выберите соответствующий идентификатор из выпадающих опций. Сконфигурируйте keyState arg_keyState
как value
, engineState arg_engineState
как Pointer
, и cycleTime arg_cycleTime
как Pointer
.
Измените порядок аргументов. Перетащите строки аргумента в средстве просмотра к следующему заказу: keyState arg_keyState
, engineState arg_engineState
, и cycleTime arg_cycleTime
.
Проверьте выборы аргументов. Нажмите Validate.
Чтобы применить изменения и выйти из диалогового окна, нажать ОК.
4. Сконфигурируйте другие методы точки входа.
Сконфигурируйте Инициализировать имя функции. В столбце Имени метода кликните и отредактируйте электронную таблицу, чтобы изменить название на initIntegrator
.
Сконфигурируйте Оконечное имя функции. В столбце Имени метода кликните и отредактируйте электронную таблицу, чтобы изменить название на terminateReadIntegrator
.
5. Проверьте прототипы метода для всех функций точки входа в столбце Предварительного просмотра Метода.
Сгенерируйте интерфейс
1. Сгенерируйте код. Чтобы сгенерировать интерфейс класса C++, на вкладке C ++ Code, нажимают 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, 'PeriodicFunctions'); % 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