본문

OMNeT++ : 매개변수(Parameter) 설정하기

Parameter(이하 매개변수)는 모듈에 속하는 변수이다. 매개변수는 토폴로지를 구성(노드의 수 등을 구성)하는데 사용되며 simple 모듈/채널을 구현하는 c++ 코드에 입력을 지원하기 위해 사용된다. 매개변수의 type는 double, int, bool, string, xml이 될 수 있으며 또한 volatile로 선언될 수 있다.(이로서 매개변수에 접근할 때마다 값이 평가된다-값이 고정되지 않을 떄 유용하다) 


수량(numeric)적  type에 대해서는 @unit 특성을 사용하여 안정성을 높일 수 있다. 예를 들어 @unit(s)의 경우 milliseconds, nanoseconds, minutes, hours등을 수용하며,  @unit(byte)의 경우 kilobytes, megabytes 등을 수용한다. 매개변수는 NED 파일 혹은 omnetpp.ini 파일로부터 값이 지정될 수 있다. default 값은 default(...)을 사용하여 설정될 된다. 아래 예제는 5개의 매개변수를 갖는 simple 모듈이며, 이들중 3개는 default 값을 가진다. 


simple App{

     parameters:

          string protocol; // protocol to use: "UDP" / "IP" / "ICMP" / ...

          int destAddress; // destination address

          volatile double sendInterval @unit(s) = default(exponential(1s));// time between generating packets

          volatile int packetLength @unit(byte) = default(100B);// length of one packet

          volatile int timeToLive = default(32);// maximum number of network hops to survive

     gates:

          input in; output out;

}


* 값 지정하기

매개변수는 NED파일, omnetpp.ini, 혹은 사용자로부터 직접 값이 지정될 수 있다. []내에 * 혹은 ..을 사용하여 인덱스 범위를 지정해줄 수 있다. 또한 *를 사용하여 '.'을 포함하지 않는 모든 문자열에 해당되도록 할 수 있고, ..을 사용하여 자연수 범위내의 숫자에 해당하는 문자열에 해당되도록 할 수 있다.

network Network{

     parameters:

          host[*].ping.timeToLive = default(3);

          host[0..49].ping.destAddress = default(50);

          host[50..].ping.destAddress = default(0);


          host*.ping.timeToLive = default(3);

          host{0..49}.ping.destAddress = default(50);

          host{50..}.ping.destAddress = default(0);


     submodules:

          host[100]: Host;

          host0: Host; host1: Host; host2: Host;  ... host99: Host;

}


만약 **을 사용한다면, 이는 .을 포함하는 모든 문자열에 해당하며, 이로서 다양한 경로를 갖는 요소들에 매개변수를 적용시킬 수 있다. 참고할 사항으로서, 이 방식으로 다른 경로에서 지정한 매개변수가 변경될 수 있다는 것이다.(default) 


network Network{

     parameters:

          **.timeToLive = default(3);

          **.destAddress = default(0);

     submodules:

          host0: Host; host1: Host; ...

}


NED 파일에서 값이 지정되지 않은 경우, omnetpp.ini파일에서 값을 설정해줄 수 있다. omnetpp.ini파일에서 매개변수를 설정하는 것은 NED 에서 하던것과 크게 다르지 않다. 


Network.host[*].ping.sendInterval = 500ms # for the host[100] example

Network.host*.ping.sendInterval = 500ms # for the host0,host1,... example

**.sendInterval = 500ms


만약 NED파일이나 ini파일에 값이 지정되지 않은 경우, default값이 암시적으로 적용될 것이다. 만약 default값 마저 없는 경우, 사용자에게 어떤 값을 사용할 것인가에 대해 요구할 것이다. 따라서, default값을 사용할 것인가 혹은 사용자 응답을 요구할 것인가에 대해 다음과 같이 명시하는 것이 좋다.

**.sendInterval = default

**.sendInterval = ask


매개변수를 NED에서 설정할 것인가 혹은 ini파일내에서 설정할 것인가에 대해 생각해 볼 필요가 있다. ini파일내에 설정하는 것은 모델과 실험을 확실하게 분리시켜 준다. NED파일은 모델의 일부분이고 따라서 constant의 사용을 배제하는 것이 좋다. 반면 ini파일은 다양한 매개변수값으로 모델을 실험하는데에 사용된다. 따라서, 실험마다 변할 수 있는 매개변수를 설정하는것은 ini파일에서 하는 것이 좋다.


또한 매개변수 값 지정 시 내장 함수(혹은 사용자가 추가할 수도 있다)을 사용할 수도 있다. Appendix D, NED Functions에서 지원하는 함수 목록을 찾을 수 있다. 이중에서는 string(), int()를 비롯한 형변환 함수에서부터 sqrt(), log()등의 수학 함수, exponential(), poisson()의 랜덤분포,  contains(), replace()등의 문자열 처리 함수가 존재한다.



============

출처 : OMNeT++ User Manual, 3.6 Parameters.


처음 번역시 매개변수(parameter)를 인자로 착각하여 번역하였으며, 이후에 모두 바꾸기 기능을 사용하여 인자->매개변수로 치환하였습니다. '인자'로서 인식되어야 하는경우도 매개변수로 치환되었을 수 있으니 참고하시기 바랍니다.

댓글

Holic Spirit :: Tistory Edition

design by tokiidesu. powerd by kakao.