Функции Simscape

Simscape™ функции моделируют класс чистых математических функций первого порядка с явной зависимостью вход-выход. Эти функции явно отображают входы числовых значений в выходы числовых значений с помощью декларативных выражений. Когда компонент вызывает функцию 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

Цель основных функций 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, который задает компонент, область или другую функцию и доступен только для этого компонента, области или основной функции. Для примера, когда вам нужно использовать функцию только в одном компоненте, определяя ее как локальную функцию:

  • Уменьшает накладные расходы на создание и упаковку отдельных файлов.

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

Включите локальную функцию 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

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

Вы можете иметь несколько локальных функций, объявленных в одном компоненте, области или файле функции.

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

См. также

Похожие примеры

Подробнее о