Чтобы оптимизировать интегрирование Кода С++, сгенерированного из приложений Simulink®, компоненты и подсистемы с внешним кодом C or C++, конфигурируют индивидуально настраиваемый интерфейс класса C++. Когда вы генерируете Код С++ из модели, модель появляется как класс, элементы данных появляются как члены класса, и функции модели появляются как методы класса в сгенерированном коде. Конфигурирование интерфейса класса C++ позволяет вам настроить следующие аспекты сгенерированного Кода С++:
Информация о классе — Имя класса и пространство имен
Информация о члене класса — доступ к Члену класса и видимость
Информация о методе класса — имена Метода класса и аргументы
Индивидуально настраиваемый интерфейс класса C++ позволяет сгенерированным классам соответствовать определенным стандартам кода или интерфейсным требованиям так, чтобы сгенерированный код мог скомпилировать и объединяться в более крупные архитектуры с минимальной индивидуальной настройкой постгенерации.
Программируемый рабочий процесс использует программируемый интерфейс, в который можно вызвать при помощи командной строки MATLAB® или скрипта MATLAB, чтобы сконфигурировать индивидуально настраиваемый интерфейс класса C++. Кроме того, можно использовать функции, чтобы упростить сценарии, автоматизированное тестирование, и разработку или использование нисходящих функций. Программируемый интерфейс состоит из следующих функций:
Чтобы создать или получить объект Code Mappings сконфигурировать индивидуально настраиваемый интерфейс C ++ Class, можно использовать функции coder.mapping.utils.create
и coder.mapping.api.get
.
Чтобы сконфигурировать имя класса и пространство имен, можно использовать функции getClassName
, setClassName
, getClassNamespace
, и setClassNamespace
.
Чтобы сконфигурировать, как элементы данных появляются как члены класса, можно использовать функции getData
и setData
.
Чтобы сконфигурировать, как функции модели появляются как методы класса, можно использовать функции find
, getFunction
, и setFunction
.
Чтобы программно сконфигурировать индивидуально настраиваемый интерфейс C++, следуйте за обрисованным в общих чертах рабочим процессом:
Откройте среду для конфигурирования индивидуально настраиваемого интерфейса класса C++:
Откройте модель и командную строку MATLAB. В качестве альтернативы можно создать скрипт настройки MATLAB.
model='rtwdemo_cpp_workflow'
open_system(model)
Установите параметры конфигурации модели. Эти параметры конфигурируют поведение генерации кода всей модели. Чтобы сконфигурировать параметры, характерные для генерации индивидуально настраиваемого интерфейса класса C++, можно использовать set_param
функционируйте, чтобы установить эти параметры:
Параметр конфигурации | Описание |
---|---|
Code interface packaging | Выбирает выходной язык для сгенерированного кода. Для получения дополнительной информации смотрите, что интерфейс Code группирует. |
Multi-instance code error diagnostic | Задает уровень серьезности для диагностики, отображенной, когда модель нарушает требования для генерации кода мультиэкземпляра. Для получения дополнительной информации смотрите диагностику ошибки в коде Мультиэкземпляра. |
Remove error status field in real-time model data structure | Задает, не использовать ли ошибочное поле состояния от сгенерированной структуры данных модели реального времени |
Include model types in model class | Задает, чтобы включать определения типа модели в пространстве имен класса модели. Для получения дополнительной информации смотрите, Включают типы модели в класс модели. |
Интерфейсные параметры, которые связаны, но реже используются:
Параметр конфигурации | Описание |
---|---|
Terminate function required | Задает, сгенерировать ли |
Combine signal/state structures | Задает, объединить ли глобальные блоки-сигналы и глобальные данные состояния в одну структуру данных в сгенерированном коде. Для получения дополнительной информации смотрите, что Объединение предупреждает/утверждает о структурах. |
Generate destructor | Задает, сгенерировать ли деструктор для класса модели C++. Для получения дополнительной информации смотрите, Генерируют деструктор. |
Use dynamic memory allocation for model block instantiation | Задает выделение памяти для иерархий модели. Для получения дополнительной информации, seeUse динамическое выделение памяти для инстанцирования блока модели. |
Чтобы сконфигурировать индивидуально настраиваемый интерфейс класса C++ для модели, создайте объект Code Mappings. Чтобы создать новый объект Code Mappings для модели, используйте функцию coder.mapping.utils.create
. Если объект Code Mappings уже существует для модели, функция возвращает существующий объект.
% Create a new Code Mappings object for a model
cm = coder.mapping.utils.create(model);
Сконфигурируйте имя класса и пространство имен. Когда вы генерируете Код С++ из модели, та модель появляется как класс в сгенерированном коде. Чтобы упростить интегрирование и выполнить код и интерфейсные требования, можно настроить сгенерированное имя класса. Опционально, можно определить объем сгенерированного кода и предотвратить столкновения символа в рамках проекта путем определения пространства имен для сгенерированного класса. В смоделированных системах, которые используют иерархию модели, можно задать различное пространство имен для каждой модели в иерархии.
Сгенерированный интерфейс класса C++, объявленный в заголовочном файле модели, включает индивидуально настраиваемое имя и пространство имен:
// File: rtwdemo_cpp_workflow.h namespace CustomizedNamespace { class customized_ModelClass { // public data and function members public: // private data and function members private: }; }
Чтобы программно сконфигурировать имя класса и пространство имен, получите объект Code Mappings для своей модели и определите имя и пространство имен:
Получите объект Code Mappings для своей модели. Чтобы получить объект, используйте функцию coder.mapping.api.get
.
% Get the Code Mappings object for a model
cm = coder.mapping.api.get(model);
Сконфигурируйте имя класса. Чтобы установить имя класса, используйте функцию setClassName
.
% Set the class name setClassName(cm, 'customized_ModelClass');
Чтобы проверить новое имя класса прежде, чем сгенерировать код, используйте функцию getClassName
.
% Get the class name
getClassName(cm);
Сконфигурируйте пространство имен класса. Чтобы установить пространство имен, используйте функцию setClassNamespace
.
% Set the class namespace setClassNamespace(cm, 'customized_namespace');
Чтобы проверить новое пространство имен прежде, чем сгенерировать код, используйте функцию getClassNamespace
.
% Get the class namespace
getClassNamespace(cm);
Сконфигурируйте видимость и доступ членов класса. Когда вы генерируете Код С++ из модели, элементы данных Simulink появляются как члены класса в сгенерированном коде. Чтобы настроить инкапсуляцию данных о классе, чтобы соответствовать стандартам кода, безопасности или требованиям к производительности, можно настроить видимость и доступ сгенерированных членов класса. Элементы данных Simulink могут быть сгруппированы в следующие категории моделирования элементов:
Категория элемента модели | Описание |
---|---|
Inports | Порты ввода данных корневого уровня модели, такие как Inport и блоки In Bus Element. Для получения дополнительной информации смотрите Inport. |
Выходные порты | Порты вывода данных корневого уровня модели, такие как Outport и блоки Out Bus Element. Для получения дополнительной информации смотрите Выходной порт. |
Аргументы параметра модели | Переменные рабочей области, которые появляются как экземпляр (нестатические) элементы данных класса. |
Параметры модели | Переменные рабочей области, которые совместно используются через экземпляры класса модели, которые сгенерированы как статические элементы данных класса. |
Сигналы, состояния и внутренние данные | Элементы данных, которые являются внутренними к модели, такими как выходные сигналы блока, дискретные состояния блока, хранилища данных и сигналы пересечения нулем. |
Для каждой категории элемента модели можно сконфигурировать видимость данных, чтобы управлять модификатором доступа (спецификатор доступа) сгенерированных членов класса. Каждая опция и ее удар на сгенерированный интерфейс класса C++, объявленный в заголовочном файле модели, обрисованы в общих чертах:
Опции видимости данных | Описание |
---|---|
общественность | Если вы конфигурируете элементы данных как
File: rtwdemo_cpp_workflow.h namespace CustomizedNamespace { class customized_ModelClass { public: // example inport ExtU rtU; // example outport ExtY rtY; // example block signals and states DW rtDW; private: … }; } |
защищенный | Если вы конфигурируете элементы данных как File: rtwdemo_cpp_workflow.h // Class declaration for model example_model namespace CustomizedNamespace { class customized_ModelClass { public: protected: // example inport ExtU rtU; // example outport ExtY rtY; // example block signals and states DW rtDW; private: … }; } |
частный | Если вы конфигурируете элементы как File: rtwdemo_cpp_workflow.h namespace CustomizedNamespace { class customized_ModelClass { public: private: // example inport ExtU rtU; // example outport ExtY rtY; // example block signals and states DW rtDW; }; } |
Отдельные аргументы (Только аргументы параметра модели) | Если вы конфигурируете элементы данных как File: rtwdemo_cpp_workflow.h namespace CustomizedNamespace { class customized_ModelClass { public: // model step function void step1(real_T rty_engineState, const real_T modelParameterArgument); private: … }; } |
После того, как вы устанавливаете видимость данных категории элемента модели, можно сконфигурировать метод доступа к данным определить, как методы для получения и установки сгенерированы для элементов данных. Это управления конфигурацией, как код приложения может просмотреть и изменить данные о члене класса. Каждая опция и ее удар на сгенерированный интерфейс класса C++, объявленный в заголовочном файле модели, обрисованы в общих чертах:
Опции метода доступа члена | Описание |
---|---|
Метод | Если вы конфигурируете импорт как File: rtwdemo_cpp_workflow.h namespace CustomizedNamespace { class customized_ModelClass { public: // example inport void setInport(real_T localArgInput); // example outport real_T getOutport() const; // example of model parameter arguments configured with // ‘DataAccess’ ‘Direct' real_T const & getInstP() const; // example of model parameter arguments configured with // ‘DataAccess’ ‘Pointer’ // real_T const * getInstP() const; // example Block parameters get and set methods const rtwdemo_cppclass_workflowModelClass::rtwdemo_cppclass_workflow_P & getBlockParameters() const; void setBlockParameters(const rtwdemo_cppclass_workflow_P *prtwdemo_cppclass_workflowrtrtP); // example Block states get and set methods const rtwdemo_cppclass_workflowModelClass::rtwdemo_cppclass_workflow_DW & getDWork() const; void setDWork(const rtwdemo_cppclass_workflow_DW *prtwdemo_cppclass_workflowrtDW); private: … }; } |
Встроенный метод | Если вы конфигурируете импорт как File: rtwdemo_cpp_workflow.h namespace CustomizedNamespace { class customized_ModelClass { public: // example inport set method void setkeyState(real_T localArgInput) { rtU.keyState = localArgInput; } // example outport get method const real_T* getengineState() const { return rtY.engineState; } // example Block parameters get and set method const rtwdemo_cppclass_workflowModelClass::rtwdemo_cppclass_workflow_P & getBlockParameters() const { return rtwdemo_cppclass_workflowrtrtP; } void setBlockParameters(const rtwdemo_cppclass_workflow_P *prtwdemo_cppclass_workflowrtrtP) { rtwdemo_cppclass_workflowrtrtP = *prtwdemo_cppclass_workflowrtrtP; } // example Block states get and set methods const rtwdemo_cppclass_workflowModelClass::rtwdemo_cppclass_workflow_DW & getDWork() const { return rtwdemo_cppclass_workflowrtDW; } void setDWork(const rtwdemo_cppclass_workflow_DW *prtwdemo_cppclass_workflowrtDW) { rtwdemo_cppclass_workflowrtDW = *prtwdemo_cppclass_workflowrtDW; } private: … }; } |
Основанный на структуре метод | Если вы конфигурируете импорт как File: rtwdemo_cpp_workflow.h namespace CustomizedNamespace { class customized_ModelClass { // public data and function members public: // example inport void setExternalInputs(const ExtU_demoMethodScheduledModel_T * pExtU_demoMethodScheduledModel_T); // example outport const myNamespace::myModelClass::ExtY_demoMethodScheduledModel_T & getExternalOutputs() const; // Other model element categories may not be configured as ‘Structure-based method’ private: … }; } |
Встроенный основанный на структуре метод | Если вы конфигурируете импорт как File: rtwdemo_cpp_workflow.h namespace CustomizedNamespace { class customized_ModelClass { public: // example inport void setExternalInputs(const ExtU_demoMethodScheduledModel_T * pExtU_demoMethodScheduledModel_T) { demoMethodScheduledModelWithR_U = *pExtU_demoMethodScheduledModel_T; } // example outport const myNamespace::myModelClass::ExtY_demoMethodScheduledModel_T & getExternalOutputs() const { return demoMethodScheduledModelWithR_Y; } // Other model element categories may not be configured as ‘Inlined structure-based method’ private: … }; } |
'none' | Если вы конфигурируете доступ категории элемента модели как File: rtwdemo_cpp_workflow.h // External inputs (root inport signals with default storage) struct ExtU { real_T keyState; // '<Root>/keyState' }; // External outputs (root outports fed by signals with default storage) struct ExtY { real_T engineState[3]; // '<Root>/engineState' real_T cycleTime; // '<Root>/cycleTime' }; namespace CustomizedNamespace { class customized_ModelClass { public: // External inputs ExtU rtU; // External outputs ExtY rtY; private: … }; } |
Для каждой категории элемента модели обрисованы в общих чертах допустимая видимость данных и комбинации метода доступа члена:
Категория элемента модели | Видимость данных | Метод доступа члена |
---|---|---|
Inports | частный | Метод Встроенный метод Основанный на структуре метод Встроенный основанный на структуре метод |
общественность | 'none' Метод Встроенный метод Основанный на структуре метод Встроенный основанный на структуре метод | |
Выходные порты | частный | Метод Встроенный метод Основанный на структуре метод Встроенный основанный на структуре метод |
общественность | 'none' Метод Встроенный метод Основанный на структуре метод Встроенный основанный на структуре метод | |
Аргументы параметра модели | Отдельные аргументы | 'none' |
частный | Метод Встроенный метод | |
Параметры модели | частный | 'none' Метод Встроенный метод |
общественность | 'none' Метод Встроенный метод | |
Сигналы, состояния и внутренние данные | частный | 'none' Метод Встроенный метод |
общественность | 'none' Метод Встроенный метод |
Чтобы программно сконфигурировать видимость члена класса и доступ, получите объект Code Mappings для модели и установите свойства доступа к данным и видимости:
Получите объект Code Mappings для модели. Чтобы получить объект, используйте функцию coder.mapping.api.get
.
% Get the Code Mappings object
cm = coder.mapping.api.get(model);
Сконфигурируйте видимость. Чтобы установить видимость данных категории элементов данных Simulink в сгенерированном коде, используйте функцию setData
. Когда вы используете setData
функционируйте, задайте объект Code Mappings, категорию элемента модели, свойство видимости данных и опцию видимости данных. Допустимые опции видимости данных варьируются в зависимости от категории элемента модели.
% Set the data visibility of Simulink model data elements by category % setData(Code Mappings object, model element category, 'DataVisibility', data visibility option) setData(cm, 'Outports', 'DataVisibility', 'private');
Чтобы проверить видимость данных, устанавливающую прежде, чем сгенерировать код, используйте функцию getData
:
% Get the data visibility of Simulink model data elements by category % getData(code mappings object, model element category, 'DataVisibility') getData(cm, 'Outports', 'DataVisibility');
Сконфигурируйте доступ. Чтобы установить метод доступа члена категории элементов данных Simulink в сгенерированном коде, используйте функцию setData
. Когда вы используете setData
функционируйте, задайте объект Code Mappings, категорию элемента модели, свойство метода доступа члена и опцию метода доступа члена. Допустимые опции метода доступа члена варьируются в зависимости от категории элемента модели и выбрали опцию видимости данных.
% Set the access of Simulink model data elements by category % setData(Code Mappings object, model element category,... % 'MemberAccessMethod', member access method option) setData(cm, 'Inports', 'MemberAccessMethod', 'Method');
Чтобы проверить метод доступа члена, устанавливающий прежде, чем сгенерировать код, используйте функцию getData
:
% Get the visibility of Simulink model data elements by category % getData(code mappings- C++ object, model element category, 'MemberAccessMethod') getData(cm, 'Inports', 'MemberAccessMethod');
Сконфигурируйте имена метода класса и аргументы. Когда вы генерируете Код С++ из модели, функции модели появляются как методы класса в сгенерированном коде. Чтобы объединяться с внешним кодом или интерфейсными требованиями, можно настроить имя сгенерированных методов класса. Кроме того, для периодических функций тарифной ставки и Функций Simulink, можно сконфигурировать имя, порядок и идентификатор сгенерированных аргументов.
Сгенерированные методы класса упоминаются как методы точки входа и являются местоположениями в коде, где передача программного управления (выполнение) происходит. Методы точки входа варьируются в зависимости от типа модели Simulink и могут быть сгруппированы в следующие типы:
Тип модели | Тип функции модели | Описание | Имя функции модели | Ожидаемое имя метода |
---|---|---|---|---|
Модели экспорта функций | Экспортируемая функция | Экспортируемая функция для подсистемы. | ExportedFunction: , где имя блока Inport вызова функции в модели | или (если задано) |
Функция Simulink | Экспортируемая функция для блока Simulink Function. | Simulink Function: где имя блока Simulink Function в модели | для глобального блока Simulink Function или для ограниченного по объему блока Simulink Function | |
Экспорт функций или основанные на уровне модели | Инициализируйте функцию | Код инициализации для модели. В начале кода приложения вызовите функцию однажды. Не используйте эту функцию, чтобы сбросить структуру данных модели реального времени ( | Initialize |
|
Функция раздела | Для раздела модели, выхода и кода обновления. Параметр конфигурации модели Single output/update function выбран (значение по умолчанию). | Partition: , где раздел, который был создан явным образом из блока в модели и показан в Редакторе Расписания Simulink® (например, P1) | , где однозначно определяет функцию, сгенерированную в течение одного из периодов расчета модели | |
Периодическая многозадачная функция | Для блоков в основанной на уровне модели, сконфигурированной для многозадачности, выхода и кода обновления. Генератор кода производит функцию в течение каждого периода расчета. Параметр конфигурации модели Single output/update function выбран (значение по умолчанию). | Periodic: где аннотация, которая соответствует периоду шага расчета для периодического или непрерывного уровня многозадачной модели (например, D1) | , где однозначно определяет функцию, сгенерированную в течение одного из периодов расчета модели | |
Периодическая однозадачная функция | Для блоков в основанной на уровне модели, сконфигурированной для однозадачности, выхода и кода обновления. Параметр конфигурации модели Single output/update function выбран (значение по умолчанию). | Periodic |
| |
Функция сброса | Если модель включает блок Reset Function, сгенерированный код сброса. Чтобы сбросить условия или утвердить, вызовите функцию от кода приложения. | Reset: где имя функции сброса в модели |
| |
Оконечная функция | Код для того, чтобы выключить систему. Для основанных на ERT моделей можно подавить генерацию этой функции путем очистки параметра конфигурации модели Terminate function required (набор по умолчанию). | Terminate |
|
Сгенерированный интерфейс класса C++, объявленный в заголовочном файле модели, включает имя функции и индивидуальные настройки аргумента в сгенерированных методах точки входа:
File: rtwdemo_cpp_workflow.h namespace CustomizedNamespace { class customized_ModelClass { public: // model initialize function- customized name void customized_initialize(); // model step function- customized name & arguments void customized_step(customArg1, const* customArg2); // model terminate function- customized name void customized_terminate(); // Constructor customized_ModelClass(); // Destructor ~customized_ModelClass(); private: … }; }
Чтобы программно сконфигурировать имена метода класса и аргументы, получите объект Code Mappings для модели и установите функциональные свойства:
Получите объект Code Mappings для модели. Чтобы получить объект, используйте функцию coder.mapping.api.get
.
% Get the Code Mappings object
cm = coder.mapping.api.get(model);
Чтобы просмотреть доступные методы точки входа для модели, используйте функцию find
. Когда вы используете find
функционируйте, задайте объект Code Mappings и функциональную категорию, которую требуется просмотреть для модели. Допустимые функциональные опции категории следующие:
Функции
PeriodicFunctions
PartitionFunctions
ExportedFunctions
ResetFunctions
SimulinkFunctions
% View entry-point methods for a model by category % This example shows how to view the entry-point functions for a model % find(Code Mappings object, function category') find(cm, 'Functions');
Сконфигурируйте имена методов. Чтобы сконфигурировать имя метода метода точки входа, используйте функцию setFunction
. Когда вы используете setFunction
функционируйте, задайте объект Code Mappings, имя функции модели, свойство имени метода и пользовательское имя. Допустимые имена функций модели заданы следующим образом:
Initialize
— Инициализируйте функцию.
Terminate
— Оконечная функция.
Periodic:slIdentifier
— Периодическая функция (неявная задача), где slIdentifier
аннотация (например, D1) соответствие периоду шага расчета. Periodic
достаточно для однозадачной периодической функции.
Partition:slIdentifier
— Функция раздела (явная задача), где slIdentifier
имя раздела в Редакторе Расписания.
Reset:slIdentifier
— Сбросьте функцию где slIdentifier
имя функции сброса в модели.
ExportedFunction:slIdentifier
— Экспортируемая функция, где slIdentifier
имя блока импорта вызова функции.
ExportedFunction:slIdentifier
— Функция Simulink, где slIdentifier
имя функции Simulink в модели.
% Set the name of individual entry-point methods % This examples shows how to customize the name of a periodic function % setFunction(Code Mappings object, model function, 'MethodName', custom name) setFunction(cm, 'Periodic', 'MethodName', 'custom_Periodic');
Чтобы проверить имя метода прежде, чем сгенерировать код, используйте функцию getFunction
:
% Get method name % getFunction(code mappings object, model function, 'MethodName') getData(cm, 'Periodic', 'MethodName');
Сконфигурируйте аргументы метода. Для периодических функций тарифной ставки и Функций Simulink, можно использовать функцию setFunction
сконфигурировать сгенерированные аргументы метода. Когда вы используете setFunction
функционируйте, задайте объект Code Mappings, имя функции модели, свойство аргументов и прототип метода. Допустимые имена функций модели заданы следующим образом:
Initialize
— Инициализируйте функцию.
Terminate
— Оконечная функция.
Periodic:slIdentifier
— Периодическая функция (неявная задача), где slIdentifier
аннотация (например, D1) соответствие периоду шага расчета. Periodic
достаточно для однозадачной периодической функции.
Partition:slIdentifier
— Функция раздела (явная задача), где slIdentifier
имя раздела в Редакторе Расписания.
Reset:slIdentifier
— Сбросьте функцию где slIdentifier
имя функции сброса в модели.
ExportedFunction:slIdentifier
— Экспортируемая функция, где slIdentifier
имя блока импорта вызова функции.
ExportedFunction:slIdentifier
— Функция Simulink, где slIdentifier
имя функции Simulink в модели.
Допустимые опции идентификатора для параметров следующие:
Опция идентификатора | Предварительный просмотр |
---|---|
Значение (Только Inports) | myPeriodic (argInport) |
Ссылка const (Только Inports) | myPeriodic (const & argInport) |
Указатель на Const | myPeriodic (const * argInport) |
Указатель | myPeriodic (* argInport) |
Указатель const на const | myPeriodic (const * const argInport) |
В ниже примера, периодической функции, foo
, сконфигурирован, чтобы сгенерировать метод где y
возвращаемый аргумент и его параметр u1
передается как скаляр и u2
передается как постоянный указатель:
% Configure method arguments % setFunction(Code Mappings object, function, 'Arguments', function prototype) setFunction(cm, 'Periodic:foo', 'Arguments', 'y=(u1, const *u2)');
Чтобы проверить аргументы метода прежде, чем сгенерировать код, используйте функцию getFunction
:
% Get method name % getFunction(Code Mappings object, model function, 'Arguments') getData(cm, 'Periodic:foo', 'Arguments');
Сгенерируйте индивидуально настраиваемый интерфейс класса C++ путем генерации кода из модели. Чтобы проверить ваши индивидуально настраиваемые настройки интерфейса класса C++, создайте модель и просмотрите сгенерированный класс, член класса и представления метода класса.
Сгенерируйте код. Чтобы сгенерировать интерфейс класса C++, создайте модель с командой slbuild
.
slbuild example_model
Просмотрите код. Чтобы просмотреть сгенерированный код, откройте модель в приложении Embedded Coder®.
open example_model
Выполнить итерации. Если сгенерированный интерфейс не удовлетворяет требования кода, вносит корректировки настройки, пока требованиям не удовлетворяют.
Если представление сгенерированного кода не удовлетворяет ваши требования, реконфигурировало интерфейс и генерирует код снова, пока требованиям генерации кода не удовлетворяют. Для руководства при понимании сгенерированного кода смотрите, Анализируют Интерфейс Сгенерированного кода.
Специфичная для экземпляра Поддержка Параметра — можно использовать аргументы параметра модели, чтобы сконфигурировать переменные рабочей области, которые были заданы в качестве аргументов. Можно сконфигурировать эти аргументы как члены парламента, не занимающие официального поста класса или в качестве отдельных аргументов, заданных вне класса. Чтобы сконфигурировать в классе, можно установить установку видимости данных на частный и сконфигурировать генерацию методов для получения и установки. Опционально, можно сконфигурировать значения члена класса, как задано в классе (setDatat(cm,'ModelParameterArguments','DataAccess','Direct')
) или переданный ссылкой через конструктора класса (setDatat(cm,'ModelParameterArguments','DataAccess','Pointer')
). Установка доступа к данным поддерживается для сборок топ-модели. Для сборок образца модели код сгенерирован как ссылки в классе модели. Чтобы сконфигурировать специфичные для экземпляра параметры вне класса, установите видимость данных на отдельные аргументы.
Специфичные для экземпляра ограничения параметра включают:
Переменные MATLAB, отмеченные как аргументы модели, не могут быть сконфигурированными как частные члены класса.
Аргументы параметра модели не поддерживаются сборками щелчка правой кнопкой.
Интерфейсный стиль аргументов Code Generation Behavior — The I/O спецификации метода шага поддерживает односкоростные модели и многоскоростные однозадачные модели. Многоскоростные многозадачные модели не поддерживаются. Кроме того, интерфейс инкапсуляции C++ не является значением по умолчанию, значение проигнорировано для параметра Pass fixed-size scalar root inputs by value for code generation.
Факторы Stateflow® — Если у вас есть лицензия Stateflow для диаграммы Stateflow, которая находится в корневой модели, сконфигурированной, чтобы использовать I/O arguments step method
функциональная спецификация, и это использует корневое значение импорта модели или вызывает подсистему, которая использует корневое значение импорта модели, сделайте одно из следующих, чтобы сгенерировать код:
В диаграмме Stateflow снимите флажок Execute (enter) Chart At Initialization.
Вставьте блок Simulink Signal Conversion сразу после корневого импорта. В диалоговом окне параметров блоков Преобразования Сигнала выберите Exclude этот блок из 'Оптимизации' сокращения блока.
Факторы Simscape™ — Если корневое значение импорта модели соединяется с блоком Simscape, вставьте блок Simulink Signal Conversion между корневым импортом и блок преобразования Simscape. В диалоговом окне параметров блоков Преобразования Сигнала выберите Exclude этот блок из 'Оптимизации' сокращения блока.
Факторы Образца модели — При создавании модели, на которую ссылаются, которая сконфигурирована, чтобы сгенерировать интерфейс класса C++:
Не используйте интерфейс класса C++ в случаях, когда модель, на которую ссылаются, не сможет иметь объединенной функции выхода/обновления. Случаи включают модель, которая имеет время непрерывной выборки или сохраняет состояния.
Не используйте виртуальные шины в качестве вводов или выводов к модели, на которую ссылаются, когда модель, на которую ссылаются будет, использовать метод шага аргументов I/O. Когда крест сигналов шины сослался контуры, модели, или используют невиртуальные шины или используют метод шага По умолчанию.
coder.mapping.api.CodeMappingCPP
| coder.mapping.api.get
| coder.mapping.utils.create
| find
| getClassName
| getClassNamespace
| getData
| getFunction
| setClassName
| setClassNamespace
| setData
| setFunction