exponenta event banner

Функция C

Интеграция и вызов внешнего кода C из модели Simulink

  • Библиотека:
  • Simulink/Пользовательские функции

  • C Function block

Описание

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

Блок C Function можно также использовать для вызова подмножества функций библиотеки C Math Library. Для получения дополнительной информации см. раздел Функции библиотеки вызовов C из функционального блока C.

Блок C Function поддерживает инициализацию постоянных данных и вызов внешних функций из диалогового окна блока. Блок C Function поддерживает только инициализацию и завершение постоянных данных; блок не поддерживает обновление данных во время моделирования. Для моделирования динамической системы с непрерывными состояниями используйте блок S-Function. Дополнительные сведения о S-функциях см. в разделе Что такое S-функция?.

Определите исходный код и вспомогательные файлы, которые будут вызываться блоком C Function на панели Simulation Target параметров конфигурации.

Ограничения

Следующие функции Simulink несовместимы с блоком C Function.

  • Симулинк Coverage™

    Измеряется только охват выполнения.

  • Inspector™ кода Simulink

  • Verifier™ проектирования Simulink

  • Симулинк Test™

    - Испытательный жгут

  • Использование функционального блока C в отчете Simulink Generator™

Кроме того, следующие ограничения применяются к исходному коду, на который ссылается блок C Function.

  • Ключевое слово C static не поддерживается.

    Чтобы кэшировать значения на всех этапах времени, определите символ как Persistent в таблице «Символы» диалогового окна блока.

  • Файлы не могут быть включены в сценарий.

    Внешние функции должны быть указаны на панели «Цель моделирования» диалогового окна «Параметры конфигурации».

    Если на панели Цель моделирования (Simulation Target) определены существующие включения, которые не могут быть смешаны с новым включением, рекомендуется добавить блок включения и блок функции C в библиотечную модель и использовать ссылку на блок в главной модели. Дополнительные сведения см. в разделе Создание пользовательской библиотеки.

  • Указатели разных типов не могут быть назначены друг другу. Типы указателей должны совпадать при вызове внешних функций.

  • Код не может принимать адрес константы.

  • Прямой вызов некоторых функций библиотеки C из блока C Function не поддерживается. Список функций библиотеки C Math Library, которые можно вызвать напрямую, см. в разделе Функции библиотеки Call C из функционального блока C. Чтобы вызвать другие функции библиотеки C, создайте функцию-оболочку, которая вызывает функцию библиотеки C.

Порты

Вход

развернуть все

Вход в функциональный блок C.

Количество входов и их имена определяются определениями внешнего кода C и определениями символов в таблице «Символы» диалогового окна параметров блока.

Метка входного порта совпадает с именем входного символа, если она не изменена путем редактирования поля «Метка» в таблице «Символы» диалогового окна «Блоки».

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | enumerated | bus

Продукция

развернуть все

Вывод из блока C Function.

Количество выходов и их имена определяются определениями во внешнем коде C и определениями символов в таблице «Символы» диалогового окна параметров блока.

Метка выходного порта совпадает с именем выходного символа, если она не изменена путем редактирования поля «Метка» в таблице «Символы» диалогового окна параметров блока.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | enumerated | bus

Параметры

развернуть все

Указывает код, который блок C Function выполняет во время моделирования. Например, можно вызвать функцию из внешнего кода C, указанного на панели Цель моделирования (Simulation Target), внести изменения в результаты и выполнить операции для передачи результатов в другие блоки.

Указывает код инициализации блока C Function. Этот код выполняется один раз в начале моделирования. Например, можно инициализировать постоянные данные.

Указывает код очистки, который выполняется блоком C Function при завершении модели. Этот код выполняется один раз в конце моделирования. Например, этот код используется для освобождения памяти, кэшированной на постоянных символах, указанных как указатели на пустоту.

Таблица Символы (Symbols) определяет атрибуты символов в коде C. Необходимо ввести атрибуты каждого символа в таблицу.

  • Имя - имя символа в исходном коде.

  • Область действия - область действия символа. Область действия символа можно изменить в любое время. Доступны следующие области:

    • Input - Символ ввода в блок C Function.

    • Output - Выходной символ в блок C Function.

    • InputOutput - Определите символ как входной и выходной в блоке C Function.

    • Parameter - определение символа в качестве параметра. Имя параметра определяется Label свойство символа.

    • Persistent - Определите символ как постоянные данные.

      Можно определить указатель на пустоту с помощью Persistent сфера применения. Указатель void - это указатель, который может хранить данные любого типа, создаваемые или выделяемые пользователем.

    • Constant - определение символа как константы с помощью числовых выражений или значений размера.

  • Метка - метка символа. Для символов с их областью видимости Input или Output, эта метка отображается как имя порта в блоке. Для символов с их областью видимости Parameter, эта метка является меткой, которая отображается в маске параметра блока. Если область действия Constant, метка - это константное выражение. Невозможно определить метку для Persistent символы.

  • Тип (Type) - тип данных символа. Выберите тип данных из раскрывающегося списка или укажите пользовательский тип данных.

    Использование пользовательского типа, например Simulink.Bus, Перечисление симулинков или Simulink.AliasType , который не имеет определения внешнего заголовка, связанного с блоком C Function, установите соответствующий тип в таблице Symbol.

  • Размер - размер данных символа. Блок C Function поддерживает только скаляры и векторы; матрицы и массивы с более высокой размерностью не поддерживаются. Можно использовать выражение размера для определения размера вывода или использовать -1 для наследования размера.

  • Порт - для входных и выходных символов, Port указывает индекс порта в блоке данных символа. Для обозначений параметров: Port указывает порядок отображения символа в маске параметра блока.

Характеристики блока

Типы данных

Boolean[a] | bus[a] | double[a] | enumerated[a] | integer[a] | single[a]

Прямой проход

no

Многомерные сигналы

yes

Сигналы переменного размера

no

Обнаружение пересечения нулей

no

[a] Фактический тип данных или поддержка возможностей зависит от реализации блока.

Расширенные возможности

.
Представлен в R2020a