Omnet++ 基于Omnet++;信号

Omnet++ 基于Omnet++;信号,omnet++,Omnet++,我想使用基于Omnet++信号的向量计算时间函数中的总体交付率?当有多个源而只有一个接收器时,我如何实现它 例如,假设我有10个移动节点向固定的AP发送数据,传递率等于(接收/发送的数据包),但AP只知道接收的数据包的数量 我宣布了以下信号和统计数据: AP: @signal[receivedBndl](type = "int"); @statistic[receivedBundle](title="ReceivedBundle";source=receivedBndl;record=count

我想使用基于Omnet++信号的向量计算时间函数中的总体交付率?当有多个源而只有一个接收器时,我如何实现它

例如,假设我有10个移动节点向固定的AP发送数据,传递率等于(接收/发送的数据包),但AP只知道接收的数据包的数量

我宣布了以下信号和统计数据:

AP:

@signal[receivedBndl](type = "int");
@statistic[receivedBundle](title="ReceivedBundle";source=receivedBndl;record=count,mean,last,vector);
对于节点:

@signal[sentBndl](type = "int");
@statistic[sentBundle](title="SentBundle";source=sentBndl;record=count,mean,last,vector);
是否可以创建另一个@statistics,用这两个信号计算随时间变化的传递率


谢谢,

这更像是一个网络范围的统计数据,而不是与单个节点相关的数据,因此您必须在顶级网络模块本身而不是实际节点上安装统计侦听器。OMNeT++信号在安全壳链上向上传播,因此发送到特定节点的任何信号也将发送到包含的网络模块。这使得在网络上安装统计信息并在那里获得给定信号成为可能

为了实现这一点,我将重写代码以实际发出已发送/已接收的cPacket对象(而不是将它们计数为整数)。您仍然可以使用统计信息中的count()函数统计数据包的数量

AP:

@signal[receivedBndl](type = cPacket);
对于节点:

@signal[sentBndl](type = cPacket);
由于每个实际发送/接收的数据包现在都会发送到它们的发送/接收模块(以及它们上面的任何模块),因此您可以在顶级模块中安装一个统计信息,并将它们组合成一个统计信息:

@statistic[deliveryratio](source=count(receivedBndl)/count(sentBndl); record=last);

最后一行将在顶层模块上安装两个信号监听器,每当任何模块在网络中的任何位置生成或接收数据包时,统计信息都将计算值。

这更像是网络范围的统计信息,而不是与单个节点相关的内容,因此您必须在顶级网络模块本身而不是实际节点上安装统计侦听器。OMNeT++信号在安全壳链上向上传播,因此发送到特定节点的任何信号也将发送到包含的网络模块。这使得在网络上安装统计信息并在那里获得给定信号成为可能

为了实现这一点,我将重写代码以实际发出已发送/已接收的cPacket对象(而不是将它们计数为整数)。您仍然可以使用统计信息中的count()函数统计数据包的数量

AP:

@signal[receivedBndl](type = cPacket);
对于节点:

@signal[sentBndl](type = cPacket);
由于每个实际发送/接收的数据包现在都会发送到它们的发送/接收模块(以及它们上面的任何模块),因此您可以在顶级模块中安装一个统计信息,并将它们组合成一个统计信息:

@statistic[deliveryratio](source=count(receivedBndl)/count(sentBndl); record=last);

最后一行将在顶层模块上安装两个信号监听器,并且每当任何模块在网络中的任何位置生成或接收数据包时,统计数据都将计算值。

因此,如果我完全理解您对我说的话,我必须从所有发送方和接收方模块向全局模块发送信号,全局模块将处理这些统计数据,然后再向自身发送新信号,以便使用矢量绘制统计数据和随时间的传递率。此外,总和和计数之间的区别是什么,这有点令人困惑?谢谢,不用了,您不必向a顶级模块发送所有信号。每个信号都可以发送到实际模块。我建议将统计数据附加到顶层模块。在OMNeT++中,发送到模块的信号会自动传递到模块及其所有父模块。这意味着默认情况下,顶级网络模块接收发送到网络中任何模块的所有信号。您不必修改实际的emit()代码,只需在顶层收集统计信息。(关于COUNT vs SUM,你是对的,这有误导性,我已经更正了答案)添加了一些关于如何创建派生统计数据的更多信息。因此,如果我很理解你对我说的话,我必须从所有发送方和接收方模块向处理这些统计数据的全局模块发送信号,之后,它会向自身发出一个新的信号,以便使用矢量绘制统计数据和传递率与时间的关系。此外,总和和计数之间的区别是什么,这有点令人困惑?谢谢,不用了,您不必向a顶级模块发送所有信号。每个信号都可以发送到实际模块。我建议将统计数据附加到顶层模块。在OMNeT++中,发送到模块的信号会自动传递到模块及其所有父模块。这意味着默认情况下,顶级网络模块接收发送到网络中任何模块的所有信号。您不必修改实际的emit()代码,只需在顶层收集统计信息。(关于COUNT vs SUM,你是对的,这有误导性,我已经更正了答案)添加了一些关于如何创建派生统计数据的更多信息。