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

패키지 내용 참조(Referencing Package Contents)

패키지 내용 참조(Referencing Package Contents)

이제 컨텐츠 구성(Organizing Content) 을 다루었으므로 다양한 패키지에서 해당 콘텐츠에 액세스하는 방법에 대해 설명하겠습니다.다음 예를 살펴보겠습니다.

within ModelicaByExample.PackageExamples;
model RLC "An RLC circuit referencing types from the Modelica Standard Library"
  parameter Modelica.SIunits.Voltage Vb=24 "Battery voltage";
  parameter Modelica.SIunits.Inductance L = 1;
  parameter Modelica.SIunits.Resistance R = 100;
  parameter Modelica.SIunits.Capacitance C = 1e-3;
  Modelica.SIunits.Voltage V(fixed=true, start=0);
  Modelica.SIunits.Current i_L(fixed=true, start=0);
  Modelica.SIunits.Current i_R;
  Modelica.SIunits.Current i_C;
equation
  i_R = V/R;
  i_C = C*der(V);
  i_L=i_R+i_C;
  L*der(i_L) = (Vb-V);
end RLC;

이전 섹션에서 배웠듯이 첫 번째 줄은

within ModelicaByExample.PackageExamples;

RLC 모델이 ModelicaByExample.PackageExamples 패키지에 포함되어 있음을 알려줍니다.이전 예제와 마찬가지로 모델에서 자료형을 직접 정의하지 않도록 Modelica package 시스템을 사용할 것입니다. 이런 식으로 하나의 패키지에서 자료형을 한 번 정의한 다음 간단히 참조하여 여러 곳에서 재사용할 수 있습니다.

이 장의 이전 예제와 달리 이 예제에서는 어떤 자료형도 정의하지 않는 대신, 모델리카 표준 라이브러리(Modelica Standard Library) 에 정의되어 있는 자료형을 사용 해보겠습니다. 모델리카 표준 라이브러리(Modelica Standard Library) 에는 많은 유용한 자료형, 모델, 상수 등이 포함되어 있습니다. 이 예제에서는 그 중 몇 가지만 활용하겠습니다.이러한 자료형은 자료형 이름에 Modelica. 로 시작하기 때문에 쉽게 알아볼 수 있습니다.

이 장의 뒷부분에서 룩업 규칙(Lookup Rules) 를 자세히 살펴 볼 예정이므로,지금은 Modelica. 로 시작하는 모든 자료형이 Modelica 패키지 내에 존재한다고 말하는 것으로 충분합니다.이 경우 모든 자료형은 Modelica.SIunits 로 시작합니다. SIunitsModelica 패키지 내의 ISO 표준 수량 및 단위를 준수하는 자료형 정의를 목적을 가진 패키지 입니다.

예제 코드에서 볼 수 있듯이 이러한 자료형은 "정규화된 이름"으로 참조됩니다.즉, 자료형 이름은 최상위 패키지(다른 패키지에 포함되지 않은 패키지)의 이름으로 시작합니다. 이름의 각 . 는 새로운 하위 패키지를 나타내며, 시퀀스의 마지막 이름은 참조되는 실제 자료형을 식별해주게 됩니다.

이 경우 Modelica.SIunits 패키지 내에서 Voltage, Inductance, Resistance, CapacitanceCurrent 의 5가지 자료형을 사용하고 있습니다. 이러한 자료형은 각 자료형의 단위에 대한 정보, 자료형의 값에 대한 제한 (예:, 커패시턴스가 0보다 작을 수 없음) 을 제공하며, 다음과 같이 모델리카 표준 라이브러리(Modelica Standard Library) 에 정의되어 있습니다.

// Base Definitions
type ElectricPotential = Real(final quantity="ElectricPotential",
                              final unit="V");
type ElectricCurrent = Real(final quantity="ElectricCurrent",
                            final unit="A");

// The types referenced in our example
type Voltage = ElectricPotential;
type Inductance = Real(final quantity="Inductance",
                       final unit="H");
type Resistance = Real(final quantity="Resistance",
                       final unit="Ohm");
type Capacitance = Real(final quantity="Capacitance",
                        final unit="F", min=0);
type Current = ElectricCurrent;

미리 정의된 자료형을 변수와 연결하면 문서화 하는 것에 대한 장점 뿐만 아니라 즉각적인 이점 생깁니다. 방정식의 단위 일관성 검사하는 것이 가능하게 하기 때문입니다.예를 들어, 이 예제에서 다음 방정식을 살펴 보겠습니다.

i_R = V/R;

이것은 옴의 법칙에 대한 수식인데, 실수를 해서 다음과 같이 썼다면 어떻게 될까요?

i_R = V*R;

이 방정식은 구문적으로 완벽하게 적법합니다. 또한 변수 i_R, VR 이 모두 Real 자료형으로 선언된 경우 이 방정식에 문제가 없습니다. 그러나 (자료형 정의에서) 이러한 변수가 각각 전류, 전압 및 저항을 나타낸다는 것을 알고 있기 때문에,모델리카 컴파일러는 (이전에 표시된 정의를 사용하여 완전히 자동으로) 왼쪽과 오른쪽이 이 방정식의 물리적 단위와 관련하여 일치하지 않다는 것을 알아냅니다. 즉, 물리적 자료형을 변수와 연결하여 모델링 오류를 자동으로 감지할 수 있습니다.