Сконфигурируйте интерфейс класса C++ для основанных на уровне моделей

В этом примере показано, как сконфигурировать интерфейс класса 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, '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++.

Смотрите также

|

Похожие темы