Чтобы оптимизировать интегрирование Кода С++, сгенерированного из приложений 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