私はこのモジュール階層を使用しています:
Node: {udpApp[0]<->udp<->networkLayer->wlan[0]} and wlan[0]: {CNPCBeacon<->mac<->radio}
udpApp のいくつかの ini パラメータを次のように使用: udpApp の ini ファイルにいくつかの初期パラメータを次のように指定しました。
**.host*.numUdpApps = 2
**.host*.udpApp[0].typename = "UDPBasicApp"
**.host*.udpApp[0].destAddresses = "gw1"
**.host*.udpApp[0].startTime = 1.32s
**.host*.udpApp[0].stopTime = 1.48s
しかし、実行時に CNPCBeacon モジュールを介して udpAPP[0] の startTime と stopTime を変更したいと考えています。
したがって、CNPCBeacon.ccを次のように変更しました:-
cModule* parentmod = getParentModule();
cModule* grantParentmod = parentmod->getParentModule();
cModule* udpmod = grantParentmod->getSubmodule("udpApp",0);
double varHoldingStartTime = udpmod->par("startTime").doubleValue();
double varGoldingStopTime = udpmod->par("stopTime").doubleValue();
varHoldingStartTime = SIMTIME_DBL(4.2);
varGoldingStopTime = SIMTIME_DBL(4.5);
udpmod->par("startTime").setDoubleValue(varHoldingStartTime);
udpmod->par("stopTime").setDoubleValue(varGoldingStopTime);
EV<<"New start and stop time is "<<udpmod->par("startTime").str()<<"\t"<<udpmod->par("stopTime").str()<<endl;`
パラメータを正常に変更します。udpApp[0]
ただし、モジュールを再度開始することはありません。したがって、このモジュールの動的キャストを次のように使用しようとします。
UDPBasicApp* udpBasicMod = dynamic_cast<UDPBasicApp*>(udpmod);
sendTimer = new cMessage("sendTimer");
scheduleAt(iniSchduleTime, sendTimer);
そして、次のエラーが発生しました:-
モジュール (CNPCBeacon) BSoneNode.gw1.wlan[0].CNPCBeacon (id=23) のエラー #1496、t=4: モジュール (UDPBasicApp)BSoneNode.gw1.udpApp[0] の scheduleAt() がコンテキストで呼び出されましたモジュールの (CNPCBeacon)BSoneNode.gw1.wlan[0].CNPCBeacon: 後者のモジュールから呼び出されるメソッドには、Enter_Method() または Enter_Method_Silent()? がありません。
他のサブモジュールを介してモジュールをインスタンス化する他の方法もありますか?
このヘルプをありがとう。