exponenta event banner

Функция MATLAB

Включение кода MATLAB в модели, генерирующие встраиваемый код C

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

    Кодер HDL/пользовательские функции

  • MATLAB Function block

Описание

С помощью блока MATLAB Function можно записать функцию MATLAB ® для использования в модели Simulink ®. Создаваемая функция MATLAB выполняется для моделирования и генерирует код для цели Simulink Coder™. Для получения информации о новых продуктах Simulink и MATLAB см. Внедрение функций MATLAB с использованием блоков и Создание пользовательских функциональных возможностей с использованием функционального блока MATLAB.

Двойной щелчок по блоку MATLAB Function открывает его редактор, в котором записывается функция MATLAB, как показано в следующем примере:

Дополнительные сведения об этом редакторе см. в разделе Редактор функциональных блоков MATLAB.

Входные и выходные данные определяются блоком MATLAB Function в заголовке функции в качестве аргументов и возвращаемых значений. Аргумент и возвращаемые значения предыдущей примерной функции соответствуют входам и выходам блока в модели:

Можно также определить данные, триггеры ввода и выходные данные вызова функции с помощью диспетчера портов и данных, доступ к которому осуществляется из редактора функциональных блоков MATLAB путем выбора Править данные. См. раздел Порты и диспетчер данных.

Блок MATLAB Function генерирует эффективный встраиваемый код на основе анализа, который определяет размер, класс и сложность каждой переменной. Этот анализ накладывает следующие ограничения:

В дополнение к языковым ограничениям блок MATLAB Function поддерживает подмножество функций, доступных в MATLAB. Список поддерживаемых функций приведен в разделе Функции и объекты, поддерживаемые для генерации кода C/C + +. Эти функции включают функции в общих категориях, таких как:

  • Арифметические операторы, такие как plus, minus, и power. Дополнительные сведения см. в разделе Операции с массивом и матрицей.

  • Матричные операции, такие как size, и length

  • Расширенные операции с матрицами, такие как lu, inv, svd, и chol

  • Тригонометрические функции, такие как sin, cos, sinh, и cosh

Примечание

Хотя код для этого блока пытается получить точно такие же результаты, как MATLAB, различия могут возникать из-за ошибок округления. Эти численные различия, которые могут быть несколько eps первоначально может увеличиваться после повторных операций. Опора на поведение nan не рекомендуется. Различные компиляторы C могут давать разные результаты для одних и тех же вычислений.

Примечание

В функциональном блоке MATLAB %#codegen директива включена, чтобы подчеркнуть, что алгоритм MATLAB блока всегда предназначен для генерации кода. %#codegen директива или ее отсутствие не изменяет поведение проверки ошибок в контексте блока MATLAB Function. Дополнительные сведения см. в разделе Директива компиляции% # codegen.

Для поддержки визуализации данных функциональный блок MATLAB поддерживает вызовы функций MATLAB только для моделирования. См. раздел Использование механизма MATLAB для выполнения вызова функции в сгенерированном коде, чтобы понять некоторые ограничения этой возможности и то, как она интегрируется с анализом кода для этого блока. Если эти вызовы функции не влияют непосредственно ни на один из входов или выходов Simulink, вызовы не отображаются в сгенерированном коде Simulink Coder.

Из функциональных блоков MATLAB можно также вызывать функции, определенные в функциональном блоке Simulink. Функции Stateflow ® можно вызвать с помощью команд Экспорт функций на уровне диаграммы (Сделать глобальными) и Разрешить вызов экспортированных функций командой Simulink, отмеченной в диалоговом окне Свойства диаграммы .

В Диспетчере портов и данных можно объявить ввод блока параметром Simulink вместо порта. Блок MATLAB Function также поддерживает наследование типов и размеров для входов, выходов и параметров. Можно также явно указать эти свойства. Описание переменных, используемых в функциональных блоках MATLAB, см. в разделах Аргументы функции типа, Аргументы функции размера и Аргументы параметра добавления.

Рекурсивные вызовы не допускаются в функциональных блоках MATLAB.

По умолчанию функциональные блоки MATLAB имеют включенный прямой канал. Чтобы отключить его, в окне «Ports and Data Manager» снимите флажок «Allow direct feedthrough». Непрямая семантика сквозной передачи гарантирует, что выходные данные зависят только от текущего состояния. Использование непрямого канала позволяет использовать функциональные блоки MATLAB в цикле обратной связи и предотвращать алгебраические циклы. Дополнительные сведения см. в разделе Использование непрямого канала в функциональном блоке MATLAB.

Порты

Вход

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

Ввод, соответствующий первому входному аргументу функции внутри блока MATLAB Function. При переименовании аргумента функции в редакторе блок переименовывает порт соответствующим образом.

Типы данных, поддерживаемые MATLAB, но не поддерживаемые Simulink, не могут передаваться между моделью Simulink и функцией в блоке MATLAB Function. Эти типы могут использоваться в функциональном блоке MATLAB.

Дополнительные сведения о поддержке фиксированных точек для этого блока см. в разделах Типы данных фиксированных точек с функциональным блоком MATLAB (конструктор фиксированных точек) и Функциональный блок MATLAB с переопределением типа данных (конструктор фиксированных точек).

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

nВходной аргумент функции в блоке MATLAB Function. При добавлении аргумента в редакторе блок добавляет порт соответствующим образом.

Типы данных, поддерживаемые MATLAB, но не поддерживаемые Simulink, не могут передаваться между моделью Simulink и функцией в блоке MATLAB Function. Эти типы могут использоваться в функциональном блоке MATLAB.

Дополнительные сведения о поддержке фиксированных точек для этого блока см. в разделах Типы данных фиксированных точек с функциональным блоком MATLAB (конструктор фиксированных точек) и Функциональный блок MATLAB с переопределением типа данных (конструктор фиксированных точек).

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

Продукция

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

Первый выходной аргумент функции внутри блока MATLAB Function. При переименовании аргумента функции в редакторе блок переименовывает порт соответствующим образом.

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

nвыходной аргумент функции внутри блока MATLAB Function. При добавлении аргумента в редакторе блок добавляет порт соответствующим образом.

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

Примеры модели

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

Типы данных

Boolean[a] | bus[a] | double[a] | enumerated[a] | fixed point[a] | integer[a] | single[a] | string[a]

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

no

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

limited[a]

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

limited[a]

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

no

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

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

.

Создание кода ПЛК
Создание структурированного текстового кода с помощью Coder™ Simulink ® PLC

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