Ошибка приема сообщения в модуле агрегатора в omnet ++ - PullRequest
0 голосов
/ 12 декабря 2018

Привет, ребята, у меня есть этот код (Aggregator.cc), который должен получать сообщения, отправленные из Temperature.cc и Heartrate.cc, и объединять их вместе, однако это не так, пожалуйста, помогите.В aggregator.cc постоянно повторяется, что tmsg и hmasg не определены в области видимости.Агрегатор не должен получать сообщения.

Temperature.cc

#include "Temperature.h"

Define_Module(Temperature);

void Temperature::initialize()
{
    // TODO - Generated method body
    cMessage *tmsg = new cMessage("hi");
       send(tmsg,"temperatured");
}

void Temperature::handleMessage(cMessage *msg)
{
    // TODO - Generated method body
}

Heartrate.cc

#include "Heartrate.h"

Define_Module(Heartrate);

void Heartrate::initialize()
{
    // TODO - Generated method body
    cMessage *hmsg = new cMessage("hello");
        send(hmsg,"heartrateexit");
}

void Heartrate::handleMessage(cMessage *msg)
{
    // TODO - Generated method body
}

Aggregator.cc

#include "Aggregator.h"
#include "Temperature.h"
#include "Heartrate.h"

Define_Module(Aggregator);

void Aggregator::initialize()
{
    // TODO - Generated method body

}

void Aggregator::handleMessage(cMessage *msg)
{
    // TODO - Generated method body


    cPacket *data = new cPacket("data");
    data ->addPar(tmsg); // added parameter of type cMessage
    data ->addPar(hmsg); // added parameter of type cMessage
    data->setByteLength(20);

    cPacket *udp = new cPacket("data1"); // subclassed from cPacket
    udp->setByteLength(30);
    udp->encapsulate(data);
    EV << udp->getByteLength(); 
    EV << udp;
    cPacket *payload = udp->decapsulate();
    EV << payload;

}

network.ned

network Network
{
    submodules:

        aggregator: Aggregator {
            @display("p=128,147");
        }
        heartrate: Heartrate {
            @display("p=40,112");
        }
        temperature: Temperature {
            @display("p=40,173");
        }
    connections:

        temperature.tempexit --> aggregator.data;
        heartrate.heartrateexit --> aggregator.data1;
}  

1 Ответ

0 голосов
/ 13 декабря 2018

Вы пытаетесь получить доступ к локальным переменным из другого метода.tmsg и hmsg определены в локальной области действия Temperature::initialize и Heartrate::initialize соответственно.

Вам нужно будет что-то добавить к полезной нагрузке этих сообщений, чтобы при получении одногов Aggregator::handleMessage(cMessage *msg) вы знаете, является ли аргумент msg от Temperature или от Heartrate.

Кроме того, в Temperature::initialize имя ваших ворот не совпадает с именем в вашем файле .ned.

...