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

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

Узнать, как:

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

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

Для получения информации о примере см. Раздел «Подготовка модели алгоритма управления для генерации кода C».

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

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

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

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

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

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

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

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

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

Используйте Legacy Code Tool, чтобы создать блок S-Function для существующей функции C в SimpleTable.c.

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

def = legacy_code('initialize')

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

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-Function в моделях.

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

legacy_code('sfcn_tlc_generate',def)

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

Валидация внешнего кода посредством симуляции

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

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

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

  • Блок Sine Wave производит выходные значения из [-2: 2].

  • Входная область значений интерполяционной таблицы от [-1: 1].

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

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

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

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

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

После проверки существующего кода функции C как автономного компонента проверьте S-функцию в модели. Чтобы завершить валидацию, используйте модель тестовой обвязки.

1. Откройте тестовую обвязку.

2. Запустите тестовую обвязку.

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

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

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

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

2. Исследуйте сгенерированный код в PI_Control_Reusable.c.

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

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

Похожие темы