OPNET入门学习教程二Basic Proess.docx
- 文档编号:7752981
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:7
- 大小:74.22KB
OPNET入门学习教程二Basic Proess.docx
《OPNET入门学习教程二Basic Proess.docx》由会员分享,可在线阅读,更多相关《OPNET入门学习教程二Basic Proess.docx(7页珍藏版)》请在冰豆网上搜索。
OPNET入门学习教程二BasicProess
第二课BasicProcesses
在本课中,你学会做以下事情:
•创建进程和节点模型
•定义变量,宏(Macros)和过渡
•运行仿真
•分析仿真结果
这个课程介绍如何建立一个模块,统计它接收的数据包数,然后把这个数字进行制图统计。
对于每一个收到的数据包,进程模型递增一个变量并记录变量的值。
概念:
一个进程模型是一个有限状态机(finitestatemachine,FSM),它代表了一个模块的逻辑和行为。
一个有限状态机定义了模型的状态和改变状态的标准。
OPNET采用增强的C/C++修改FSM,称为Proto-C(原始C)。
使用Proto-C的三种场合:
1.EnterExecutive进入执行2.ExitExecutive退出执行
3.TransitionExecutive转移执行
模型设计:
1.打开OPNET,选择File>New...,然后通过下拉菜单选Process
Model,单击“OK”。
2.点击“CreatState”,在工作区放置3个状态。
其中第一个状态会自动设为initialstate(带有箭头)。
3.右击initialstate,选择“Setname”,修改名称:
init,确定。
4.其余2个状态分别命名为idle(空闲)和arrival(到达)。
OPNET进程模型里,包括非强制状态(红色)和强制状态(绿色)。
非强制状态(红色)是指状态执行完之后,将控制权返回给SimulationKernel。
强制状态(绿色)是指状态执行完之后,立即执行退出操作或者转移到其他状态,并不返回控制权。
由于arrival状态需要统计包数,并销毁数据包,然后回到空闲状态,因此,arrival状态应该是一个强制状态。
另外,init状态必须转移到idle状态,因此它也应该是强制状态。
1.右击init状态,选择MakeStateForced。
2.右击arrival状态,选择MakeStateForced。
创建状态转移:
状态转移分为无条件转移和条件转移(unconditionalandconditional)。
1.单击“CreateTransition”。
2.先点initstate,后点idlestate。
3.绘制曲线状态转移线,先点idlestate,然后在idle和arrival之间点一下,再点arrivalstate。
右击完成绘制。
4.在idle和arrival之间的状态转移线上右击(先选中,再右击),选择EditAttributes,在condition的value中输入“ARRIVAL”(一定要大写)。
确定。
这是就条件转移。
5.点击CreateTransition,绘制从arrival到idle的转移。
6.绘制从idle到它自己的转移。
右击完成绘制。
7.右击idle到它自己的状态转移线,选择EditAttributes。
8.修改condition的value为“default”(小写),确定。
下面定义ARRIVAL宏:
1.点击“EditHeaderBlock”。
打开editpad。
2.输入:
#defineARRIVAL(op_intrpt_type()==OPC_INTRPT_STRM)
3.点击关闭,保存。
下面声明两个变量:
一个用于存储数据包计数,另一个用于“handle”局部统计分析数据包。
1.点击EditStateVariables。
2.输入:
Type
Name
Comments
int
pk_count
Countstotalpackets
Stathandle
pk_cnt_stathandle
Statistictorecordpacketcount
3.点击OK,保存,关闭。
统计量是用于后面的数据分析,在进程模型中是需要声明的。
4.选择Interface>LocalStatistics。
5.在StatName处输入packetcount。
后面自动设为Single和N/A。
6.单击Desc.(Description),输入Numberofpacketsreceived,并保存。
7.单击OK。
创建状态执行:
1.双击init状态的上半部分,进入EnterExecutives。
2.要初始化pk_count和pk_cnt_stathandle,输入:
pk_count=0;
pk_cnt_stathandle=op_stat_reg("packetcount",
OPC_STAT_INDEX_NONE,OPC_STAT_LOCAL);
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>EssentialKernelProcedures。
很有用的!
KPs是KernelProcedures的缩写。
编辑进程接口:
1.选择Interfaces >Process Interfaces。
2.将begsimintrpt的InitialValue改为enabled。
(产生中断)
3.将endsimintrpt,failureintrpts,intrptinterval,recoveryintrpts,和superpriority的InitialValue设为disabled。
4.将priority的InitialValue设为0。
5.将所有参数的Status属性改为hidden。
6.保存,退出。
编译模型:
(每个进程模型在使用前都必须进行编译)
1.点击编译进程模型。
2.保存,命名为
3.关闭编译状态对话框。
4.关闭进程编辑器。
建立网络和节点模型
建立节点模型:
1.选择File>New...,然后选NodeModel,确定。
2.点击CreateProcessor,创建3个节点。
3.点击CreatePacketStream,建立如下连接:
4.右击p_0,EditAttributes,修改名字为src1,修改processmodel为simple_source。
确定。
5.右击p_1,EditAttributes,修改名字为count,修改processmodel为
确定。
6.右击p_2,EditAttributes,修改名字为src2,修改processmodel为simple_source。
在PacketInterarrivalTime属性栏的位置右击,选择Promote(提升)AttributetoHigherLevel。
确定。
1.选择Interfaces>NodeStatistics。
2.点击Orig.Name,选择count.packetcount,然后点Promote。
3.把Prom.Name改为nodepacketcount。
4.把Desc.改为Numberofpacketsreceivedatthenodelevel。
关闭窗口。
保存。
5.选择File>Save,命名为
(节点和进程的名字可以相同,但后缀名不同)。
6.关闭节点编辑器。
创建网络:
1.新建项目,项目名
Quit。
2.打开对象面板,
,进入图标视图,点击ConfigurePalette...
3.点击clear,点击右边的NodeModels,设置
保存为
4.放置
5.右击节点,选择ChooseIndividualDESStatistics。
下面将:
•创建一个包内的节点流量(动画>节点动画)动画。
•指定节点包计数统计收集(节点统计>节点的数据包数)。
•指定节点包计数统计动画(animation)。
6.选择Animations>NodeAnimation。
再选择NodeStatistics>nodepacketcount。
7.右击NodeStatistics>nodepacketcount,选择RecordStatisticAnimation。
确定,关闭窗口。
8.右击节点,EditAttributes,点击src2.PacketInterarrivalTime的value为promoted。
确保Distribution为constant,Meanoutcome为1.0。
确定,保存。
仿真配置:
1.选择DES>Configure/RunDiscreteEventSimulation...
2.设置:
◦Duration:
100seconds
◦Seed:
1471
◦Valuesperstatistic:
100
3.展开Outputs,Animation。
点击2D,再确保Sendanimationtohistoryfile被选中。
点击Apply。
再点Cancel,关闭Configure/RunDES对话框,不进行仿真。
下面新建一个场景进行对比:
1.选择Scenarios>DuplicateScenario...(复制场景)。
2.命名新场景exponential,点击OK。
3.右击节点,EditAttributes。
点击src2.PacketInterarrivalTime的value栏,打开对话框。
4.在Distributionname中选择exponential,确保Meanoutcome是1.0。
确定,确定。
保存项目
运行仿真:
1.在管理场景对话框中,可以同时运行两个仿真。
选择Edit>Preferences,确保NetworkSimulationRepositories是(),如果不是,就删除所有内容。
确定。
2.选择Scenarios>ManageScenarios...,把两个Results都改为
3.确定,运行仿真。
完成后,关闭DESExecutionManager。
分析结果:
1.在项目编辑器中查看结果,如果要切换场景的话,选择Scenarios>SwitchToScenario>exponential.
2.右击node_0,ViewResults,打开ResultsBrowser。
3.选择ObjectStatistics>node_0>nodepacketcount。
点Show。
4.在20s到1min之间,可以选择一个方框进行放大。
可以查看细节。
5.关闭图表,delete。
6.在ResultsBrowser中,在Resultsfor:
中找到CurrentProject。
7.要切换到constant场景,点击
可以放大查看。
8.在图表上右击,选择DrawStyle>Discrete。
显示离散图。
离散图形显示了仿真内核(SimulationKernel)每秒发送2个数据包,但分别计数。
该图也表明了仿真核基于事件运行的性质。
同时发生的事件(每秒钟到达多个包)造成仿真核提前了仿真时间一次,但调用packet_count两次。
而且,packet_count进程每次被调用时都递增一次数据包统计数。
9.关闭图表,delete。
关闭ResultsBrowser。
1.DES>Play2DAnimation。
2.要查看包的动画,Windows>AnimationViewer>top.node_0packetflow.
3.退出动画查看,File>Exit。
4.要查看constant场景的动画,先切换场景,Scenarios>SwitchtoScenario>constant,然后DES>Play2DAnimation。
5.退出动画查看器。
您现在已经完成了“BasicProcess”的学习。
你应该对通过创建用户进程模型来控制节点行为有一个很好的理解。
下一课学习分组交换PacketSwitching,探讨分组交换网络。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OPNET入门学习教程二Basic Proess OPNET 入门 学习 教程 Basic