Путем установки параметра конфигурации модели Code interface packaging (Simulink Coder) к C++ class
, можно сгенерировать интерфейс класса C++ к типовому кодексу. Сгенерированный интерфейс инкапсулирует требуемые данные модели в атрибуты класса C++ и функции точки входа модели в методы класса C++. Преимущества инкапсуляции класса C++ включают:
Большее управление доступом к данным модели
Способность умножиться инстанцирует классов модели
Более легкое интегрирование типового кодекса в среды программирования на C++
Инкапсуляция класса C++ также работает на сборки щелчка правой кнопкой невиртуальных подсистем. (Для получения информации о требованиях, которые применяются, смотрите, Конфигурируют Интерфейсы Класса C++ для Невиртуальных Подсистем.)
Сгенерировать интерфейсы класса C++ в типовом кодексе:
Сконфигурируйте свою модель, чтобы использовать основанный на ERT системный конечный файл, обеспеченный MathWorks®.
В диалоговом окне Configuration Parameters, установленном эти параметры:
Установите Language на C++
.
Установите Code interface packaging на C++ class
.
Опционально, сконфигурируйте связанные настройки интерфейса класса C++ для своего типового кодекса, с помощью графического интерфейса пользователя (GUI) или прикладного программного интерфейса (API).
Сгенерируйте типовой кодекс и исследуйте результаты.
Чтобы начать с примером, смотрите Простое Использование Управления Классом C++. Для получения дополнительной информации о конфигурировании интерфейсов класса C++ для типового кодекса, смотрите, Настраивают Интерфейсы Класса C++ Используя Графические интерфейсы и Настраивают Интерфейсы Класса C++ Программно. Для ограничений, которые применяются, смотрите Ограничения Управления Интерфейсом Класса C++.
Для примера генерации кода класса C++ смотрите, Настраивают Интерфейс к Сгенерированному Коду С++, Который Вызван кодом С.
Настройте интерфейсы класса C++ Используя графические интерфейсы
Задайте пользовательский класс памяти для генерации кода класса C++
Настройте интерфейс к сгенерированному коду С++, который вызван кодом С
Этот пример иллюстрирует простое использование C++ class
упаковка интерфейса кода. Это генерирует интерфейсы класса C++ кода из модели в качестве примера без обширных модификаций к настройкам по умолчанию.
Для получения дополнительной информации об установке параметров класса C++, смотрите разделы, которые следуют этому примеру, начало Настраивают Интерфейсы Класса C++ Используя Графические интерфейсы.
Сгенерировать интерфейсы класса C++ для модели Simulink®:
Откройте модель, для которой требуется сгенерировать интерфейсы класса C++ кода. Этот пример использует модель rtwdemo_counter
. Сохраните копию модели к перезаписываемому местоположению.
Сконфигурируйте модель, чтобы использовать основанный на ERT системный конечный файл, обеспеченный MathWorks.
Установите параметр конфигурации модели Language на C++
. Установка для параметра конфигурации модели Code interface packaging превращается в C++ class
. Сохраните изменения конфигурации модели путем нажатия на Apply.
Сразу сгенерировать стиль по умолчанию кода класса C++, не исследуя связанные параметры конфигурации модели, шаги 4 - 8 пропуска.
Откройте панель Interface диалогового окна Configuration Parameters и исследуйте раздел Code interface. Когда вы выбираете C++ class
интерфейс кода, группирующий для вашей модели, дополнительные средства управления интерфейсом класса C++ появляются в разделе Code interface. Смотрите Конфигурируют Параметры Интерфейса Кода С++ для описаний этих средств управления. Измените установки параметров согласно своим требованиям к приложению.
Откройте Сконфигурировать диалоговое окно интерфейса класса C++ путем нажатия кнопки Configure C++ Class Interface. Используйте диалоговое окно, чтобы сконфигурировать метод шага для вашего сгенерированного класса модели. Диалоговое окно первоначально отображается представление для конфигурирования Default step method для класса модели. В этом представлении можно задать имя класса модели, имя метода шага и пространство имен для модели.
Смотрите Конфигурируют Метод Шага для Вашего Класса Модели для описаний этих средств управления.
Если стиль интерфейса по умолчанию удовлетворяет ваши потребности, шаги 6 - 8 пропуска.
Если вы хотите, чтобы вход и выход модели корневого уровня был аргументами на методе шага, установите Function specification на I/O arguments step method
. Диалоговое окно отображается представление для конфигурирования метода шага стиля аргументов I/O для класса модели. Смотрите Конфигурируют Метод Шага для Вашего Класса Модели для описаний средств управления.
Нажмите кнопку Get Default Configuration. Подпанель Configure C++ class interface появляется. Подпанель отображает начальную интерфейсную настройку для вашей модели. Смотрите Передающие Аргументы ввода-вывода для описаний средств управления.
Если вы хотите сконфигурировать аргументы I/O, сгенерированные для вашего метода шага модели, продолжить изменять и подтверждать интерфейс, пока вы не удовлетворены настройкой метода шага. Используйте средства управления диалоговым окном, чтобы сконфигурировать атрибуты аргумента I/O. Например, в подпанели Configure C++ class interface, в строке для Input
аргумент, можно изменить значение Category от Value
к Pointer
и измените значение Qualifier от none
к const *
. Предварительный просмотр обновляется, чтобы отразить ваши изменения. Нажмите кнопку Validate, чтобы подтвердить модифицированную интерфейсную настройку. Чтобы сохранить ваши изменения, нажмите Apply и OK.
Если вы выбираете not to configure I/O arguments, нажмите Cancel, чтобы выйти из диалогового окна.
Сгенерируйте код для модели В представлении Code, рассмотрите сгенерированный код. Заметьте, что требуемые данные модели инкапсулируются в атрибуты класса C++, и функции точки входа модели инкапсулируются в методы класса C++. Например, избранный файл rtwdemo_counter.h
видеть объявление класса для модели.
Если вы сконфигурировали пользовательские аргументы I/O для метода шага модели (дополнительный шаг 8), исследуйте сгенерированный код на метод шага в rtwdemo_counter.h
и rtwdemo_counter.cpp
. Аргументы должны отразить ваши изменения. Например, если вы внесли предложенные изменения для Input
аргумент, входной параметр должен появиться как const int32_T *arg_Input
.
Используйте пространства имен, чтобы определить объем классов модели C++
Сконфигурируйте интерфейсы класса C++ для невиртуальных подсистем
Сконфигурировать модель для упаковки класса C++ кода:
Установите параметр конфигурации модели Language на C++
.
Установите параметр Code interface packing на C++ class
.
Эти установки параметров:
Отключите параметры конфигурации модели что C++ class
не поддерживает. Для получения дополнительной информации смотрите Ограничения Управления Интерфейсом Класса C++.
Добавляют дополнительные параметры интерфейса класса C++, которые описывает следующий раздел.
Когда вы конфигурируете модель для, выбирают C++ class
упаковка интерфейса кода, панель Interface показывает параметры, которые применяются к интерфейсу C++:
Multi-instance code error diagnostic
Задает уровень серьезности для диагностики, отображенной, когда модель нарушает требования для генерации кода мультиэкземпляра.
None
— Возобновите сборку, не отображая диагностическое сообщение.
Warning
— Возобновите сборку после отображения предупреждающего сообщения.
Error
(значение по умолчанию) — Сборка аварийного прекращения работы после отображения сообщения об ошибке.
Remove error status field in real-time model data structure
Задает, не использовать ли ошибочное поле состояния от сгенерированной структуры данных модели реального времени rtModel
(прочь по умолчанию). Выбирание этой опции уменьшает использование памяти.
Следует иметь в виду, что выбирание этой опции может заставить генератор кода не использовать rtModel
структура данных от сгенерированного кода.
Parameter visibility
Задает, сгенерировать ли структуру параметров блоков как public
, private
, или protected
элемент данных класса модели C++ (private
по умолчанию).
Parameter access
Задает, сгенерировать ли методы доступа для параметров блоков для класса модели C++ (None
по умолчанию). Можно выбрать невстроенные методы доступа (Method
) или встроенные методы доступа (Inlined method
).
External I/O access
Задает, сгенерировать ли методы доступа для сигналов ввода-вывода корневого уровня для класса модели C++ (None
по умолчанию). Если вы хотите сгенерировать методы доступа, у вас есть следующие опции:
Сгенерируйте невстроенные или встроенные методы доступа.
Сгенерируйте методы доступа structure-based или per-signal. Можно сгенерировать серию набора и получить методы на основе на сигнал или сгенерировать всего один метод установки, который берет адрес внешней входной структуры в качестве аргумента и для внешних выходных параметров (если применимо), только каждый получает метод, который возвращает ссылку на внешнюю структуру output. Сгенерированный код для основанных на структуре методов доступа имеет следующую общую форму:
class ModelClass { ... // Root inports set method void setExternalInputs(const ExternalInputs* pExternalInputs); // Root outports get method const ExternalOutputs & getExternalOutputs() const; }
Этот параметр влияет на сгенерированный код, только если вы используете метод шага стиля по умолчанию в своем классе модели; не, если вы явным образом передаете аргументы для сигналов ввода-вывода корневого уровня с помощью метода шага стиля аргументов I/O. Для получения дополнительной информации смотрите Передающие Параметры по умолчанию и Передающие Аргументы ввода-вывода.
Configure C++ Class Interface
Открывает Сконфигурировать диалоговое окно интерфейса класса C++, которое позволяет вам конфигурировать метод шага для своего класса модели. Для получения дополнительной информации смотрите, Конфигурируют Метод Шага для Вашего Класса Модели.
Интерфейсные параметры, которые связаны, но реже используются, появляются под Advanced parameters:
Terminate function required
Задает, сгенерировать ли
метод (на по умолчанию). Эта функция содержит код завершения модели и должна быть вызвана как часть завершения работы системы.model
_terminate
Combine signal/state structures
Задает, объединить ли глобальные блоки-сигналы и глобальные данные состояния в одну структуру данных в сгенерированном коде (очищенный по умолчанию). Выбор этого параметра уменьшает RAM и улучшает удобочитаемость сгенерированного кода.
Internal data visibility
Задает, сгенерировать ли внутренние структуры данных, такие как ввод-вывод Блока, векторы DWork, модель Runtime, Нулевые пересечения и непрерывные состояния, как public
, private
, или protected
элементы данных класса модели C++ (private
по умолчанию).
Internal data access
Задает, сгенерировать ли методы доступа для внутренних структур данных, таких как ввод-вывод Блока, векторы DWork, модель Runtime, Нулевые пересечения и непрерывные состояния, для класса модели C++ (None
по умолчанию). Можно выбрать невстроенные методы доступа (Method
) или встроенные методы доступа (Inlined method
).
Generate destructor
Задает, сгенерировать ли деструктор для класса модели C++ (выбранный по умолчанию).
Use dynamic memory allocation for model block instantiation (Simulink Coder)
Для модели, содержащей блоки Model, задает, должен ли сгенерированный код использовать динамическое выделение памяти, во время регистрации объекта модели, чтобы инстанцировать объектов для моделей, на которые ссылаются, сконфигурированных с интерфейсом класса C++ (очищенный по умолчанию). Если вы выбираете этот параметр, во время инстанцирования объекта для топ-модели в иерархии модели - ссылки, сгенерированный код использует оператор new
инстанцировать объектов для моделей, на которые ссылаются.
Выбор этого параметра освобождает родительскую модель от необходимости обеспечить информацию о моделях, на которые ссылаются, вне ее прямых дочерних элементов. Очистка этого параметра означает, что родительская модель обеспечивает информацию о своих моделях, на которые ссылаются, включая ее прямые и косвенные дочерние элементы.
Если вы выбираете этот параметр, bad_alloc
исключение может быть выдано на стандарт C++, если ошибка из памяти происходит во время использования new
. Предоставьте код, чтобы отловить и обработать bad_alloc
исключение в случае, если ошибка из памяти происходит для new
вызовите во время конструкции объекта топ-модели.
Если вы выбираете Use dynamic memory allocation for model block instantiation, и базовая модель содержит блок Model, процесс сборки может сгенерировать конструктора копии и функции оператора присваивания в частном разделе класса модели. Цель функций состоит в том, чтобы предотвратить участников указателя в классе модели от того, чтобы быть скопированным другим кодом. Для получения дополнительной информации смотрите Конструктора Копии Класса Модели и Оператор присваивания.
Чтобы сконфигурировать метод шага для вашего класса модели, на Code Generation> панель Interface, нажимают кнопку Configure C++ Class Interface, которая доступна, когда вы выбираете C++ class
интерфейс кода, группирующий для модели. В Сконфигурировать диалоговом окне интерфейса класса C++, которое появляется, сконфигурируйте метод шага для своего класса модели в любом из двух стилей:
Default step method
поддерживает односкоростные модели и многоскоростные модели. Можно сконфигурировать модель для однозадачной операции или многозадачной операции. Этот метод также поддерживает виртуальные контуры пересечения шины.
I/O arguments step method
поддерживает односкоростные модели и многоскоростные модели. Можно сконфигурировать модель для однозадачной операции.
Передача Параметров по умолчанию. Сконфигурировать диалоговое окно интерфейса класса C++ первоначально отображается представление для конфигурирования Default step method для класса модели.
Step method name
Позволяет вам задавать имя метода шага кроме значения по умолчанию, step
.
Class name
Позволяет вам задавать имя класса модели кроме значения по умолчанию,
.model
ModelClass
Namespace
Позволяет вам задавать пространство имен для класса модели. Если задано, пространство имен испускается в сгенерированном коде для класса модели. Параметр Namespace обеспечивает средние значения определения объема классов модели C++. В иерархии модели - ссылки можно задать различное пространство имен для каждой модели, на которую ссылаются.
Step function preview
Отображает предварительный просмотр прототипа ступенчатой функции модели, как в настоящее время сконфигурировано. Отображение предварительного просмотра динамически обновляется после того, как вы подтвердите свою текущую настройку.
Список аргументов ступенчатой функции имеет запись для каждого из портов I/O корневого уровня модели. Этот список не включает аргументы параметра модели, которые могут появиться в сгенерированном коде, когда модель используется в качестве модели, на которую ссылаются. Например, модель sldemo_mdlref_counter_paramargs
имеет импорт с именем аргумента arg_input
, выходной порт с именем аргумента arg_output
, и насыщение блокируется, чьи пределы имеют имена аргумента параметра рабочей области lower_saturation_limit
и upper_saturation_limit
.
Предварительный просмотр ступенчатой функции для этой модели:
sldemo_mdlref_counter_paramargsModelClass :: step ( arg_input, * arg_output )
Прототип функции в сгенерированном коде отличается от предварительного просмотра. Прототип в сгенерированном коде (с дополнительными аргументами параметра модели):
sldemo_mdlref_counter_paramargsModelClass::step ( real_T arg_input, real_T *arg_output, real_T rtp_lower_saturation_limit, real_T rtp_upper_saturation_limit)
Validate
Подтверждает вашу настройку ступенчатой функции текущей модели. Панель Validation отображает состояние и объяснение отказа.
Передающие Аргументы ввода-вывода. Если вы выбираете I/O arguments step method
в меню Function specification диалоговое окно отображается представление для конфигурирования метода шага стиля аргументов I/O для класса модели.
Get Default Configuration
Нажмите эту кнопку, чтобы получить начальную интерфейсную настройку, которая обеспечивает начальную точку для дальнейшей индивидуальной настройки.
Step function preview
Отображает предварительный просмотр прототипа ступенчатой функции модели, как в настоящее время сконфигурировано. Предварительный просмотр динамически обновляется, когда вы делаете изменения конфигурации.
Validate
Подтверждает вашу настройку ступенчатой функции текущей модели. Панель Validation отображает состояние и объяснение отказа.
Когда вы нажимаете Get Default Configuration, подпанель Configure C++ class interface появляется в диалоговом окне, отображая начальную интерфейсную настройку. Например:
Step method name
Позволяет вам задавать имя метода шага кроме значения по умолчанию, step
.
Class name
Позволяет вам задавать имя класса модели кроме значения по умолчанию,
.model
ModelClass
Namespace
Позволяет вам задавать пространство имен для класса модели. Если задано, пространство имен испускается в сгенерированном коде для класса модели. Параметр Namespace обеспечивает средние значения определения объема классов модели C++. В иерархии модели - ссылки можно задать различное пространство имен для каждой модели, на которую ссылаются.
Order
Отображает числовое положение каждого аргумента. Используйте кнопки Up и Down, чтобы изменить порядок аргументов.
Port Name
Отображает имя порта каждого аргумента (не конфигурируемое использование этого диалогового окна).
Port Type
Отображает тип порта, Inport
или Outport
, из каждого аргумента (не конфигурируемое использование этого диалогового окна).
Category
Отображает передающий механизм для каждого аргумента. Чтобы изменить передающий механизм для аргумента, выберите Value
Указатель
, или Reference
в меню Category аргумента.
Argument Name
Отображает имя каждого аргумента. Чтобы изменить имя аргумента, щелкните в поле Argument name аргумента, расположите курсор для ввода текста и введите новое имя.
Qualifier
Отображает const
введите спецификатор для каждого аргумента. Чтобы изменить спецификатор для аргумента, выберите доступное значение из меню Qualifier аргумента. Возможные значения:
none
const
Значение
const*
(значение, на которое ссылается указатель)
const*const
(на значение ссылаются указатель и сам указатель),
const &
(значение, на которое ссылается ссылка)
Когда модель включает модель, на которую ссылаются, const
спецификатор типа для корневого входного параметра заданного интерфейса ступенчатой функции ссылаемой модели установлен в none
и спецификатор для исходного сигнала в родительском элементе ссылаемой модели установлен в значение кроме none
, генерация кода соблюдает интерфейсную спецификацию ссылаемой модели путем генерации броска типа, который отбрасывает const
введите спецификатор от исходного сигнала. Чтобы заменить это поведение, добавьте const
введите спецификатор к модели, на которую ссылаются.
Embedded Coder® обеспечивает управление пространством имен для определения объема классов модели, сгенерированных с помощью упаковки интерфейса класса C++ кода. В Сконфигурировать диалоговом окне интерфейса класса C++ используйте параметр Namespace, чтобы задать пространство имен для класса модели. Если задано, пространство имен испускается в сгенерированном коде для класса модели. Чтобы определить объем классов модели C++ в иерархии модели - ссылки, можно задать различное пространство имен для каждой модели, на которую ссылаются.
Для примера управления пространством имен см. модель rtwdemo_cppclass
в качестве примера. Эта модель присваивает пространства имен можно следующим образом:
TopNS
для модели rtwdemo_cppclass
верхнего уровня
MiddleNS
для модели rtwdemo_cppclass_refmid
, на которую ссылаются,
BottomNS
для модели rtwdemo_cppclass_refbot
, на которую ссылаются,
Если вы создаете модель с ее настройками по умолчанию, можно исследовать сгенерированный заголовок и исходные файлы для каждой модели, чтобы видеть, где пространство имен испускается. Например, установка Namespace для модели rtwdemo_cppclass_refmid
показывается ниже, сопровождается выборками испускаемого кода пространства имен в заголовке модели и исходных файлах.
42 // Class declaration for model rtwdemo_cppclass_refmid 43 namespace MiddleNS { 44 class MiddleClass { 45 // public data and function members 46 public: 47 // Model entry point functions ... 52 // model step function 53 void StepMethod(const real_T *arg_In1, const real_T &arg_In2, real_T 54 *arg_Out1, real_T *arg_Out2); ... 87 }; 88 }
15 #include "rtwdemo_cppclass_refmid.h" 16 #include "rtwdemo_cppclass_refmid_private.h" 17 18 namespace MiddleNS 19 { 20 // Model step function 21 void MiddleClass::StepMethod(const real_T *arg_In1, const real_T &arg_In2, 22 real_T *arg_Out1, real_T *arg_Out2) 23 { ... 43 } ... 83 }
Можно сконфигурировать интерфейсы класса C++ для сборок щелчка правой кнопкой невиртуальных подсистем в моделях Simulink, если следующие требования удовлетворяются:
Модель сконфигурирована для C++
язык и C++ class
упаковка интерфейса кода.
Подсистема конвертируема с блоком Model с помощью функционального Simulink.SubSystem.convertToModelReference
. Для требований преобразования модели, на которые ссылаются смотрите страницу с описанием Simulink Simulink.SubSystem.convertToModelReference
.
Чтобы сконфигурировать интерфейсы класса C++ для подсистемы, которая удовлетворяет требования:
Откройте содержание модели и выберите блок подсистемы.
Введите следующую команду MATLAB®:
RTW.configSubsystemBuild(gcb)
где gcb
функция Simulink gcb
, возврат полного пути блока текущего блока.
Эта команда открывается, подсистема, эквивалентная из Сконфигурировать класса C++, соединяют интерфейсом с диалоговой последовательностью, которая описана подробно в предыдущем разделе, Сконфигурируйте Метод Шага для Своего Класса Модели. (Для получения дополнительной информации об использовании команды MATLAB смотрите RTW.configSubsystemBuild
.)
Используйте Сконфигурировать диалоговые окна интерфейса класса C++, чтобы сконфигурировать настройки класса C++ для подсистемы.
Щелкните правой кнопкой по подсистеме и выберите C/C++ Code> Build This Subsystem.
Когда сборка подсистемы завершается, можно исследовать интерфейсы класса C++ в сгенерированных файлах и отчете генерации кода HTML.
Если вы выбираете опцию Code interface packaging C++ class
для вашей модели можно использовать функции управления интерфейса класса C++ (перечисленный в Функциях управления Интерфейса Класса C++), чтобы программно сконфигурировать метод шага для класса модели.
Типичное использование этих функций включает:
Создайте и подтвердите новый интерфейс метода шага, начиная с конфигурационной информации по умолчанию из вашей модели Simulink
Создайте интерфейс класса C++ модели специфичный с
или obj
= RTW.ModelCPPDefaultClass
, где obj
= RTW.ModelCPPArgsClass
возвращает указатель на недавно созданный, пустой интерфейс класса C++.obj
Присоедините интерфейс класса C++ к своей загруженной основанной на ERT модели Simulink с помощью attachToModel
.
Получите конфигурационную информацию интерфейса класса C++ по умолчанию из своей модели с помощью getDefaultConf
.
Используйте Get
и Set
функции, перечисленные в Функциях управления Интерфейса Класса C++, чтобы протестировать или сбросить имя класса модели и модель, продвигаются имя метода. Кроме того, если вы используете метод шага стиля аргументов I/O, можно протестировать и сбросить имена аргумента, положения аргумента, категории аргумента и спецификаторы типа аргумента.
Подтвердите интерфейс класса C++ использование runValidation
. (Если валидация перестала работать, используйте информацию о сообщении об ошибке thatrunValidation
возвращается, чтобы решить проблемы.)
Сохраните свою модель и затем сгенерируйте код с помощью rtwbuild
функция.
Измените и подтвердите существующий интерфейс метода шага для модели Simulink
Получите указатель на существующий интерфейс класса C++ модели специфичный, который присоединен к вашей загруженной основанной на ERT модели Simulink с помощью
, где obj
= RTW.getClassInterfaceSpecification
(modelName
)
вектор символов, задающий имя загруженной основанной на ERT модели Simulink и modelName
возвращает указатель на интерфейс класса C++, присоединенный к заданной модели. Если модель не имеет присоединенной настройки интерфейса класса C++, функция возвращает obj
[]
.
Используйте Get
и Set
функции, перечисленные в Функциях управления Интерфейса Класса C++, чтобы протестировать или сбросить имя класса модели и модель, продвигаются имя метода. Кроме того, если возвращенный интерфейс использует метод шага стиля аргументов I/O, можно протестировать и сбросить имена аргумента, положения аргумента, категории аргумента и спецификаторы типа аргумента.
Подтвердите интерфейс класса C++ использование runValidation
. (Если валидация перестала работать, используйте информацию о сообщении об ошибке что runValidation
возвращается, чтобы решить проблемы.)
Сохраните свою модель и затем сгенерируйте код с помощью rtwbuild
функция.
Вы не должны использовать тот же объект управления интерфейса класса C++ модели специфичный через многоуровневые модели. Если вы делаете, изменения, которые вы вносите в настройку метода шага в одной модели, распространяют к другим моделям, который обычно не желателен.
Функции управления интерфейса класса C++
Функция | Описание |
---|---|
attachToModel | Присоедините интерфейс класса C++ модели специфичный к загруженной основанной на ERT модели Simulink |
getArgCategory | Получите категорию аргумента для порта модели Simulink от интерфейса класса C++ модели специфичного |
getArgName | Получите имя аргумента порта модели Simulink от интерфейса класса C++ модели специфичного |
getArgPosition | Получите положение аргумента для порта модели Simulink от интерфейса класса C++ модели специфичного |
getArgQualifier | Получите спецификатор типа аргумента для порта модели Simulink от интерфейса класса C++ модели специфичного |
getClassName | Получите имя класса от интерфейса класса C++ модели специфичного |
getDefaultConf | Получите конфигурационную информацию по умолчанию для интерфейса класса C++ модели специфичного от модели Simulink, до которой это присоединяется |
getNamespace | Получите пространство имен от интерфейса класса C++ модели специфичного |
getNumArgs | Получите количество аргументов метода шага от интерфейса класса C++ модели специфичного |
getStepMethodName | Получите имя метода шага от интерфейса класса C++ модели специфичного |
RTW.configSubsystemBuild | Открытый графический интерфейс пользователя, чтобы сконфигурировать прототипа функции C или класс C++ взаимодействует через интерфейс для сборки щелчка правой кнопкой заданной подсистемы |
RTW.getClassInterfaceSpecification | Получите указатель на объект управления интерфейса класса C++ модели специфичный |
runValidation | Подтвердите интерфейс класса C++ модели специфичный против модели Simulink, к которой он присоединяется |
setArgCategory | Установите категорию аргумента для порта модели Simulink в интерфейсе класса C++ модели специфичном |
setArgName | Установите имя аргумента порта модели Simulink в интерфейсе класса C++ модели специфичном |
setArgPosition | Установите положение аргумента для порта модели Simulink в интерфейсе класса C++ модели специфичном |
setArgQualifier | Установите спецификатор типа аргумента для порта модели Simulink в интерфейсе класса C++ модели специфичном |
setClassName | Установите имя класса в интерфейсе класса C++ модели специфичном |
setNamespace | Установите пространство имен в интерфейсе класса C++ модели специфичном |
setStepMethodName | Установите имя метода шага в интерфейсе класса C++ модели специфичном |
Следующий демонстрационный скрипт MATLAB конфигурирует метод шага для rtwdemo_counter
класс модели, с помощью Функций управления Интерфейса Класса C++.
%% Open the rtwdemo_counter model rtwdemo_counter %% Select ert.tlc as the System Target File for the model set_param(gcs,'SystemTargetFile','ert.tlc') %% Select C++ as the target language for the model set_param(gcs,'TargetLang','C++') %% Select C++ class as the code interface packaging for the model set_param(gcs,'CodeInterfacePackaging','C++ class') %% Set required option for I/O arguments style step method (cmd off = GUI on) set_param(gcs,'ZeroExternalMemoryAtStartup','off') %% Create a C++ class interface using an I/O arguments style step method a=RTW.ModelCPPArgsClass %% Attach the C++ class interface to the model attachToModel(a,gcs) %% Get the default C++ class interface configuration from the model getDefaultConf(a) %% Move the Output port argument from position 2 to position 1 setArgPosition(a,'Output',1) %% Reset the model step method name from step to StepMethod setStepMethodName(a,'StepMethod') %% Change the Input port argument name, category, and qualifier setArgName(a,'Input','inputArg') setArgCategory(a,'Input','Pointer') setArgQualifier(a,'Input','const *') %% Validate the function prototype against the model [status,message]=runValidation(a) %% if validation succeeded, generate code and build if status rtwbuild(gcs) end
Сконфигурировать параметр Simulink, сигнал или состояние, чтобы использовать пользовательский класс памяти (CSC) с генерацией кода класса C++:
Откройте основанную на ERT модель, для которой Language установлен в C++
и Code interface packaging установлен в C++ class
.
Откройте диалоговое окно Configuration Parameters.
На Code Generation> панель Interface, установленный параметр Multi-instance code error diagnostic (Simulink Coder) к значению кроме Error
.
Если параметр, Ignore custom storage classes выбран, очистите его.
Примените изменения.
В модели выберите пользовательский класс памяти для параметра, сигнала или состояния. Например, выберите сигнал, откройте его диалоговое окно Properties и просмотрите его опции генерации кода. В Storage class выпадающий список выберите пользовательский класс памяти, и затем сконфигурируйте его атрибуты. Примените изменения.
Генерация кода класса C++ не поддерживает следующие классы памяти:
Классы памяти с Volatile
спецификации.
Классы памяти типа Other
, кроме GetSet
.
Сгенерируйте код.
Исследуйте файлы
и model
H
наблюдать использование классов памяти в сгенерированном Коде С++.model
.cpp
Генерация кода автоматически добавляет конструктора копии и оператор присваивания к объявлениям класса C++ при необходимости, чтобы надежно обработать участников указателя. Конструктор и оператор добавляются, когда член парламента, не занимающий официального поста функционирует, когда оба из следующих условий существуют:
Параметр конфигурации модели Use dynamic memory allocation for model block instantiation (Simulink Coder) установлен.
Базовая модель содержит блок Model. Блок Model не прямо или косвенно в подсистеме, для которых параметров блоков Function packaging установлен в Reusable function
.
При этих условиях программное обеспечение генерирует частного конструктора копии и оператор присваивания, чтобы предотвратить участников указателя в классе модели от того, чтобы быть скопированным другим кодом.
Чтобы предотвратить генерацию этих функций, считайте очистку параметра Use dynamic memory allocation for model block instantiation.
Выборка кода ниже показов сгенерировала
код для класса модели, который имеет участника указателя. (Ищите экземпляры model
HMiddleClass_ptr
). Конструктора копии и объявления оператора присваивания показывают полужирным.
class MiddleClass; // class forward declaration for <S1>/Bottom model instance typedef MiddleClass* MiddleClass_ptr; ... // Class declaration for model cppclass_top class Top { ... // private data and function members private: // Block signals BlockIO_cppclass_top cppclass_top_B; // Block states D_Work_cppclass_top cppclass_top_DWork; // Real-Time Model RT_MODEL_cppclass_top cppclass_top_M; // private member function(s) for subsystem '<Root>/Subsystem' void cppclass_top_Subsystem_Init(); void cppclass_top_Subsystem_Start(); void cppclass_top_Subsystem(); //Copy Constructor Top(const Top &rhs); //Assignment Operator Top& operator= (const Top &rhs); // model instance variable for '<S1>/Bottom model instance' MiddleClass_ptr Bottom_model_instanceMDLOBJ1; };
Если модель имеет пользовательскую ступенчатую функцию модели, для которой скалярный выход передается значением и обновляется в условно выполняемом контексте, сконфигурируйте выход, который будет передан указателем. В модели Configure класс C++ соединяют интерфейсом с диалоговым окном, набор Category к Pointer
. Примеры условно выполняемого контекста включают:
Выведите имеет более медленный шаг расчета, чем основной уровень модели, когда модель используется в качестве модели, на которую ссылаются.
Выход записан в в условно выполняемой подсистеме.
Выход записан в S-функцией, которая может условно обновить выход.
Выход записан в блоком Hit Crossing.
Выход записан в блоком Rate Transition.
C++ class
значение для параметра конфигурации модели Code interface packaging не поддерживает некоторые параметры конфигурации модели Simulink. Выбор C++ class
отключает эти параметры:
Подпанель Identifier format control на панели Identifiers
Параметр File customization template на панели Templates
Код и шаблоны данных на панели Templates поддерживаются для C++ class
генерация кода. Однако следующие функции файла шаблона, которые поддерживаются для других выборов языка, не поддерживаются для сгенерированного кода класса C++:
Текст свободной формы вне обрабатывает разделы по шаблону
Пользовательские лексемы
Команды TLC (<! >
лексемы
Подпанель Global data placement (custom storage classes only) на панели Code Placement
Выбор C++ class
также отключает редактор Отображений Кода (см., Конфигурируют генерацию кода C По умолчанию для Категорий Данных модели и Функций). Вы не можете применить классы памяти по умолчанию, разделы памяти или шаблоны функций к модели.
Среди интерфейсов обмена данными, доступных на панели Interface диалогового окна Configuration Parameters, только, API-интерфейс C поддерживается для C++ class
генерация кода. Если вы выбираете External mode или ASAP2 interface, генерация кода перестала работать с ошибкой валидации.
Стиль аргументов I/O спецификации метода шага поддерживает односкоростные модели и многоскоростные однозадачные модели, но не многоскоростные многозадачные модели.
Если у вас есть лицензия Stateflow® для диаграммы Stateflow, которая находится в корневой модели, сконфигурированной, чтобы использовать I/O arguments step method
функциональная спецификация, и это использует корневое значение импорта модели или вызывает подсистему, которая использует корневое значение импорта модели, сделайте одно из следующих, чтобы сгенерировать код:
В диаграмме Stateflow снимите флажок Execute (enter) Chart At Initialization.
Вставьте блок Simulink Signal Conversion сразу после корневого импорта. В диалоговом окне параметров блоков Signal Conversion выберите Exclude this block from 'Block reduction' optimization.
Если корневое значение импорта модели соединяется с блоком преобразования Simscape™, вставьте блок Simulink Signal Conversion между корневым импортом и блок преобразования Simscape. В диалоговом окне параметров блоков Signal Conversion выберите Exclude this block from 'Block reduction' optimization.
При создавании модели, на которую ссылаются, которая сконфигурирована, чтобы сгенерировать интерфейс класса C++:
Не используйте интерфейс класса C++ в случаях, когда модель, на которую ссылаются, не сможет иметь объединенной функции выхода/обновления. Случаи включают модель, которая имеет время непрерывной выборки или сохраняет состояния.
Не используйте виртуальные шины в качестве вводов или выводов к модели, на которую ссылаются, когда модель, на которую ссылаются будет, использовать метод шага аргументов I/O. Когда крест сигналов шины сослался контуры, модели, или используют невиртуальные шины или используют метод шага По умолчанию.
Если интерфейс инкапсуляции C++ не является значением по умолчанию, значение проигнорировано для параметра Pass fixed-size scalar root inputs by value for code generation. Для получения дополнительной информации смотрите скалярные корневые входные параметры фиксированного размера Передачи значением для генерации кода (Simulink).
Настройте интерфейс Кода С++, который вы генерируете из модели и хотите вызвать от кода C or C++. Чтобы вызвать Код С++ от кода С, вы инкапсулируете интерфейс класса C++ в сгенерированном коде.
Сконфигурируйте модель с пользовательским интерфейсом инкапсуляции C++
Если начиная с новой модели:
Создайте модель по крайней мере с одним импортом и по крайней мере одним выходным портом.
Откройте приложение Embedded Coder.
Установите Язык параметра конфигурации модели на C++
.
Установите упаковку интерфейса Code параметра конфигурации модели на C++ class
.
В диалоговом окне Model Configuration Parameters, на Генерации кода> Интерфейсная панель, нажимают Configure C ++ Class Interface. Настройте интерфейс по мере необходимости. Смотрите Настраивают Сгенерированные Интерфейсы Класса C++.
Об интерфейсах инкапсуляции C++
Сгенерированный класс C++ инкапсулирует данные модели и методы. Используя Embedded Coder®, интерфейс инкапсуляции конфигурируем через параметры конфигурации модели нейтральные и настройки модели специфичные. Интерфейс поддерживает два стиля интерфейсов метода шага модели: метод шага по умолчанию и аргументы I/O продвигаются метод. Используйте интерфейс стиля аргументов I/O, чтобы настроить прототип метода шага. Используйте и интерфейс стиля метода шага по умолчанию, чтобы достигнуть максимизируемого поддерживаемого набора функций включая виртуальные шины через контуры модели и многозадачный интерфейс.
open_system('rtwdemo_cppclass');
Сгенерируйте код
Откройте модель rtwdemo_cppclass
в качестве примера.
Сохраните копию модели к перезаписываемому местоположению.
Откройте приложение Embedded Coder.
Сгенерируйте код.
Исследуйте сгенерированный исходный код. Минимально, рассмотрите индивидуально настраиваемый шаг модели и классы инициализации ModelClass::step_method
и ModelClass::initialize
в файле rtwdemo_cppclass.cpp
.
Просмотрите интерфейсную настройку. В модели дважды кликните, желтая кнопка пометила View Interface Configuration. В качестве альтернативы в диалоговом окне Model Configuration Parameters на Генерации кода> Интерфейсная панель, нажмите Configure C ++ Class Interface. Наблюдайте индивидуально настраиваемые аргументы для ступенчатой функции и как они относятся к сгенерированному коду.
Превратитесь в параметры по умолчанию и восстановите модель
Если начиная с новой модели, заполните начальную настройку для интерфейса класса C++.
В диалоговом окне Model Interface нажмите Get Default Configuration.
Закройте диалоговое окно Model Interface.
Закройте диалоговое окно Model Configuration Parameters.
Сгенерируйте код.
Используйте отчет генерации кода смотреть индивидуально настраиваемый шаг модели и классы инициализации ModelClass::step_method
и ModelClass::initialize
в файле rtwdemo_cppclass.cpp
. Наблюдайте параметры по умолчанию для ступенчатой функции и как они относятся к сгенерированному коду.
Примените пользовательские аргументы и восстановите модель
В модели дважды кликните, желтая кнопка пометила View Interface Configuration. В качестве альтернативы диалоговое окно Model Configuration Parameters, в Генерации кода> Интерфейсная панель, нажимает Configure C ++ Class Interface.
В классе C++ Confgiure соединяют интерфейсом с диалоговым окном, Имя перемещаемого порта Out1
к верхней части порядка и набора его Категория к Value
.
Закройте Сконфигурировать диалоговое окно интерфейса класса C++.
Закройте диалоговое окно Model Configuration Parameters.
Сгенерируйте код.
В сгенерированном файле rtwdemo_cppclass.cpp
, смотрите индивидуально настраиваемый шаг модели и классы инициализации ModelClass::step_method
и ModelClass::initialize
. Заметьте, что пользовательские аргументы появляются в сгенерированном коде.
Сравните Интерфейс По умолчанию (Максимальная Поддержка) с Интерфейсом Аргументов ввода-вывода
rtwdemo_cppclass
модель обеспечивает кнопки, чтобы переключить функциональную спецификацию для интерфейса класса C++ между методом шага по умолчанию (в многозадачном режиме), и аргументы I/O продвигаются метод.
Сконфигурируйте функциональную спецификацию для метода шага по умолчанию путем двойного клика по желтой кнопке, пометил Use Default Interface in MultiTasking Mode.
Сгенерируйте код.
В сгенерированном коде смотрите шаг модели и классы инициализации.
Сконфигурируйте функциональную спецификацию для метода шага аргументов I/O путем двойного клика по желтой кнопке, пометил Use I/O Arguments Interface.
Сгенерируйте код.
В сгенерированном коде смотрите шаг модели и классы инициализации.
Примените интерфейс класса C++ с моделями, на которые ссылаются,
rtwdemo_cppclass_refmid
модель является моделью, на которую ссылаются, в модели rtwdemo_cppclass
в качестве примера. Та модель, на которую ссылаются, показывает, как сгенерировать настраиваемый интерфейс класса C++ к сгенерированному коду для модели, на которую ссылаются, в иерархии модели - ссылки.
Открытая модель rtwdemo_cppclass_refmid
.
Откройте приложение Embedded Coder.
Дважды кликните Subsystem_with_MdlRef_blks
блок. Затем дважды кликните middle_instance_1
блок.
Просмотрите интерфейсную настройку в rtwdemo_cppclass_refmid
модель. Дважды кликните желтая кнопка пометила View Interface Configuration. В качестве альтернативы в диалоговом окне Model Configuration Parameters, на Генерации кода> Интерфейсная панель, нажимают Configure C ++ Class Interface. Заметьте, что настройка для интерфейса класса для модели, на которую ссылаются, отличается от интерфейса класса для топ-модели (например, пространство имен отличается).
open_system('rtwdemo_cppclass_refmid');
Примените Смешанные Стили интерфейса C/C++ в Иерархии Модели - ссылки
rtwdemo_cppclass_refc
модель является моделью, на которую ссылаются, в модели rtwdemo_cppclass
в качестве примера. Та модель, на которую ссылаются, показывает, как использовать смешанные стили интерфейса в иерархии модели - ссылки. Модель использует стиль интерфейса кода С (скомпилированный с компилятором C++), в то время как другие модели в той же иерархии модели используют интерфейсы класса C++.
Открытая модель rtwdemo_cppclass
.
Дважды кликните Subsystem_with_MdlRef_blks
блок. Затем дважды кликните ref_c_instance
блок.
Откройте приложение Embedded Coder. Диалоговое окно кажется спрашивающим, хотите ли вы сгенерировать код для топ-модели rtwdemo_cppclass
или для активной модели rtwdemo_cppclass_refc
.
Кликните по Открытой активной модели как по главной кнопке.
В окне Simulink Editor, которое открывается для модели rtwdemo_cppclass_refc
, откройте приложение Embedded Coder.
Проверяйте установку упаковки интерфейса Code параметра конфигурации модели. Это установлено в функцию Одноразового использования (для прототипа функции C). Затем закройте диалоговое окно Model Configuration Parameters.
Кликните по вкладке Code Mappings - C.
В редакторе Отображений Кода кликните по вкладке Functions.
Нажмите кнопку Update Code Mappings.
В таблице просмотрите предварительный просмотр прототипа функции для ступенчатой функции.
Закройте модель.
open_system('rtwdemo_cppclass_refc');
Больше о
Для большего количества детали и ограничений, смотрите, Настраивают Сгенерированные Интерфейсы Класса C++ в документации Embedded Coder®.