exponenta event banner

Функции 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 раздел, вы получаете ошибку.

  • Допускаются нулевые или более входных параметров.

  • При вызове функции количество входных аргументов должно соответствовать количеству входных параметров.

  • Входные параметры позиционные. Это означает, что первый входной аргумент во время вызова функции передается первому входному параметру и т.д. Например, при записи уравнения:

    o == SumSquared(5,2);

    тогда in1 равно 5 и in2 равно 2.

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

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

  • definitions раздел может содержать промежуточные термины и if-elseif-else заявления. Те же самые правила синтаксиса, что и в разделе объявления let заявление применяется. Дополнительные сведения см. в разделе Использование промежуточных членов в уравнениях.

  • definitions раздел не может содержать выражения с динамической семантикой, например integ, time, der, edge, initialevent, или delay.

Правила упаковки

Использование основных функций Simscape

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

Например, экспоненциальные диодные уравнения часто используют выражение, которое является модификацией exp(i), для обеспечения защиты больших величин i. Для получения более подробной информации см. справочные страницы блоков Diode (Simscape Electrical) и NPN Bipolar Transistor (Simscape Electrical). В примере Функции 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

Затем диодный блок может вызвать эту функцию с помощью y и z значения 80 и 79, соответственно:

equations
   o == SimscapeFunction.Use.Functions.userFunction(i,80,79);
end

и блок биполярного транзистора NPN может вызывать ту же функцию со значениями 40 и 39:

equations
   o == SimscapeFunction.Use.Functions.userFunction(i,40,39);
end

Рекомендуемые способы повторного использования кода

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

Чтобы повторно использовать выражения для нескольких компонентов:

  • Используйте основные функции Simscape для повторного использования выражений в уравнениях и объявлениях элементов.

  • Используйте функции объявления в объявлениях членов для повторного использования выражений, которые выходят за пределы возможностей выражения Simscape. Дополнительные сведения см. в разделе Функции объявления.

ФункциональностьЯзык разработкиРасширение файлаИспользование Поддерживает аргументы с единицами измерения

Функция Simscape

Simscape

.ssc или .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

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

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

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

См. также

Связанные примеры

Подробнее