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

Record tuples in the vector result recorder

我是 运行 OMNeT++ 4.4 中的模拟,其中我的节点发出的结果本质上是一个元组。元组的值是相互依赖的,所有节点都会发出它们;即,在单个 simtime 中发出了几个这样的元组。元组不能 "compressed" 分解为单个双精度值。

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

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

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

某处作为我要发出的信号的数据类型。有没有办法

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

在我的源代码中并将其记录在常规 .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)。