Чтобы упростить интеграцию кода C++, генерируемого приложениями, компонентами и подсистемами Simulink ®, с внешним кодом C или C++, настройте пользовательский интерфейс класса C++. При создании кода C++ из модели модель отображается как класс, элементы данных - как члены класса, а функции модели - как методы класса в сгенерированном коде. Настройка интерфейса класса C++ позволяет настроить следующие аспекты сгенерированного кода C++ :
Сведения о классе - имя класса и пространство имен
Сведения об элементе класса - Доступ и видимость элемента класса
Сведения о методе класса - имена и аргументы метода класса
Настраиваемый интерфейс класса C++ позволяет создаваемым классам соответствовать определенным стандартам кода или требованиям к интерфейсу, чтобы создаваемый код мог компилироваться и интегрироваться в более крупные архитектуры с минимальной настройкой после генерации.
Программный рабочий процесс использует программный интерфейс, который можно вызвать с помощью командной строки MATLAB ® или сценария MATLAB для настройки настраиваемого интерфейса класса C++. Кроме того, эти функции можно использовать для упрощения создания сценариев, автоматизированного тестирования и разработки или использования нижестоящих функций. Программный интерфейс состоит из следующих функций:
Для создания или извлечения объекта сопоставления кода для настройки настраиваемого интерфейса класса C++ можно использовать функции 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 для установки следующих параметров:
| Параметр конфигурации | Описание |
|---|---|
| Упаковка интерфейса кода | Выбор языка вывода для сгенерированного кода. Дополнительные сведения см. в разделе Упаковка интерфейса кода. |
| Диагностика ошибок многоэкземплярного кода | Указывает уровень серьезности для диагностики, отображаемой при нарушении моделью требований к созданию кода нескольких экземпляров. Дополнительные сведения см. в разделе Диагностика ошибок кода нескольких экземпляров. |
| Удалить поле состояния ошибки в структуре данных модели в реальном времени | Указывает, следует ли исключить поле состояния ошибки из созданной структуры данных модели в реальном времени |
| Включить типы моделей в класс моделей | Определяет включение определений типов моделей в пространство имен классов модели. Дополнительные сведения см. в разделе Включение типов моделей в класс моделей. |
Параметры интерфейса, которые связаны, но используются реже:
| Параметр конфигурации | Описание |
|---|---|
| Требуется завершить функцию | Указывает, нужно ли создавать |
| Объединение структур сигналов/состояний | Указывает, следует ли объединять сигналы глобальных блоков и данные глобального состояния в одну структуру данных в сгенерированном коде. Дополнительные сведения см. в разделе Объединение структур сигналов и состояний. |
| Создать деструктор | Указывает, нужно ли создавать деструктор для класса модели C++. Дополнительные сведения см. в разделе Создание деструктора. |
| Использовать динамическое выделение памяти для создания экземпляра блока модели | Задает выделение памяти для иерархий модели. Дополнительные сведения см. в разделе Использование динамического выделения памяти для создания экземпляра блока модели. |
Чтобы настроить настраиваемый интерфейс класса C++ для модели, создайте объект Code Mappings. Чтобы создать новый объект сопоставления кодов для модели, используйте функцию coder.mapping.utils.create. Если для модели уже существует объект Code Mappings, функция возвращает существующий объект.
% Create a new Code Mappings object for a model
cm = coder.mapping.utils.create(model);Настройте имя класса и пространство имен. При создании кода C++ из модели эта модель появляется как класс в созданном коде. Для упрощения интеграции и соответствия требованиям к коду и интерфейсу можно настроить созданное имя класса. Дополнительно можно задать область действия созданного кода и предотвратить конфликты символов в проекте, указав пространство имен для созданного класса. В моделируемых системах, использующих иерархию моделей, для каждой модели в иерархии можно указать разное пространство имен.
Сгенерированный интерфейс класса 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 для модели и задайте имя и пространство имен:
Получение объекта сопоставления кода для модели. Чтобы получить объект, используйте функцию 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);Настройте видимость и доступ членов класса. При создании кода C++ из модели элементы данных 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:
…
};
}
|
После задания видимости данных категории элементов модели можно настроить метод доступа к данным для определения способа создания методов get и set для элементов данных. Эта конфигурация управляет тем, как код приложения может просматривать и изменять данные члена класса. Каждая опция и ее влияние на сгенерированный интерфейс класса 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:
…
};
}
|
| Ничего | При настройке доступа к категории элементов модели как 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 | частный | Метод Встроенный метод Структурный метод Встроенный метод на основе структуры |
| общественность | Ничего Метод Встроенный метод Структурный метод Встроенный метод на основе структуры | |
| Вспомогательные порты | частный | Метод Встроенный метод Структурный метод Встроенный метод на основе структуры |
| общественность | Ничего Метод Встроенный метод Структурный метод Встроенный метод на основе структуры | |
| Аргументы параметра модели | Отдельные аргументы | Ничего |
| частный | Метод Встроенный метод | |
| Параметры модели | частный | Ничего Метод Встроенный метод |
| общественность | Ничего Метод Встроенный метод | |
| Сигналы, состояния и внутренние данные | частный | Ничего Метод Встроенный метод |
| общественность | Ничего Метод Встроенный метод |
Чтобы программно настроить видимость и доступ к членам класса, получите объект Code Mappings для модели и задайте свойства доступа к данным и видимости:
Получение объекта сопоставления кода для модели. Чтобы получить объект, используйте функцию coder.mapping.api.get.
% Get the Code Mappings object
cm = coder.mapping.api.get(model);Настройте видимость. Чтобы задать видимость данных категории элементов данных Simulink в создаваемом коде, используйте функцию setData. При использовании setData укажите объект «Сопоставления кодов», категорию элементов модели, свойство видимости данных и параметр видимости данных. Допустимые параметры видимости данных зависят от категории элемента модели.
% 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');
Настройте имена и аргументы методов классов. При создании кода C++ из модели функции модели отображаются в создаваемом коде как методы классов. Для интеграции с требованиями внешнего кода или интерфейса можно настроить имя созданных методов класса. Кроме того, для базовых периодических функций и Simulink Functions можно настроить имя, порядок и идентификатор создаваемых аргументов.
Сгенерированные методы классов называются методами точки входа и являются местоположениями в коде, где происходит передача программного управления (выполнения). Методы точек входа зависят от типа модели Simulink и могут быть сгруппированы в следующие типы:
| Тип модели | Тип функции модели | Описание | Имя функции модели | Ожидаемое имя метода |
|---|---|---|---|---|
| Экспорт - функциональные модели | Экспортированная функция | Экспортированная функция для подсистемы. | ExportedFunction:, где - имя блока Inport вызова функции в модели. | или (если указано) |
| Функция симулятора | Экспортированная функция для блока функции Simulink. | Simulink Function: где - имя блока Simulink Function в модели | для глобального функционального блока Simulink или для функционального блока Simulink в области | |
| Экспорт - функция или модели на основе скорости | Инициализация функции | Код инициализации модели. В начале кода приложения вызовите функцию один раз. Не используйте эту функцию для сброса структуры данных модели в реальном времени ( | Initialize | |
| Функция секционирования | Для раздела модели выведите и обновите код. Выбран параметр конфигурации модели Single output/update function (по умолчанию). | Partition:, где - раздел, созданный явно из блока в модели и показанный в редакторе расписания Simulink ® (например, P1); | , где уникально идентифицирует функцию, созданную для одного из периодов образца модели | |
| Функция периодической многозадачности | Для блоков в модели на основе скорости, настроенной для многозадачности, вывода и обновления кода. Генератор кода создает функцию для каждого периода выборки. Выбран параметр конфигурации модели Single output/update function (по умолчанию). | Periodic: где - аннотация, соответствующая периоду времени выборки для периодической или непрерывной скорости многозадачной модели (например, D1); | , где уникально идентифицирует функцию, созданную для одного из периодов образца модели | |
| Периодическая однозадачная функция | Для блоков в модели на основе скорости, настроенной на однозадачность, вывод и обновление кода. Выбран параметр конфигурации модели Single output/update function (по умолчанию). | Periodic | | |
| Функция сброса | Если модель включает блок Reset Function, генерируется код сброса. Для сброса условий или состояния вызовите функцию из кода приложения. | Reset: где - имя функции сброса в модели; | | |
| Завершить функцию | Код отключения системы. Для моделей на основе ERT можно подавить генерацию этой функции, очистив параметр конфигурации модели Обязательная функция завершения (установлено по умолчанию). | 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 для модели и задайте свойства функции:
Получение объекта сопоставления кода для модели. Чтобы получить объект, используйте функцию coder.mapping.api.get.
% Get the Code Mappings object
cm = coder.mapping.api.get(model);Чтобы просмотреть доступные методы точек входа для модели, используйте функцию find. При использовании find укажите объект «Сопоставления кодов» и категорию функций, которые требуется просмотреть для модели. Допустимыми опциями категории функций являются:
Функции
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 - Функция симулятора, где 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, имя функции модели, свойство arguments и прототип метода. Допустимые имена функций модели указываются следующим образом:
Initialize - Инициализация функции.
Terminate - Завершить функцию.
Periodic:slIdentifier - периодическая функция (неявная задача), где slIdentifier - аннотация (например, D1), соответствующая периоду времени выборки. Periodic достаточна для одномандатной периодической функции.
Partition:slIdentifier - Функция секционирования (явная задача), где slIdentifier - имя раздела в редакторе расписания.
Reset:slIdentifier - Сброс функции, где slIdentifier - имя функции сброса в модели.
ExportedFunction:slIdentifier - Экспортированная функция, где slIdentifier - имя блока ввода вызова функции.
ExportedFunction:slIdentifier - Функция симулятора, где slIdentifier - имя функции Simulink в модели.
Допустимыми опциями идентификатора для параметров являются:
| Параметр идентификатора | Предварительный просмотр |
|---|---|
| Значение (только для ввода) | myPeriodic (argInport) |
| Ссылка Const (только для ввода) | myPeriodic (const & argInport) |
| Указатель на Конст | 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
Итерация. Если сгенерированный интерфейс не соответствует требованиям кода, внесите изменения в конфигурацию до тех пор, пока требования не будут удовлетворены.
Если созданное представление кода не соответствует вашим требованиям, реконфигурируйте интерфейс и создавайте код снова до тех пор, пока не будут выполнены требования к созданию кода. Инструкции по пониманию сгенерированного кода см. в разделе Анализ сгенерированного интерфейса кода.
Поддержка параметров, специфичных для экземпляра - можно использовать аргументы параметров модели для настройки переменных рабочей области, указанных в качестве аргументов. Эти аргументы можно настроить как частные члены класса или как отдельные аргументы, определенные вне класса. Для настройки внутри класса можно задать для параметра видимости данных значение private и настроить создание методов get и set. При необходимости можно настроить значения элементов класса в соответствии с определением класса (setDatat(cm,'ModelParameterArguments','DataAccess','Direct')) или передается по ссылке через конструктор класса (setDatat(cm,'ModelParameterArguments','DataAccess','Pointer')). Параметр доступа к данным поддерживается для построений высших моделей. Для построений ссылочной модели код создается как ссылки в классе модели. Чтобы настроить параметры экземпляра вне класса, задайте видимость данных для отдельных аргументов.
Ограничения параметров, специфичных для экземпляра, включают в себя:
Переменные MATLAB, помеченные как аргументы модели, не могут быть настроены как частные члены класса.
Аргументы параметров модели не поддерживаются построениями, выполняемыми щелчком правой кнопкой мыши.
Поведение при генерации кода интерфейса - стиль аргументов ввода-вывода спецификации пошагового метода поддерживает односкоростные модели и многоскоростные модели с одной задачей. Многоскоростные многозадачные модели не поддерживаются. Кроме того, интерфейс инкапсуляции C++ не является интерфейсом по умолчанию, значение игнорируется для скалярных корневых входов с фиксированным размером Pass по значению параметра генерации кода.
Соображения Stateflow ® - при наличии лицензии Stateflow для диаграммы Stateflow, находящейся в корневой модели, настроенной для использования I/O arguments step method спецификация функции, которая использует значение ввода корня модели или вызывает подсистему, использующую значение ввода корня модели, выполните одно из следующих действий для создания кода:
В диаграмме Stateflow снимите флажок Execute (enter) Chart At Initialization.
Вставьте блок Simulink Signal Conversion сразу после корневого входа. В диалоговом окне Параметры блока преобразования сигналов выберите Исключить этот блок из оптимизации «Уменьшение блока».
Simscape™ Соображения. Если значение корневого входа модели соединяется с блоком Simscape, вставьте блок преобразования сигнала Simulink между корневым входом и блоком преобразования Simscape. В диалоговом окне Параметры блока преобразования сигналов выберите Исключить этот блок из оптимизации «Уменьшение блока».
Рекомендации по ссылочной модели - при построении ссылочной модели, сконфигурированной для создания интерфейса класса C++:
Не используйте интерфейс класса C++ в случаях, когда ссылочная модель не может иметь комбинированную функцию вывода/обновления. Случаи включают модель, которая имеет непрерывное время выборки или сохраняет состояния.
Не используйте виртуальные шины в качестве входных или выходных данных для ссылочной модели, если ссылочная модель использует пошаговый метод аргументов ввода-вывода. Когда сигналы шины пересекают границы модели, на которые имеются ссылки, либо используйте невиртуальные шины, либо используйте метод шага по умолчанию.
coder.mapping.api.CodeMappingCPP | coder.mapping.api.get | coder.mapping.utils.create | find | getClassName | getClassNamespace | getData | getFunction | setClassName | setClassNamespace | setData | setFunction