MATLAB Function

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

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

    HDL Coder / Пользовательские Функции

  • MATLAB Function block

Описание

С блоком MATLAB Function можно записать MATLAB® функция для использования в Simulink® модель. Функция MATLAB выполняется для симуляции и генерирует код для цели Simulink Coder™. Если вы плохо знакомы с Simulink и продуктами MATLAB, смотрите, что функции MATLAB Реализации Используют Блоки для обзора.

Двойной клик по блоку MATLAB Function открывает MATLAB Function Block Editor, где вы пишете функцию MATLAB. Модель call_stats_block2 в качестве примера обсужденный в Создают Пользовательскую Функциональность Используя использование блоков MATLAB function следующая функция в MATLAB Function Block Editor:

function [mean,stdev] = stats(vals)

% Calculates a statistical mean and a standard
% deviation for the values in vals.

len = length(vals);
mean = avg(vals,len);
stdev = sqrt(sum(((vals-avg(vals,len)).^2))/len);
plot(vals,'-+');

function mean = avg(array,size)
mean = sum(array)/size;

Функция задает входные и выходные данные в операторе объявления функции в качестве аргументов и возвращаемых значений. Значения аргументов и возвращаемые значения предыдущей функции, взятой в качестве примера, соответствуют вводам и выводам блока в call_stats_block2 модель.

This shows connected signals between the blocks established in the previous image.

Можно также задать данные, добавить входной триггер и создать вызов функции выходные параметры с помощью Model Explorer или Портов и Менеджера данных. Можно получить доступ к Портам и Менеджеру данных в MATLAB Function Block Editor путем нажатия на Edit Data. Для получения дополнительной информации смотрите, Задают Данные о блоке MATLAB function, Управляют Входным Триггером блока MATLAB function и Справляются с Вызовом функции Выходные параметры блока MATLAB function.

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

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

Для получения дополнительной информации смотрите Функции и Объекты, Поддержанные для Генерации кода C/C++.

Примечание

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

Примечание

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

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

От блоков MATLAB Function можно также вызвать функции, определяемые в блоке Simulink Function. Можно вызвать Stateflow® функции с Export Chart Level Functions (Make Global) и Allow exported functions to be called by Simulink зарегистрировались в диалоговом окне свойств диаграммы.

В Портах и Менеджере данных, можно объявить, что вход блока параметр Simulink вместо порта. Блок MATLAB Function также поддерживает наследование типов и размера для входных параметров, выходных параметров и параметров. Можно также задать эти свойства явным образом. Смотрите Задают и Изменяют Типы Аргумента функции, Задают Размер Данных о блоке MATLAB function и Конфигурируют Аргументы Данных о Параметре блока MATLAB function для описаний переменных, которые вы используете в блоках MATLAB Function.

Рекурсивные вызовы не позволены в блоках MATLAB Function.

По умолчанию блоки MATLAB Function имеют прямое включенное сквозное соединение. Чтобы отключить его, очистите свойство Allow direct feedthrough. Непрямая проходная семантика гарантирует, что выходные параметры полагаются только на текущее состояние. Используя непрямое сквозное соединение позволяет вам использовать блоки MATLAB Function в обратной связи и предотвратить алгебраические циклы. Для получения дополнительной информации смотрите Использование Непрямое Сквозное соединение в блоке MATLAB function.

Порты

Входной параметр

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

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

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

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

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

nвходной параметр th к функции в блоке MATLAB Function. Когда вы добавляете аргумент в редакторе, блок добавляет порт соответственно.

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

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

Типы данных: 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 th выходной аргумент от функции в блоке MATLAB Function. Когда вы добавляете аргумент в редакторе, блок добавляет порт соответственно.

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

Параметры

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

Параметры во вкладке Code Generation требуют Simulink Coder или Embedded Coder®.

Основной

Выберите, как отобразить метки порта на значке блока MATLAB Function.

none

Не отображайте метки порта.

FromPortIcon

Отобразите имя функциональных аргументов ввода и вывода.

FromPortBlockName

Отобразите имя функциональных аргументов ввода и вывода.

SignalName

Если сигнал, соединенный с портом, называют, отобразите имя сигнала. В противном случае отобразите имя аргумента функции.

Программируемое использование

Параметр: ShowPortLabels
Ввод: символьный вектор
Значение: 'FromPortIcon' | 'FromPortBlockName' | 'SignalName'
Значение по умолчанию: 'FromPortIcon'

Управляйте пользовательским доступом к содержимому блока MATLAB Function.

ReadWrite

Позвольте открыться и модификация содержимого блока MATLAB Function.

ReadOnly

Позвольте открыться, но не модификация блока MATLAB Function.

NoReadOrWrite

Отключите открытие или модификацию блока MATLAB Function.

Примечание

Вы не получаете ответ, при попытке просмотреть содержимое блока MATLAB Function, параметр Read/Write permissions которого устанавливается на NoReadOrWrite. Например, при двойном клике по такому блоку MATLAB Function, Simulink не открывает функциональный код и не отображает сообщений.

Программируемое использование

Параметр: Permissions
Ввод: символьный вектор
Значение: 'ReadWrite' | 'ReadOnly' | 'NoReadOrWrite'
Значение по умолчанию: 'ReadWrite'

Причины Simulink, чтобы обработать блок MATLAB Function как модуль при определении порядка выполнения методов блока.

on

Обработайте блок MATLAB Function как модуль при определении порядка выполнения методов блока. Например, когда Simulink должен вычислить выход блока, Simulink вызывает выходные методы всего кода в блоке MATLAB Function прежде, чем вызвать выходные методы других блоков на том же уровне как блок MATLAB Function.

off

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

Программируемое использование

Параметр: TreatAsAtomicUnit
Ввод: символьный вектор
Значение: 'on' | 'off'
Значение по умолчанию: 'on'

Попытайтесь устранить любые искусственные алгебраические циклы, которые включают атомарный модуль.

off

Не пытайтесь устранить любые искусственные алгебраические циклы, которые включают атомарный модуль.

on

Попытайтесь устранить любые искусственные алгебраические циклы, которые включают атомарный модуль.

Зависимости

Чтобы включить этот параметр, выберите параметр Treat as atomic unit.

Программируемое использование

Параметр: MinAlgLoopOccurrences
Ввод: символьный вектор
Значение: 'off' | 'on'
Значение по умолчанию: 'off'

Задайте, как запланировать блок MATLAB Function.

Sample time

Задайте, должен ли весь код в блоке MATLAB Function запуститься на том же уровне или может запуститься на различных уровнях.

Periodic Partition

Запланируйте блочный код MATLAB Function с периодическим разделом. Задайте имя раздела и шаг расчета, соответствующий уровню, на котором запускается раздел.

Aperiodic Partition

Запланируйте блочный код MATLAB Function с апериодическим разделом. Задайте имя раздела.

Зависимости

Чтобы включить этот параметр, выберите параметр Treat as atomic unit.

Программируемое использование

Параметр: ScheduleAs
Ввод: символьный вектор
Значение: 'SampleTime' | 'DiscretePartition' | 'UnconstrainedPartition'
Значение по умолчанию: 'SampleTime'

Задайте, должен ли весь код в этом блоке запуститься на том же уровне или может запуститься на различных уровнях.

  • Если код в блоке MATLAB Function может запуститься на различных уровнях, задайте шаг расчета, как наследовано (-1).

  • Если весь код должен запуститься на том же уровне, задайте шаг расчета, соответствующий этому уровню как значение параметра Sample time.

-1

Определение наследованной частоты дискретизации. Используйте этот шаг расчета, если код в MATLAB Function может запуститься на различных уровнях.

[Ts 0]

Задайте периодический шаг расчета.

Зависимости

Чтобы включить этот параметр, выберите параметр Treat as atomic unit.

Программируемое использование

Параметр: SystemSampleTime
Ввод: символьный вектор
Значение: '-1' | '[Ts 0]'
Значение по умолчанию: '-1'

Генерация кода

Выберите формат кода, который будет сгенерирован для атомарного (невиртуального) модуля.

Auto

Simulink Coder и Embedded Coder выбирают оптимальный формат для вас на основе типа и количества экземпляров блока MATLAB Function, которые существуют в модели.

Inline

Simulink Coder и Embedded Coder встраивают блок MATLAB Function безусловно.

Nonreusable function

Если Filename options установлен в Auto, Simulink Coder и отдельные функции пакета Embedded Coder в файле модели. Если File name options установлен в Use subsystem name, Use function name, или User specified с помощью различных имен файлов, Simulink Coder и отдельных функций пакета Embedded Coder в отдельных файлах.

Блоки MATLAB Function с этой установкой генерируют функции, которые могут иметь аргументы в зависимости от установки параметра интерфейса Function. Можно назвать сгенерированную функцию и файл с помощью Имени функции параметров и Имени файла (никакое расширение). Эти функции не повторно используемы.

Reusable function

Simulink Coder и Embedded Coder генерируют функцию с аргументами, которая позволяет повторное использование блочного кода, когда модель включает несколько экземпляров блока.

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

Для получения дополнительной информации см.:

Советы

  • Когда это необходимо, несколько экземпляров блока MATLAB Function, который будет представлен как одна допускающая повторное использование функция, можно определять каждого из них как Auto или как Reusable function. Лучше использовать один или другой, как использующий обоих создает две допускающих повторное использование функции, один для каждого обозначения. Результаты этого выбора отличаются только, когда повторное использование не возможно. Выбор Auto не позволяет управление функции или имени файла для блочного кода MATLAB Function.

  • Reusable function и Auto опции и пытаются определить, существуют ли несколько экземпляров блока MATLAB Function и если код может быть снова использован. Различие между поведением опций - это, когда повторное использование не возможно:

    • Auto выражения встроили код, или если обстоятельства запрещают встраивание, отдельные функции для каждого экземпляра блока MATLAB Function.

    • Reusable function дает к отдельной функции с аргументами для каждого экземпляра блока MATLAB Function в модели.

  • Если вы выбираете Reusable function в то время как ваш сгенерированный код находится под системой контроля версий, установите File name options на Use subsystem name, Use function name, или User specified. В противном случае имена ваших файлов кода изменяются каждый раз, когда вы изменяете свою модель, которая предотвращает систему контроля версий над вашими файлами.

Зависимости

  • Этот параметр требует Simulink Coder для генерации кода.

  • Чтобы включить этот параметр, выберите Treat as atomic unit.

Программируемое использование

Параметр: RTWSystemCode
Ввод: символьный вектор
Значение: 'Auto' | 'Inline' | 'Nonreusable function' | 'Reusable function'
Значение по умолчанию: 'Auto'

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

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

Типы данных

Boolean[a] | шина[a] | дважды[a] | перечислимый[a] | фиксированная точка[a] | целое число[a] | один[a] | строка[a]

Прямое сквозное соединение

yes

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

ограниченный[a]

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

ограниченный[a]

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

no

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

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

Генерация кода PLC
Сгенерируйте код Структурированного текста с помощью Simulink® PLC Coder™.

Введенный в R2011a