【问题标题】:Sending a message when a vehicle leaves the simulation当车辆离开模拟时发送消息
【发布时间】:2017-03-20 16:19:24
【问题描述】:

我使用 OMNeT++-4.6、sumo-0.22.0 和 Veins-4a2。

在我的模拟中,每个节点都会创建一条消息,将其存储在其缓冲区中,并在延迟一段时间后发送所有消息。我做了两个计时器来指定创建和发送消息的延迟。因此,发送的消息可能会被其他节点或目的地即 RSU 接收。

当所有节点根据 .rou.xml 文件中的指示路径到达目的地时,我的模拟结束。每个节点在特定时间离开模拟。

我的场景的目标是每个节点在离开模拟时发送所有存储的消息,并且它们必须被目的地接收,在我的例子中是 RSU。

谁能告诉我如何使用 self-message() 或其他解决方案来做到这一点?

【问题讨论】:

标签: omnet++ veins sumo


【解决方案1】:

开始查看TraciScenarioManagerTraciCommandInterface 以了解与SuMO 的通信是如何完成的。然后查看TraCI protocol documentation,了解是否以及如何在车辆到达路线尽头时收到通知,或者了解车辆到达的时间,以便您可以在此时安排自我消息.当您收到此通知时,您可以发送您存储的所有消息,然后让模拟继续进行,这应该会删除相应的节点。

我认为目前还没有支持这种通知的方法,但是当您知道协议的必要部分时,应该很直接地将此功能添加到模块中。

【讨论】:

  • 再次感谢您的回复。我会检查你告诉我的一切,但我有一个问题:我试图发送存储在 finish() 函数中的消息,因为离开模拟的每个节点都会执行它。存储的消息已发送但目的地没有收到,所以当我收到你所说的通知时,我怎么能强制节点等到收到 ACK,因为它也会发送消息,然后离开模拟,消息将没有收到?
  • finish() 方法是模块/组件/节点在模拟终止时执行的最后一个方法,因此您的消息可能会被发送,但不会为任何接收者调用 handleMessage。您需要使用 LifecycleManager 之类的东西来定义节点的生命周期,并在特定节点的生命周期结束时执行“发送所有缓冲消息”。在 finish() 中发送它们绝对是错误的。仅收集最终统计信息并(可能)删除finish() 中的正在运行的计时器。
  • 感谢您的回答和这个想法。我正在尝试搜索生命周期 Listner,但没有找到说明如何使用它的示例。如果您知道如何在 Veins 中的 BaseWaveApplLayer() 中将它与 handleMessage() 一起使用,或者如果您知道此类网站的示例,您可以将它们发送给我吗?这对我有很大帮助。
  • 我不确定 Veins 是否包含 LifeCycleListener/Manager 的概念。它是来自 INET 的一个概念,其中(例如)可以跟踪节点(或接口)的状态。如果您不将 Veins 与 INET 一起使用,那么您可能必须定义自己的机制,包括信号(关闭节点)和侦听器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-02
  • 1970-01-01
  • 2012-05-20
相关资源
最近更新 更多