Вызовите существующие, внешние функции из симуляции или из сгенерированного кода с помощью Legacy Code Tool.
Узнать, как:
Оцените функцию C как часть симуляции модели Simulink ®.
Вызовите функцию C из кода, который вы генерируете из модели.
Для получения информации о примере см. Раздел «Подготовка модели алгоритма управления для генерации кода C».
Откройте модель примера, rtwdemo_PCG_Eval_P4
.
Для многих приложений Модельно-ориентированное проектирование, в дополнение к моделям Simulink ®, проект включает набор существующих функций C, которые были протестированы и проверены. Можно интегрировать эти функции в модель Simulink ® и сгенерировать код, который использует функции.
В этом примере вы создаете пользовательский блок Simulink ®, который вызывает существующую функцию C. Затем вы включаете блок в модель и тестируете общую систему посредством симуляции модели в Simulink ®.
В модели примера можно заменить Интерполяционные блоки (интерполяционные таблицы) в ПИ-контроллеры вызовами существующей функции C. Функция определяется в файлах SimpleTable.c
и SimpleTable.h
.
Чтобы задать вызов существующей функции 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
для определения интерфейса функции к существующему коду С
legacy_code('sfcn_cmex_generate',def)
legacy_code('compile',def)
legacy_code('slblock_generate',def)
Сгенерированный блок S-Function вызывает функцию C в SimpleTable.c
. Теперь можно использовать этот блок S-Function в моделях.
legacy_code('sfcn_tlc_generate',def)
Эта команда создает файл TLC, который является компонентом S-Функции, которая задает, как сгенерировать код для блока.
Когда вы интегрируете существующий код С в модель Simulink ®, проверьте сгенерированный блок S-Function .
Чтобы подтвердить замену блоков Lookup, сравните результаты симуляции, произведенные блоками Lookup, с результатами, полученными новым блоком S-Function.
Блок Sine Wave производит выходные значения из [-2: 2].
Входная область значений интерполяционной таблицы от [-1: 1].
Интерполяционная таблица выводит абсолютное значение входа.
Интерполяционная таблица отсекает выход на входе пределов.
2. Запустите модель валидации.
Рисунок показывает результаты валидации. Существующий код С и блок таблицы Simulink ® выдают одинаковые выходные значения .
После проверки существующего кода функции C как автономного компонента проверьте S-функцию в модели. Чтобы завершить валидацию, используйте модель тестовой обвязки.
2. Запустите тестовую обвязку.
Результаты симуляции совпадают с золотыми значениями.
Генератор кода использует файл TLC, чтобы обработать блок S-Function, как и любой другой блок. Генератор кода может реализовать складывание выражения с блоком S-Function, операцией, которая объединяет несколько расчеты в одно выходное вычисление.
2. Исследуйте сгенерированный код в PI_Control_Reusable.c
.
Сгенерированный код теперь вызывает SimpleTable
Функция C.
Рисунки показывают сгенерированный код до и после интегрирования кода С. Перед интегрированием код вызывает сгенерированную стандартную программу поиска. После интегрирования сгенерированный код вызывает функцию C SimpleTable
.