在矢量结果记录器中记录元组



我正在OMNeT++4.4中运行一个模拟,其中我的节点发出一个本质上是元组的结果。元组的值是相互依赖的,并且所有节点都发出这些值;即在单个simtime上发出几个这样的元组。元组不能被"压缩"为单个双值。

我想把这些元组记录在一个向量中。有没有一种方法可以发出用于统计数据收集的数据结构,并将其记录在OMNeT++创建的*.vec文件中?我不关心NED文件中可用于此特定信号的统计函数。

举个简单的例子,假设我有

typedef boost::tuple<boost::DateTime, bool, Unit::Watt, Unit::VAr> MyTuple;

作为我想要发射的信号的数据类型。有没有办法进行

MyTuple myTuple( /* ... data ... */ );
emit(mySignal, myTuple);

在我的源代码中,并将其记录在Recolar .vec结果文件中,例如:

vector 1 MyNodeName MyResultVectorName TV
1  14.126 2013-01-22T23:22:19+10:00 true 125300 12000

如果不可能,除了自己创建输出文件之外,仍然使用OMNeT的信号机制的最佳方式是什么?

默认情况下,OMNeT++无法保存元组(因为内置工具无论如何都无法处理它),但信号可以携带cObject,类似于标量值的传输方式。从cObject派生元组,您将能够用信号来发射它。显然,您还必须编写并注册一个ResultRecorder(源自cResultRecorder),它可以处理给定的数据类型并写入文件。

最新更新