Вызовите существующие, внешние функции от симуляции или от сгенерированного кода при помощи Legacy Code Tool.
Узнать, как к:
Выполните функцию C как часть симуляции модели Simulink®.
Вызовите функцию 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.
Чтобы подтвердить замену блоков Поиска, сравните результаты симуляции, произведенные блоками Поиска с результатами, приведенными новым Блоком 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
.