我在OMNeT ++ 4.4中运行模拟,其中我的节点发出的结果基本上是一个元组。元组的值是相互依赖的,所有节点都发出它们;即,在单个simtime中发出几个这样的元组。无法将元组“压缩”为单个双精度值。
我想在向量中记录这些元组。有没有办法为统计信息收集发出数据结构,并将其记录在OMNeT ++创建的* .vec文件中?我不关心NED文件中针对此特定信号可用的统计函数。
举个简单的例子,假设我有
typedef boost::tuple<boost::DateTime, bool, Unit::Watt, Unit::VAr> MyTuple;
某处作为我想要发出的信号的数据类型。有没有办法
MyTuple myTuple( /* ... data ... */ );
emit(mySignal, myTuple);
在我的源代码中并将其记录在recular .vec
结果文件中,例如:
vector 1 MyNodeName MyResultVectorName TV
1 14.126 2013-01-22T23:22:19+10:00 true 125300 12000
如果不可能,仍然使用OMNeT的信号机制但是自己创建输出文件的最佳方法是什么?
答案 0 :(得分:2)
默认情况下,OMNeT ++无法保存元组(因为内置工具无论如何都无法处理它),但信号可以携带cObject
类似标量值的传输方式。从cObject
派生你的元组,你就可以用信号发出它。显然,你还必须编写并注册一个ResultRecorder(派生自cResultRecorder
),它可以处理给定的数据类型并写出文件。