OMNeT++仿真时间突跳至999999.999导致仿真终止问题求助
Cosima联合仿真仿真时间突跳问题排查求助
问题现象
使用Cosima进行联合仿真时,事件ProsumerNetExtraLarge.schedulerModule (MosaikSchedulerModule, id=3)在正常运行一段时间后,会导致仿真时间突然跳变至999999.999(即mosaik中设置的maxAdvance值),直接引发整个仿真终止。
仿真日志
Event #393411 t=3.654 0% completed (0% total) ProsumerNetExtraLarge.schedulerModule (MosaikSchedulerModule, id=3)
紧接着出现:
2024-09-18 20:04:31:974196 | DEBUG | OMNeT++: MosaikSchedulerModule: received until event. sim time is: 999999.999
** Event #395303 t=999999.999 10% completed (10% total) ProsumerNetExtraLarge.schedulerModule (MosaikSchedulerModule, id=3)
代码关联
- 处理「received until event」的逻辑位于
CosimaSchedulerModule.cc - Socket数据处理逻辑位于
AgentAppTcp.cc
关键问题与调试发现
- MosaikSchedulerModule在
handleMessage中接收until事件时,simTime()已返回999999,但无法追踪该时间跳变的触发点;即便拦截until事件,simTime()仍保持999999,最终仿真还是会终止。 - 调试OMNeT++的
cSimulation::executeEvent函数时发现:HEY1位置的simTime()仍处于正常数值,执行currentSimtime = event->getArrivalTime()后,HEY3位置的simTime()突变为999999,且该事件的getArrivalTime()也返回此值。 - 故障发生前会出现大量「socket data arrived」消息,事件数量持续增加;未修改过相关.cc代码,排除内存泄漏导致过载的可能,且故障发生时间无规律。
求助需求
寻求以下问题的解决方法:
- 排查仿真时间突跳至maxAdvance值的根本原因
- 阻止该时间跳变问题,维持仿真正常运行
内容的提问来源于stack exchange,提问作者Lorenzo Foschi
相关产品推荐
相关产品推荐

