exponenta event banner

Механический компонент - пружина

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

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

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

  • Параметр k, со значением по умолчанию 10 N*m/rad, задание скорости пружины

  • Сквозные и поперечные переменные, крутящий момент t и угловая скорость w, для подключения к переменным rotal domain Through и Across в дальнейшем в файле

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

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

Раздел уравнения начинается с assert конструкция, которая проверяет, что скорость пружины больше нуля. Если параметр block установлен неправильно, 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