В этом примере показано, как настроить интерфейс класса C++ для модели на основе скорости. В Simulink можно создавать и генерировать код для системы моделирования на основе скорости, которая позволяет управлять планированием компонентов модели. В этом примере показано, как настроить создаваемое имя класса, пространство имен, члены класса и методы класса для примерной модели. Этот пример, rtwdemo_cppclass, моделирует включение или выключение двигателя транспортного средства в зависимости от того, включено ли зажигание.

Основной целью настройки интерфейса класса C++ для модели на основе скорости является настройка сгенерированного кода таким образом, чтобы он легко интегрировался с планировщиком заданий. В этом примере цель состоит в обновлении имени и пространства имен класса до более значимых значений, различении различных скоростей выборки, а также в упрощении и инкапсуляции оставшихся данных и функций в интерфейс.
Чтобы лучше отразить, что эта модель является моделью состояния механизма, обновите имя класса до engine_status.
Чтобы предотвратить конфликты с другими символами в проекте и указать, что созданный код из Simulink, обновите пространство имен класса до sl.
Чтобы включить настройку имени и аргументов периодической функции базовой скорости, настройте входы и выходы модели как элементы открытого класса без метода get/set.
Чтобы включить калибровку общих значений в нескольких экземплярах созданного класса модели, настройте параметры модели как частные члены класса с помощью метода get/set.
Чтобы упростить интерфейс, настройте аргументы параметров и внутренние данные как частные без метода get/set.
Чтобы сделать другие имена точек входа более значимыми, обновите имена методов инициализации и завершения скорости входа.
Настройка имени класса модели и пространства имен
1. На вкладке C++ Code щелкните Code Interface и выберите Class Name & Namespace.
2. Чтобы настроить имя класса, в поле C++ Class Name обновите имя до engine_status.
3. Чтобы настроить пространство имен класса, в поле C++ Class Namespace обновите имя до sl.
4. Нажмите кнопку ОК.
Настройка элементов данных модели в качестве элементов класса
1. Откройте редактор сопоставлений кода. На вкладке Код C++ щелкните Интерфейс кода и выберите Сопоставления кода.
2. Настройте видимость данных. Для категорий элементов модели:
Установка для портов ввода и вывода значения public и None.
Задайте для параметров модели значение private и Method.
Задайте для параметров Модель аргументы и Сигналы, состояния и внутренние данные значение private и None.
Настройка функций модели как методов классов
1. Откройте панель Функции (Functions). В редакторе сопоставлений кодов перейдите на вкладку Функции.
2. Чтобы просмотреть полный список функций начальной точки для модели, нажмите кнопку Обновить схему (Update Diign).
3. Сконфигурируйте периодические функции для различения скоростей выборки.
Чтобы настроить базовую периодическую функцию, в столбце «Просмотр метода» щелкните гиперссылку на просмотр метода.
Сконфигурируйте имя функции. В диалоговом окне настройки интерфейса Step Function в поле C++ Step Function Name обновите имя функции до EngineEntrypoint.
Откройте окно просмотра аргументов. В диалоговом окне выберите Configure arguments for Step function prototype и нажмите Get default.
Настройте имена аргументов. В столбце «Имя идентификатора 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. Сконфигурируйте другие методы точек входа.
Настройте имя функции Initialize. В столбце «Имя метода» щелкните и отредактируйте электронную таблицу, чтобы изменить имя на initIntegrator.
Сконфигурируйте имя функции завершения. В столбце «Имя метода» щелкните и отредактируйте электронную таблицу, чтобы изменить имя на terminateReadIntegrator.
5. Проверьте прототипы методов для всех функций точки входа в столбце «Просмотр метода».
Создание интерфейса
1. Создать код. Чтобы создать интерфейс класса C++, на вкладке C++ Code нажмите кнопку Build.
2. Просмотреть код. Чтобы просмотреть созданный код, на вкладке щелкните Просмотр кода. Созданный код появляется рядом с моделью в рабочем пространстве модели.
Программная настройка интерфейса класса 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