Функции 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Время, 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

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

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

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

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

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

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

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

Смотрите также

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

Больше о