2022年OPNET入门学习教程 .pdf
OPNET 入门学习教程?创建进程和节点模型?定义变量,宏( Macros)和过渡?运行仿真?分析仿真结果概念:一个进程模型是一个有限状态机(finite state machine ,FSM ) ,它代表了一个模块的逻辑和行为。一个有限状态机定义了模型的状态和改变状态的标准。OPNET 采用增强的C/C+ 修改 FSM ,称为Proto-C (原始 C) 。使用Proto-C 的三种场合:1. Enter Executive 进入执行2.Exit Executive 退出执行3.Transition Executive 转移执行模型设计:1. 打开 OPNET ,选择 FileNew.,然后通过下拉菜单选Process Model,单击“ OK ” 。2. 点击“Creat State” ,在工作区放置3 个状态。其中第一个状态会自动设为 initial state(带有箭头)。3. 右击 initial state ,选择“ Set name ” ,修改名称: init,确定。4. 其余 2 个状态分别命名为idle (空闲)和 arrival(到达) 。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 10 页 - - - - - - - - - OPNET 进程模型里,包括 非强制状态 (红色)和 强制状态 (绿色) 。非强制状态(红色) 是指状态执行完之后,将控制权返回给 Simulation Kernel 。强制状态(绿色)是指状态执行完之后,立即执行退出操作或者转移到其他状态,并不返回控制权。由于 arrival状态需要统计包数,并销毁数据包,然后回到空闲状态,因此, arrival状态应该是一个强制状态。另外,init 状态必须转移到 idle状态,因此它也应该是强制状态。1.右击 init 状态,选择 Make State Forced 。2.右击 arrival 状态,选择 Make State Forced 。创建状态转移:状态转移分为 无条件转移 和条件转移(unconditional and conditional)。1.单击“Create Transition” 。2.先点 init state,后点 idle state。3.绘制曲线状态转移线, 先点 idle state ,然后在 idle和 arrival之间点一下,再点arrival state。右击完成绘制。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 10 页 - - - - - - - - - 4.在 idle和 arrival之间的状态转移线上右击 (先选中,再右击) ,选择 Edit Attributes,在 condition的 value 中输入“ARRIVAL ”(一定要大写)。确定。这是就条件转移。5.点击 Create Transition,绘制从 arrival到 idle的转移。6.绘制从 idle到它自己的转移。右击完成绘制。7.右击 idle 到它自己的状态转移线,选择Edit Attributes。8.修改 condition的 value 为“default ” (小写) ,确定。下面定义 ARRIVAL 宏:1. 点击“ Edit Header Block” 。打开 edit pad 。2. 输入:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 10 页 - - - - - - - - - #define ARRIVAL (op_intrpt_type () = OPC_INTRPT_STRM)3. 点击关闭,保存。下面声明两个变量:一个用于存储数据包计数,另一个用于“handle”局部统计分析数据包。1. 点击 Edit State Variables。2. 输入:Type Name Comments int pk_count Counts total packets Stathandle pk_cnt_stathandle Statistic to record packet count 3. 点击 OK ,保存,关闭。统计量是用于后面的数据分析,在进程模型中是需要声明的。4. 选择 InterfaceLocal Statistics。5. 在 Stat Name 处输入 packet count 。后面自动设为 Single 和 N/A。6. 单击 Desc.(Description),输入 Number of packets received,并保存。7. 单击 OK 。创建状态执行:1. 双击 init状态的上半部分 ,进入 Enter Executives。2. 要初始化 pk_count 和 pk_cnt_stathandle,输入:pk_count = 0; pk_cnt_stathandle = op_stat_reg (packet count, OPC_STAT_INDEX_NONE, OPC_STAT_LOCAL); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 10 页 - - - - - - - - - 3. 关闭,保存。上面 pk_count和 pk_cnt_stathandle变量是你定义的状态变量,但op_stat_reg ()函数是一个仿真内核程序(组)。OPNET 内包括了几百个内核函数可供调用。每个状态下面的数字表示状态执行“Enter/Exit ”操作的指令行数。例如init 状态开始是 0/0,现在是 3/0 。可以在空白处右击,选择显示/隐藏行计数。对 arrival状态的设置:1. 双击 arrival状态的上半部分。2. 要增加数据包计数,输入:+pk_count;3. 要丢弃得到的数据包,输入:op_pk_destroy (op_pk_get (op_intrpt_strm (); 4. 对数据包的统计记录,输入:op_stat_write (pk_cnt_stathandle, pk_count); 5. 保存,退出。上 面 这 些 基 本 内 核 程 序 的 调 用 , 可 参 考Help Essential Kernel Procedures 。很有用的! KPs 是 Kernel Procedures的缩写。编辑进程接口:1. 选择 Interfaces Process Interfaces。2. 将 begsim intrpt的 Initial Value改为 enabled 。 (产生中断)3. 将 endsim intrpt, failure intrpts, intrpt interval, recovery intrpts, 和 super priority的 Initial Value设为 disabled 。4. 将 priority的 Initial Value设为 0。5. 将所有参数的 Status 属性改为 hidden 。6. 保存,退出。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 10 页 - - - - - - - - - 编译模型 : (每个进程模型在使用前都必须进行编译)1. 点击编译进程模型。2. 保存,命名为 _packet_count。3. 关闭编译状态对话框。4. 关闭进程编辑器。建立网络和节点模型建立节点模型:1. 选择 File New.,然后选 Node Model,确定。2. 点击 Create Processor ,创建 3 个节点。3. 点击 Create Packet Stream,建立如下连接:4. 右击 p_0, Edit Attributes, 修改名字为 src1 , 修改 process model为 simple_source 。确定。5. 右击 p_1, Edit Attributes, 修改名字为 count , 修改 process model为_packet_count。确定。6. 右击 p_2, Edit Attributes, 修改名字为 src2 , 修改 process model为 simple_source 。在 Packet Interarrival Time属性栏的位置右击,选择 Promote(提升) Attribute to Higher Level 。确定。1. 选择 Interfaces Node Statistics。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 10 页 - - - - - - - - - 2. 点击 Orig.Name,选择 count.packet count,然后点 Promote。3. 把 Prom.Name 改为 node packet count。4. 把 Desc. 改为 Number of packets received at the node level。关闭窗口。保存。5. 选择 File Save,命名为 _packet_count。 (节点和进程的名字可以相同,但后缀名不同) 。6. 关闭节点编辑器。创建网络:1. 新建项目,项目名_packet_count,场景constant 。Quit 。2. 打开对象面板, 进入图标视图,点击 Configure Palette. 3. 点 击clear, 点击 右边 的Node Models , 设 置_packet_count的Status为included。 保 存 为_packet_count。4. 放置_packet_count节点,关闭对象面板。5. 右击节点,选择 Choose Individual DES Statistics。下面将:?创建一个包内的节点流量(动画节点动画)动画。?指定节点包计数统计收集(节点统计节点的数据包数) 。?指定节点包计数统计动画(animation ) 。6. 选择 Animations Node Animation。再选择 Node Statistics node packet count。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 10 页 - - - - - - - - - 7. 右 击Node Statistics node packet count , 选 择 Record Statistic Animation。确定,关闭窗口。8. 右击节点,Edit Attributes, 点击 src2.Packet Interarrival Time的 value为 promoted。确保 Distribution为 constant ,Mean outcome为 1.0 。确定,保存。仿真配置:1. 选择 DES Configure/Run Discrete Event Simulation. 2. 设置:?Duration: 100 seconds ?Seed: 1471 ?Values per statistic: 100 3. 展开 Outputs ,Animation 。点击 2D ,再确保 Send animation to history file被 选 中 。 点 击Apply 。 再 点Cancel , 关 闭Configure/Run DES 对话框,不进行仿真。下面新建一个场景进行对比:1. 选择 Scenarios Duplicate Scenario.(复制场景)。2. 命名新场景 exponential,点击 OK 。3. 右击节点,Edit Attributes。 点击 src2.Packet Interarrival Time的 value 栏,打开对话框。4. 在 Distribution name中选择 exponential ,确保 Mean outcome名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 10 页 - - - - - - - - - 是 1.0 。确定,确定。保存项目 _packet_count。运行仿真:1. 在管理场景对话框中,可以同时运行两个仿真。选择Edit Preferences ,确保 Network Simulation Repositories是() ,如果不是,就删除所有内容。确定。2. 选择 Scenarios Manage Scenarios.,把两个 Results 都改为。3. 确定,运行仿真。完成后,关闭DES Execution Manager 。分析结果:1. 在项目编辑器中查看结果, 如果要切换场景的话,选择 Scenarios Switch To Scenario exponential. 2. 右击 node_0,View Results ,打开 Results Browser 。3. 选择 Object Statistics node_0 node packet count 。点 Show 。4. 在 20s 到 1min 之间,可以选择一个方框进行放大。 可以查看细节。5. 关闭图表, delete 。6. 在 Results Browser 中, 在 Results for: 中找到 Current Project 。7. 要切换到 constant 场景,点击 _packet_count exponential,然后选择 _packet_count constant,显示 Object Statistics node_0 node packet count 。可以放大查看。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 10 页 - - - - - - - - - 8. 在图表上右击,选择Draw Style Discrete。显示离散图。离散图形显示了仿真内核(Simulation Kernel )每秒发送2 个数据包,但分别计数。 该图也表明了仿真核基于事件运行的性质。同时发生的事件 (每秒钟到达多个包)造成仿真核提前了仿真时间一次,但调用packet_count两次。 而且,packet_count进程每次被调用时都递增一次数据包统计数。9. 关闭图表, delete 。关闭 Results Browser。1. DES Play 2D Animation。2. 要查看包的动画,Windows Animation Viewer top.node_0 packet flow. 3. 退出动画查看, File Exit。4. 要查看 constant场景的动画,先切换场景,Scenarios Switch to Scenario constant,然后 DES Play 2D Animation。5. 退出动画查看器。您现在已经完成了“ Basic Process”的学习。你应该对通过创建用户进程模型来控制节点行为有一个很好的理解。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 10 页 - - - - - - - - -