Found an issue with the book? Report it on Github.

기계 분야 예제(A Mechanical Example)

기계 분야 예제(A Mechanical Example)

이 예제는 기계 시스템에 더 친숙한 경우 지금까지 다룬 개념 중 일부를 보강하는 데 도움이 될 수 있습니다. 다음 그림에 표시된 시스템이 모델링을 하려는 대상입니다.

Plant with pulse counter sensor

도식적인 형태로 표현하면 이 모델이 가지고 있는 의도를 전달하는 것이 쉬워 질 수 있습니다. 적절한 그래픽 표현이 사용된다고 가정하면 전문가는 시스템의 구성을 매우 빠르게 이해하고 작동 가능성에 대한 직관을 개발할 수 있습니다. 현재 방정식과 변수에 초점을 맞추고 있지만, 결국 모델이 처음부터 이 도식적 형태로 구축되는 접근 방식까지를 다음 컴포넌트(Components) 섹션에서 작업할 것입니다.

그러나 지금은 이 간단한 기계 시스템과 관련된 방정식을 표현하는 방법에 중점을 둘 것입니다. 각 관성은 회전 위치 \varphi 및 회전 속도 \omega 를 갖습니다. 여기서 방적식은 \omega = \dot{\varphi} 로 표현할 수 있습니다. 각각의 관성에 대하여 각운동량의 균형은 다음과 같이 나타낼 수 있습니다.

J \dot{\omega} = \sum_i \tau_i

즉, 관성에 가해지는 토크의 합, :math:` au` 는 관성 모멘트, J 와 각가속도, \dot{\omega} 의 곱과 같아야 합니다.

이 시점에서 알고 있지 않는 것은 토크 값인 :math:` au_i` 뿐입니다. 이전 그림에서 두 개의 스프링과 두 개의 댐퍼가 있음을 알 수 있습니다.스프링의 경우 Hooke의 법칙을 사용하여 토크와 각변위 간의 관계를 다음과 같이 표현할 수 있습니다.

\tau = c \Delta \varphi

각 댐퍼에 대해 토크와 상대 각속도 간의 관계를 다음과 같이 표현합니다.

\tau = d \Delta \dot{\varphi}

이러한 모든 관계를 함께 가져오면 다음 방정식 시스템을 얻습니다.

\begin{split}\omega_1 &= \dot{\varphi}_1 \\ J_1 \dot{\omega}_1 &= c_1 (\varphi_2-\varphi_1) + d_1 \frac{\mathrm{d} (\varphi_2-\varphi_1)}{\mathrm{d}t} \\ \omega_2 &= \dot{\varphi}_2 \\ J_2 \dot{\omega}_2 &= c_1 (\varphi_1-\varphi_2) + d_1 \frac{\mathrm{d} (\varphi_1-\varphi_2)}{\mathrm{d}t} - c_2 \varphi_2 - d_2 \dot{\varphi}_2\end{split}

이제, 시스템에 다음과 같은 초기 조건도 있다고 가정해 보겠습니다.

\begin{split}\varphi_1 &= 0 \\ \omega_1 &= 0 \\ \varphi_2 &= 1 \\ \omega_2 &= 0\end{split}

이러한 초기 조건은 기본적으로 두 관성이 실제로 움직이지 않는 상태(, \omega=0 )에서 시스템이 시작되지만,두 스프링 사이의 값에서 0이 아닌 편향이 있음을 의미합니다.

이 모든 변수와 방정식을 함께 가져오면 모델리카에서 이 문제를 다음과 같이 표현할 수 있습니다.

model SecondOrderSystem "A second order rotational system"
  type Angle=Real(unit="rad");
  type AngularVelocity=Real(unit="rad/s");
  type Inertia=Real(unit="kg.m2");
  type Stiffness=Real(unit="N.m/rad");
  type Damping=Real(unit="N.m.s/rad");
  parameter Inertia J1=0.4 "Moment of inertia for inertia 1";
  parameter Inertia J2=1.0 "Moment of inertia for inertia 2";
  parameter Stiffness c1=11 "Spring constant for spring 1";
  parameter Stiffness c2=5 "Spring constant for spring 2";
  parameter Damping d1=0.2 "Damping for damper 1";
  parameter Damping d2=1.0 "Damping for damper 2";
  Angle phi1 "Angle for inertia 1";
  Angle phi2 "Angle for inertia 2";
  AngularVelocity omega1 "Velocity of inertia 1";
  AngularVelocity omega2 "Velocity of inertia 2";
initial equation
  phi1 = 0;
  phi2 = 1;
  omega1 = 0;
  omega2 = 0;
equation
  // Equations for inertia 1
  omega1 = der(phi1);
  J1*der(omega1) = c1*(phi2-phi1)+d1*der(phi2-phi1);
  // Equations for inertia 2
  omega2 = der(phi2);
  J2*der(omega2) = c1*(phi1-phi2)+d1*der(phi1-phi2)-c2*phi2-d2*der(phi2);
end SecondOrderSystem;

저역 통과 필터 예제인 RLC1 에서 했던 것처럼 한 줄씩 살펴보겠습니다.

평소와 같이 모델 이름으로 시작합니다.

model SecondOrderSystem "A second order rotational system"

다음으로 회전 기계 시스템에 대한 물리적 자료형을 정의 합니다. 즉, 아래와 같습니다.

  type Angle=Real(unit="rad");
  type AngularVelocity=Real(unit="rad/s");
  type Inertia=Real(unit="kg.m2");
  type Stiffness=Real(unit="N.m/rad");
  type Damping=Real(unit="N.m.s/rad");

그런 다음 시스템의 다양한 물리적 특성을 나타내는 데 사용하는 다양한 parameter를 정의합니다.

  parameter Inertia J1=0.4 "Moment of inertia for inertia 1";
  parameter Inertia J2=1.0 "Moment of inertia for inertia 2";
  parameter Stiffness c1=11 "Spring constant for spring 1";
  parameter Stiffness c2=5 "Spring constant for spring 2";
  parameter Damping d1=0.2 "Damping for damper 1";
  parameter Damping d2=1.0 "Damping for damper 2";

parameter 가 아닌 4개의 변수가 있습니다. 이들은 다음과 같이 정의합니다.

  Angle phi1 "Angle for inertia 1";
  Angle phi2 "Angle for inertia 2";
  AngularVelocity omega1 "Velocity of inertia 1";
  AngularVelocity omega2 "Velocity of inertia 2";

초기 조건(곧 다시 살펴보겠습니다)은 다음과 같이 정의합니다.

initial equation
  phi1 = 0;
  phi2 = 1;
  omega1 = 0;
  omega2 = 0;

그런 다음 시스템의 동적 응답을 설명하는 방정식이 나옵니다.

equation
  // Equations for inertia 1
  omega1 = der(phi1);
  J1*der(omega1) = c1*(phi2-phi1)+d1*der(phi2-phi1);
  // Equations for inertia 2
  omega2 = der(phi2);
  J2*der(omega2) = c1*(phi1-phi2)+d1*der(phi1-phi2)-c2*phi2-d2*der(phi2);

마지막으로 모델 정의가 종료됩니다.

end SecondOrderSystem;

이 모델의 유일한 단점은 모든 초기 조건이 모델에 "하드 코딩"되어 있다는 것입니다.즉, 이 모델에 대한 초기 조건 세트를 대체해서 지정할 수 없습니다. 다음과 같이 초기 조건을 나타내는 parameter 변수를 정의하여 Newton cooling examples 에서 했던 것처럼 이 문제를 극복할 수 있습니다.

model SecondOrderSystemInitParams
  "A second order rotational system with initialization parameters"
  type Angle=Real(unit="rad");
  type AngularVelocity=Real(unit="rad/s");
  type Inertia=Real(unit="kg.m2");
  type Stiffness=Real(unit="N.m/rad");
  type Damping=Real(unit="N.m.s/rad");
  parameter Angle phi1_init = 0;
  parameter Angle phi2_init = 1;
  parameter AngularVelocity omega1_init = 0;
  parameter AngularVelocity omega2_init = 0;
  parameter Inertia J1=0.4 "Moment of inertia for inertia 1";
  parameter Inertia J2=1.0 "Moment of inertia for inertia 2";
  parameter Stiffness c1=11 "Spring constant for spring 1";
  parameter Stiffness c2=5 "Spring constant for spring 2";
  parameter Damping d1=0.2 "Damping for damper 1";
  parameter Damping d2=1.0 "Damping for damper 2";
  Angle phi1 "Angle for inertia 1";
  Angle phi2 "Angle for inertia 2";
  AngularVelocity omega1 "Velocity of inertia 1";
  AngularVelocity omega2 "Velocity of inertia 2";
initial equation
  phi1 = phi1_init;
  phi2 = phi2_init;
  omega1 = omega1_init;
  omega2 = omega2_init;
equation
  omega1 = der(phi1);
  omega2 = der(phi2);
  J1*der(omega1) = c1*(phi2-phi1)+d1*der(phi2-phi1);
  J2*der(omega2) = c1*(phi1-phi2)+d1*der(phi1-phi2)-c2*phi2-d2*der(phi2);
end SecondOrderSystemInitParams;

이러한 방식으로 parameter 값은 시뮬레이션 환경(일반적으로 사용자가 paramter를 편집할 수 있음)에서 또는 소위 "수정(modifications)"을 통해 변경할 수 있습니다.

이 최신 버전의 모델에서 새로 도입된 parameter의 값이 이전에 사용된 하드 코딩된 값과 동일함을 볼 수 있습니다. 결과적으로 기본 초기 조건은 이전과 정확히 동일합니다. 그러나 이제 우리에게 다른 초기 조건도 해석 할 수 있는 자유도가 생겼습니다.예를 들어 SecondOrderSystemInitParams 모델을 있는 그대로 시뮬레이션하면 각도 위치와 속도에 대해 다음과 같은 해을 얻습니다.

/static/_images/SOSIP.svg

그러나 시뮬레이션 시작 시 phi1_init 파라미터를 1 로 수정하면 다음과 같은 해을 얻을 수 있습니다.

/static/_images/SOSIP1.svg