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

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

Узнать, как к:

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

  • Вызовите функцию 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.

Используйте 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.

Чтобы подтвердить замену блоков Поиска, сравните результаты симуляции, произведенные блоками Поиска с результатами, приведенными новым Блоком 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.

Для следующего примера в этом ряду смотрите Сборку Интегрированный Код Вне окружения Simulink.

Похожие темы