Механический компонент — Spring

Следующий файл, spring.ssc, реализует компонент под названием spring.

Раздел объявления компонента содержит:

  • Два вращательных узла, r и c (для стержня и случая, соответственно)

  • Параметр k, со значением по умолчанию 10 N*m/rad, задавая коэффициент упругости

  • Через и переменные Across, закрутите t и угловую скорость w, чтобы быть соединенными с вращательными доменными переменными Through и Across позже в файле

  • Внутренняя переменная theta, со значением по умолчанию 0 rad, задавая относительный угол, то есть, деформацию пружины

Раздел branches устанавливает отношение между переменной Through компонента и узлами компонента (и поэтому доменной переменной Through). Оператор t : r.t -> c.t указывает, что крутящий момент в течение пружины действует от узла r к узлу c.

Раздел уравнения запускается с построения assert, которое проверяет, что коэффициент упругости больше, чем нуль. Если параметры блоков установлены неправильно, assert инициировал ошибку времени выполнения.

Первое уравнение, w == r.w - c.w, устанавливает отношение между переменной Across компонента и узлами компонента (и поэтому доменной переменной Across). Это задает угловую скорость через пружину как различие между узлом угловые скорости.

Следующие два уравнения задают пружинное действие:

  • t = k * theta, то есть, крутящий момент равняется пружинному коэффициенту упругости времен деформации

  • w = theta.der, то есть, угловая скорость равняется производной времени пружинной деформации

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 == k * theta;
    w == theta.der;
  end
end