Omnet++复合模块:将1个输入门连接到多个子模块
Omnet++ compound module: connect 1 input gate to multiple submodules
我制作了一个带有 1 个输入和两个子模块的简单复合模块:
module System
{
parameters:
gates:
input sensorDataIn;
submodules:
metric1: Metric1 {
@display("p=30,26");
}
metric2: Metric2 {
@display("p=30,26");
}
connections:
sensorDataIn --> metric1.metricIn;
sensorDataIn --> metric2.metricIn;
}
当我开始模拟时,我收到一条错误消息,提示门已连接。那么我怎样才能将进入我的复合模块的数据传递给两个子模块呢?
谢谢和亲切的问候,
坦克
首先,将sensorDataIn
定义为门的向量,变为:
gates:
input sensorDataIn[2];
其次,对门使用++
运算符,即:
connections:
sensorDataIn++ --> metric1.metricIn;
sensorDataIn++ --> metric2.metricIn;
三、在你的网络NED文件中改成:
connections allowunconnected:
门矢量的大小可以省略,因为运算符 ++
会自动扩展门矢量的大小。
根据Jerzy D.的提示,我得出了以下解决方案:
分发消息的简单模块:
simple Distributor
{
parameters:
int numOutputs = default(1);
gates:
input dataIn @labels(SensorData/up);
output dataOut[numOutputs];
}
在其实现中,它会将消息转发给所有连接的指标:
void Distributor::handleMessage(cMessage *msg)
{
// TODO - Generated method body
for (int i=0; i<gateSize("dataOut"); i++) {
cMessage *copy = msg->dup();
send(copy, "dataOut", i);
}
delete msg;
}
最后将我的系统更改为:
模块系统
{
参数:
盖茨:
输入传感器数据;
submodules:
distributor: Distributor{
parameters:
numOutputs = 2;
}
metric1: Metric1 {
@display("p=30,26");
}
metric2: Metric2 {
@display("p=30,26");
}
connections:
sensorDataIn --> distributor.dataIn;
distributor.dataOut[0] --> metric1.metricIn;
distributor.dataOut[1] --> metric2.metricIn;
}
感谢帮助!
我制作了一个带有 1 个输入和两个子模块的简单复合模块:
module System
{
parameters:
gates:
input sensorDataIn;
submodules:
metric1: Metric1 {
@display("p=30,26");
}
metric2: Metric2 {
@display("p=30,26");
}
connections:
sensorDataIn --> metric1.metricIn;
sensorDataIn --> metric2.metricIn;
}
当我开始模拟时,我收到一条错误消息,提示门已连接。那么我怎样才能将进入我的复合模块的数据传递给两个子模块呢?
谢谢和亲切的问候,
坦克
首先,将sensorDataIn
定义为门的向量,变为:
gates:
input sensorDataIn[2];
其次,对门使用++
运算符,即:
connections:
sensorDataIn++ --> metric1.metricIn;
sensorDataIn++ --> metric2.metricIn;
三、在你的网络NED文件中改成:
connections allowunconnected:
门矢量的大小可以省略,因为运算符 ++
会自动扩展门矢量的大小。
根据Jerzy D.的提示,我得出了以下解决方案:
分发消息的简单模块:
simple Distributor
{
parameters:
int numOutputs = default(1);
gates:
input dataIn @labels(SensorData/up);
output dataOut[numOutputs];
}
在其实现中,它会将消息转发给所有连接的指标:
void Distributor::handleMessage(cMessage *msg)
{
// TODO - Generated method body
for (int i=0; i<gateSize("dataOut"); i++) {
cMessage *copy = msg->dup();
send(copy, "dataOut", i);
}
delete msg;
}
最后将我的系统更改为: 模块系统 { 参数: 盖茨: 输入传感器数据;
submodules:
distributor: Distributor{
parameters:
numOutputs = 2;
}
metric1: Metric1 {
@display("p=30,26");
}
metric2: Metric2 {
@display("p=30,26");
}
connections:
sensorDataIn --> distributor.dataIn;
distributor.dataOut[0] --> metric1.metricIn;
distributor.dataOut[1] --> metric2.metricIn;
}
感谢帮助!