【OPNET学习系列文章之3】两发一收
本文是建立在上一篇博文【两个固定节点通信】的基础上的,省略部分与其相同。
本文要实现两个节点发送一个节点接收的功能。这里将分为两个不同模型,发送节点模型和接收节点模型。
1.建立发送节点模型
1.1节点模型如图所示。
1.2进程模型如图所示。
1.3单击工具栏Edit Header Block图标,输入以下代码,保存。
#include <stdlib.h>
#define SEND (op_intrpt_type()==OPC_INTRPT_SELF&&op_intrpt_code()==0)
1.4双击st_1上半部分,输入以下代码,保存。
op_intrpt_schedule_self(0.0,-1);
双击st_1下半部分,输入以下代码,保存。
op_intrpt_schedule_self(op_sim_time()+0.0,0);
1.5双击st_3上半部分,输入以下代码,保存。
Packet *pkptr;
pkptr=op_pk_create_fmt("packet2");
op_pk_send(pkptr,0);//0表示从0端口发出
op_intrpt_schedule_self(op_sim_time()+0.5,0);//这里是0.5s发送一个包
(先不管st_0中的10行代码)
1.6单击菜单栏Interfaces-Process Interfaces,将begsim intrpt设为enabled,单击OK保存进程模型。单击工具栏Compile Process Model图标,编译该进程模型。在节点模型中,右击p_0,选择Edit Attribute,将process model的值设为刚才保存的进程模型名,单击OK,保存节点模型。
2.建立接收节点模型
2.1节点模型如图所示。
2.2进程模型如图所示。
2.3单击工具栏Edit Header Block图标,输入以下代码,保存。
#define ARRIVAL1 (op_intrpt_type()==OPC_INTRPT_STRM&&op_intrpt_strm()==0)
#define ARRIVAL2 (op_intrpt_type()==OPC_INTRPT_STRM&&op_intrpt_strm()==1)
2.4双击st_2和st_3上半部分,输入以下代码,保存。
Packet *pkptr;
pkptr=op_pk_get(op_intrpt_strm());
op_pk_destroy(pkptr);
(先不管st_0中的1行代码和st_2、st_3中的其他代码)
之后的步骤同上。
3.建立链路模型
设置如图所示,不同之处在于链路为单工,其余和上一篇相同。
4.建立网络模型
如图所示,0、1节点为发送节点,2节点为接收节点。
5.运行动画如图所示