У меня проблема с получением значений из файла XML и работой со значениями в моем классе. cc.
У меня есть файл XML, который выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<heatSupplyLoadProfile>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 25.3440000 </param>
<param> 25.3440000 </param>
<param> 25.3440000 </param>
<param> 25.3440000 </param>
<param> 25.3440000 </param>
<param> 25.3440000 </param>
<param> 25.3440000 </param>
<param> 25.3440000 </param>
<param> 38.0160000 </param>
<param> 38.0160000 </param>
<param> 38.0160000 </param>
<param> 38.0160000 </param>
<param> 38.0160000 </param>
<param> 38.0160000 </param>
<param> 38.0160000 </param>
<param> 38.0160000 </param>
<param> 50.6880000 </param>
<param> 50.6880000 </param>
<param> 50.6880000 </param>
<param> 50.6880000 </param>
<param> 50.6880000 </param>
<param> 50.6880000 </param>
<param> 50.6880000 </param>
<param> 50.6880000 </param>
<param> 101.3760000 </param>
<param> 101.3760000 </param>
<param> 101.3760000 </param>
<param> 101.3760000 </param>
<param> 101.3760000 </param>
<param> 101.3760000 </param>
<param> 101.3760000 </param>
<param> 101.3760000 </param>
<param> 114.0480000 </param>
<param> 114.0480000 </param>
<param> 114.0480000 </param>
<param> 114.0480000 </param>
<param> 76.0320000 </param>
<param> 76.0320000 </param>
<param> 76.0320000 </param>
<param> 76.0320000 </param>
<param> 101.3760000 </param>
<param> 101.3760000 </param>
<param> 101.3760000 </param>
<param> 101.3760000 </param>
<param> 101.3760000 </param>
<param> 101.3760000 </param>
<param> 101.3760000 </param>
<param> 101.3760000 </param>
<param> 114.0480000 </param>
<param> 114.0480000 </param>
<param> 114.0480000 </param>
<param> 114.0480000 </param>
<param> 76.0320000 </param>
<param> 76.0320000 </param>
<param> 76.0320000 </param>
<param> 76.0320000 </param>
<param> 63.3600000 </param>
<param> 63.3600000 </param>
<param> 63.3600000 </param>
<param> 63.3600000 </param>
<param> 63.3600000 </param>
<param> 63.3600000 </param>
<param> 63.3600000 </param>
<param> 63.3600000 </param>
<param> 25.3440000 </param>
<param> 25.3440000 </param>
<param> 25.3440000 </param>
<param> 25.3440000 </param>
<param> 25.3440000 </param>
<param> 25.3440000 </param>
<param> 25.3440000 </param>
<param> 25.3440000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
</heatSupplyLoadProfile>
Мой DataCenter. cc Класс должен работать следующим образом. Я хочу получить каждый параметр и посмотреть, если параметр больше 0,0, если да, должно быть создано сообщение (DataCenterHeatMessage). Далее следует отправить само сообщение. Класс DataCenter. cc выглядит следующим образом:
#include "DataCenter.h"
namespace network {
Define_Module(DataCenter);
void DataCenter::initialize()
{
//Get param XMLElectricity file from simple module
heatSupplyLoadProfileArray = &par("heatSupplyLoadProfileArray");
XMLElectricity = electrictySupplyLoadProfileArray->xmlValue();
//Get values of the XML File
for(childNodeHeat = XMLHeat->getFirstChildWithTag("heatSupplyLoadProfile"); childNodeElectricity; childNodeElectricity = XMLHeat->getNextSiblingWithTag("heatSupplyLoadProfile")){
const char* valueHeat = childNodeHeat->getNodeValue();
//Convert the node value from string to double
heatSupplyLoadProfileArrayValue = atof(valueHeat);
if(heatSupplyLoadProfileArrayValue > 0.0){
DataCenterHeatMessage = new cMessage("heatSupplyLoadProfileArray");
endTxEvent = new cMessage("send/endTx");
scheduleAt(0, endTxEvent);
}
}
}
void DataCenter::handleMessage(cMessage *msg)
{
// Check if self message is received
if(endTxEvent->isSelfMessage()){
if(electricitySupplyLoadProfileArrayValue > 0.0){
send(DataCenterHeatMessage, "outDataCenterHeat");
}
}
else {
throw cRuntimeError("self-message not delivered");
}
}
};
DataCenter.h:
#ifndef __VISIONSIMULATIONOFPED_DATACENTER_H_
#define __VISIONSIMULATIONOFPED_DATACENTER_H_
#include <omnetpp.h>
using namespace omnetpp;
namespace network {
class DataCenter : public cSimpleModule {
protected:
virtual void initialize() override;
virtual void handleMessage(cMessage *msg) override;
private:
//state variables
double heatSupplyLoadProfileArrayValue;
cXMLElement *XMLHeat;
cXMLElement *childNodeHeat;
cPar *heatSupplyLoadProfileArray;
};
}; //namespace #endif
К сожалению, сообщение не отправлено в модуль, который я объявил. Я узнал, что это как-то связано с l oop. Для l oop вообще не вводится. Если я закомментирую строки, принадлежащие для получения значений из файла XML, симуляция отправит сообщение. Кроме того, если я создаю проект, никаких ошибок не возникает.
Не могли бы вы мне помочь с этой проблемой? Заранее спасибо!