【问题标题】:How do i stop the application on a single vehicle in Veins/Omnetpp?如何在 Veins/Omnetpp 中停止单辆车上的应用程序?
【发布时间】:2018-06-20 22:21:01
【问题描述】:

我希望停止在模拟的单个节点上运行的 VEINS 应用程序,让其余车辆正常模拟(而不是停止整个模拟)。 我只想停止正在运行的应用程序,这意味着车辆应该继续在模拟中充当普通的 SUMO 车辆 - 就好像他没有配备应用程序一样。 有可能这样做吗? 我无法在文档中找到我的问题的解决方案。 提前致谢

【问题讨论】:

    标签: omnet++ veins sumo


    【解决方案1】:

    TL;DR:仅使用 VEINS API 是不可能的,您需要手动为其编写代码。具体工作量取决于您要做什么。

    删除和重新添加:通过编程永久停止它应该相对容易——如果你终止与Car.ned 相关的所有内容,你基本上会做你想做的事做(这个动作不会在 SUMO 模拟中移除汽车)。然后,您可以在稍后的某个时间再次实例化汽车;要做到这一点,您可能只需要对移动管理器进行一个相对较小的扩展,以便在满足某些条件时再次实例化已移除的车辆。

    暂停和恢复:冻结汽车并使其恢复有点困难,因为您必须暂停与车辆相关的所有事件。暂停单个车辆的概念性问题是,由于 VEINS 的设计方式,您将需要推迟一些事件(例如,周期性信标应用程序的计时器),并丢弃其他事件(排队的信号接收检查事件其他派送车辆)。特别是,您需要问自己是否要保留汽车 MAC 队列中的消息。基本上你需要手写这个,查看与车辆相关的所有事件并决定是否将它们推迟一段时间(或丢弃它们)。如果您决定简单地丢弃所有事件(可能是最容易实现的决定),您将不得不处理汽车的应用程序状态不再有意义的情况。

    【讨论】:

    • 感谢您的回答!不过,我不知道如何终止与 Car.ned 相关的所有内容。你能给我任何提示吗?
    • 我进行了一些快速搜索,可能最好的方法是使用类似于finish() 的方法来关闭汽车中的所有子模块(并使用@ 取消相关事件987654324@,参见例如this)。我不确定 omnet++ API 是否有一些通用的方法来在运行时终止复杂的模块,包括相关的事件。不过,我建议您提出一个新问题。
    • 由于事件和模块的处理方式,我猜测实际上不可能做到这一点,但我对 OMNeT++ 内部结构并没有那么深入。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多