exponenta event banner

Использование C API для доступа к параметрам модели

Этот пример поможет начать написание кода приложения для взаимодействия с параметрами модели. Чтобы начать писать код приложения для взаимодействия с модельными сигналами и состояниями, см. раздел Использование C API для доступа к модельным сигналам и состояниям.

C API обеспечивает гибкость написания собственного кода приложения для взаимодействия с модельными сигналами, состояниями, входами/выходами корневого уровня и параметрами. Код целевого приложения компилируется с созданным кодом в исполняемую программу. Целевой код приложения обращается к массивам структуры C API в model_capi.c (или .cpp). Возможно, имеется код на основе хоста, взаимодействующий с кодом приложения на основе целевого объекта. Кроме того, можно использовать другой код на основе целевого объекта, который взаимодействует с кодом приложения на основе целевого объекта. Файлы rtw_modelmap.h и rtw_capi.h, расположен в matlabroot/rtw/c/src (open), предоставьте макросы для доступа к структурам в этих массивах и их членам.

Вот пример приложения, которое печатает значения параметров настраиваемых параметров в модели на стандартный вывод. Этот код служит отправной точкой для доступа к адресам параметров. Можно расширить код для выполнения настройки параметров. Приложение:

  • Использует rtmGetDataMapInfo для доступа к информации о сопоставлении в mmi подструктура структуры модели в реальном времени

    rtwCAPI_ModelMappingInfo* mmi = &(rtmGetDataMapInfo(rtM).mmi);

    где rtM является указателем на структуру модели в реальном времени в model.c (или .cpp).

  • Использование rtwCAPI_GetNumModelParameters для получения количества параметров модели в сопоставленном C API:

    uint_T nModelParams = rtwCAPI_GetNumModelParameters(mmi);

  • Использование rtwCAPI_GetModelParameters для доступа к массиву структур параметров модели, сопоставленных в C API:

    rtwCAPI_ModelParameters* capiModelParams = \
     rtwCAPI_GetModelParameters(mmi);
  • Петли по capiModelParams для доступа к отдельным структурам параметров. Вызов функции capi_PrintModelParameter отображает значение параметра.

Ниже приведен пример кода приложения:

{
/* Get CAPI Mapping structure from Real-Time Model structure */
rtwCAPI_ModelMappingInfo* capiMap = \
&(rtmGetDataMapInfo(rtwdemo_capi_M).mmi);

/* Get number of Model Parameters from capiMap */
uint_T nModelParams = rtwCAPI_GetNumModelParameters(capiMap);
printf("Number of Model Parameters: %d\n", nModelParams);

/* If the model has Model Parameters, print them using the
application capi_PrintModelParameter */
if (nModelParams == 0) {
   printf("No Tunable Model Parameters in the model \n");
}
else {
   unsigned int idx;

   for (idx=0; idx < nModelParams; idx++) {
      /* call print utility function */
      capi_PrintModelParameter(capiMap, idx);
   }
}
}

Функция утилиты печати находится в matlabroot/rtw/c/src/rtw_capi_examples.c. Этот файл содержит служебные функции для доступа к структурам C API.

Чтобы ознакомиться с примером кода, попробуйте создать модель, отображающую настраиваемые параметры блока и переменные MATLAB ®. Вы можете использоватьrtwdemo_capi, примерная модель C API. Следующие шаги относятся к обоим grt.tlc и ert.tlc системные целевые файлы, если не указано иное.

  1. В командной строке MATLAB введите rtwdemo_capi для открытия примерной модели.

  2. Сохранить верхнюю модель rtwdemo_capi и ссылочная модель rtwdemo_capi_bot в ту же записываемую рабочую папку.

  3. Если вы имеете лицензию на ПО Embedded Coder ® и хотите использовать ert.tlc целевая плитка системы вместо плитки по умолчанию grt.tlc, используйте параметр конфигурации модели System target file для выбора ert.tlc системный целевой файл. Убедитесь, что вы также выбрали ert.tlc для ссылочной модели rtwdemo_capi_bot.

  4. Подтвердите следующие настройки параметров конфигурации модели:

    1. Выберите Генерировать C API для параметров.

    2. При использовании ert.tlc системный целевой файл, выберите «Поддержка комплексных номеров».

    3. Выберите ведение журнала MAT-файла.

    4. Нажмите кнопку «Применить».

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

  5. Панель Пользовательский код (Custom Code) используется для встраивания пользовательского кода приложения в созданный код. Выберите панель Пользовательский код и нажмите Инициализировать функцию. Появится поле ввода функции Initialize.

  6. В поле Initialize function input введите или скопируйте и вставьте пример кода приложения, показанный выше на шаге 1. Это встраивает код приложения в model_initialize функция.

    Примечание

    При переименовании модели верхнего уровня rtwdemo_capi, обновить имя rtwdemo_capi_M в коде приложения, чтобы отразить имя новой модели.

  7. Щелкните Включить каталоги и введите matlabroot/rtw/c/src, где matlabroot представляет корень папки установки MATLAB. (Если указан путь Windows ®, содержащий пробел, поместите текст в двойные кавычки.)

  8. В подпанели «Дополнительная информация о построении» щелкните Исходные файлы и введите rtw_capi_examples.c.

    Нажмите кнопку «Применить».

  9. Очистить параметр конфигурации модели Только генерировать код.

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

  10. В окне команд MATLAB введите !rtwdemo_capi для запуска исполняемого файла. При запуске программы информация о параметрах отображается в окне команд.

    >> !rtwdemo_capi
    
    ** starting the model **
    Number of Model Parameters: 5
    Ki =
        7
    Kp =
        4
    p1 =
        0.15
        0.36
        0.81
    p2 =
        0.09    0.75    0.57
        0.13    0.96    0.059
    p3 =
    ans(:,:,1) =
        0.23    0.82    0.04    0.64
        0.35    0.01    0.16    0.73
    
    ans(:,:,2) =
        0.64    0.54    0.74    0.68
        0.45    0.29    0.18    0.18

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