李萍
可以完成大多数情况下的仿真任务,但是在特殊领域没有现成模型应用情况下,必须应用OPNET核心函数自定义模型,完成仿真任务。在包结构定义、链路定义和节点定义完整流程的基础上,实现网络构建,完成仿真,加快网络协议研究进程。
关键词:OPNET;网络;仿真;模型;核心函数
中图分类号:TP399 文献标识码:A 文章编号:1009-3044(2018)19-0255-02
Abstract:OPNET is a kind of Network simulation software that is often used to simulate the network protocol. we can complete the most simulation tasks with OPNET. However, in some special fields without any ready-made models, it is necessary to use the OPNET core function to custom model for the simulation task. On the basis of the definition of packet format, link model node model and the corresponding process to the node, we can complete the network construction and the simulation tasks, so the protocols R&D; process becomes shorter.
Key words: OPNET; network; simulation; model; kernel function
OPNET是一款比较成熟的网络仿真软件,集成几乎所有的目前成熟应用的系统模型,因此,普通仿真需求,使用软件自带模型库可以完全满足[1][2],但是,在一些特殊场合,比如SCPS-TP、新协议验证等领域,需要自定义包格式、链路模型、节点模型,构建网络,实现仿真,达到改进设计的目的。
1 OPNET核心函数介绍
OPNET核心函数包括7类,即分布类核心函数、事件类核心函数、控制接口类核心函数、标识类核心函数、内部模型访问类核心函数、中断类核心函数、包类核心函数,比较常用的有:①包类函数:op_pk_create()创建一个无格式的包,op_pk_create_fmt()创建一个有格式的包,op_pk_send()包发送函数,op_pk_send_delayed()包延时发送函数,op_pk_send_quiet()包静默发送函数,op_pk_get()接收包,op_pk_nfd_get()获取包中某字段内容,op_pk_nfd_set()设置包中某字段内容,op_pk_creation_time_get()获取包原始创建的时间,op_pk_destroy()销毁包。②中断类核心函数:op_intrpt_strm()流中断函数,返回接收的流索引号。③分布类核心函数:op_dist_load()定義一个带参数的随机分布函数,返回指向一个分布函数的指针distribution*,op_dist_outcome()产生一个服从分布函数的随机数。
2 模型定义及网络构建方法
遵循:包格式→链路模型→中心节点模型→用户节点模型→网络模型的顺序,依次完成仿真网络环境定义构建。
1) 包格式模型定义
file→new→packet format,创建包格式,增加目的地址字段(field):dest_address,32bits,保存为lp_sample_format以备后用。
2) 链路模型定义
file→new→link model,创建链路模型;支持的链路类型(supported link type):ptdup(全双工点对点链路),支持的包格式:lp_sample_format,速率(data rate):2048000bps,纠错模式(ecc model):ecc_zero_err(无纠错功能),误码模型(error model):error_zero_err(无误码),发送延时(txdel model):dpt_txdel(全双工点到点发送延时),传输延时(prodel model):dpt_prodel(全双工点到点传输延时);由于用到dpt_txdel和dpt_prodel,必须申明外部函数文件:file→declare external files→link delay;将链路模型保存为:lp_sample_link。
3) 中心节点模型定义
创建节点模型: ①三对收发信机,②一个包交换处理进程③六条有向包流;选择所有收发信机,设置属性:速率(data rate):2048000bps,包格式(packet format):lp_sample_format,并将设置值应用于所有收发信机;从菜单interfaces→node interface选择fixed(固定);保存节点为lp_center_node。
创建用于该节点的进程模型,file→new→process model,加入一个非强制状态wait,两条到自身的状态转移线,一条default,默认转移路径,一条PK_ARRVL/pk_switch(),处理包交换。
头块:#define PK_ARRVL (op_intrpt_type==OPC_INTRPT_STRM) //包流到达触发中断
函数块:static void pk_switch()
{
int dest_address; //定义目的地址变量
Packet* pkptr; //定义包指针,用于存放包
FIN(pk_switch());
pkptr=op_pk_get(op_intrpt_strm()); //获取包
op_pk_nfd_get(pkptr,”dest_address”,&dest;_address) ;
//从包中取出字段dest_address值存入变量dest_address。
Op_pk_send(pkptr,dest_address); //将包从流索引号为dest_address端口发送出去
FOUT;
}
从菜单Interfaces→process interface中将begsim intrpt设置为enable,激活仿真中断。
保存进程模型为lp_sample_proc,编译该进程,并将编译好的进程用于中心节点模型(lp_center_node)中的center进程。
4) 用户节点模型定义
用户节点定义与中心节点定义类似,src的process model选simple source,packet format选lp_sample_format,rcv和xmt的属性选择:channel的value输入2048000,packet format仅支持lp_sample_format,从菜单interfaces→node interface选择fixed(固定);保存节点为lp_user_node。
建立应用于该节点的进程模型,在proc进程中加入强制状态init和非强制状态idle,建立状态转移条件和函数如图3所示。
Init状态的入口代码执行初始化:
Distribution* address_dist;
address_dist=op_dist_load(“uniform_int”,0,2); //产生0-2的均匀分布的整数分布函数
在HB(头块)中进行宏定义:
#define RCV_IN_STRM 1
#define SRC_IN_STRM 0
#define XMT_OUT_STRM 0
#define SRC_ARRCL (op_intrpt_type==OPC_INTRPT_STRM&&op;_intrpt_strm==SRC_IN_STRM)
#define RCV_ARRCL (op_intrpt_type==OPC_INTRPT_STRM&&op;_intrpt_strm==RCV_IN_STRM)
在FB(函数块)中定义xmt()函数关键代码如下:
Pkptr=op_pk_get(SRC_IN_STRM); //接收源发送的包
op_pk_nfd_set_int32(pkptr,”dest_address”,(int)op_dist_outcome(address_dist));
//产生0-2间的整数,用该整数做目的地址,填充包中dest_address字段内容。
Op_pk_send(pkptr,XMT_OUT_STRM);
//将包从流索引号为XMT_OUT_STRM的端口发送出去
其他函数实现代码从略,将接口设定进程接口begsim intrpt属性为enable,激活仿真中断,编译后保存为lp_user_proc,并应用于lp_user_node中的proc进程。
5) 网络模型构建
使用以上建立的链路、节点模型搭建仿真网络,实现仿真,观察仿真结果的统计量,修改网络设置参数,使性能提升到满意程度,达到协议研究与改进的目的。
3 结论
OPNET可以实现复杂网络结构仿真,可以实现复杂协议仿真,通用性强,适用性广,是网络仿真常用工具之一。OPNET仿真普遍采用既有模型,通过改变终端、服务器、链路、协议、应用等属性参数,满足仿真要求,实现仿真[3][4][5]。但是,特定协议或特定要求下的仿真仍然具有广泛需求,灵活利用核心函数,自定义模型构建网络进行仿真,具有系统默认模型所不具有的灵活性和优越性。该方法用于SCPS-TP协议部分机制的调试仿真上,起到重要作用,在没有成熟模型参考的空间通信协议的仿真上具有重要意义。
参考文献:
[1] 潘天亮,蔡泽祥,席禹,等.基于OPNET的广域测量系统仿真与通信延时性能分析[J].电力系统保护与控制,2017(17):51-57.
[2] 白江涛,吴巍,李文江.基于OPNET的混合关键性网络建模与仿真分析[J].电讯技术,2017(11):1301-1306.
[3] 胡榮,李力,付艳兰等.基于OPNET的智能变电站通信建模与组网研究[J].广东电力,2017(10):75-80.
[4] 吴冰.对基于OPNET的军事通信网半实物仿真技术分析[J.中国新通信,2018(3):33-33.
[5] 刘蕴韬,秦元庆,周纯杰.联合仿真中OPNET统计量的实时导出方法[J].信息技术,2018(5):13-17.