Блок MATLAB function является самым легким способом реализовать пользовательские функции MATLAB® в Simulink. Чтобы смоделировать функциональность, которая не получена Simulink® графический язык, или для алгоритмов, которые легко представлены в MATLAB текстовый язык, можно использовать блоки MATLAB function. Используйте блоки MATLAB function, чтобы сгенерировать читаемый, эффективный, и компактный код C/C++ для развертывания на настольных и встраиваемых приложениях.
Другими словами, блоки MATLAB function позволяют вам задать пользовательскую функциональность с помощью MATLABlanguage. Эти блоки являются хорошей отправной точкой, чтобы создать пользовательскую функциональность если:
У вас есть существующая функция MATLAB, которая моделирует пользовательскую функциональность.
Вы находите легче смоделировать пользовательскую функциональность с помощью функции MATLAB, чем при помощи Диаграммы Simulink.
Пользовательская функциональность не включает непрерывные или дискретные динамические состояния. Чтобы смоделировать динамические состояния, используйте S-функции.
Блоки MATLAB function предусматривают следующие возможности:
Позвольте вам встраивать функции MATLAB во встраиваемые приложения — блоки MATLAB function поддерживают подмножество функций тулбокса MATLAB, которые генерируют эффективный код C/C++. Для получения дополнительной информации смотрите Функции и Объекты, Поддержанные для Генерации кода C/C++ — Алфавитный список. С этой поддержкой можно использовать Simulink Coder™, чтобы сгенерировать встраиваемый код С от блоков MATLAB function, которые реализовывают множество сложных математических приложений. Таким образом можно создать исполняемые файлы, которые используют функциональность MATLAB, но выполнение вне среды MATLAB.
Наследуйте свойства от сигналов ввода и вывода Simulink — По умолчанию, и размер и тип сигналов ввода и вывода к блоку MATLAB function наследованы от Сигналов Simulink. Можно также принять решение задать размер и тип вводов и выводов явным образом в Портах и Менеджере данных (см. Порты и Менеджер данных), или в Model Explorer (см. Поиск и Редактирование Используя Model Explorer).
Чтобы интегрировать код MATLAB в модели Simulink, можно вызвать любую из этих функций от блока MATLAB function.
Локальные функции — можно вызвать локальные функции, заданные в теле блока MATLAB function.
Функции тулбокса MATLAB, которые поддерживают генерацию кода — можно вызвать функции тулбокса, которые поддерживают генерацию кода от блоков MATLAB function. Когда вы создаете свою модель с Simulink Coder, эти функции генерируют код С, который оптимизирован, чтобы соответствовать требованиям к памяти и требованиям к производительности настольных и встроенных сред. Для списка поддерживаемых функций смотрите Функции и Объекты, Поддержанные для Генерации кода C/C++ — Алфавитный список.
Функции MATLAB, которые не поддерживают генерацию кода — можно также вызвать внешние функции от блоков MATLAB function. Это функции на пути MATLAB, который компилятор отправляет MATLAB для выполнения, потому что выходной язык не поддерживает их. Они не генерируют код, но выполняются только в рабочем пространстве MATLAB во время симуляции модели. Программное обеспечение Simulink Coder пытается скомпилировать все функции MATLAB, если вы явным образом не объявляете, что они являются внешними при помощи coder.extrinsic
. Смотрите Объявление функций MATLAB как Внешние Функции.
Программное обеспечение генерации кода обнаруживает вызовы многих общих функций визуализации, таких как plot
, disp
и figure
. Для генерации кода MEX это автоматически обращается к MATLAB для этих функций. Для автономной генерации кода это не генерирует код для этих функций визуализации. Поэтому вы не должны объявлять эти функции внешнее использование функции coder.extrinsic
. Смотрите Разрешение Вызовов функции для Генерации кода.
Функции от Функциональных блоков Simulink и блоков Stateflow® — От блоков MATLAB function, можно также вызвать функции, определяемые в Функциональном блоке Simulink. Можно вызвать функции Stateflow, когда вы устанавливаете флажки Export Chart Level Functions (Make Global) и Allow exported functions to be called by Simulink в диалоговом окне свойств диаграммы. Чтобы узнать больше, как вызвать функции, определяемые в Функции Simulink и блоках Stateflow, смотрите Используя Функциональные блоки Simulink и Экспортируемые Функции Stateflow.
В блоках Simulink прямое сквозное соединение означает, что выводом блока управляет непосредственно значение сигнала входного порта. В непрямом сквозном соединении значение выходного сигнала не зависит от значения входного сигнала по крайней мере в одной функции во время симуляции.
По умолчанию блоки MATLAB function имеют прямое включенное сквозное соединение. Если вы отключаете прямое сквозное соединение, семантика Simulink гарантирует, что выходные параметры полагаются только на текущее состояние. Используя непрямое сквозное соединение позволяет вам использовать блоки MATLAB function в обратной связи и предотвратить алгебраические циклы.
Чтобы использовать непрямое сквозное соединение, в Портах и Менеджере данных, в MATLAB Function Block Editor, выбирают Edit Data на вкладке Editor и снимают флажок Allow direct feedthrough. Для получения дополнительной информации смотрите Порты и Менеджер данных.
Не программируйте выходные параметры, чтобы полагаться на входные параметры, или обновил персистентные переменные. Например, не используйте этот код в непрямом проходном блоке:
counter = counter + 1; % update state output = counter; % compute output based on updated state
output = counter; % compute output based on current state counter = counter + 1; % update state
Чтобы использовать непрямое сквозное соединение, необходимо включить встраивание функции с помощью coder.inline
.