본문 바로가기
Autonomous Vehicle/Additional studies

모델리카를 이용한 모델링 및 시뮬레이션 1 [모델리카 기초]

by kim.jeff 2020. 11. 5.

 

모델리카는 Equation Based Language로서 식을 대입시켰을때 시뮬레이션 모델이 작동을 한다는 특징을 가진다.

예제들을 통해서 모델리카가 어떻게 작동하는지 알아보도록 하겠다.

1. 모델의 생성

model HelloWorld "A simple equation"
	Real x (start=1);
	parameter Real a = -1;
equation
	der (x) = a*x;
end HelloWorld;

model HelloWorld "A simple equation"

HelloWorld라는 모델을 생성한다. 따음표 안의 글은 설명문이다.


Real x (start=1); 

실수의 데이터 타입인 x라는 변수를 만들고 초기값은 1이다.


parameter Real a = -1;

모델의 특성을 좌우하는 상수인 실수 a 를 선언하고 -1 의 값을 대입한다.


equation

식에 관한 선언을 한다.

 

der (x) = a*x;

모델의 식은 d(x)/dt = ax 식의 형태를 가진다.


end HelloWorld;

모델 HelloWorld의 선언을 마친다.

 

※ 연립방정식을 풀때 변수의 개수와 식의 개수가 같거나 식의 개수가 더 많아야 하듯 본 프로그램에서도 식과 변수의 개수가 같아야 한다. 

 

2. 기본적인 모델리카 변수의 종류

 

Booleann : true or false

Integer : 정수형

Real : 실수형

String : 문자열

Enumeration : ShirtSize.Medium 과 같이 논리적으로 보이게 하는 변수형 (순서를 나타내는 변수)

 

constant Real 		PI=3.141592653589793;
constant String 	redcolor = "red";
constant Integer 	one = 1;
parameter Real 		mass = 22.5;

 

parameter 값은 변경이 가능한 변수이지만, constant 의 경우엔 변경이 가능하지 않은 상수이다. parameter값은 시뮬레이션 중에는 변경되지 않는다.

 

3. 간단한 로켓 모델의 생성

 

한 로켓이 가속한다고 가정할 때, 

thrust : 추진력 (위로 올라가는 힘)

mg : 중력에 의해 당기는 힘

mass' : 시간에 따른 질량의 소모량 (질량을 얼마나 많이 배출했는가에 따른 힘)

massLossRate : 시간에 따른 분출량

altitude' = 시간에 따른 위치 변화량 (속도)

velocity' = 시간에 따른 속도 변화량 (가속도) 

class Rocket "rocket class"
	parameter String name;
    Real mass(start=1038.358);
    Real altitude(start = 59404);
    Real velocity(start = -2003);
    Real acceleration;
    Real thrust;
    Real gravity;
    parameter Real massLossRate = 0.00277;
    
equation
	(thrust-mass*gravity)/mass = acceleration;
    der(mass)	= - massLossRate * abs(thrust);
    der(velocity) = acceleration;
end Rocket;

 

4. 모델리카의 Functions 의 사용

function sum
	input Real arg1;
    input Real arg2;
    output Real result;
algorithm
	result := arg1+arg2;
end sum;

function sum

sum이라는 function 을 생성한다.

 

input Real arg1;
input Real arg2;
output Real result;

2개의 입력 변수와 1개의 출력 변수 하나를 선언한다.

 

result := arg1+arg2;

arg1+arg2 의 결과를 result에 대입한다.

 

일반적인 프로그래밍 언어에서의 equal은 대입의 형식인데, 모델리카의 equal은 대입이 아닌 식 자체의 equal 이고 기호는 = 를 사용한다. 대입의 경우 :=의 기호를 사용한다.

 

5. For 문이 들어간 Function

 

 

for i in 1:size(A,1) loop

   sum := sum + A[i]*xpower;

   xpower := xpower*x;

endfor;

 

6. 이벤트

6.1 If 문

if <condition>then

   <equations>

elseif <condition>then

   <equations>

end if;

 

6.2 When 문

when <conditions> then

   <equations>

end when;

 

6.3 반복 이벤트 생성 Sample( t0, d)

t0 : 시작시간

d : 반복 시간 간격

model SamplingClock
	Integer i;
    discrete Real r;
equation
	when sample(2,0.5) then
    i = pre(i) + 1;
    r = pre(r) + 0.3;
    end when;
end SamplingClock;

sample (t0 ,d) 이라는 콜은 true를 리턴하고 시간이 t0 + i*d 일때 이벤트를 실행시킨다. 

 

7. 비연속적인 변화들 Reinit

 

reinit 기능을 통해서 탄성계수 c를 이용한 속도의 감소를 적용하여 다시 공을 튀기는 방식의 시뮬레이션 모델을 생성하였다.