Используйте 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 указатель на структуру модели реального времени в modelC (или .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 по умолчанию, используйте параметр конфигурации модели 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. Параметр конфигурации модели Clear 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

Похожие темы