ns2能量模型添加充电模型

ns2自带的能量模型:

energy-model.h

inline double initialenergy() const { return initialenergy_; }

inline void setenergy(double e) { energy_ = e; }

virtual void DecrTxEnergy(double txtime, double P_tx);

virtual void DecrRcvEnergy(double rcvtime, double P_rcv);

virtual void DecrIdleEnergy(double idletime, double P_idle);

virtual void DecrSleepEnergy(double sleeptime, double P_sleep);
virtual void DecrTransitionEnergy(double transitiontime, double P_transition);

自带的能量模型已经包括发送能量损耗和接受能量损耗以及空闲、睡眠和传输能量损耗,基本能够满足所要求的能量损耗的状态

其中P_tx,P_rcv,P_idle,P_sleep,P_transition都是自己设置的,所以需要知道详细的数据。这其中的数据都是以/s为单位的,不是我们需要的/(s*b)的单位。我们需要做的是根据datarate来设定这些值。

set opt(engmodel) EnergyModel ;# 能量模型
set opt(initeng) 100.0 ;# 总能量
set opt(txPower) 0.660 ;# 传输能量
set opt(rxPower) 0.395 ;# 接受能量
set opt(idlePower) 0.035 ;# 待机能量

我们做一个以上能量指示的能量损耗统计图,仿真时间为100s,cbr流设为0.5M,观察其中一个节点的能量情况

仿真时间为100s,cbr流设为0.1M

仿真时间为100s,cbr流设为0.5M,50s停止,之后的为空闲时间的功率消耗所致

ns2添加充电模型:

wireless-phy.h中

class Charge_Timer : public TimerHandler {
public:
    Charge_Timer(WirelessPhy *a) : TimerHandler() { a_ = a; }
protected:
    virtual void expire(Event *e);
    WirelessPhy *a_;
};

添加了充电模型,并在wireless-phy.cc中添加实现函数

void WirelessPhy::UpdateChargeEnergy()
{
    if(em() == NULL) {
        return;
    }
    em()->ChargeEnergy(0.5, 0.1);
    charge_timer_.resched(0.5);
}

这里面我们假定的是每0.5s完成一次充电,充电能量为0.1w。这个值也是自己设定的,且目前是在c++中设定,比较麻烦。下一步要把这个数据设置为可以在tcl文件中可以修改。充电周期和每次充电的能量都是可以自己设定的,同样需要数据支持。

仿真时间为100s,100s我们一直都在充电,cbr流是在50s时停止

加大充电功率那么电量将会一直保持在电量上限

所用到的指令:

gawk '$3=="_0_" {print $2,$14}' trace_mrmc_afsls_cl.tr >abc

 

 

posted @ 2013-05-19 14:33  noanswertome  阅读(302)  评论(0编辑  收藏  举报