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
section, вы получите ошибку.
Допускается использование нуля или нескольких входных параметров.
Когда функция вызывается, количество входных аргументов должно совпадать с количеством параметров входа.
Входные параметры являются позиционными. Это означает, что первый входной аргумент во время вызова функции передается первому входному параметру и так далее. Для примера, если вы пишете уравнение:
o == SumSquared(5,2);
затем in1
5 и in2
равен 2.
Если функция имеет несколько возвращаемых значений, они также позиционны. То есть первый выходной параметр присваивается первому возвращаемому значению и так далее.
Если функция имеет несколько значений возврата, правила и ограничения те же, что и для функций объявления. Для получения дополнительной информации см. раздел «Несколько возвращаемых значений».
The definitions
раздел может содержать промежуточные термины и if-elseif-else
операторы. Те же синтаксические правила, что и в разделе объявления let
применить оператор. Для получения дополнительной информации см. Использование промежуточных членов в уравнениях.
The definitions
раздел не может содержать выражения с динамической семантикой, такие как integ
, time
, der
, edge
, initialevent
, или delay
.
Файлы функции Simscape могут находиться непосредственно в MATLAB® путь или в директориях пакетов. Для получения дополнительной информации см. раздел «Организация файлов Simscape».
Можно использовать защиту исходного кода, как описано в разделе Использование защиты исходного кода для файлов Simscape.
Импорт пакета импортирует все функции Simscape в этом пакете. Для получения дополнительной информации см. раздел Импорта Области и классы компонентов.
Если функция MATLAB и функция Simscape имеют одинаковое имя, функция MATLAB имеет более высокий приоритет.
Цель основных функций Simscape состоит в том, чтобы повторно использовать выражения в уравнениях нескольких компонентов, а также в объявлениях представителей областей или компонента.
Для примера экспоненциальные диодные уравнения часто используют выражение, которое является модификацией exp
, для обеспечения защиты больших величин (i
)i
. Для получения дополнительной информации смотрите Diode (Simscape Electrical) и NPN Bipolar Transistor (Simscape Electrical) страниц с описанием. Пример Simscape Functions показывает, как можно записать функцию 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 | .sssc или .sscp | Представитель объявление и уравнения | Да |
Функция объявления | MATLAB | .m или .p | Декларация только для представителей | Нет |
Чтобы повторно использовать уравнения для нескольких компонентов:
Используйте подклассификацию, чтобы смоделировать отношение «is-a» между базовым компонентом и производным компонентом. Уравнения в основу компоненте используются повторно в производном компоненте. Для получения дополнительной информации см. раздел «Подклассы и наследование».
Используйте составные компоненты, чтобы смоделировать отношение «has-a» между компонентом контейнера и подкомпонентами. Уравнения в компонентах представителя используются повторно в составном компоненте. Для получения дополнительной информации см. раздел О составных компонентах.
Локальные функции 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
Синтаксические правила для локальных функций те же, что и для основных функций. См. раздел Синтаксические правила.
Вы можете иметь несколько локальных функций, объявленных в одном компоненте, области или файле функции.
Локальные функции могут содержать вызовы других локальных функций, в том же файле или основных функций в других файлах. В случае конфликта по совпадению имен локальные функции имеют более высокий приоритет вызовов, чем основные функции.