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

모델리카 표준 라이브러리(Modelica Standard Library)

모델리카 표준 라이브러리(Modelica Standard Library)

모델리카에서 일반적으로 필요한 자료형, 모델, 기능 을 가져오고 단순히 참조하여 (반복하는 대신) 나중에 재사용할 수 있도록 하는것이 패키지의 장점입니다.그러나 사용자가 필요한 일반적인 기능을 각자 자체 패키지로 반복 해서 생성하는 경우에 대한 문제가 있습니다.이러한 이유로 모델리카 연합은 모델리카 표준 라이브러리(Modelica Standard Library)라는 패키지를 유지 관리합니다. 이 라이브러리에는 과학자와 엔지니어에게 일반적으로 유용한 정의가 포함되어 있습니다.

이 섹션에서는 독자가 이 라이브러리에서 무엇을 찾고 활용할 수 있는지 알 수 있도록, 모델리카 표준 라이브러리에 대한 개요를 설명 하겠습니다.전체를 둘러 보기위한 것이 아니고, 모델리카 표준 라이브러리가 지속적으로 업데이트되고 개선되기 때문에 라이브러리의 최신 버전이 반영되지 않을 수 있습니다.그러나 기본 사항을 다루고 유용한 정의를 찾는 방법에 대한 이해를 제공하기를 위해 살펴 보는 것 입니다.

상수(Constants)

모델리카 표준 라이브러리에는 몇 가지 일반적인 물리 및 기계 상수에 대한 정의가 포함되어 있습니다.상수 관련 라이브러리는 이 패키지의 소스 코드를 직접 여기에 표현할 수 있을 만큼 작은 규모 입니다.다음은 모델리카 표준 라이브러리 버전 3.2.2의 Modelica.Constants 패키지(몇 가지 외형적 변경 포함)를 나타냅니다.

within Modelica;
package Constants
  "Library of mathematical constants and constants of nature (e.g., pi, eps, R, sigma)"

  import SI = Modelica.SIunits;
  import NonSI = Modelica.SIunits.Conversions.NonSIunits;

  // Mathematical constants
  final constant Real e=Modelica.Math.exp(1.0);
  final constant Real pi=2*Modelica.Math.asin(1.0); // 3.14159265358979;
  final constant Real D2R=pi/180 "Degree to Radian";
  final constant Real R2D=180/pi "Radian to Degree";
  final constant Real gamma=0.57721566490153286060
    "see http://en.wikipedia.org/wiki/Euler_constant";

  // Machine dependent constants
  final constant Real eps=ModelicaServices.Machine.eps
    "Biggest number such that 1.0 + eps = 1.0";
  final constant Real small=ModelicaServices.Machine.small
    "Smallest number such that small and -small are representable on the machine";
  final constant Real inf=ModelicaServices.Machine.inf
    "Biggest Real number such that inf and -inf are representable on the machine";
  final constant Integer Integer_inf=ModelicaServices.Machine.Integer_inf
    "Biggest Integer number such that Integer_inf and -Integer_inf are representable on the machine";

  // Constants of nature
  // (name, value, description from http://physics.nist.gov/cuu/Constants/)
  final constant SI.Velocity c=299792458 "Speed of light in vacuum";
  final constant SI.Acceleration g_n=9.80665
    "Standard acceleration of gravity on earth";
  final constant Real G(final unit="m3/(kg.s2)") = 6.67408e-11
    "Newtonian constant of gravitation";
  final constant SI.FaradayConstant F = 9.648533289e4 "Faraday constant, C/mol";
  final constant Real h(final unit="J.s") = 6.626070040e-34 "Planck constant";
  final constant Real k(final unit="J/K") = 1.38064852e-23 "Boltzmann constant";
  final constant Real R(final unit="J/(mol.K)") = 8.3144598 "Molar gas constant";
  final constant Real sigma(final unit="W/(m2.K4)") = 5.670367e-8
    "Stefan-Boltzmann constant";
  final constant Real N_A(final unit="1/mol") = 6.022140857e23
    "Avogadro constant";
  final constant Real mue_0(final unit="N/A2") = 4*pi*1.e-7 "Magnetic constant";
  final constant Real epsilon_0(final unit="F/m") = 1/(mue_0*c*c)
    "Electric constant";
  final constant NonSI.Temperature_degC T_zero=-273.15
    "Absolute zero temperature";

Noteworthy definitions are those for pi, e, g_n and eps.

여기서 주목할 만한 정의는 pi, e, g_neps 에 대한 정의입니다.처음 두 pie 는 각각 pi e 를 나타내는 수학 상수입니다. 이러한 상수를 사용할 수 있으면 이러한 상수에 대한 고유한 숫자 값을 (비합리적으로) 사용자가 제공할 필요가 없을 뿐만 아니라,모델리카 표준 라이브러리에 정의된 버전을 사용하여 가능한 가장 높은 정밀도를 가진 값을 얻을 수 있습니다.

다음 상수인 g_n 은 지구상의 중력 상수를 나타내는 물리 상수입니다(위치 에너지와 같은 것을 계산하기 위한 것, 즉, m g h ).

마지막으로 eps 는 어떤 컴퓨팅 플랫폼이 사용되든 "작은 숫자"를 나타내는 기계 상수입니다.

SI 단위(SI Units)

앞에서 설명한 것처럼 단위를 사용하면, 구체적인 단위를 파라미터 및 변수와 연결하여 코드를 더 쉽게 이해할 수 있을 뿐만 아니라 모델리카 컴파일러에서 단위의 일관성 검사를 수행할 수도 있습니다. 이러한 이유로 가능할 때마다 물리적 자료형을 파라미터 및 변수와 연관시키는 것이 매우 유용합니다.

Modelica.SIunits 패키지는 드물게 사용하는 물리적 단위도 포함하여 매우 광범위하게 구성되어 있습니다. ISO 31-1992 사양을 완벽하게 준수하기 위해 많은 것을 내포하고 있습니다.다음은 SIunits 패키지에서 일반적인 물리 단위가 정의되는 방법의 예 입니다.

type Length = Real (final quantity="Length", final unit="m");
type Radius = Length(min=0);
...
type Velocity = Real (final quantity="Velocity", final unit="m/s");
type AngularVelocity = Real(final quantity="AngularVelocity",
                            final unit="rad/s");
...
type Mass = Real(quantity="Mass", final unit="kg", min=0);
type Density = Real(final quantity="Density", final unit="kg/m3",
                    displayUnit="g/cm3", min=0.0);
type MomentOfInertia = Real(final quantity="MomentOfInertia",
                            final unit="kg.m2");
...
type Pressure = Real(final quantity="Pressure", final unit="Pa",
                     displayUnit="bar");
...
type ThermodynamicTemperature = Real(
  final quantity="ThermodynamicTemperature",
  final unit="K",
  min = 0.0,
  start = 288.15,
  nominal = 300,
  displayUnit="degC")
"Absolute temperature (use type TemperatureDifference for relative temperatures)";
type Temperature = ThermodynamicTemperature;
type TemperatureDifference = Real(final quantity="ThermodynamicTemperature",
                                  final unit="K");

모델(Models)

"모델리카 표준 라이브러리" 내부에는 다양한 도메인별 라이브러리가 포함되어 있습니다. 이 섹션에서는 이러한 도메인에 대한 개요를 살펴보고, 각 모델의 구성 방식에 대해 설명합니다.

블록(Blocks)

모델리카 표준 라이브러리에는 인과 관계의 블록 다이어그램을 구축하기 위한 모델에 대한 모음이 포함되어 있습니다. 이 모델은 Modelica.Blocks 패키지에 있으며, 여기서 찾을 수 있는 구성 요소의 예제는 다음과 같습니다.:

  • 입력 커넥터(Real, IntegerBoolean)

  • 출력 커넥터(Real, IntegerBoolean)

  • 게인 블록, 합산 블록 , 외적(product) 블록

  • 적분 및 미분 블록

  • Deadband 및 히스테리시스 블록

  • 논리 및 관계 연산 블록

  • Mux 및 demux 블록

Blocks 패키지에는 신호에 대한 작업을 수행하기 위한 다양한 블록이 포함되어 있습니다.이러한 블록은 일반적으로 제어 시스템 및 전략의 기능을 설명하는 데 사용합니다.

전기요소(Electrical)

Modelica.Electrical 패키지에는 특별히 아날로그, 디지털 및 다상 전기 시스템과 관련된 모델과 기본 전기기기(electrical machines) 라이브러리도 포함합니다.이 라이브러리는 다음과 같은 구성 요소가 있습니다.:

  • 저항기, 커패시터, 인덕터

  • 전압 및 전류 액추에이터

  • 전압 및 전류 센서

  • 트랜지스터 및 기타 반도체 관련 모델

  • 다이오드 및 스위치

  • 논리 게이트

  • 스타 및 델타 연결(다상)

  • 동기 및 비동기 기계

  • 모터 모델(DC , 영구 자석, 기타)

  • Spice3 모델

기계(Mechanical)

Modelica.Mechanics 라이브러리에는 세 가지 주요 라이브러리가 포함되어 있습니다.

병진(Translational)

병진 라이브러리에는 1차원 변환 동작을 모델링하는 구성 요소 모델이 포함되어 있습니다. 이 라이브러리에는 다음과 같은 구성 요소가 포함되어 있습니다.

  • 스프링, 댐퍼 및 백래시

  • 질량

  • 센서 및 액추에이터

  • 마찰

회전(Rotational)

회전 라이브러리에는 1차원 회전 동작을 모델링하는 구성 요소 모델이 포함되어 있습니다. 이 라이브러리에는 다음과 같은 구성 요소가 포함되어 있습니다.

  • 스프링, 댐퍼 및 백래시

  • 관성

  • 클러치 및 브레이크

  • 기어

  • 센서 및 액추에이터

다물체(MultiBody)

다물체 라이브러리에는 3차원 기계 시스템을 모델링하는 구성 요소 모델이 포함되어 있습니다. 이 라이브러리에는 다음과 같은 구성 요소가 포함되어 있습니다.

  • 바디(관련 관성 텐서 및 3D CAD 형상 포함)

  • 조인트(예: 각기둥, 회전, 범용)

  • 센서 및 액추에이터

유체 및 물질(Fluids and Media)

모델리카 표준 라이브러리에는 유체 시스템 모델링과 관련된 두 가지 패키지가 있습니다.첫 번째는 다음과 같은 다양한 물질(media)에 대한 속성 모델 라이브러리인 Modelica.Media 입니다.

  • 이상 기체(NASA 글렌 계수 데이터 기준)

  • 공기(건조, 기준, 습윤)

  • 물(단순, 염, 2상)

  • 일반 비압축성 유체

  • R134a(테트라플루오로에탄) 냉

이러한 속성 모델은 다양한 순수 유체 및 혼합물에 대한 엔탈피, 밀도 및 비열비와 같은 유체 속성을 계산하는 기능을 제공합니다.

중간 모델 외에도 모델리카 표준 라이브러리에는 유체 장치를 표현하는 구성 요소 라이브러리인 Modelica.Fluid 라이브러리도 포함되어 있습니다.예를 들면 다음과 같습니다.

  • 체적, 탱크 및 접합부

  • 파이프

  • 펌프

  • 밸브

  • 압력 손실

  • 열 교환기

  • 소스 및 주변 조건

자성(Magnetics)

Modelica.Magnetic 라이브러리에는 두 개의 하위 패키지가 포함되어 있습니다. 첫 번째는 자기 구성 요소의 집중 네트워크 모델을 구성하는 데 사용하는 FluxTubes 패키지입니다.여기에는 센서 및 액추에이터뿐만 아니라 기본 원통형 및 프리즘 형상의 자기 특성을 나타내는 구성 요소가 포함됩니다. 다른 하나는 회전하는 전기 기계의 전기장을 모델링하는 데 사용하는 FundamentalWave 라이브러리입니다.

열(Thermal)

Modelica.Thermal 패키지에는 두 개의 하위 패키지가 있습니다.

열전달(HeatTransfer)

HeatTransfer 는 덩어리로된 고체의 열 전달을 모델링하기 위한 것입니다. 이 라이브러리의 모델은 다음과 같은 구성 요소를 사용하여 집중 열 네트워크 모델을 구축하는 데 사용할 수 있습니다.

  • 집중 열용량

  • 전도

  • 대류

  • 복사

  • 주변 조건

  • 센서

유체 열 흐름(FluidHeatFlow)

일반적으로 Modelica.FluidModelica.Media 라이브러리를 사용하여 복잡한 매체 및 여러 단계로 된 광범위한 문제를 처리할 수 있게 하기 위한 열 유체 시스템을 모델링합니다.그러나 특정 경우에 대한 간단한 문제의 경우 FluidHeatFlow 라이브러리를 사용하여 열 유체 시스템의 간단한 흐름 네트워크를 구축할 수 있습니다.

유틸리티(Utilities)

유틸리티 라이브러리는 다른 라이브러리 및 모델 개발자를 지원하기 위한 기능을 제공합니다.여기에는 모델링의 비수학적 측면을 처리하기 위한 여러 하위 패키지가 포함되어 있습니다.

Files

Modelica.Utilities.Files 라이브러리는 컴퓨터 파일 시스템에 액세스하고 조작하기 위한 기능을 제공합니다.다음 기능은 Files 패키지에서 제공합니다:

  • list - 파일 또는 디렉토리의 내용 나열

  • copy - 파일 또는 디렉토리 복사

  • move - 파일 또는 디렉토리 이동

  • remove - 파일 또는 디렉토리 제거

  • createDirectory - 디렉토리 생성

  • exist - 주어진 파일 또는 디렉토리가 이미 존재하는지 테스트

  • fullPathName - 명명된 파일 또는 디렉토리의 전체 경로 결정

  • splitPathName - 경로에서 파일 이름의 분리

  • temporaryFileName - 이미 존재하지 않는 임시 파일의 이름을 반환합니다.

  • loadResource - Convert a Modelica URL into an absolute file system path (for use with functions that don't accept Modelica URLs).

Streams

Streams 패키지는 터미널 또는 파일에서 데이터를 읽고 쓰는 데 사용합니다.여기에는 다음과 같은 기능이 포함됩니다.

  • print - 터미널이나 파일에 데이터를 씁니다.

  • readFile - 파일에서 데이터를 읽고 파일의 행을 나타내는 문자열 벡터를 반환합니다.

  • readLine - 파일에서 한 줄의 텍스트를 읽습니다.

  • countLines - 파일의 줄 수를 반환합니다.

  • error - 오류 메시지를 인쇄하는 데 사용합니다.

  • close - 파일을 닫습니다.

Strings

Strings 패키지에는 문자열에서 작동하는 함수가 포함되어 있습니다. 이 라이브러리의 일반적인 기능은 다음과 같습니다.

  • 문자열의 길이 찾기

  • 문자열 구성 및 추출

  • 문자열 비교

  • 문자열 구문 분석 및 검색

System

System 패키지는 기본 운영 체제와 상호 작용하는 데 사용합니다. 여기에는 다음과 같은 기능이 포함됩니다.

  • getWorkingDirectory - 현재 작업 디렉토리를 가져옵니다.

  • setWorkingDirectory - 현재 작업 디렉토리를 설정합니다.

  • getEnvironmentVariable - 환경 변수의 값을 가져옵니다.

  • setEnvironmentVariable - 환경 변수의 값을 설정합니다.

  • command - 실행할 운영 체제에 명령을 전달합니다.

  • exit - 실행을 종료합니다.