Сконфигурируйте интерфейс класса C++ для моделей Export-Function

В этом примере показано, как сконфигурировать интерфейс класса C++ для модели экспорта функций. Моделирование экспорта функций позволяет вам сгенерировать код для инициируемых событием функций, которые могут быть интегрированы с внешним окружением или планировщиком. Функции определяются с помощью Подсистемы вызова функций, function-call Модели, Simulink Function и Блоков s-function. В этом примере показано, как настроить сгенерированное имя класса, пространство имен, члены класса и методы класса для модели примера. Этот пример, rtwdemo_cppclass_expfcn, предоставляет набор функций, которые можно настроить в типичной модели экспорта функций.

Цели и требования к интерфейсам

Основной целью настройки сгенерированного кода С++ из модели export-function является возможность настройки поведения, управляемого событиями. В данном примере цель состоит в том, чтобы обновить имя и пространство имен класса до более значимых значений, настроить экспорты функций, а также упростить и инкапсулировать оставшиеся данные и функции в интерфейсе.

  • Чтобы лучше отразить управляемое событиями поведение в модели, обновите имя класса на triggered_events.

  • Чтобы предотвратить столкновения с другими символами в проекте и указать, что сгенерированный код из Simulink, обновите пространство имен класса на sl.

  • Чтобы упростить и инкапсулировать данные, установите элементы модели на частный с помощью метода get/set.

  • Чтобы настроить функции, настройте имена экспортов функций.

  • Чтобы сделать другие имена точек входа более значимыми, обновите имена инициализирующих и оконечных методов точек входа.

Интерактивный пример

Сконфигурируйте имя класса модели и пространство имен

1. На вкладке Код С++ нажмите Code Interface и выберите Class Name & Namespace.

2. Чтобы сконфигурировать имя класса, в поле C++ Class Name обновите имя на triggered_events.

3. Чтобы сконфигурировать пространство имен класса, в поле C++ Class Namespace, обновите имя на sl.

4. Нажмите кнопку ОК.

Сконфигурируйте элементы данных моделей как члены класса

1. Откройте редактор Отображения. На вкладке Код С++ нажмите Code Interface и выберите Code Mappings.

2. Настройте видимость данных. Для категорий элементов модели:

  • Установите значения входных и выходных портов равными private и Method.

  • Установите параметры модели равными private и Method.

  • Установите аргументы параметра модели равными private и Method.

  • Установите Сигналы, состояния и внутренние данные в private и Method.

Сконфигурируйте функции модели как методы класса

1. Откройте панель «Функции». В редакторе Отображения перейдите на вкладку Functions.

2. Сконфигурируйте имена экспортов функций.

  • Для экспорта функций, Export Function: event 1, в столбце «Имя метода» щелкните и отредактируйте электронную таблицу, чтобы обновить имя на subsystemEvent1.

  • Для экспорта функций, Export Function: event 2, в столбце «Имя метода» щелкните и отредактируйте электронную таблицу, чтобы обновить имя на subsystemEvent2.

3. Сконфигурируйте имя функции Initialize. В столбце «Имя метода» щелкните и измените электронную таблицу, чтобы изменить имя на initIntegrator.

4. Сконфигурируйте имя функции Terminate. В столбце «Имя метода» щелкните и измените электронную таблицу, чтобы изменить имя на terminateReadIntegrator.

5. Проверьте прототипы методов для всех функций точки входа в столбце Method Preview.

Сгенерируйте интерфейс

1. Сгенерируйте код. Чтобы сгенерировать интерфейс класса C++, на вкладке Код С++, нажмите Build.

2. Просмотрите код. Чтобы просмотреть сгенерированный код, на вкладке нажмите View Code. Сгенерированный код появляется рядом с моделью в рабочем пространстве модели.

Программный пример

Программная конфигурация интерфейса класса C++ для rtwdemo_cppclass_expfcn модель, используйте этот рабочий процесс:

Откройте модель примера

model ='rtwdemo_cppclass_expfcn';
open_system(model);
% Get the C++ mapping object
cm = coder.mapping.api.get(model);

Сконфигурируйте имя класса модели и пространство имен

% Configure the C++ class name
setClassName(cm,'event_triggered');
% Configure the enclosing namespace
setClassNamespace(cm,'sl');

Сконфигурируйте элементы данных моделей как члены класса

% Configure the inports and outports for the model
setData(cm, 'Inports', 'DataVisibility', 'private');
setData(cm, 'Outports', 'DataVisibility', 'private');
setData(cm, 'Inports', 'MemberAccessMethod', 'Method');
setData(cm, 'Outports', 'MemberAccessMethod', 'Method');

% Configure the model parameters
% static model parameters (shared across all instances)
setData(cm, 'ModelParameters','DataVisibility','private');
setData(cm,'ModelParameters', 'MemberAccessMethod','Method');

% Configure the model parameter agruments
setData(cm, 'ModelParameterArguments', 'DataVisibility', 'private');
setData(cm, 'ModelParameterArguments', 'MemberAccessMethod', 'Method');

% Configure the internal data
setData(cm, 'InternalData', 'DataVisibility', 'private');
setData(cm, 'InternalData', 'MemberAccessMethod', 'Method');

Сконфигурируйте функции модели как методы класса

% To configure the export functions, use the find function to
% retrieve all the export functions for the model
exported_functions = find(cm, 'ExportedFunctions');

% Configure the Exported Function names
setFunction(cm, exported_functions{1}, 'MethodName', 'subsystemEvent1');
setFunction(cm, exported_functions{2}, 'MethodName', 'subsystemEvent2');

% Configure the initialize and terminate function names
setFunction(cm,'Initialize','MethodName', 'initIntegrator');
setFunction(cm,'Terminate', 'MethodName', 'terminateReadIntegrator');

Сгенерируйте интерфейс

Создайте модель приложения, чтобы сгенерировать интерфейс класса C++.

См. также

|

Похожие темы