Используйте 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. Этот файл содержит служебные функции для доступа к структурам API C.

Чтобы ознакомиться с кодом примера, попробуйте создать модель, которая отображает настраиваемые параметры блоков и 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. Выберите Generate C API for parameters.

    2. Если вы используете ert.tlc системный целевой файл, выберите Support complex numbers.

    3. Выберите MAT-file logging.

    4. Нажмите Apply.

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

  5. Используйте панель Custom Code, чтобы встраивать пользовательский код приложения в сгенерированный код. Выберите панель Custom Code и нажмите Initialize function. Отображается Initialize function входное поле.

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

    Примечание

    Если вы переименовали верхнюю часть rtwdemo_capi, обновить имя rtwdemo_capi_M в коде приложения, чтобы отразить новое имя модели.

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

  8. В подпанели Additional Build Information щелкните Source files и введите rtw_capi_examples.c.

    Нажмите Apply.

  9. Очистите Generate code only параметра конфигурации модели.

    Создайте модель и сгенерируйте исполняемую программу. Например, в системе 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

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте