网站大量收购独家精品文档,联系QQ:2885784924

陈敏《opnet物联网仿真》IOT模型代码解析.doc

陈敏《opnet物联网仿真》IOT模型代码解析.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
陈敏 《opnet物联网仿真》 IOT模型代码解析 传感节点模型 应用层进程 当程序开始时,即event进行到803时,整个程序进入到WAIT模块,等待0.02s,然后所有节点的该事件开始竞争进行初始化,所以所有的Wait进程模块中的语句op_intrpt_schedule_self,op_intrpt_schedule_self ()本身是自中断函数。当他的第一个参数是op_sim_time()时他将当前时间的自中断放入中断列表中。那么程序同样会在当前时间执行该中断,也就是说在当前时间程序将离开这个unforced状态。 实际上,opnet总是用这样一种方式来处理在初始化时多个进程的代码之间相互制约的问题。假设对于该节点下的进程初始化时要完成的工作=工作1+工作2+工作3。而工作2是总是需要所有的节点的进程在完成了工作1他才可以执行,而工作3总是需要网络内所有节点的进程在完成了工作2才可以执行。同时因为初始化工作必须在同一时刻完成,所以程序采用了这样的方式。这种方式就是让工作1,工作2,工作3分别对应于三个连续的unforced state ,在工作1和工作2的进入代码的最后部分调用op_intrpt_schedule_self (op_sim_time (), 0)。这样实际上程序的执行过程变成了这样:开始仿真--》begin intrpt中断执行所有节点进程的工作1--》自中断开始执行所有节点进程的工作2--》自中断开始执行所有节点进程的工作3--》返回仿真核心----。注意:这样一个过程一般是用来处理仿真开始初始化时代码相互影响的问题,这个过程都在同一时刻执行,并不占用系统的仿真时间。 假如另外一个模块下的进程必须等到该进程执行完工作3才可以执行自己的初始化代码,那么他必须设定四个这样的连续的unforced states来等待该进程下的工作3完成后才可以初始化自己的进程. 当进入init模块后,其目的为获得节点属性以及设置一个开始生成数据包的中断计划,执行的动作有: 获得当前节点编号下的packet size; 获得父节点的ID作为节点ID; 获得目的节点ID; 设置每隔0.5s生成一个数据包; 如果获得的属性中source_flag为1时,每隔设置时间就生成一个数据产生自中断; 设置初始化进程ID; 完成初始化后被强制进入idle状态,等待中断,根据获得的属性不同,有三种状态,network_data_arv中断、pkt_gen、network_stop; 当收到network_data_arv中断时,获得属性sink_flag为1时,接收包,然后销毁包; 当收到pkt_gen中断,即这个节点被设置为源节点,则进行如下动作: 调用功能函数m_generate_packet()进行数据包生成; 设置下一次自中断; 其中m_generate_packet()的内容为: 根据预设好的SENSED_DATA创建一个数据包格式 根据数据包格式以及读取到的数据包大小来设置数据包size 通过stream传输数据包到更低的层 记录全局变量app_data_transmitted,感觉有错误,应当是求和,而不是单纯设置为包大小 发送远程中断 当收到network_stop中断,如果作为源节点:调用m_stop_source();在一个时间窗口内,没有收到新的interest,而原有的interest就会销毁,源节点就会停下,当源节点停止时,回收数据包产生事件。 网络层进程 网络初始化: Wait模块:等待0.01s,然后进入NodeAttribute; NodeAttribute模块:获得网络、节点等参数,包括:节点名称、编号、横纵坐标、source_flag、sink_flag、获得当传感源节点生成数据包生成远程中断时应用层传感模型所用的objid、获得远程中断时初始化程序节点的objid;然后无条件进入simParameter模块 SimParameter模块: 获得全局参数:最大传输距离、传输方案:1、GPRS;2、DGR;3、GPSRA; sensorydatasize(是网络层数据包pkptr的大小)如果参数未设置,默认2048; 根据选择的传输路由方案来设置path_number,DGR为4,GPRS为1; 初始化偏差角阶为45(deviation_angel_step)、初始角(initiate_angel)为0; 无条件进入GEO模块 GEO模块:setNIT(),根据节点间距,建立节点的邻居节点表。 setNIT功能函数: 全局变量:最大邻居数; 1、根据最大邻居数来进行邻居节点表的内存分配; 2、三个数组全部初始化为-1; 3、获得总节

文档评论(0)

wuailuo + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档