Found an issue with the book? Report it on Github.
이 예제는 기계 시스템에 더 친숙한 경우 지금까지 다룬 개념 중 일부를 보강하는 데 도움이 될 수 있습니다. 다음 그림에 표시된 시스템이 모델링을 하려는 대상입니다.
도식적인 형태로 표현하면 이 모델이 가지고 있는 의도를 전달하는 것이 쉬워 질 수 있습니다. 적절한 그래픽 표현이 사용된다고 가정하면 전문가는 시스템의 구성을 매우 빠르게 이해하고 작동 가능성에 대한 직관을 개발할 수 있습니다. 현재 방정식과 변수에 초점을 맞추고 있지만, 결국 모델이 처음부터 이 도식적 형태로 구축되는 접근 방식까지를 다음 컴포넌트(Components) 섹션에서 작업할 것입니다.
그러나 지금은 이 간단한 기계 시스템과 관련된 방정식을 표현하는 방법에 중점을 둘 것입니다. 각 관성은 회전 위치 및 회전 속도 를 갖습니다. 여기서 방적식은 로 표현할 수 있습니다. 각각의 관성에 대하여 각운동량의 균형은 다음과 같이 나타낼 수 있습니다.
즉, 관성에 가해지는 토크의 합, :math:` au` 는 관성 모멘트, 와 각가속도, 의 곱과 같아야 합니다.
이 시점에서 알고 있지 않는 것은 토크 값인 :math:` au_i` 뿐입니다. 이전 그림에서 두 개의 스프링과 두 개의 댐퍼가 있음을 알 수 있습니다.스프링의 경우 Hooke의 법칙을 사용하여 토크와 각변위 간의 관계를 다음과 같이 표현할 수 있습니다.
각 댐퍼에 대해 토크와 상대 각속도 간의 관계를 다음과 같이 표현합니다.
이러한 모든 관계를 함께 가져오면 다음 방정식 시스템을 얻습니다.
이제, 시스템에 다음과 같은 초기 조건도 있다고 가정해 보겠습니다.
이러한 초기 조건은 기본적으로 두 관성이 실제로 움직이지 않는 상태(즉, )에서 시스템이 시작되지만,두 스프링 사이의 값에서 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
모델을 있는 그대로 시뮬레이션하면 각도 위치와 속도에 대해 다음과 같은 해을 얻습니다.
그러나 시뮬레이션 시작 시 phi1_init
파라미터를 1 로 수정하면 다음과 같은 해을 얻을 수 있습니다.