将updateInterval设置为0.1s时,使用arib分支错误进行静脉模拟

时间:2017-01-22 10:31:53

标签: omnet++ veins

我正在研究ARIB STD-T109并使用静脉ARIB分支。当我将updateInterval或beaconInterval设置为0.1s时,我无法找到模拟错误的原因,就像我之前使用静脉4.4时那样。

我的错误讯息:“模块中的错误(AribT109MobileStationMacLayer)RSUExampleScenario.node [8] .nic ...

无法安排消息(omnetpp :: cMessage)将100ms计时器重置为过去,......“

我还阅读了文章“IEEE820.11p和ARIB STD-T109的性能比较”,并想知道为什么模拟beaconInterval设置设置为1s而不是0.1s。在日本,信标间隔0.1s通常用于测试IVC。

有人知道这个错误的原因吗?非常感谢您的帮助。

更新

以下是我在调试模式下的错误消息:

<!> Error in module (AribT109BaseStationMacLayer) RSUExampleScenario.rsu[0].nic.aribT109Mac (id=12) at event #302884, t=28.033716666672: Signal "sigDistributedSpace" emitted with wrong data type (expected=long, actual=simtime_t).

调用堆栈:

Thread #1 0 (Suspended : Signal : SIGTRAP:Trace/breakpoint trap)    
    omnetpp::cRuntimeError::breakIntoDebuggerIfRequested() at cexception.cc:305 0x64de2f0e  
    omnetpp::cRuntimeError::cRuntimeError() at cexception.cc:247 0x64de2f9e 
    omnetpp::cComponentType::checkSignal() at ccomponenttype.cc:239 0x64d9c9de  
    omnetpp::cComponent::emit() at ccomponent.cc:527 0x64d8d7ea 
    AribT109BaseStationMacLayer::handleSelfMsg() at AribT109BaseStationMacLayer.cc:420 0x6a43e40    
    BaseLayer::handleMessage() at BaseLayer.cc:78 0x69c7d67 
    omnetpp::cSimulation::doMessageEvent() at csimulation.cc:692 0x64e42ddc 
    omnetpp::cSimulation::executeEvent() at csimulation.cc:634 0x64e42a07   
    omnetpp::tkenv::Tkenv::doRunSimulationExpress() at tkenv.cc:597 0x45d4899   
    omnetpp::tkenv::Tkenv::runSimulation() at tkenv.cc:395 0x45d4381    
    <...more frames...> 

我没有太多改变模拟代码。以下是我的更改:

*.manager.updateInterval = 0.1s
*.rsu[*].appl.beaconInterval = 0.1s
*.node[*].appl.beaconInterval = 0.1s

避免模糊调用emit()调用的更改:

index 7ef4251..f2c84fa 100644
--- a/src/veins/modules/mac/aribt109/AribT109MobileStationMacLayer.cc
+++ b/src/veins/modules/mac/aribt109/AribT109MobileStationMacLayer.cc
@@ -934,7 +934,7 @@ void AribT109MobileStationMacLayer::handleSelfMsg(cMessage* msg) {
 sendDelayed(macPacket, RADIODELAY_11P, lowerLayerOut);

 simtime_t distri = simTime() + RADIODELAY_11P - lastMacTime;
-    emit(sigDistributedSpace, distri.inUnit(SIMTIME_US));
+    emit(sigDistributedSpace, (int)distri.inUnit(SIMTIME_US));
 lastMacTime = simTime();

 emit(sigMacPacketSent, macPacket);
@@ -1018,7 +1018,7 @@ void AribT109MobileStationMacLayer::handleUpperMsg(cMessage* msg) {

 ivcPacket->setControlInfo(ivcControl);

-    emit(sigIvcDataBits, ivcPacket->getBitLength());
+    emit(sigIvcDataBits, (int)ivcPacket->getBitLength());

1 个答案:

答案 0 :(得分:0)

感谢您使用Veins&#39;版本的ARIB T109。

我刚从github运行代码

*.rsu[*].appl.beaconInterval = 0.1s
*.node[*].appl.beaconInterval = 0.1s

使用OMNeT ++ 5.0,它对我来说很好。

错误消息指示将100,000 us计时器从ARIB T109 MAC层重置为0以重新开始的事件被安排到过去。请发布整个错误消息以及您对代码和配置所做的任何其他更改。

<强> 更新

更新间隔定义了应用层生成的速率信标消息

之间存在差异
*.rsu[*].appl.beaconInterval = 0.1s
*.node[*].appl.beaconInterval = 0.1s

和定义速率静脉的那个和SuMO相互沟通:

*.manager.updateInterval = 0.1s

对于后者,默认值与静脉中的原始Erlangen示例(即1s)相同。要了解此参数的影响,请考虑SuMO文档。总之,这决定了方案中车辆位置的精确度。

由于发出信号的数据类型错误导致的错误在我的测试运行中也没有发生。由于代码是为OMNeT 5.0编写的,因此数据类型必须很长。您是否也使用5.0版本?