opnet改代码的初始——细节与坚持

12月作为2017年的最后一个月,注定就是一个杂事繁忙的时间段。本来试图改完的代码,在无限期的紧急工作中,一步步退后了。但也不是没有收获。

第一点,     总结一下如何找到代码中出现的各种变量定义和调用的函数。

(1)变量:看到最上面的栏

其中HB,全称是header block,里面放置的是全局变量,除本process以外,其余的process也可以使用到。除了放置变量以外,它与.h文件有类似之处,负责声明include文件,负责声明函数,另外在OPNET中独特的是,也用来声明状态转移。

opnet改代码的初始——细节与坚持_第1张图片

       其中SV,全称是state variables,里面放置的是本process内可用的变量。它在界面上显示的是

opnet改代码的初始——细节与坚持_第2张图片

       但实际上,通过点击EditASCII,我们可以获得一个编程者常见的界面,我个人认为更方便一些。

opnet改代码的初始——细节与坚持_第3张图片

       其余的变量会在使用的部分定义,比如FB当中,或者某个状态的进入离开函数当中。

(2)函数的查找和子process的查找

我在最开始使用OPNET时,时常找不到一个代码应该在哪里写,甚至找不到这个函数到底是什么意思。

实际上,除了上次总结中提到的各类基础函数外,其余的函数(非OP开头的),如OMS开头、WLAN开头的函数,类似


       都是在.h文件中定义的,OPNET除了提供基础函数以外,也给了很多方面使用的.h文件和.ex.c文件,只要调用了.h文件就可以使用这些扩展函数,具体函数里面是如何进行的,你可以查找ex.c文件。因为我水平比较次,一般情况下,我找不到一个函数在哪里定义了,我就看它的开头(_前面的字母),去OPNET安装文件夹下面直接搜索。一般都能找到。这个方法我还经常用于找packet格式上,而且有时候遇到没见过的协议,直接找名字也会获得帮助。所以多搜索是我万能的办法。

       另外,关于childprocess问题,我最开始遇到的时候,感觉到了一个智商的暴击。点开wireless_lan_mac的我,深深地疑问,为什么802.11这么复杂的一个协议居然只有一个状态机???

opnet改代码的初始——细节与坚持_第4张图片

opnet改代码的初始——细节与坚持_第5张图片

然后起码一周以后,我才找到child process的入口。

opnet改代码的初始——细节与坚持_第6张图片

点开有桃花源记的feel。这才是正确的802.11MAC,这才是有退避机制、有ACK、有RTS、有CTS的MAC啊。

opnet改代码的初始——细节与坚持_第7张图片

(3) 关于代码在哪里写的问题

这个我觉得细节颇多,比如状态转移函数、状态进入和离开函数这些。但是《OPNET Modeler与网络仿真》这本书的第六章6.1写的很清楚明白。我觉得可以一看。

 

第二点,     我们总结一下到目前为止出现的各种错误细节,和一些经验备用。

(1)    通过远程中断,可以跨越process给到别人中断

/*在当前仿真事件预设一个远程中断*/

op_intrpt_schedule_remote(op_sim_time(),1,processID)

 

(2)    关于定时中断

opnet改代码的初始——细节与坚持_第8张图片

状态转移函数

#define PROGRESS_SCAN        (op_intrpt_type() == OPC_INTRPT_SELF && op_intrpt_code() == WPANC_PROGRESS_SCAN_CODE)

 

(3)    接收从下层到达的packet,并发送给上层,和关于如何接受上层到达的packet,参考802.15.4 wpan_mac_handle_wireless_pk、wlan_higher_layer_data_arrival等

(4)    *compiler debug(对个人起到提醒作用,对其他人无用)

1. 发现undeclared identifier,一般在sv或hb以及本function内查找,分别对应process内的变量、全局变量和局部变量。如果没定义请添加

2. 注意声明外部文件,packet格式,子process,在file-下面对应列表内。并在hb中检查。

3. DCF提供尽力而为的服务,PCF提供有轮询的服务,需要AP,adhoc没有AP,所以按照DCF进行

opnet改代码的初始——细节与坚持_第9张图片

所以所有PCF相关的内容都不需要。

4. NAV

虚拟载波监听是由网络分配矢量(Network AllocationVector,简称NAV)所提供。802.11的帧通常会包含一个duration位,用来预定一段介质使用时间。NAV本身就是一个计时器,用来指定预计要占用介质多少时间,以微秒为单位。工作站会将NAV设定为预计使用介质的时间,这包括完成整个处理必须用到的所有帧。其他工作站会由NAV值倒数至零。只要NAV的值不为零,代表介质处于忙的状态,此即虚拟载波监听功能。当NAV为零时,虚拟载波监听功能会显示介质处于闲置状态。

保持duration为0,因为process的运行会保证挨个开放传输。

5. fragment去除

原本为了packet太大,切碎使用,作为帧的一个位标识该帧有没有切碎。

6.    ap_flag标识是否使能AP(Acess Point)

7.    查看了所有节点的bss identifier 都是0,可能也没有bss?

说明没有AP就没有bss

8.    选择也不重发,删掉wlan_transmit_frame_copy_ptr,也不要ACK


9.    CTS-to-self删除CTS功能

10.  确定接收的物理层数据的格式

opnet改代码的初始——细节与坚持_第10张图片

11.  op_stat_write删掉了

 

 

你可能感兴趣的:(opnet)