OPNET入门学习教程二Basic Proess_第1页
OPNET入门学习教程二Basic Proess_第2页
OPNET入门学习教程二Basic Proess_第3页
OPNET入门学习教程二Basic Proess_第4页
OPNET入门学习教程二Basic Proess_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二课BasicProcesses在本课中,你学会做以下事情:•创建进程和节点模型•定义变量,Z(Macros)和过渡•运行仿真•分析仿真结果这个课程介绍如何建立一个模块,统计它接收的数据包数,然后把这个数字进行制图统计。对于每一个收到的数据包,进程模型递增一个变量并记录变量的值。概念:一个进程模型是一个有限状态机(finitestatemachine,FSM),它代表了一个模块的逻辑和行为。一个有限状态机定义了模型的状态和改变状态的标准。OPNET采用增强的C/C++修改FSM,称为Proto-C(原始C)。使用Proto-C的三种场合:EnterExecutive进入执行2.ExitExecutive退出执行TransitionExecutive转移执行模型设计:打开OPNET,选择File>New...,然后通过下拉菜单选ProcessModel,单击“OK”。点击“GreatState”,在工作区放置3个状态。其中第一个状态会自动设为initialstate(带有箭头)。右击initialstate,选择“Setname”,修改名称:init,确定。其余2个状态分别命名为idle(空闲)和arrival(到达)。OPNET进程模型里,包括非强制状态(红色)和强制状态(绿色)。非强制状态(红色)是指状态执行完之后,将控制权返回给SimulationKernel。强制状态(绿色)是指状态执行完之后,立即执行退出操作或者转移到其他状态,并不返回控制权。由于arrival状态需要统计包数,并销毁数据包,然后回到空闲状态,因此,arrival状态应该是一个强制状态。另外,init状态必须转移到idle状态,因此它也应该是强制状态。右击init状态,选择MakeStateForced。右击arrival状态,选择MakeStateForced。创建状态转移:状态转移分为无条件转移和条件转移(unconditionalandconditional)°单击“CreateTransition”。落1先点initstate,后点idlestate。绘制曲线状态转移线,先点idlestate,然后在idle和arrival之间点一下,再点arrivalstate。右击完成绘制。在idle和arrival之间的状态转移线上右击(先选中,再右击),选择EditAttributes,在condition的value中输入“ARRIVAL”(一定要大写)。确定。这是就条件转移。点击CreateTransition,绘制从arrival到idle的转移。绘制从idle到它自己的转移。右击完成绘制。右击idle到它自己的状态转移线,选择EditAttributes。修改condition的value为“default”(小写),确定。

下面定义ARRIVAL宏:点击“EditHeaderBlock”。打开editpad。输入:#defineARRIVAL(op_intrpt_type()==OPC_INTRPT_STRM)点击关闭,保存。卜面声明两个变量:一个用于存储数据包计数,另一个用于handle”局部统计分析数据包。1.点击EditStateVariables。2.输入:NameComments3.Typeintpk_count CountstotalpacketsStathandlepk_cnt_stathandleStatistictorecordpacketcount点击OK,保存,关闭。统计量是用于后面的数据分析,在进程模型中是需要声明的。1.点击EditStateVariables。2.输入:NameComments3.Typeintpk_count CountstotalpacketsStathandlepk_cnt_stathandleStatistictorecordpacketcount点击OK,保存,关闭。统计量是用于后面的数据分析,在进程模型中是需要声明的。4.选择Interface>LocalStatistics5.在StatName处输入packetcount。后面自动设为Single和N/A。6.单击Desc.(Description),输入Numberofpacketsreceived,并保存。7.单击OK。创建状态执行:双击init状态的上半部分,进入EnterExecutives。要初始化pk_count和pk_cnt_stathandle,输入:pk_count=0;pk_cnt_stathandle=op_stat_reg("packetcount",OPC_STAT_INDEX_NONE,OPC_STAT_LOCAL);关闭,保存。上面pk_count和pk_cnt_stathandle变量是你定义的状态变量,但op_stat_reg()函数是一个仿真内核程序(组)。OPNET内包括了几百个内核函数可供调用。每个状态下面的数字表示状态执行“Enter/Exit”操作的指令行数。例如init状态开始是0/0,现在是3/0。可以在空白处右击,选择显示/隐藏行计数。对arrival状态的设置:双击arrival状态的上半部分。要增加数据包计数,输入:++pk_count;要丢弃得到的数据包,输入:op_pk_destroy(op_pk_get(op_intrpt_strm()));对数据包的统计记录,输入:op_stat_write(pk_cnt_stathandle,pk_count);保存,退出。上面这些基本内核程序的调用,可参考Help>EssentialKernelProcedures。很有用的!KPs是KernelProcedures的缩写。编辑进程接口:

选择Interfaces>ProcessInterfaces.将begsimintrpt的InitialValue改为enabled。(产生中断)将endsimintrpt,failureintrpts,intrptinterval,recoveryintrpts,和superpriority的InitialValue设为disabled。将priority的InitialValue设为0。将所有参数的Status属性改为hidden。保存,退出。编译模型:(每个进程模型在使用前都必须进行编译)点击编译进程模型。曰保存,命名为<initial>_packet_count。关闭编译状态对话框。关闭进程编辑器。建立网络和节点模型建立节点模型:1.2.3.选择File>New...,然后选NodeModel,确定。1.2.3.点击CreateProcessor,创建3个节点。点击CreatePacketStream,建立如下连接:4.右击p_0,EditAttributes,修改名字为src1,修改processmodel4.为simple_source。确定。右击p_1,EditAttributes,修改名字为count,修改processmodel为<initials>_packet_count。确定。右击p_2,EditAttributes,修改名字为src2,修改processmodel为simple_sourceo在PacketInterarrivalTime属性栏的位置右击,选择Promote(提升)AttributetoHigherLevelo确定。选择Interfaces>NodeStatistics点击Orig.Name,选择count.packetcount,然后点Promote。把Prom.Name改为nodepacketcounto把Desc.改为Numberofpacketsreceivedatthenodelevelo关闭窗口。保存。选择File>Save,命名为<initials>_packet_count。(节点和进程的名字可以相同,但后缀名不同)。关闭节点编辑器。创建网络:新建项目,项目名<initials>_packet_count,场景constantoQuito打开对象面板,’,进入图标视图,点击ConfigurePalette...点击clear,点击右边的NodeModels,设置<initials>_packet_count的Status为includedo保存为<initials>_packet_count。放置<initials>_packet_count节点,关闭对象面板。右击节点,选择ChooseIndividualDESStatistics,下面将:•创建一个包内的节点流量(动画〉节点动画)动画。•指定节点包计数统计收集(节点统计〉节点的数据包数)。,指定节点包计数统计动画(animation)o选择Animations>NodeAnimation,再选择NodeStatistics>nodepacketcount。右击NodeStatistics>nodepacketcount,选择RecordStatisticAnimation。确定,关闭窗口。右击节点,EditAttributes,点击src2.PacketInterarrivalTime的value为promoted。确保Distribution为constant,Meanoutcome为1.0。确定,保存。仿真配置:选择DES>Configure/RunDiscreteEventSimulation...设置:◦Duration:100seconds◦Seed:1471◦Valuesperstatistic:100展开Outputs,Animation。点击2。,再确保Sendanimationtohistoryfile被选中。点击Apply。再点Cancel,关闭Configure/RunDES对话框,不进行仿真。下面新建一个场景进行对比:选择Scenarios>DuplicateScenario...(复制场景)。命名新场景exponential,点击OK。右击节点,EditAttributes。点击src2.PacketInterarrivalTime的value栏,打开对话框。在Distributionname中选择exponential,确保Meanoutcome是1.0。确定,确定。保存项目<initials>_packet_count。运行仿真:在管理场景对话框中,可以同时运行两个仿真。选择 Edit>Preferences,确保NetworkSimulationRepositories是(),如果不是,就删除所有内容。确定。选择Scenarios>ManageScenarios...,把两个Results都改为〈collect〉。确定,运行仿真。完成后,关闭DESExecutionManager。分析结果:在项目编辑器中查看结果,如果要切换场景的话,选择Scenarios>SwitchToScenario>exponential.右击node_0,ViewResults,打开ResultsBrowser。选择ObjectStatistics>node_0>nodepacketcounto点Show。在20s到1min之间,可以选择一个方框进行放大。可以查看细节。关闭图表,delete。在ResultsBrowser中,在Resultsfor:中找到CurrentProject。要切换到constant场景,点击<initials>_packet_count>exponential,然后选择<initials>_packet_count>constant,显示ObjectStatistics>node_0>nodepacketcount可以放大查看。在图表上右击,选择DrawStyle>Discrete。显示离散图。离散图形显示了仿真内核(SimulationKernel)每秒发送2个数据包,但分别计数。该图也表明了仿真核基于事件运行的性质。同时发生的事件(每秒钟到达多个包)造成仿真核提前了仿真时间一次,但调用packet_count两次。而且,packet_count进程每次被调用时都递增一次数据包统计数。关闭图表,delete。关闭ResultsBrowser。DES>

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论