转自:http://hi.baidu.com/sunhf_my/blog/item/426b4adce47f7c46cdbf1ae5.html
http://www.isi.edu/ilense//software/smac/ns2_energy.html
在NS2.34中,能量模型是节点属性,在~ns/mobile/energy-model.[h,cc]文件中定义,在~ns/mac/wireless-phy.[h,cc]文件中也有相关代码。
默认的,NS不会启用能量模型,使用方式为:
$ns_ node-config -energyModel "EnergyModel" \
-initialEnergy (焦耳)
-rxPower (瓦)
-txPower (瓦)
-idlePower (瓦)
-sleepPower (瓦)
-sleepTime (节点开始休眠前需要等待的时间,秒)
-transitionPower (在sleep和idle状态间切换所需的功率,瓦)
-transitionTime (在sleep和idle状态间切换所需的时间,秒)
在trace文件中,能量模型部分的格式为:
energy [total remaining energy] ei [idle consumption] es [sleep consumption] et [transmition consumption] er [receiving consumption]
[energy 979.917000 ei 20.074 es 0.000 et 0.003 er 0.006]
The meaning of each item is as follows:
energy: total remaining energy
ei: energy consumption in IDLE state
es: energy consumption in SLEEP state
et: energy consumed in transmitting packets
er: energy consumed in receiving packets
加入模型: 设置变量
请根据自己实际需要配置这些变量
set opt(engmodel) EnergyModel ;#能量模型
set opt(initeng) 10000.0 ;#总能量
set opt(txPower) 0.660 ;#传输能量
set opt(rxPower) 0.395 ;#接受能量
set opt(idlePower) 0.035 ;#待机能量
配置node-config
$ns_ node-config -adhocRouting $val(rp) \
-llType $val(ll) \
-macType $val(mac) \
-ifqType $val(ifq) \
-ifqLen $val(ifqlen) \
-antType $val(ant) \
-propType $val(prop) \
-phyType $val(netif) \
-energyModel $opt(engmodel) \
-initialEnergy $opt(initeng) \
-txPower $opt(txPower) \
-rxPower $opt(rxPower) \
-idlePower $opt(idlePower) \
-topoInstance $topo \
-agentTrace OFF \
-routerTrace OFF \
-macTrace ON \
-movementTrace OFF \
-channel $chan_1_
提取方法: 在路由层提取:
Node* thisnode = Node::get_node_by_address(src);
energy = thisnode->energy_model()->energy();
使用方法2.在创建节点的时候,利用addenergymodel方法.
$node addenergymodel [new $opt(energy) $node $opt(initeng) $opt(txPower) $opt(rxPower) ]
3. 如何在路由层或者其它层调用能量模型?
首先,在希望使用该能量模型的头文件中加入:
#include <mobilenode.h>
接着,可以获取节点的指针:
// Get pointer to the node
iNode = (MobileNode *) (Node::get_node_by_address(index));
注意其中的index一般为节点的id,也称为地址。
接着,可以获取能量模型的指针:
energy = thisnode->energy_model()->energy();
接下来,可以获得任意参数,如:
iEnergy = iNode->energy_model()->energy();