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

전기분야 예제(An Electrical Example)

전기분야 예제(An Electrical Example)

이제 엔지니어링 컨텍스트로 돌아가 보겠습니다. 전기 시스템에 더 익숙한 독자를 위해 다음 회로를 살펴 보겠습니다.

Low-Pass RLC Filter

Low-Pass RLC Filter

V , i_L , i_R i_C 에 대해 풀고 싶다고 가정합니다.각 전류 i_L`, i_R` 및 i_C`의 각 전류를 풀기 위해 각각 인덕터, 저항 및 커패시터와관련된 방정식을 사용할 수 있습니다.

V = i_R R
C \frac{\mathrm{d}V}{\mathrm{d}t} = i_C
L \frac{\mathrm{d}i_L}{\mathrm{d}t} = (V_b-V)

여기서 V_b 는 배터리 전압입니다.

방정식은 3개뿐이지만 변수는 4개이므로 하나의 추가 방정식이 필요합니다. 그 추가 방정식은 Kirchoff의 전류 법칙(current law)이 될 것입니다.

i_L = i_R+i_C

이 문제에 대한 방정식과 변수를 결정했으므로, 지금은 방정식을 모델리카로 직접 변환하여 기본 모델(물리적 자료형 포함)을 생성 하겠습니다. 이후 섹션인 전기 구성요소(Electrical Components) 에서 Low-Pass RLC Filter 와 동일한 회로 모델을 드래그, 드롭 및 연결하여 생성하는 방법을 보여줄 예정입니다.

그러나, 지금은 단순히 변수와 방정식으로 구성된 모델을 구현을 먼저 해보겠습니다.직접 작성하는 모델은 다음과 같이 구성 할 수 있습니다.

model RLC1 "A resistor-inductor-capacitor circuit model"
  type Voltage=Real(unit="V");
  type Current=Real(unit="A");
  type Resistance=Real(unit="Ohm");
  type Capacitance=Real(unit="F");
  type Inductance=Real(unit="H");
  parameter Voltage Vb=24 "Battery voltage";
  parameter Inductance L = 1;
  parameter Resistance R = 100;
  parameter Capacitance C = 1e-3;
  Voltage V;
  Current i_L;
  Current i_R;
  Current i_C;
equation
  V = i_R*R;
  C*der(V) = i_C;
  L*der(i_L) = (Vb-V);
  i_L=i_R+i_C;
end RLC1;

이 예를 조금씩 살펴보고 다양한 구문의 의미를 보강하겠습니다.우선 구문의 상단부터 시작하겠습니다.

model RLC1 "A resistor-inductor-capacitor circuit model"

여기에서 모델 이름이 RLC1 임을 알 수 있습니다. 또한 이 모델에 대한 설명은 "저항-인덕터-커패시터 회로 모델" 이라는 설명이 포함되어 있습니다. 다음으로 필요한 몇 가지 물리적 자료형을 소개 하겠습니다.

  type Voltage=Real(unit="V");
  type Current=Real(unit="A");
  type Resistance=Real(unit="Ohm");
  type Capacitance=Real(unit="F");
  type Inductance=Real(unit="H");

예시에서 보이는 각각의 코드 한줄 한줄은 특정 물리적 단위와 연결하여 내장된 real 형태의 특별히 정의된 물리적 자료형으로 선언되어 있습니다. 그런 다음 문제에서 모든 parameter 변수를 선언합니다.

  parameter Voltage Vb=24 "Battery voltage";
  parameter Inductance L = 1;
  parameter Resistance R = 100;
  parameter Capacitance C = 1e-3;

앞서 보인, parameter 변수는 다양한 물리적 특성(이 경우 각각 전압, 인덕턴스, 저항 및 정전 용량)을 나타냅니다. 마지막에 정의한 변수는 해결하고자 하는 변수입니다. 아래와 같습니다.

  Voltage V;
  Current i_L;
  Current i_R;
  Current i_C;

이제 모든 변수가 선언되었으므로, 이 모델에 대한 해을 생성할 때 사용할 방정식을 지정하는 equation 섹션을 추가합니다.

equation
  V = i_R*R;
  C*der(V) = i_C;
  L*der(i_L) = (Vb-V);
  i_L=i_R+i_C;

마지막으로 model 이름(i.e., 이 경우 RLC1 )을 포함하는 end 문을 생성하여 모델을 닫습니다.

end RLC1;

이 예제가 이전 예제와 구별되는 한 가지는 더 많은 방정식이 포함되어 있다는 사실입니다. NewtonCooling 예제와 마찬가지로 왼쪽과 오른쪽 모두에 표현식이 있는 방정식이 있습니다. 또한 미분 방정식(변수의 도함수를 포함하는 방정식)과 단순한 대수 방정식인 다른 방정식이 혼합되어 있습니다.

이러한 특성은 모델리카에서 방정식 시스템을 일부 모델링 환경에서 요구되는 소위 "explicit state-space form - 명시적 상태-공간 형식"에 넣을 필요가 없다는 점을 더욱 강조해서 보여줍니다. 물론 방정식을 다음과 같이 보다 명확한 형식으로 재정렬할 수 있습니다.

  der(V) = i_C/C;
  der(i_L) = (Vb-V)/L;
  i_R = i_L-i_C;
  V = i_R*R;

그러나 중요한 점은 모델리카를 사용하면 이러한 조작을 수행할 필요가 없다는 것입니다.이렇게 조작해서 표현하느 대신, 선택한 어떤 형식으로든 방정식을 자유롭게 작성할 수 있습니다.

사실 궁극적으로는 이러한 방정식이 명시적 상태 공간 형식과 같은 형태로 조작되어야 할 것입니다. 그러나 이러한 조작이 필요한 경우 이러한 조작을 수행하는 것은 모델 개발자가 아닌 모델리카 컴파일러의 역할입니다. 이렇게 하면 모델 개발자가 이 지루하고 시간 소모적이며 오류가 발생하기 쉬운 작업을 처리할 필요가 없습니다.

방정식을 "textbook form - 교과서와 같은 형식"으로 유지할 수 있도록 하는 기능은 중요합니다. 이후 섹션에서 볼 수 있듯이 이러한 방정식이 구성 요소 모델에서 개별적으로 "captured - 수집된" 형태가 되기를 원하기 때문입니다. 이러한 경우 각 방정식을 해결하는 데 사용할 변수가 정확히 무엇인지 (구성 요소 모델을 생성할 때) 알 필요가 없습니다. 이러한 조작을 모델리카 컴파일러의 책임으로 만들면 모델 개발이 더 빠르고 쉬워질 뿐만 아니라 모델의 재사용 가능성 이 크게 향상됩니다.

다음 그림은 RLC1 모델의 동적 응답을 보여줍니다.

/static/_images/RLC1.svg