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

수정(Modifications)

수정(Modifications)

이전에는 변수에 적용된 수정의 예를 보았으며, 경우에 따라 이러한 속성(Attributes) 사항은 내장 자료형의 속성에도 적용됩니다. 를 들어서 아래와 같은 경우를 보겠습니다.

Real x(start=2, min=1);

다른 경우에는 특정 인스턴스에 대한 파라미터 값을 변경하기 위해 model 인스턴스에 적용했습니다.

StepVoltage Vs(V0=0, Vf=24, stepTime=0.5);

그러나 그러한 수정이 단순히 한 수준보다 더 깊은 계층 구조에 도달할 수 있다는 점도 지적할 가치가 있습니다.예를 들어 StepVoltage 구성 요소와 관련된 이전 예제를 다루어 보겠습니다.다음과 같이 StepVoltage 모델의 Vs 인스턴스에 있는 Vf 파라미터와 관련된 min 속성을 수정할 수도 있습니다.

StepVoltage Vs(V0=0, Vf(min=0), stepTime=0.5);

하지만 Vf 파라미터의 속성을 변경하고 값을 주고 싶다면 어떻게 해야 할까요?이러한 수정 구문은 다음과 같습니다.

StepVoltage Vs(V0=0, Vf(min=0)=24, stepTime=0.5);

수정과 관련하여 논의할 가치가 있는 중요한 경우는 구성 요소의 배열 에서 수정이 수행되는 방식입니다. 다음과 같이 선언된 StepVoltage 구성 요소의 배열이 있다고 상상해 보십시오.

StepVoltage Vs[5];

구성요소의 배열(Arrays of Component) 에서 보았듯이 이것은 합법적인 모델리카일 뿐만 아니라 하위 시스템 내의 구성 요소 모음을 나타내는 데 유용할 수 있습니다.파라미터 Vf 에 값을 주고 싶다면 두 가지 선택이 있습니다. 를 들면 아래와 같습니다.

StepVoltage Vs[5](Vf={24,26,28,30,32});

이것은 {24,26,28,30,32} 벡터의 값을 Vs[1].Vf, Vs[2].Vf, Vs[3].Vf, Vs[4].VfVs[5].Vf 에 할당합니다. 또 다른 방법은 배열의 모든 요소에 동일한 값을 제공하는 것입니다. 이와 동일한 배열 초기화 구문을 사용할 수 있습니다. 를 들면 아래와 같습니다.

StepVoltage Vs[5](Vf={24,24,24,24,24});

배열의 요소 수가 parameter 로 정의될 때 문제가 발생합니다.

parameter Integer n;
StepVoltage Vs[n](Vf=/* ??? */);

리터럴 배열(예: {24,24,24})로 Vf 를 초기화하려고 하면 n 의 변경 사항에 적응하지 않습니다. 이 상황을 해결하기 위해 fill 함수를 사용할 수 있습니다.

parameter Integer n;
StepVoltage Vs[n](Vf=fill(24, n));

이것은 수용 가능한 해입니다.그러나, Vf 의 값과 Vf 내부의 min 속성을 모두 수정하고 싶다고 상상해 보십시오.그런경우, 다음과 같이 끝낼 수 있습니다.

parameter Integer n;
StepVoltage Vs[n](Vf(min=fill(0,n))=fill(24, n));

중첩 수정을 사용하면 이런 종류의 작업이 매우 복잡해질 수 있습니다. 다행스럽게도 모델리카에는 이러한 상황을 처리하는 기능이 포함되어 있습니다.수정 앞에 each 키워드를 배치하면 해당 수정이 모든 인스턴스에 적용됩니다.

parameter Integer n;
StepVoltage Vs[n](each Vf(min=0)=24);

수정은 계층 구조를 통해 파라미터 값을 수정할 수 있기 때문에 모델링의 필수 부분이라고 볼 수 있습니다. 이 섹션의 예제에서 볼 수 있듯이 모델리카는 계층 구조에 대한 수정 사항을 간단하고 강력하게 적용할 수 있는 많은 기능을 제공합니다.