exponenta event banner

Вызов внешнего кода C из модели и сгенерированного кода

Вызовите существующие внешние функции из моделирования или из сгенерированного кода с помощью прежнего инструмента кода.

Узнайте, как:

  • Оцените функцию C как часть моделирования модели Simulink ®.

  • Вызовите функцию C из кода, создаваемого из модели.

Сведения о модели примера см. в разделе Подготовка модели алгоритма управления для генерации кода C.

Процесс замены

Откройте пример модели, rtwdemo_PCG_Eval_P4.

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

В этом примере создается пользовательский блок Simulink ®, вызывающий существующую функцию C. Затем блок включается в модель и тестируется вся система с помощью моделирования модели в Simulink ®.

В примере модели блоки подстановки (таблицы подстановки) в контроллерах PI можно заменить вызовами существующей функции C. Функция определена в файлах SimpleTable.c и SimpleTable.h.

Посмотреть SimpleTable.c.

Посмотреть SimpleTable.h.

Создать блок, вызывающий функцию C

Чтобы указать вызов существующей функции C, используйте блок S-Function. Можно автоматизировать создание блока S-Function с помощью инструмента Legacy Code Tool. В инструменте сначала указывается интерфейс для существующей функции C. Затем инструмент использует этот интерфейс для создания блока S-Function.

Для создания блока S-Function для существующей функции C используйте инструмент устаревшего кода. SimpleTable.c.

1. Создайте структуру, содержащую определение интерфейса функции.

def = legacy_code('initialize')

Можно использовать структуру def для определения интерфейса функции к существующему коду C.

2. Заполните поля структуры.

3. Создайте S-функцию.

legacy_code('sfcn_cmex_generate',def)

4. Скомпилировать S-функцию.

legacy_code('compile',def)

5. Создайте блок S-Function.

legacy_code('slblock_generate',def)

Сгенерированный блок S-Function вызывает функцию C в SimpleTable.c. Теперь этот S-функциональный блок можно использовать в моделях.

6. Создайте файл TLC.

legacy_code('sfcn_tlc_generate',def)

Эта команда создает файл TLC, который является компонентом S-функции, определяющей способ создания кода для блока.

Проверка внешнего кода с помощью моделирования

При интеграции существующего кода C в модель Simulink ® следует проверить созданный блок S-Function .

Для проверки замены блоков Lookup сравните результаты моделирования, полученные блоками Lookup, с результатами, полученными новым блоком S-Function.

1. Откройте модель проверки.

  • Блок синусоидальной волны выдает выходные значения из [-2: 2].

  • Диапазон входных значений таблицы подстановки - от [-1: 1].

  • Таблица поиска выводит абсолютное значение входного значения.

  • Таблица подстановки отсекает выходные данные на входных границах.

2. Запустите модель проверки.

На рисунке показаны результаты проверки. Существующий код C и табличный блок Simulink ® дают одинаковые выходные значения .

Проверка кода C как части модели Simulink ®

После проверки существующего кода функции C в качестве автономного компонента проверьте S-функцию в модели. Для завершения проверки используйте тестовую модель электрического жгута.

1. Откройте тестовый жгут.

2. Запустите тестовый жгут.

Результаты моделирования соответствуют золотым значениям.

Вызов функции C из сгенерированного кода

Генератор кода использует файл TLC для обработки блока S-Function, как и любой другой блок. Генератор кода может реализовать сворачивание выражения с помощью блока S-Function, операции, которая объединяет несколько вычислений в одно вычисление вывода.

1. Создайте полную модель.

2. Проверьте созданный код в PI_Control_Reusable.c.

Созданный код теперь вызывает SimpleTable Функция С.

На рисунках показан сгенерированный код до и после интеграции кода C. Перед интеграцией код вызывает сгенерированную процедуру поиска. После интеграции сгенерированный код вызывает функцию C SimpleTable.

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