Чтобы упростить интеграцию кода C++, генерируемого приложениями, компонентами и подсистемами Simulink ®, с внешним кодом C или C++, настройте пользовательский интерфейс класса C++. При создании кода C++ из модели модель отображается как класс, элементы данных - как члены класса, а функции модели - как методы класса в сгенерированном коде. Настройка интерфейса класса C++ позволяет настроить следующие аспекты сгенерированного кода C++ :
Сведения о классе - имя класса и пространство имен
Сведения об элементе класса - Доступ и видимость элемента класса
Сведения о методе класса - имена и аргументы метода класса
Настраиваемый интерфейс класса C++ позволяет создаваемым классам соответствовать определенным стандартам кода или требованиям к интерфейсу, чтобы создаваемый код мог компилироваться и интегрироваться в более крупные архитектуры с минимальной настройкой после генерации.
Интерактивный рабочий процесс обеспечивает быструю, интуитивную и полную настройку настраиваемого интерфейса класса C++ с помощью инструментов, доступных непосредственно на вкладке Код C++. На вкладке можно щелкнуть Интерфейс кода (Code Interface) и открыть диалоговое окно «Имя класса и пространство имен» (Class Name & Namespace configuration) и редактор сопоставлений кода (с помощью Инспектора свойств) для настройки интерфейса.
Для интерактивной настройки настраиваемого интерфейса C++:
Откройте среду для настройки настраиваемого интерфейса класса C++:
Откройте приложение Embedded Coder ®. В коллекции приложений щелкните Embedded Coder.
Установите язык на C++. На вкладке Код C++ щелкните Вывод и выберите Код Embedded C++.

Задайте параметры конфигурации модели. Чтобы открыть диалоговое окно Configuration Parameters, на вкладке Code C++, нажимают Settings и выбирают C/C ++ параметры настройки Генерации объектного кода. Эти параметры настраивают поведение генерации кода в масштабах всей модели. Для настройки параметров, специфичных для создания настраиваемого интерфейса класса C++, можно задать следующие параметры (расположенные на панели «Интерфейс»):

| Параметр конфигурации | Описание |
|---|---|
| Упаковка интерфейса кода | Выбор языка вывода для сгенерированного кода. Дополнительные сведения см. в разделе Упаковка интерфейса кода. |
| Диагностика ошибок многоэкземплярного кода | Указывает уровень серьезности для диагностики, отображаемой при нарушении моделью требований к созданию кода нескольких экземпляров. Дополнительные сведения см. в разделе Диагностика ошибок кода нескольких экземпляров. |
| Удалить поле состояния ошибки в структуре данных модели в реальном времени | Указывает, следует ли исключить поле состояния ошибки из созданной структуры данных модели в реальном времени |
| Включить типы моделей в класс моделей | Определяет включение определений типов моделей в пространство имен классов модели. Дополнительные сведения см. в разделе Включение типов моделей в класс моделей. |
Связанные, но менее часто используемые параметры интерфейса отображаются в разделе Дополнительные параметры.
| Параметр конфигурации | Описание |
|---|---|
| Требуется завершить функцию | Указывает, нужно ли создавать |
| Объединение структур сигналов/состояний | Указывает, следует ли объединять сигналы глобальных блоков и данные глобального состояния в одну структуру данных в сгенерированном коде. Дополнительные сведения см. в разделе Объединение структур сигналов и состояний. |
| Создать деструктор | Указывает, нужно ли создавать деструктор для класса модели C++. Дополнительные сведения см. в разделе Создание деструктора. |
| Использовать динамическое выделение памяти для создания экземпляра блока модели | Задает выделение памяти для иерархий модели. Дополнительные сведения см. в разделе Использование динамического выделения памяти для создания экземпляра блока модели. |
Настройте имя класса и пространство имен. При создании кода C++ из модели эта модель появляется как класс в созданном коде. Для упрощения интеграции и соответствия требованиям к коду и интерфейсу можно настроить созданное имя класса. Дополнительно можно задать область действия созданного кода и предотвратить конфликты символов в проекте, указав пространство имен для созданного класса. В моделируемых системах, построенных как иерархия модели, для каждой модели в иерархии можно указать разное пространство имен.
Сгенерированный интерфейс класса C++, объявленный в файле заголовка модели, включает настраиваемое имя и пространство имен:
// File: rtwdemo_cpp_workflow.h
namespace CustomizedNamespace
{
class customized_ModelClass {
// public data and function members
public:
// private data and function members
private:
};
}
Чтобы настроить имя класса и пространство имен для настраиваемого интерфейса класса C++:
На вкладке C++ Code щелкните Code Interface и выберите Class Name & Namespace.

Чтобы настроить имя класса, измените поле C++ Class Name.
Чтобы настроить пространство имен класса, измените поле C++ Class Namespace.
Нажмите кнопку ОК. Проверка выполняется в интерактивном режиме с предупреждениями о полях, предупреждающими о вводе недопустимого имени или пространства имен.
Настройте видимость и доступ членов класса. При создании кода 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 | частный | Метод Встроенный метод Структурный метод Встроенный метод на основе структуры |
| общественность | Ничего Метод Встроенный метод Структурный метод Встроенный метод на основе структуры | |
| Вспомогательные порты | частный | Метод Встроенный метод Структурный метод Встроенный метод на основе структуры |
| общественность | Ничего Метод Встроенный метод Структурный метод Встроенный метод на основе структуры | |
| Аргументы параметра модели | Отдельные аргументы | Ничего |
| частный | Метод Встроенный метод | |
| Параметры модели | частный | Ничего Метод Встроенный метод |
| общественность | Ничего Метод Встроенный метод | |
| Сигналы, состояния и внутренние данные | частный | Ничего Метод Встроенный метод |
| общественность | Ничего Метод Встроенный метод |
Для настройки членов класса настраиваемого интерфейса класса C++:
Откройте редактор сопоставлений кода. На вкладке Код C++ щелкните Интерфейс кода и выберите Сопоставления кода.
Откройте панель «Данные». В редакторе сопоставлений кодов перейдите на вкладку «Данные».

Настройте видимость. Чтобы настроить видимость категории элементов данных Simulink в созданном коде, в столбце «Видимость данных» выберите спецификатор доступа из заданных параметров. Опции зависят от категории элемента модели.
Сконфигурируйте доступ. Чтобы настроить доступ к категории элементов данных Simulink в сгенерированном коде, в столбце Метод доступа к члену выберите, как создавать методы get и set из заданных параметров. Параметры зависят от категории элемента модели и выбранной видимости данных.
Настройте имена и аргументы методов классов. При создании кода 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:
…
};
}
Откройте редактор сопоставлений кода. На вкладке Код C++ щелкните Интерфейс кода и выберите Сопоставления кода.
Откройте панель Функции (Functions). В редакторе сопоставлений кодов перейдите на вкладку Функции. Чтобы просмотреть полный список функций начальной точки для модели, нажмите кнопку Обновить схему (Update Diign).

Сконфигурируйте имена методов.
Чтобы настроить имя метода точки входа в созданном коде, в столбце Имя метода (Method Name) щелкните и непосредственно отредактируйте электронную таблицу. Можно ввести пользовательское имя или использовать параметры формата идентификатора для управления динамически создаваемым именем. Дополнительные сведения о параметрах формата идентификатора см. в разделе Управление форматом идентификатора.
Проверьте имя в столбце «Предварительный просмотр метода».
Настройка аргументов метода. Для базовых периодических функций и Simulink Functions можно настроить имя, порядок и идентификаторы аргументов метода.
Чтобы настроить аргументы периодической функции базовой скорости, выполните следующие действия.
Откройте диалоговое окно Step Function Interface configuration (Настройка интерфейса функции шага). В редакторе «Сопоставления кодов» на вкладке «Функции» в столбце «Предварительный просмотр метода» щелкните гиперссылку предварительного просмотра метода для базовой периодической функции:

В диалоговом окне выберите Configure arguments for Step function prototype и нажмите Get default. Это действие запускает представление аргументов метода.

Чтобы изменить порядок аргументов, щелкните и перетащите строки аргументов в средстве просмотра.
Чтобы изменить идентификатор, в столбце Квалификатор типа C++ выберите соответствующий идентификатор из раскрывающегося списка:
| Параметр идентификатора | Предварительный просмотр |
|---|---|
| Значение (только для ввода) | myPeriodicFunction (argInport) |
| Ссылка Const (только для ввода) | myPeriodicFunction (const & argInport) |
| Указатель на Конст | myPeriodicFunction (const * argInport) |
| Указатель | myPeriodicFunction (* argInport) |
| Указатель Const на Const | myPeriodicFunction (const * const argInport) |
Чтобы изменить имя аргумента, в столбце «Имя идентификатора C++» щелкните и непосредственно отредактируйте имя. Можно ввести пользовательское имя или использовать параметры формата идентификатора для управления динамически создаваемым именем. Дополнительные сведения о параметрах формата идентификатора см. в разделе Управление форматом идентификатора.
Если для аргумента inport и аргумента outport введено одинаковое имя, то inport и outport отображаются как один параметр в создаваемом методе. Например, если указать входной порт как argInport и аргумент outport как argOutport, генерируемый метод будет:
myStepFunction(argInport, argOutport);
Если указан аргумент ввода как argIO и аргумент outport как argIO, генерируемый метод будет:
myStepFunction(argIO);
Чтобы проверить выбранные аргументы, нажмите кнопку Проверить.
Чтобы применить изменения и выйти из диалогового окна, нажмите кнопку «ОК».
Чтобы настроить аргументы функции Simulink, выполните следующие действия.
Откройте диалоговое окно настройки интерфейса функции Simulink. В редакторе Сопоставления кодов на вкладке Функции в столбце Предварительный просмотр метода щелкните гиперссылку предварительного просмотра метода функции Simulink:

Чтобы изменить аргумент возврата, выберите параметр аргумента возврата из выпадающего списка аргументов возврата C/C + +.
Чтобы изменить порядок аргументов, щелкните и перетащите строки аргументов в средстве просмотра.
Чтобы изменить идентификатор, в столбце Квалификатор типа C++ выберите идентификатор из раскрывающегося списка:
| Параметр идентификатора | Предварительный просмотр |
|---|---|
| Автомобиль | mySimulinkFunction (argInport) |
| Ссылка Const | mySimulinkFunction (const & argInport) |
| Указатель на Конст | mySimulinkFunction (const * argInport) |
| Указатель | mySimulinkFunction (* argInport) |
| Указатель Const на Const | mySimulinkFunction (const * const argInport) |
Чтобы изменить имя аргумента, в столбце Имя идентификатора C++ щелкните и непосредственно отредактируйте имя. Можно ввести пользовательское имя или использовать параметры формата идентификатора для управления динамически создаваемым именем. Дополнительные сведения о параметрах формата идентификатора см. в разделе Управление форматом идентификатора.
Чтобы проверить изменения аргументов функции Simulink, просмотрите поле Прототип функции Simulink, чтобы просмотреть ожидаемый прототип метода.
Чтобы применить изменения и выйти из диалогового окна, нажмите кнопку «ОК».
Создайте пользовательский интерфейс класса C++, сгенерировав код из модели. Чтобы проверить конфигурации интерфейса класса C++, создайте модель и просмотрите созданные представления класса, члена класса и метода класса.
Создать код. Чтобы создать интерфейс класса C++, на вкладке C++ Code нажмите кнопку Build.
Просмотреть код. Чтобы просмотреть созданный код, на вкладке щелкните Просмотр кода. Созданный код появляется рядом с моделью в рабочем пространстве модели.

Итерация. Если сгенерированный интерфейс не соответствует требованиям кода, внесите изменения в конфигурацию до тех пор, пока требования не будут удовлетворены.
Если созданное представление кода не соответствует вашим требованиям, реконфигурируйте интерфейс и создавайте код снова до тех пор, пока не будут выполнены требования к созданию кода. Инструкции по пониманию сгенерированного кода см. в разделе Анализ сгенерированного интерфейса кода.
Поддержка параметров, специфичных для экземпляра - можно использовать аргументы параметров модели для настройки переменных рабочей области, указанных в качестве аргументов. Эти аргументы можно настроить как частные члены класса или как отдельные аргументы, определенные вне класса. Для настройки внутри класса можно установить видимость данных как частную и настроить создание методов get и set. При необходимости можно настроить значения элементов класса, как определено в классе (в инспекторе свойств задайте для параметра «Доступ к данным» значение Direct) или передаваемая ссылка через конструктор класса (в инспекторе свойств задайте для параметра «Доступ к данным» значение 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++ в случаях, когда ссылочная модель не может иметь комбинированную функцию вывода/обновления. Случаи включают модель, которая имеет непрерывное время выборки или сохраняет состояния.
Не используйте виртуальные шины в качестве входных или выходных данных для ссылочной модели, если ссылочная модель использует пошаговый метод аргументов ввода-вывода. Когда сигналы шины пересекают границы модели, на которые имеются ссылки, либо используйте невиртуальные шины, либо используйте метод шага по умолчанию.