Чтобы оптимизировать интегрирование Кода С++, сгенерированного из приложений Simulink®, компоненты и подсистемы с внешним кодом C or C++, конфигурируют индивидуально настраиваемый интерфейс класса C++. Когда вы генерируете Код С++ из модели, модель появляется как класс, элементы данных появляются как члены класса, и функции модели появляются как методы класса в сгенерированном коде. Конфигурирование интерфейса класса C++ позволяет вам настроить следующие аспекты сгенерированного Кода С++:
Информация о классе — Имя класса и пространство имен
Информация о члене класса — доступ к Члену класса и видимость
Информация о методе класса — имена Метода класса и аргументы
Индивидуально настраиваемый интерфейс класса C++ позволяет сгенерированным классам соответствовать определенным стандартам кода или интерфейсным требованиям так, чтобы сгенерированный код мог скомпилировать и объединяться в более крупные архитектуры с минимальной индивидуальной настройкой постгенерации.
Интерактивный рабочий процесс обеспечивает быструю, интуитивную, и полную настройку индивидуально настраиваемого интерфейса класса C++ при помощи инструментов, доступных непосредственно от вкладки C++ Code. От вкладки можно нажать Code Interface и получить доступ к диалоговому окну настройки Class Name & Namespace и редактору Отображений Кода (с Property Inspector), чтобы сконфигурировать интерфейс.
В интерактивном режиме сконфигурировать индивидуально настраиваемый интерфейс C++:
Откройте среду для конфигурирования индивидуально настраиваемого интерфейса класса C++:
Откройте приложение Embedded Coder®. В галерее Apps нажмите Embedded Coder.
Установите язык на C++. На вкладке C++ Code нажмите Output и выберите Embedded C++ Code.
Установите параметры конфигурации модели. Чтобы открыть диалоговое окно Configuration Parameters, на вкладке C++ Code, нажимают Settings и выбирают C/C++ Code generation settings. Эти параметры конфигурируют поведение генерации кода всей модели. Чтобы сконфигурировать параметры, характерные для генерации индивидуально настраиваемого интерфейса класса C++, можно установить эти параметры (расположенный на панели Interface):
Параметр конфигурации | Описание |
---|---|
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 | Задает, чтобы включать определения типа модели в пространстве имен класса модели. Для получения дополнительной информации смотрите, Включают типы модели в класс модели. |
Интерфейсные параметры, которые связаны, но реже используются, появляются под Advanced parameters.
Параметр конфигурации | Описание |
---|---|
Terminate function required | Задает, сгенерировать ли |
Combine signal/state structures | Задает, объединить ли глобальные блоки-сигналы и глобальные данные состояния в одну структуру данных в сгенерированном коде. Для получения дополнительной информации смотрите, что Объединение предупреждает/утверждает о структурах. |
Generate destructor | Задает, сгенерировать ли деструктор для класса модели C++. Для получения дополнительной информации смотрите, Генерируют деструктор. |
Use dynamic memory allocation for model block instantiation | Задает выделение памяти для иерархий модели. Для получения дополнительной информации, seeUse динамическое выделение памяти для инстанцирования блока модели. |
Сконфигурируйте имя класса и пространство имен. Когда вы генерируете Код С++ из модели, та модель появляется как класс в сгенерированном коде. Чтобы упростить интегрирование и выполнить код и интерфейсные требования, можно настроить сгенерированное имя класса. Опционально, можно определить объем сгенерированного кода и предотвратить столкновения символа в рамках проекта путем определения пространства имен для сгенерированного класса. В смоделированных системах, созданных как иерархия модели, можно задать различное пространство имен для каждой модели в иерархии.
Сгенерированный интерфейс класса 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.
Нажмите OK. Валидация выполняется в интерактивном режиме с полевыми предупреждениями, которые предупреждают вас, если вы вводите недопустимое имя или пространство имен.
Сконфигурируйте видимость и доступ членов класса. Когда вы генерируете Код С++ из модели, элементы данных 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' Метод Встроенный метод |
Сконфигурировать члены класса индивидуально настраиваемого интерфейса класса C++:
Откройте редактор Отображений Кода. На вкладке C++ Code нажмите Code Interface и выберите Code Mappings.
Откройте панель Data. В редакторе Отображений Кода кликните по вкладке Data.
Сконфигурируйте видимость. Чтобы сконфигурировать видимость категории элементов данных Simulink в сгенерированном коде, из столбца Data Visibility, выбирают спецификатор доступа из данных опций. Опции варьируются в зависимости от Model Element Category.
Сконфигурируйте доступ. Сконфигурировать доступ категории элементов данных Simulink в сгенерированном коде, из столбца Member Access Method, выбор, как сгенерировать методы для получения и установки из данных опций. Опции варьируются в зависимости от Model Element Category и выбранного Data Visibility.
Сконфигурируйте имена метода класса и аргументы. Когда вы генерируете Код С++ из модели, функции модели появляются как методы класса в сгенерированном коде. Чтобы объединяться с внешним кодом или интерфейсными требованиями, можно настроить имя сгенерированных методов класса. Кроме того, для периодических функций тарифной ставки и Функций 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: … }; }
Откройте редактор Отображений Кода. На вкладке C++ Code нажмите Code Interface и выберите Code Mappings.
Откройте панель Functions. В редакторе Отображений Кода кликните по вкладке Functions. Чтобы просмотреть полный список функций точки входа для вашей модели, нажмите кнопку Update Diagram.
Сконфигурируйте имена методов.
Чтобы сконфигурировать имя метода точки входа в сгенерированном коде, из столбца Method Name, нажатия кнопки и непосредственно редактируют электронную таблицу. Можно ввести пользовательское имя, или можно использовать параметры формата идентификатора, чтобы управлять динамически сгенерированным именем. Для получения дополнительной информации о параметрах формата идентификатора, смотрите Управление форматом Идентификатора.
Проверьте имя в столбце Method Preview.
Сконфигурируйте аргументы метода. Для периодических функций тарифной ставки и Функций Simulink, можно сконфигурировать имя, порядок и идентификаторы аргументов метода.
Сконфигурировать аргументы периодической функции тарифной ставки:
Откройте диалоговое окно настройки Интерфейса Ступенчатой функции. Из редактора Отображений Кода, на вкладке Functions, в столбце Method Preview, кликают по гиперссылке предварительного просмотра метода периодической функции тарифной ставки:
В диалоговом окне выберите Configure arguments for Step function prototype и нажмите Get default. Это действие запускает представление аргументов метода.
Чтобы изменить порядок аргументов, перетащите строки аргумента в средстве просмотра.
Чтобы изменить идентификатор, в столбце C++ Type Qualifier, выбирают соответствующий идентификатор из выпадающего списка:
Опция идентификатора | Предварительный просмотр |
---|---|
Значение (Только Inports) | myPeriodicFunction (argInport) |
Ссылка const (Только Inports) | myPeriodicFunction (const & argInport) |
Указатель на Const | myPeriodicFunction (const * argInport) |
Указатель | myPeriodicFunction (* argInport) |
Указатель const на const | myPeriodicFunction (const * const argInport) |
Чтобы изменить название аргумента, в столбце C++ Identifier Name, нажатии кнопки и непосредственно редактируют имя. Можно ввести пользовательское имя, или можно использовать параметры формата идентификатора, чтобы управлять динамически сгенерированным именем. Для получения дополнительной информации о параметрах формата идентификатора, смотрите Управление форматом Идентификатора.
Если вы вводите то же имя для аргумента импорта и аргумента выходного порта, импорт и выходной порт появляются как один параметр в сгенерированном методе. Например, если вы задаете импорт как argInport
и аргумент выходного порта как argOutport
, сгенерированный метод был бы:
myStepFunction(argInport, argOutport);
Если вы задаете аргумент импорта как argIO
и аргумент выходного порта как argIO
, сгенерированный метод был бы:
myStepFunction(argIO);
Чтобы проверить выборы аргументов, нажмите Validate.
Чтобы применить изменения и выйти из диалогового окна, нажмите OK.
Сконфигурировать аргументы Функции Simulink:
Откройте Функцию Simulink Интерфейсное диалоговое окно настройки. Из редактора Отображений Кода, на вкладке Functions, в столбце Method Preview, кликают по гиперссылке предварительного просмотра метода Функции Simulink:
Чтобы изменить возвращаемый аргумент, выберите опцию возвращаемого аргумента от C/C++ return argument выпадающий список.
Чтобы изменить порядок аргументов, перетащите строки аргумента в средстве просмотра.
Чтобы изменить идентификатор, в столбце C++ Type Qualifier, выбирают идентификатор из выпадающего списка:
Опция идентификатора | Предварительный просмотр |
---|---|
'auto' | mySimulinkFunction (argInport) |
Const_reference | mySimulinkFunction (const & argInport) |
Указатель на Const | mySimulinkFunction (const * argInport) |
Указатель | mySimulinkFunction (* argInport) |
Указатель const на const | mySimulinkFunction (const * const argInport) |
Чтобы изменить название аргумента, в столбце C++ Identifier name, нажатии кнопки и непосредственно редактируют имя. Можно ввести пользовательское имя, или можно использовать параметры формата идентификатора, чтобы управлять динамически сгенерированным именем. Для получения дополнительной информации о параметрах формата идентификатора, смотрите Управление форматом Идентификатора.
Чтобы проверить изменения в Аргументах функции Simulink, рассмотрите поле Simulink function prototype, чтобы просмотреть ожидаемый прототип метода.
Чтобы применить изменения и выйти из диалогового окна, нажмите OK.
Сгенерируйте индивидуально настраиваемый интерфейс класса C++ путем генерации кода из модели. Чтобы проверить ваши настройки интерфейса класса C++, создайте модель и просмотрите сгенерированный класс, член класса и представления метода класса.
Сгенерируйте код. Чтобы сгенерировать интерфейс класса C++, на вкладке C++ Code, нажимают Build.
Просмотрите код. Чтобы просмотреть сгенерированный код, на вкладке нажимают View Code. Сгенерированный код появляется около модели в рабочем пространстве модели.
Выполнить итерации. Если сгенерированный интерфейс не удовлетворяет требования кода, вносит корректировки настройки, пока требованиям не удовлетворяют.
Если представление сгенерированного кода не удовлетворяет ваши требования, реконфигурировало интерфейс и генерирует код снова, пока требованиям генерации кода не удовлетворяют. Для руководства при понимании сгенерированного кода смотрите, Анализируют Интерфейс Сгенерированного кода.
Специфичная для экземпляра Поддержка Параметра — можно использовать аргументы параметра модели, чтобы сконфигурировать переменные рабочей области, которые были заданы в качестве аргументов. Можно сконфигурировать эти аргументы как члены парламента, не занимающие официального поста класса или в качестве отдельных аргументов, заданных вне класса. Чтобы сконфигурировать в классе, можно установить видимость данных на частный и сконфигурировать генерацию методов для получения и установки. Опционально, можно сконфигурировать значения члена класса, как задано в классе (в Property Inspector, установить Data Access на Direct
) или переданный ссылкой через конструктора класса (в Property Inspector, набор Data Access к 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. Когда крест сигналов шины сослался контуры, модели, или используют невиртуальные шины или используют метод шага По умолчанию.