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

주석(Annotations)

주석(Annotations)

annotation 을 사용하여 시뮬레이션 시작 및 중지 시간에 대한 정보를 포함한 실험 조건에 대한 내용을 추가할 수 있습니다. annotation 은 모델의 동작과 관련되지 않은 정보를 포함하는 방법입니다. 실험 조건의 경우에는 특정 모델을 시뮬레이션하는 방법에 대한 정보를 추가 하는 용도로 사용하긴 했지만, 주석은 모델에 대한 모든 종류의 추가 정보를 제공하기 위해 모델리카에서 광범위하게 사용합니다. 예를 들어 책의 뒷부분에서 볼 수 있듯이 주석은 구성 요소 및 커넥터의 그래픽 모양을 설명하는 데 사용합니다. 지금은 주석이 모델리카의 다른 요소에 "연결"될 수 있는 동작 이외로 추가되는 데이터라고 이해하고 다음으로 넘어가는 것이 좋겠습니다.

이 섹션에서는 먼저 모델리카 모델에서 annotation 이 나타날 수 있는 위치를 다룰 것입니다. 다음으로 주석의 내용을 설명하기 위해 레코드 정의(Record Definitions) 를 사용하는 방법을 설명합니다. 마지막으로 모델리카 사양의 일부로 포함된 많은 "표준" 주석 중 몇 가지를 설명합니다.

주석 위치(Annotation Locations)

주석은 모델리카의 다양한 위치에 나타날 수 있습니다. 각 잠재적 위치에 대해 논의하고 각 경우에 대한 구문을 살펴 보겠습니다.

선언 주석(Declaration Annotations)

선언 주석은 선언의 끝 부분에서 ; 바로 앞에 옵니다.다음은 주석을 포함하는 간단한 선언입니다.

parameter Real length "Rod length" annotation ...

annotation 은 설명 문자열 뒤와 ; 앞에 옵니다. 또한 ... 는 곧 설명할 주석 데이터(Annotation Data) 에 대한 자리 표시자일 뿐입니다.

상태와 방정식 주석(Statement and Equation Annotations)

주석을 방정식과 연결할 수도 있습니다.예를 들면 다음과 같습니다.

T = T0 "Specify initial value for T" annotation ...

선언 과 같이 방정식에서 주석 은 항상 맨 끝에 있고 ; 바로 앞에 옵니다.

상속의 주석(Inheritance Annotations)

extends 키워드는 변경(Modifications)반복 피하기(Avoiding Repetition) 에 대해 이야기할 때 간략하게 논의했습니다. 다음과 같이 주석extends 절과 연관시킬 수 있습니다.

extends QuiescentModelWithInheritance(gamma=0.3, delta=0.01) annotation ...

앞의 각 경우에서 관찰한 것처럼 주석; 바로 앞에 옵니다.

모델 주석(Model Annotations)

모델 주석은 주석 데이터를 모델 정의 자체와 직접 연결합니다. 이것은 정확히 실험 조건(Experimental Conditions) 를 설명할 때 보았던 종류의 주석과 같습니다.

model FirstOrderExperiment "Defining experimental conditions"
  Real x "State variable";
initial equation
  x = 2 "Used before simulation to compute initial values";
equation
  der(x) = 1-x "Drives value of x toward 1.0";
  annotation ...
end FirstOrderExperiment;

앞서 설명한 모든 이전 주석 위치와 달리 이 주석은 실제로 어떤 것에 "연결"되지 않는다는 점에 집중해야 합니다. 이는 모델 자체에 주석을 달고 있음을 나타냅니다.

주석 데이터(Annotation Data)

일반적 문법(General Syntax)

주석의 구문은 변경(Modifications) 에 사용하는 것과 동일한 구문입니다. 이것은 주석이 변수에 대한 값의 변경을 포함한다는 것을 의미합니다. 예를 들면 아래와 같습니다.

annotation ...

또는 주석의 변수 내부 변수 에 대한 수정을 포함 할 수 있습니다. 이에 대해 예를 들어 보겠습니다.

annotation ...

사용자 주석(User Annotations)

주석은 모델 개발자가 대상 모델에 임의의 데이터 를 첨부할 수 있도록 설계되었습니다. 예를 들어 사용자가 부품 번호를 지정된 모델 정의와 연결하려는 경우, 다음과 같은 모델 주석을 도입할 수 있습니다.

annotation ...

주석 데이터의 일반적인 원칙은 시뮬레이션 소프트웨어가 모델에서 읽는 경우 다시 쓸 때 주석 정보를 보존해야 한다는 것입니다. 시뮬레이션 소프트웨어는 데이터를 이해할 필요가 없으며 일반적으로 그럴 필요도 없습니다. 그러나 데이터는 보존되어야 합니다.

다중 주석(Multiple Annotations)

사용자가 부품 번호와 실험 주석을 모두 지정하려고 한다고 상상해 보십시오.그러면 다음과 같은 주석으로 끝날 수 있습니다.

annotation ...

이렇게 두 가지 정보가 나란히 존재할 수 있는 방법이 있다는 점을 기억 해야합니다. 주석에 대해서 개념적으로 생각하는 방법 중 하나가 다음과 같이 트리로 시각화하는 방법입니다.

  • PartNumber="FF78-E4B879"

  • experiment

    • StartTime=0

    • StopTime=8

네임스페이스(namespaces)

주석의 또 다른 내용 중에서 이름이 다른 경우에는 둘 이상이 될 수 있다는 원칙을 소개 하려고 합니다. 이러한 이유로 이름을 선택하는 것은 매우 중요하며, 다른 이름과 잠재적인 충돌을 피하기 위해 신중히 선택해야 합니다.예를 들어, 부품 번호를 포함하는 더 나은 접근 방법은 아래 예: 와 같이 회사 또는 응용 프로그램에 고유할 가능성이 더 높은 변수에 부품 번호를 포함하여 선언한느 것 입니다.

annotation ...

이 경우 xogenyindustries 변수를 사용하여 특정 조직이나 목적을 위한 "네임스페이스"를 만들 수 있습니다. 다른 조직이 와서 다른 부품 번호를 동일한 모델과 연관시키려는 경우 주석에 별도의 계층 구조를 설정하여 이를 수행할 수 있습니다. 이에 대해서 예를 들면 아래와 같습니다.

annotation ...

경우에 따라 모델리카 시뮬레이션 소프트웨어 공급업체는 고유한 특수 주석을 포함합니다.(예: 모델리카 표준 라이브러리의 경우)규칙에 따라 시뮬레이션 프로그램 공급업체는 두 개의 밑줄이 접두사로 붙은 이름을 사용합니다. 예:

annotation ...

해석(interpretation)

주석 데이터는 임의적임을 기억 해야 합니다. 이를 통해 임의의 데이터를 모델과 연결할 수 있습니다. 하지만, 해당 데이터의 의미 는 일반적으로 모델리카 사양(specification)에 정의되어 있지 않습니다. 곧 알게 되겠지만 몇 가지 "표준" 주석(이 책 전체에 걸쳐 설명됨)이 있으며 사양에 문서화되어 있습니다. 그러나 사용자가 표준 주석 이외의 주석을 추가할 때 주석 데이터를 추출하고 해석할 수 있는 방법(일부 모델리카 시뮬레이션 소프트웨어, 컴파일러 또는 기타 모델리카 인식 기술 사용)이 있다고 가정합니다.

결론은 (비표준) 주석 데이터를 모델에 주입할 수 있지만 시뮬레이션 소프트웨어는 주석 데이터를 해석하지 않고 보존하는 데만 사용한다는 것 입니다.

문서화(documentation)

모델리카 주석은 마치 레코드 정의(Record Definitions) 에 표현되어 있는 것처럼 문서화하는 것은 매우 일반적입니다.다음 항목에서 이 와 같은 기술의 몇 가지 예를 볼 수 있습니다.이 접근 방식을 사용하여 주석 데이터를 문서화하는 것이 좋습니다. 사실, 이 기술은 매우 대중적이고 유용해서, 미래에는 그것을 실제로 언어 자체의 일부로 만들려는 제안이 있습니다.

주석 소개(introductory annotations)

이 섹션에서는 모델리카의 "표준 주석" 중 일부만 소개합니다.이전에 논의한 바와 같이 주석은 일반적으로 시뮬레이션 소프트웨어에서 어느 시점에서 해석되면서도 보존되는 임의의 데이터를 포함하도록 허용됩니다.표준 주석의 구문과 의미는 모델리카 사양에 설명되어 있으므로 모델리카 시뮬레이션 소프트웨어에서 일관되고 보편적으로 해석할 수 있습니다.

record 정의에서 표준 주석을 설명하는 (가능한) 규칙을 따를 것입니다. 이러한 record 정의는 공식적으로 존재하지 않으며, 단순히 주석에 포함된 데이터를 표현하는 간결한 방법입니다.

문서화(documentation)

유형: 모델 주석

모델리카의 documentation 주석을 사용하면 원시 텍스트 또는 html을 문서로 모델과 연결할 수 있습니다.이 설명 문서는 두 가지 요소로 구성되어 있습니다. 첫 번째는 모델에 대한 정보이고 두 번째는 개정 이력 정보입니다. documentation 주석의 구조는 다음 레코드 정의로 설명됩니다.

record Documentation
  String info "Documentation in text or HTML format";
  String revision "Revision information in text or HTML format";
end Documentation;

주석 안에 html을 삽입할 때 html 코드는 <html> 태그로 둘러싸여야 합니다. 예를 들면 아래와 같습니다.

model MyWidget
  // ... declarations
  annotation ...
  // .. equations
end MyWidget;

여기서 MyWidget 모델에는 HTML 문서가 포함되어 있습니다. 문서는 <html> 태그 로 둘러싸여 있으며 속성을 정의하는 데 사용하는 모든 따옴표는 info **문자열이 실수로 종료되는 것을 방지하기 위해 따옴표(")**로 이스케이프 처리됩니다.

experiment

유형: 모델 주석

experiment 주석은 주어진 모델을 시뮬레이션하는 방법에 대한 정보를 지정하는 데 사용합니다.주석 데이터는 다음과 같이 record 형식으로 나타낼 수 있습니다.

record experiment
  Real StartTime "Time at which the simulation should start";
  Real StopTime "Time at which the simulation should stop";
  Real Interval(min=0) "Time interval between results";
  Real Tolerance(min=0) "Solver tolerance to use";
end experiment;

해석(Evaluate)

유형: 선언 주석(파라미터에 적용됨)

Evaluate 주석은 주어진 parameter 값이 컴파일 시간에 constant 로 변환될 수 있음을 모델리카 컴파일러에 나타냅니다. 즉, 사용자가 한 시뮬레이션에서 다음 시뮬레이션으로 parameter 값을 변경할 필요가 없음을 나타냅니다.

이러한 주석이 존재하는 이유는 모델리카 컴파일러가 모델 컴파일 중에 다른 방법으로는 할 수 없는 parameter 에 대한 많은 것을 가정할 수 있도록 허용하기 때문입니다. 이러한 가정은 파라미터가 값의 범위를 가질 수 있는 일반적인 경우보다, 기본 방정식 시스템을 더 쉽게 풀 수 있는 방식으로 방정식 시스템을 제한할 수 있습니다.

Evaluate 주석은 단순히 Boolean 변수(parameter 값이 constant 로 변환될 수 있음을 나타내는 true )입니다. 주석에서 다음과 같이 사용합니다.

parameter Real x annotation ...

결과 은닉(HideResult)

Type: Declaration Annotation

HideResult 주석은 주어진 변수에 대한 해석 결과가 분석하는 사람에게 관심이 없는 값임을 나타내는 데 사용합니다. HideResult 값을 true 로 설정함으로써 모델 개발자는 생성된 시뮬레이션 결과에 주석이 달린 변수를 저장할 필요가 없음을 모델리카 컴파일러에 설정할 수 있습니다. 이렇게 하면 다시 볼 필요가 없는 데이터에 대한 쓰기 동작을 하지 않기 때문에 시뮬레이션 시간과 디스크 공간을 모두 절약할 수 있습니다.

HideResult 주석은 다음과 같이 사용됩니다:

Real z "Uninteresting variable" annotation ...