2016-07-27 8 views
1

OMNET ++ (Mixim)에 무선 센서 네트워크를 구현했는데, 무작위로 내 노드를 배치했습니다. 이제 정사각형, 직사각형 및 원 모양의 구멍을 만들어서 노드가 그 영역에 위치 할 수 없도록 만들고 싶습니다. 어떻게 할 수 있습니까? 이 목표를 달성하고 이동성 코드를 작성하려면 mixim 기본 프레임 워크에서 코드를 변경해야합니까?Omim ++에서 Mixim 프레임 워크로 구멍 만들기

답변

0

노드는 무선 통신을 사용하여 메시지를 교환합니다. 전송 범위 내에있는 모든 이웃들이 메시지를 듣습니다 (전송 범위 내의 모듈은 서로 자동으로 연결됨).

노드에는 다른 유형의 실패 확률 (개별 실패, 맵의 영역에 영향을주는 장애 등)이 있습니다. 영역 실패에 대한 맵을 지정하고 사용할 수 있습니다. 다른 맵은 장애물, 페이딩 (fading) 등에 쉽게 사용할 수 있습니다.이 모든 기능을 수행하기 위해 우리는 사용하기로 결정했습니다.

void Sink::initNodes() { 
    cModule* parent = getParentModule(); 
    cModule* mod; 
    int numNodes; 
    int trRange; 
    int i; 
    numNodes = parent->par("numNodes"); 
    ev << "Main-server numNodes is: " << numNodes << "\n"; trRange = parent->par("trRange"); 
    ev << "Main-server trRange is: " << trRange << "\n"; 
    for(i=1;i<=simulation.getLastModuleId();i++) { mod=simulation.getModule(i); if(strcmp(mod->getName(),"node")==0) 
     { 
      nodePtr[((Node*)mod)->myId]=(Node*)mod; 
     } 
    } 
} 

void Sink::releaseConnections() { 
    cGate* g; 
    cModule* mod; 
    int i, j; 
    for (i = 1; i <= simulation.getLastModuleId(); i++) { mod = simulation.getModule(i); if (strcmp(mod->getName(), "node") == 0) { 
      if(((Node*)mod)->energy>0) 

       (mod->getDisplayString()).parse("i=misc/node,yellow"); 
      for (j = 1; j < nrGates + 1; j++) { g = mod->gate("out", j); 
       g->disconnect(); 
      } 
     } 
    } 
} 
+0

먼저 감사합니다. 내 질문,하지만 지역에 배치 된 노드를 끊고 싶지 않아 그들을 실패하게. 나는 거기에있을 수없는 노드가 내 시뮬레이션의 시작 부분에 내 놀이터에서 일부 장소를 정의하고 싶습니다. –

0

현재 접근 방식을 가질 수 있습니다

  • 는 시뮬레이션을 시작하고 INI 파일에 넣어 전에 외부 스크립트를 사용하여 모든 노드 위치를 생성합니다.
  • 위치를 무작위로 선택한 후 규칙적으로 노드를 배치하는 이동성 코드를 수정하여 해당 영역이 금지 된 영역에 있는지 테스트합니다. 일치하는 경우 좌표의 다른 쌍을 무작위로 그리고 이것을 반복합니다. (금지 된 영역은 전체 놀이터에 비해 적당히 작아야합니다. 그렇지 않으면 노드가 허용되는 지점에서 시작할 수있는 최소 기회가 주어져 네트워크 초기화가 오래 걸립니다 ...)
+0

어떻게 이동성 코드를 수정할 수 있습니까? –