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

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

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

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

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

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

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

  • Использование rtwCAPI_GetNumModelParameters, чтобы вложить количество параметров модели сопоставило API C:

    uint_T nModelParams = rtwCAPI_GetNumModelParameters(mmi);

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

    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, модель API в качестве примера C. Следующие шаги применяются и к grt.tlc и к системным конечным файлам ert.tlc, если в противном случае не обозначено.

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

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

  3. Если вам лицензируют для программного обеспечения Embedded Coder®, и вы хотите использовать системную целевую мозаику ert.tlc вместо grt.tlc по умолчанию, перейдите к панели Code Generation диалогового окна Configuration Parameters и используйте параметр 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. На панели Code Generation проверьте, что флажок 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

Похожие темы