如何使用Omnet ++建模简单的Schedular

时间:2017-03-25 16:54:49

标签: omnet++

我是Omnet ++的新手,目前正在尝试模拟一个简单的示例:用户:StandardHost每五秒向一个调度程序发送一条消息:StandardHost,它将一次性发送给Client01:StandardHost,一次发送到Client02:StandardHost。我不知道如何编码它,因为StandardHost是一个复合模块,并没有任何公共方法,我可以改变它的行为。这里的任何人都可以帮我模拟这个或者指导我一个类似的示例教程吗?

1 个答案:

答案 0 :(得分:3)

StandardHost是一个复合模块,就像你说的那样。这只意味着它是各种简单(或其他复合)模块的组合,(对于简单模块)具有源代码文件。

在您的情况下,您需要查看StandardHost中使用的实际应用程序。此应用程序应生成流量并接收和转发数据包。

INET Wireless Tutorial针对的是无线网络,但它包含了您需要的大部分内容(INET的基本介绍,如何配置节点,如何在NED文件或{{1}中设置参数,交通模式等)。如果您还没有检查过,我建议您将其作为INET的第一步。

至于您的特定问题",我建议创建三个简单的应用程序(可能名为sender and forwarder和receiver),您将其定义为StandardHost NED文件中的实际应用程序。请记住,一个简单的模块需要源代码和NED文件。您的应用程序的NED文件应该是"导入"在INET StandardHost.ned文件中,或者需要从INET的标准应用程序(如Ping或UDP应用程序)派生应用程序,并使用在那里定义的接口类(omnetpp.ini)。

实际应用应该:

  1. [发件人] 在模块初始化()函数期间设置一个初始计时器(自我消息),并带有"延迟" 5秒,并向另一个节点(调度程序)发送消息
  2. IPingApp函数中
  3. [发件人] ,实现一个检查自我消息的部分(例如"计时器"您在{{1}中创建的您的应用程序)以及"计时器用完时#34; (意味着您的自我消息已发送到您的模块),重新安排计时器并将消息发送到另一个节点(调度程序)
  4. [转发器] 调度程序的应用程序只需要一个handleMessage()函数来检查传入的消息,每当收到消息时,都会发送重复项(使用handleMessage()方法)传入消息到Client01和Client02模块。
  5. [Receiver] 接收方的应用程序(Client01 / 02)可以定义initialize()(可能)对收到的消息进行计数或生成其他一些统计信息。
  6. 您可以使用dup()方法,如果您想直接发送消息(不使用特定频道)到模块,或者您可以通过NED连接发送消息(可以模拟延迟),在这里需要清楚地定义哪个连接到哪个节点,可能通过网络NED文件中的不同名称。

    基本TicTocTutorial of OMNeT++确实解释了很多这些事情,而不使用INET或其模块和结构(如StandardHost)。

    可以在INET的示例文件夹中找到更复杂的具有TCP / UDP流量的INET示例,请查看其中的handleMessage()sendDirect()示例,以了解有关NED文件配置的更多信息等