Функции Simscape™ моделируют класс чистых математических функций первого порядка с явным отношением ввода - вывода. Эти функции явным образом сопоставляют входные параметры численных значений в выходные параметры численных значений при помощи декларативных выражений. Когда компонент вызывает функцию Simscape, числовые входные значения передаются функции, которая затем выполняет эти декларативные выражения, чтобы вычислить выходные значения.
Существует два типа функций Simscape:
Основная функция — В общем случае цель функций Simscape должна снова использовать выражения в уравнениях нескольких компонентов, а также в объявлениях элемента доменных или файлов компонента. Каждая из этих функций должна быть в отдельном файле Simscape с именем файла, совпадающим с именем функции.
Локальная функция — В отличие от этого локальные функции Simscape находятся в файле Simscape, который задает компонент, область или другую функцию, и доступен только тем компонентом, областью или основной функцией. Для получения дополнительной информации смотрите Локальные Функции Simscape.
Каждая основная функция должна быть в отдельном файле Simscape. Имя файла должно совпадать с именем функции. Например, функциональный foo
должен быть в файле под названием foo.ssc
.
Файл функции Simscape должен начать с ключевого слова function
, сопровождаемый функциональным заголовком, который включает имя функции, входные параметры и выходные параметры. Например:
function out = MyFunction(in1,in2)
Если функция имеет несколько возвращаемых значений, синтаксис:
function [out1,out2] = MyFunction(in1,in2)
Тело функции должно быть заключено в definitions
разделите, например:
function out = SumSquared(in1,in2) definitions out = in1^2 + 2*in1*in2 + in2^2; end end
Один или несколько выходных параметров позволены.
Если выходной параметр не используется на левой стороне definitions
разделите, вы получаете ошибку.
Нуль или более входные параметры позволены.
Когда функция вызвана, количество входных параметров должно совпадать с количеством входных параметров.
Входные параметры позиционны. Это означает, что первый входной параметр во время вызова функции передается первому входному параметру и так далее. Например, если вы пишете уравнение:
o == SumSquared(5,2);
затем in1
5 и in2
2.
Если функция имеет несколько возвращаемых значений, они также позиционны. Таким образом, первый выходной параметр присвоен первому возвращаемому значению и так далее.
Если функция имеет несколько возвращаемых значений, правила и ограничения эквивалентны для функций объявления. Для получения дополнительной информации смотрите Несколько Возвращаемых значений.
definitions
раздел может содержать средние сроки и if-elseif-else
операторы. Те же синтаксические правила как в разделе объявления let
оператор применяется. Для получения дополнительной информации смотрите использующие Средние термины в уравнениях.
definitions
раздел не может содержать выражения с динамической семантикой, такие как integ
Время
, der
, edge
, initialevent
, или delay
.
Файлы функции Simscape могут находиться непосредственно на пути MATLAB® или в директориях пакета. Для получения дополнительной информации смотрите Организацию Ваших файлов Simscape.
Можно использовать исходную защиту, как описано в Использовании Исходной Защиты для файлов Simscape.
Импорт пакета импортирует все функции Simscape в этом пакете. Для получения дополнительной информации смотрите Область Импорта и Классы Компонента.
Если функция MATLAB и функция Simscape имеют то же имя, функция MATLAB имеет более высокий приоритет.
Цель основных функций Simscape состоит в том, чтобы снова использовать выражения в уравнениях нескольких компонентов, а также в объявлениях элемента доменных или файлов компонента.
Например, экспоненциальные диодные уравнения часто используют выражение, которое является модификацией exp (
, обеспечивать защиту для больших величин i
)i
. Для получения дополнительной информации смотрите страницы с описанием блока Diode и NPN Bipolar Transistor. Пример Функций Simscape показывает, как можно записать функцию Simscape, чтобы снова использовать это выражение, вместо того, чтобы повторить его в каждом блоке:
function out = userFunction(x,y,z) definitions out = if x > y (x-z)*exp(y); elseif x < -z (x+y)*exp(-z); else exp(x) end end end
Затем блок Diode может вызвать эту функцию с y
и z
значения 80
и 79
, соответственно:
equations o == SimscapeFunction.Use.Functions.userFunction(i,80,79); end
и блок NPN Bipolar Transistor может вызвать ту же функцию со значениями 40
и 39
:
equations o == SimscapeFunction.Use.Functions.userFunction(i,40,39); end
Язык Simscape имеет множество инструментов, которые упрощают повторное использование кода. Функции Simscape и функции объявления позволяют вам выражения повторного использования. Разделение на подклассы и составные компоненты позволило вам уравнения повторного использования.
К выражениям повторного использования через несколько компонентов:
Используйте основные функции Simscape, чтобы снова использовать выражения в уравнениях и объявлениях элемента.
Используйте функции объявления в объявлениях элемента, чтобы снова использовать выражения, которые являются вне возможности выражения Simscape. Для получения дополнительной информации смотрите Функции Объявления.
Функциональность | Авторская разработка языка | Расширение файла | Использование | Аргументы поддержек с модулями |
---|---|---|---|---|
Функция Simscape | Simscape | .ssc или .sscp | Объявление элемента и уравнения | Да |
Функция объявления | MATLAB | .m или.p | Объявление элемента только | Нет |
К уравнениям повторного использования через несколько компонентов:
Используйте разделение на подклассы, чтобы смоделировать отношение "isa" между основным компонентом и выведенным компонентом. Уравнения в основном компоненте снова используются в выведенном компоненте. Для получения дополнительной информации смотрите Разделение на подклассы и Наследование.
Используйте составные компоненты для модели, "имеет -" отношение между контейнерным компонентом и субкомпонентами. Уравнения в компонентах члена снова используются в составном компоненте. Для получения дополнительной информации займитесь Составными Компонентами.
Локальные функции Simscape находятся в файле Simscape, который задает компонент, область или другую функцию, и доступен только тем компонентом, областью или основной функцией. Например, когда необходимо использовать функцию в одном компоненте только, задавая его как локальную функцию:
Уменьшает издержки создания и упаковки отдельных файлов.
Ограничивает доступ, чтобы гарантировать, что только, что определенный компонент может использовать эту функцию.
Включайте локальную функцию Simscape в компонент, область или файл функции, после итогового end
ключевое слово, которое завершает описание компонента, области или основной функции. Например, этот spring
компонент использует локальную функцию, чтобы изменить ее уравнение крутящего момента:
component spring nodes r = foundation.mechanical.rotational.rotational; c = foundation.mechanical.rotational.rotational; end parameters k = { 10, 'N*m/rad' }; end variables theta = { 0, 'rad' }; t = { 0, 'N*m' }; % torque through w = { 0, 'rad/s' }; % velocity across end branches t : r.t -> c.t; % torque through from node r to node c end equations assert(k>0) % spring rate must be greater than zero w == r.w - c.w; % velocity across between node r and node c t == localTorque(k,theta); w == theta.der; end end function out = localTorque(in1,in2) definitions out = (in1*in2)*9.76 + 0.25; % Modification made to torque relationship end end
Синтаксические правила для локальных функций эквивалентны для основных функций. Смотрите Синтаксические правила.
У вас может быть несколько локальных функций, объявленных в том же компоненте, области или файле функции.
Локальные функции могут содержать вызовы других локальных функций в том же файле, или к основным функциям в других файлах. В случае конфликта по совпадению имен локальные функции имеют более высокий приоритет вызова, чем основные функции.