NS2之移动节点能量模型

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

分类:NS22011-12-10 19:59 1024人阅读评论(0) 收藏举报tclrandomdelaylistfloatclass

移动节点能量函数分析代码:

[cpp]view plaincopy

1.#include

2.#include

3.

4.#include "random.h"

5.#include "energy-model.h"

6.#include "mobilenode.h"

7.#include "god.h"

8.

9.static class EnergyModelClass : public TclClass

10.{

11.public:

12. EnergyModelClass ():TclClass ("EnergyModel") {}

13. TclObject *create (int argc, const char *const *argv) {

14.if (argc == 8) {

15. MobileNode *n=(MobileNode*)TclObject::lookup(argv[4]);

16.return (new EnergyModel(n, atof(argv[5]),

17. atof(argv[6]), atof(argv[7])));

18. } else {

19. Tcl::instance().add_error("Wrong arguments to ErrorModel");

20.return 0;

21. }

22. }

23.} class_energy_model;

24.

25.void EnergyModel::DecrTxEnergy(double txtime, double P_tx)

26.{

27.double dEng = P_tx * txtime;

28.if (energy_ <= dEng)

29. energy_ = 0.0;

30.else

31. energy_ = energy_ - dEng;

32.if (energy_ <= 0.0)

33. God::instance()->ComputeRoute();

34.}

35.

36.

37.void EnergyModel::DecrRcvEnergy(double rcvtime, double P_rcv)

38.{

39.double dEng = P_rcv * rcvtime;

40.if (energy_ <= dEng)

41. energy_ = 0.0;

42.else

43. energy_ = energy_ - dEng;

44.if (energy_ <= 0.0)

45. God::instance()->ComputeRoute();

46.}

47.

48.void EnergyModel::DecrIdleEnergy(double idletime, double P_idle)

49.{

50.double dEng = P_idle * idletime;

51.if (energy_ <= dEng)

52. energy_ = 0.0;

53.else

54. energy_ = energy_ - dEng;

55.if (energy_ <= 0.0)

56. God::instance()->ComputeRoute();

57.}

58.

59.// XXX Moved from . These wireless stuff should NOT stay in the

60.// base node.

61.void EnergyModel::start_powersaving()

62.{

63. snh_ = new SoftNeighborHandler(this);

64. snh_->start();

65.

66. afe_ = new AdaptiveFidelityEntity(this);

67. afe_->start();

68.

69. state_ = EnergyModel::POWERSAVING;

70. state_start_time_ = Scheduler::instance().clock();

71.}

72.

73.void EnergyModel::set_node_sleep(int status)

74.{

75. Tcl& tcl=Tcl::instance();

76.//static float last_time_gosleep;

77.// status = 1 to set node into sleep mode

78.// status = 0 to put node back to idle mode.

79.// time in the sleep mode should be used as credit to idle

80.// time energy consumption

81.if (status) {

82. last_time_gosleep = Scheduler::instance().clock();

83.//printf("id=%d : put node into sleep at %f\n",

84.// address_,last_time_gosleep);

85. sleep_mode_ = status;

86.if (node_->exist_namchan())

87. tcl.evalf("%s add-mark m1 blue hexagon",node_->name());

88. } else {

89. sleep_mode_ = status;

90.if (node_->exist_namchan())

91. tcl.evalf("%s delete-mark m1", node_->name());

92.//printf("id= %d last_time_sleep = %f\n",

93.// address_, last_time_gosleep);

94.if (last_time_gosleep) {

95. total_sleeptime_ += Scheduler::instance().clock() -

96. last_time_gosleep;

97. last_time_gosleep = 0;

98. }

99. }

100.}

101.

102.void EnergyModel::set_node_state(int state)

103.{

104.switch (state_) {

105.case POWERSAVING:

106.case WAITING:

107. state_ = state;

108. state_start_time_ = Scheduler::instance().clock();

109.break;

110.case INROUTE:

111.if (state == POWERSAVING) {

相关文档
最新文档