exponenta event banner

Интерактивная настройка интерфейса C++

Чтобы упростить интеграцию кода C++, генерируемого приложениями, компонентами и подсистемами Simulink ®, с внешним кодом C или C++, настройте пользовательский интерфейс класса C++. При создании кода C++ из модели модель отображается как класс, элементы данных - как члены класса, а функции модели - как методы класса в сгенерированном коде. Настройка интерфейса класса C++ позволяет настроить следующие аспекты сгенерированного кода C++ :

  • Сведения о классе - имя класса и пространство имен

  • Сведения об элементе класса - Доступ и видимость элемента класса

  • Сведения о методе класса - имена и аргументы метода класса

Настраиваемый интерфейс класса C++ позволяет создаваемым классам соответствовать определенным стандартам кода или требованиям к интерфейсу, чтобы создаваемый код мог компилироваться и интегрироваться в более крупные архитектуры с минимальной настройкой после генерации.

Обзор интерактивного рабочего процесса

Интерактивный рабочий процесс обеспечивает быструю, интуитивную и полную настройку настраиваемого интерфейса класса C++ с помощью инструментов, доступных непосредственно на вкладке Код C++. На вкладке можно щелкнуть Интерфейс кода (Code Interface) и открыть диалоговое окно «Имя класса и пространство имен» (Class Name & Namespace configuration) и редактор сопоставлений кода (с помощью Инспектора свойств) для настройки интерфейса.

Для интерактивной настройки настраиваемого интерфейса C++:

Открытая среда

Откройте среду для настройки настраиваемого интерфейса класса C++:

  1. Откройте приложение Embedded Coder ®. В коллекции приложений щелкните Embedded Coder.

  2. Установите язык на C++. На вкладке Код C++ щелкните Вывод и выберите Код Embedded C++.

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

    Параметр конфигурацииОписание
    Упаковка интерфейса кодаВыбор языка вывода для сгенерированного кода. Дополнительные сведения см. в разделе Упаковка интерфейса кода.
    Диагностика ошибок многоэкземплярного кода

    Указывает уровень серьезности для диагностики, отображаемой при нарушении моделью требований к созданию кода нескольких экземпляров. Дополнительные сведения см. в разделе Диагностика ошибок кода нескольких экземпляров.

    Удалить поле состояния ошибки в структуре данных модели в реальном времени

    Указывает, следует ли исключить поле состояния ошибки из созданной структуры данных модели в реальном времени rtModel. Дополнительные сведения см. в разделе Удаление поля состояния ошибки в структуре данных модели в реальном времени.

    Включить типы моделей в класс моделей

    Определяет включение определений типов моделей в пространство имен классов модели. Дополнительные сведения см. в разделе Включение типов моделей в класс моделей.

    Связанные, но менее часто используемые параметры интерфейса отображаются в разделе Дополнительные параметры.

    Параметр конфигурацииОписание
    Требуется завершить функцию

    Указывает, нужно ли создавать model_terminate способ. Дополнительные сведения см. в разделе Обязательное завершение функции.

    Объединение структур сигналов/состояний

    Указывает, следует ли объединять сигналы глобальных блоков и данные глобального состояния в одну структуру данных в сгенерированном коде. Дополнительные сведения см. в разделе Объединение структур сигналов и состояний.

    Создать деструктор

    Указывает, нужно ли создавать деструктор для класса модели 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++:

  1. На вкладке C++ Code щелкните Code Interface и выберите Class Name & Namespace.

  2. Чтобы настроить имя класса, измените поле C++ Class Name.

  3. Чтобы настроить пространство имен класса, измените поле C++ Class Namespace.

  4. Нажмите кнопку ОК. Проверка выполняется в интерактивном режиме с предупреждениями о полях, предупреждающими о вводе недопустимого имени или пространства имен.

Настройка элементов данных модели в качестве элементов класса

Настройте видимость и доступ членов класса. При создании кода C++ из модели элементы данных Simulink отображаются в создаваемом коде как элементы класса. Чтобы настроить инкапсуляцию данных класса в соответствии со стандартами кода, безопасностью или требованиями к производительности, можно настроить видимость и доступ к сгенерированным членам класса. Элементы данных Simulink можно сгруппировать в следующие категории элементов моделирования:

Категория элементов моделиОписание
Inports

Порты ввода данных корневого уровня модели, такие как блоки Inport и In Bus Element. Дополнительные сведения см. в разделе Inport.

Вспомогательные порты

Порты вывода данных корневого уровня модели, такие как блоки Outport и Out Bus Element. Дополнительные сведения см. в разделе Исходящий порт.

Аргументы параметра модели

Переменные рабочей области, которые отображаются как элементы данных класса экземпляра (нестатические).

Параметры модели

Переменные рабочей области, совместно используемые экземплярами класса модели, которые создаются как статические элементы данных класса.

Сигналы, состояния и внутренние данные

Элементы данных, которые являются внутренними для модели, такие как выходные сигналы блоков, состояния дискретных блоков, хранилища данных и сигналы пересечения нулей.

Для каждой категории элементов модели можно настроить видимость данных для управления модификатором доступа (спецификатором доступа) созданных элементов класса. Каждая опция и ее влияние на сгенерированный интерфейс класса C++, объявленный в файле заголовка модели, описываются следующим образом:

Параметры видимости данныхОписание
общественность

При настройке элементов данных как public, они отображаются как открытые члены созданного класса:

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:
    … 
  };
}

защищенный

При настройке элементов данных как protected, они отображаются как защищенные члены создаваемого класса:

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:
    … 
  };
}
частный

Если настроить элементы как 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;
  };
}
Отдельные аргументы (только аргументы параметра модели)

При настройке элементов данных как Individual arguments, элементы не отображаются как члены класса, а вместо этого определяются вне класса и передаются в качестве аргументов методам класса:

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++, объявленный в файле заголовка модели, описываются следующим образом:

Параметры метода доступа к членуОписание
Метод

При настройке входов как Methodдля каждого входа появляется метод set. Если настроить исходящие порты как Methodметод get появляется для каждого исходящего порта в модели. Если настроить другие категории элементов модели как Methodметод get and set на основе статистической структуры появляется для категории элементов данных.

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:
    … 
  };
}
Встроенный метод

При настройке входов как Inlined method, метод set, определенный в его объявлении, появляется для каждого входа. Если настроить исходящие порты как Inlined methodметод get, определенный в его объявлении, появляется для каждого исходящего порта в модели. Если настроить другие категории элементов модели как Inlined methodметод get and set на основе статистической структуры, определенный в его объявлении, появляется для типа элемента данных.

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:
    … 
  };
}
Структурный метод

При настройке входов как Structure-based method, входные данные отображаются как метод набора на основе агрегированной структуры для категории элементов модели. При настройке внешних портов как Structure-based method, выходы отображаются как метод get на основе агрегированной структуры для категории элементов модели. Эта опция конфигурации не применяется к другим категориям элементов модели.

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:
    … 
  };
}
Встроенный метод на основе структуры

При настройке входов как Structure-based method, входные данные отображаются как метод набора на основе агрегированной структуры, определенный в его объявлении для категории элементов модели. При настройке внешних портов для Structure-based method, выходы отображаются как метод get на основе агрегированной структуры, определенный в их объявлении для категории элементов модели. Эта опция конфигурации не применяется к другим категориям элементов модели.

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, методы get и set не появляются в сгенерированном классе, и доступ к данным может осуществляться непосредственно с помощью кода приложения.

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++:

  1. Откройте редактор сопоставлений кода. На вкладке Код C++ щелкните Интерфейс кода и выберите Сопоставления кода.

  2. Откройте панель «Данные». В редакторе сопоставлений кодов перейдите на вкладку «Данные».

  3. Настройте видимость. Чтобы настроить видимость категории элементов данных Simulink в созданном коде, в столбце «Видимость данных» выберите спецификатор доступа из заданных параметров. Опции зависят от категории элемента модели.

  4. Сконфигурируйте доступ. Чтобы настроить доступ к категории элементов данных Simulink в сгенерированном коде, в столбце Метод доступа к члену выберите, как создавать методы get и set из заданных параметров. Параметры зависят от категории элемента модели и выбранной видимости данных.

Настройка функций модели как методов классов

Настройте имена и аргументы методов классов. При создании кода C++ из модели функции модели отображаются в создаваемом коде как методы классов. Для интеграции с требованиями внешнего кода или интерфейса можно настроить имя созданных методов класса. Кроме того, для базовых периодических функций и Simulink Functions можно настроить имя, порядок и идентификатор создаваемых аргументов.

Сгенерированные методы классов называются методами точки входа и являются местоположениями в коде, где происходит передача программного управления (выполнения). Методы точек входа зависят от типа модели Simulink и могут быть сгруппированы в следующие типы:

Тип моделиТип функции моделиОписаниеИмя функции моделиОжидаемое имя метода
Экспорт - функциональные моделиЭкспортированная функцияЭкспортированная функция для подсистемы.ExportedFunction:slIdentifier, где slIdentifier - имя блока Inport вызова функции в модели.function-call-inport-block-name или signal-label (если указано)
Функция симулятораЭкспортированная функция для блока функции Simulink.Simulink Function:slIdentifier, где slIdentifier - имя блока Simulink Function в моделиfunction-name для глобального функционального блока Simulink или model_function-name для функционального блока Simulink в области
Экспорт - функция или модели на основе скоростиИнициализация функции

Код инициализации модели. В начале кода приложения вызовите функцию один раз. Не используйте эту функцию для сброса структуры данных модели в реальном времени (rtM).

Initializemodel_initialize
Функция секционированияДля раздела модели выведите и обновите код. Выбран параметр конфигурации модели Single output/update function (по умолчанию).Partition:slIdentifier, где slIdentifier - раздел, созданный явно из блока в модели и показанный в редакторе расписания Simulink ® (например, P1);model_stepn, где n уникально идентифицирует функцию, созданную для одного из периодов образца модели
Функция периодической многозадачностиДля блоков в модели на основе скорости, настроенной для многозадачности, вывода и обновления кода. Генератор кода создает функцию для каждого периода выборки. Выбран параметр конфигурации модели Single output/update function (по умолчанию).Periodic:slIdentifier, где slIdentifier - аннотация, соответствующая периоду времени выборки для периодической или непрерывной скорости многозадачной модели (например, D1);model_stepn, где n уникально идентифицирует функцию, созданную для одного из периодов образца модели
Периодическая однозадачная функцияДля блоков в модели на основе скорости, сконфигурированной для однозадачности, вывода и обновления кода. Выбран параметр конфигурации модели Single output/update function (по умолчанию).Periodicmodel_step
Функция сброса

Если модель включает блок Reset Function, генерируется код сброса. Для сброса условий или состояния вызовите функцию из кода приложения.

Reset:slIdentifier, где slIdentifier - имя функции сброса в модели;model_reset-function-name
Завершить функцию

Код отключения системы. Для моделей на основе ERT можно подавить генерацию этой функции, очистив параметр конфигурации модели Обязательная функция завершения (установлено по умолчанию).

Terminatemodel_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:
  … 
  };
}

Технологический процесс

  1. Откройте редактор сопоставлений кода. На вкладке Код C++ щелкните Интерфейс кода и выберите Сопоставления кода.

  2. Откройте панель Функции (Functions). В редакторе сопоставлений кодов перейдите на вкладку Функции. Чтобы просмотреть полный список функций начальной точки для модели, нажмите кнопку Обновить схему (Update Diign).

  3. Сконфигурируйте имена методов.

    1. Чтобы настроить имя метода точки входа в созданном коде, в столбце Имя метода (Method Name) щелкните и непосредственно отредактируйте электронную таблицу. Можно ввести пользовательское имя или использовать параметры формата идентификатора для управления динамически создаваемым именем. Дополнительные сведения о параметрах формата идентификатора см. в разделе Управление форматом идентификатора.

    2. Проверьте имя в столбце «Предварительный просмотр метода».

  4. Настройка аргументов метода. Для базовых периодических функций и Simulink Functions можно настроить имя, порядок и идентификаторы аргументов метода.

    Чтобы настроить аргументы периодической функции базовой скорости, выполните следующие действия.

    1. Откройте диалоговое окно Step Function Interface configuration (Настройка интерфейса функции шага). В редакторе «Сопоставления кодов» на вкладке «Функции» в столбце «Предварительный просмотр метода» щелкните гиперссылку предварительного просмотра метода для базовой периодической функции:

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

    3. Чтобы изменить порядок аргументов, щелкните и перетащите строки аргументов в средстве просмотра.

    4. Чтобы изменить идентификатор, в столбце Квалификатор типа C++ выберите соответствующий идентификатор из раскрывающегося списка:

      Параметр идентификатораПредварительный просмотр
      Значение (только для ввода)myPeriodicFunction (argInport)
      Ссылка Const (только для ввода)myPeriodicFunction (const & argInport)
      Указатель на КонстmyPeriodicFunction (const * argInport)
      УказательmyPeriodicFunction (* argInport)
      Указатель Const на ConstmyPeriodicFunction (const * const argInport)

    5. Чтобы изменить имя аргумента, в столбце «Имя идентификатора C++» щелкните и непосредственно отредактируйте имя. Можно ввести пользовательское имя или использовать параметры формата идентификатора для управления динамически создаваемым именем. Дополнительные сведения о параметрах формата идентификатора см. в разделе Управление форматом идентификатора.

      1. Если для аргумента inport и аргумента outport введено одинаковое имя, то inport и outport отображаются как один параметр в создаваемом методе. Например, если указать входной порт как argInport и аргумент outport как argOutport, генерируемый метод будет:

        myStepFunction(argInport, argOutport);

        Если указан аргумент ввода как argIO и аргумент outport как argIO, генерируемый метод будет:

        myStepFunction(argIO);
    6. Чтобы проверить выбранные аргументы, нажмите кнопку Проверить.

    7. Чтобы применить изменения и выйти из диалогового окна, нажмите кнопку «ОК».

    Чтобы настроить аргументы функции Simulink, выполните следующие действия.

    1. Откройте диалоговое окно настройки интерфейса функции Simulink. В редакторе Сопоставления кодов на вкладке Функции в столбце Предварительный просмотр метода щелкните гиперссылку предварительного просмотра метода функции Simulink:

    2. Чтобы изменить аргумент возврата, выберите параметр аргумента возврата из выпадающего списка аргументов возврата C/C + +.

    3. Чтобы изменить порядок аргументов, щелкните и перетащите строки аргументов в средстве просмотра.

    4. Чтобы изменить идентификатор, в столбце Квалификатор типа C++ выберите идентификатор из раскрывающегося списка:

      Параметр идентификатораПредварительный просмотр
      АвтомобильmySimulinkFunction (argInport)
      Ссылка ConstmySimulinkFunction (const & argInport)
      Указатель на КонстmySimulinkFunction (const * argInport)
      УказательmySimulinkFunction (* argInport)
      Указатель Const на ConstmySimulinkFunction (const * const argInport)

    5. Чтобы изменить имя аргумента, в столбце Имя идентификатора C++ щелкните и непосредственно отредактируйте имя. Можно ввести пользовательское имя или использовать параметры формата идентификатора для управления динамически создаваемым именем. Дополнительные сведения о параметрах формата идентификатора см. в разделе Управление форматом идентификатора.

    6. Чтобы проверить изменения аргументов функции Simulink, просмотрите поле Прототип функции Simulink, чтобы просмотреть ожидаемый прототип метода.

    7. Чтобы применить изменения и выйти из диалогового окна, нажмите кнопку «ОК».

Создать интерфейс класса C++

Создайте пользовательский интерфейс класса C++, сгенерировав код из модели. Чтобы проверить конфигурации интерфейса класса C++, создайте модель и просмотрите созданные представления класса, члена класса и метода класса.

  1. Создать код. Чтобы создать интерфейс класса C++, на вкладке C++ Code нажмите кнопку Build.

  2. Просмотреть код. Чтобы просмотреть созданный код, на вкладке щелкните Просмотр кода. Созданный код появляется рядом с моделью в рабочем пространстве модели.

  3. Итерация. Если сгенерированный интерфейс не соответствует требованиям кода, внесите изменения в конфигурацию до тех пор, пока требования не будут удовлетворены.

Если созданное представление кода не соответствует вашим требованиям, реконфигурируйте интерфейс и создавайте код снова до тех пор, пока не будут выполнены требования к созданию кода. Инструкции по пониманию сгенерированного кода см. в разделе Анализ сгенерированного интерфейса кода.

Соображения и ограничения

  • Поддержка параметров, специфичных для экземпляра - можно использовать аргументы параметров модели для настройки переменных рабочей области, указанных в качестве аргументов. Эти аргументы можно настроить как частные члены класса или как отдельные аргументы, определенные вне класса. Для настройки внутри класса можно установить видимость данных как частную и настроить создание методов 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++ в случаях, когда ссылочная модель не может иметь комбинированную функцию вывода/обновления. Случаи включают модель, которая имеет непрерывное время выборки или сохраняет состояния.

    • Не используйте виртуальные шины в качестве входных или выходных данных для ссылочной модели, если ссылочная модель использует пошаговый метод аргументов ввода-вывода. Когда сигналы шины пересекают границы модели, на которые имеются ссылки, либо используйте невиртуальные шины, либо используйте метод шага по умолчанию.

Связанные темы