环境配置

  1. visual studio 2010
  2. OPNET 14.5
    具体安装过程见vjone大神的博客 https://blog.csdn.net/qq_31285709/article/details/87873709

过程

  • 创建进程模型
  • 创建节点模型
  • 定义变量,宏块和状态转移
  • 分析仿真结果

实现进程模型

OPNET允许在状态和转移中写入C/C++代码,包括:

  • 入口执行代码:当模块转移到一个新状态时执行的代码
  • 出口执行代码:当模块离开一个状态时执行的代码
  • 状态转移执行代码:在转移过程中顺带执行的代码
  1. 创建三个状态,分别命名。
  2. 将init和arrival状态修改为forced状态,转移到绿色状态将依次执行入口执行代码和出口执行代码,然后立即转译为其他状态。idle为unforced状态,转移到该状态的时候,执行完入口执行代码之后,模块将程序的控制权转回仿真核心,模块在此停滞,等待下一个事件到达激活模块。
  3. 创建状态转移线。
  4. 创建条件转移需要设置条件属性。只有当一个包到达的时候进程模型才从idle状态转移到arrival状态,因此需要为idle和arrival之间的状态转移设置条件。通过右键转移线,“set Attributes",设置codition属性为ARRIVAL。之后需要定义ARRIVAL条件为包到达并且进程模型在idle状态。
  5. 再创建arrival到idle的转移线和idle到自身的转移线。并将idle返回自身的转移线设置为default。(default是OPNET自带的默认条件)

定义条件和变量

定义宏

在OPNET中,经常用宏来替换复杂的转移条件和状态转移执行代码。一般在header block中使用#define定义宏

在HB中加入如下代码:

#define ARRIVAL (op_intrpt_type() == OPC_INTRPT_STRM)

当终端到达仿真核心的时候,仿真核心调用op_intrpt_type()函数,将其返回值与OPC_INTRPT_STRM常量比较,如果相等,则说明中断是由包到达引起的,此时arrival条件满足。

定义两个状态变量

点击SV,申明两个状态变量,一个用来存储包计数器的值,一个用来将计数器的值写入统计量的句柄。
注:定义在SV中的状态变量,当模块将程序控制权交给仿真核心的时候,他们的值受保护。定义在TV中的值是临时变量,不受保护。

申明一个统计量

在interface中选择”Local Statistics”,加入统计量packet count(注意这里,没有线),如下图所示:

创建状态执行代码

点击init的上半部,输入以下代码:

pk_count = 0;
/*注册申明的统计量,得到与它关联的统计量句柄pk_cnt_stathandle*/
pk_cnt_stathandle = op_stat_req ("packet count", OPC_STAT_INDEX_NONE,OPC_STAT_LOCAL);

双击arrival的上半部,输入以下代码:

pk_count = pk_count + 1;
op_pk_destroy (op_pk_get (op_intrpt_strm()));
op_stat_write(pk_cnt_stathandle,pk_count);

op_intrpt_strm:决定中断来自哪个包流,返回包流的索引号。
op_pk_get:返回一个指向包数据结构的指针。
op_pk_destroy:将包指针指向的内存块释放。

第三句将当前计数器值通过核心函数op_stat_write写入状态统计句柄pk_cnt_stathandle
(查看OPNET自带的核心函数说明可以在Help才难中选择Essential Kernel Procedures)

编辑进程界面

编译进程模型

  1. 单击最右边的编译按钮
  2. 将进程模型保存为packet_count

    注意,在这里,显示的应该是64位的,如果不是,则选择compile process module(advanced),将32位取消勾选。

创建节点模型

本例节点模型包含两个包生成模块,他们将包发送到一个处理模块中(即创建的packet_count进程模型)

三个节点的属性设置如下:


创建网络模型

进行仿真

在module statistics中勾选如下:(不知道为什么,node statistics中没有选项)

设置duplicate scenario:


运行仿真,仿真配置如下:

仿真结束如下所示:

constant仿真结果如下:

exponential仿真结果如下:
图中的毛刺是包突发到达(服从指数分布规律)引发的曲线的斜率,而曲线的斜率,即包的吞吐量和包生成速率相符。

遇到的问题以及解决方法

  1. "string.h"头文件找不到,于是卸载了visual studio 2017,更换为visual studio 2010,目前报错:

    参见北邮人论坛https://bbs.byr.cn/#!article/Communications/21855 ,直接将C:\Users\Administrator\op_admin这个目录删除,重启OPNET即可解决该问题。
  2. 仿真编译的时候,报错如下:
  3. 按照博客 https://www.2cto.com/kf/201708/663865.html 修改之后,报错如下:LINK : fatal error LNK1181: 无法打开输入文件“kernel32.lib”
    解决方法是在系统变量中加入C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib\x64;
  4. 在过一段时间重启OPNET的时候,会报错License失效,解决方法见博客 https://blog.csdn.net/jdzd123/article/details/51142023

OPNET常用编译器使用实例和相关问题相关推荐

  1. mongodb 导出指定数据库文件大小_大数据技术之将mongodb 数据指定字段导出,然后指定字段导入mysql 实例 及相关问题解决...

    本篇文章探讨了大数据技术之将mongodb 数据指定字段导出,然后指定字段导入mysql 实例 及相关问题解决,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入. 需求:将mongo ...

  2. Git的基本概念/常用命令及实例

    Git的基本概念/常用命令及实例 什么是仓库 在 Git 的概念中,仓库,就是你存在.git目录的那个文件夹内的所有文件,包括隐藏的文件,Git程序会再当前目录以及上级目录查找是否存在.git文件,如 ...

  3. 郭卓惺:互动课堂的搭建实例及相关领域应用

    本文来自腾讯云技术沙龙,本次沙龙主题为在线教育个性化教学技术实践 演讲嘉宾:郭卓惺 | 腾讯视频云终端技术中心 随着在线教育覆盖面的增加,互动课堂授课方式正在向多样化发展,为了适应新形式的发展,腾讯视 ...

  4. Echarts数据可视化echarts实例的相关操作,开发全解+完美注释

    全栈工程师开发手册 (作者:栾鹏) Echarts数据可视化开发代码注释全解 Echarts数据可视化开发参数配置全解 6大公共组件详解(点击进入): title详解. tooltip详解.toolb ...

  5. 郭卓惺:互动课堂的搭建实例及相关领域应用 1

    本文来自腾讯云技术沙龙,本次沙龙主题为在线教育个性化教学技术实践 演讲嘉宾:郭卓惺 | 腾讯视频云终端技术中心 随着在线教育覆盖面的增加,互动课堂授课方式正在向多样化发展,为了适应新形式的发展,腾讯视 ...

  6. 常用的跟外链相关的几种工具

    大米的妄想  很多SEO工具,是一线SEO工具每天必用的,但是很多SEO新手并不会用甚至不知道一些重要的SEO工具,这其实是拉开SEO新手和老手之间差距的一大原因. 一个善于利用SEO工具的人,他的优 ...

  7. MySQL/Hive 常用窗口函数详解及相关面试题

    目录 一.窗口函数概述: 1.窗口函数的分类 2.窗口函数与普通聚合函数的区别: 二.窗口函数的基本用法 1.基本语法 2.设置窗口的方法 1)window_name 2) partition by ...

  8. excel函数提取计算机登录名,EXCEL常用函数应用实例:如何提取姓名中的姓

    Excel函数一共有11类,分别是数据库函数.日期与时间函数.工程函数.财务函数.信息函数.逻辑函数.查询和引用函数.数学和三角函数.统计函数.文本函数以及用户自定义函数.对于很多人来说,并不需掌握深 ...

  9. android 字符串数组去重,GitHub - deng-ming-hao/ec-do: 实例为日常开发常用的小实例,包括数组去重,打乱数组,字母大小写转换,cookie操作的封装等。...

    ec-do 自己封装的常用操作实例 实例为日常开发常用的小实例,包括数组去重,打乱数组,字母大小写转换,cookie操作的封装等. 使用方法 引入ec-do.js //去除空格 ecDo.trim(' ...

  10. Ubuntu 常用快捷键、指令以及相关操作

    Ubuntu 常用快捷键.指令以及相关操作 Ubuntu常用快捷键.指令(简洁版) 系统自带截图工具的使用 配置环境变量 Ubuntu常用快捷键.指令(简洁版) 快捷键 快捷键 含义 Ctrl + A ...

最新文章

  1. 清华特奖答辩前10出炉,两名CS学生3篇顶会一作,有人周读3000页英文论文!
  2. 简述java中的注释以及用法_怎样理解 Java 注解和运用注解编程?
  3. 2020年github文件高速下载方法
  4. 监控系统或者网站服务器的报警及复位,机房监控系统标准和常见故障
  5. django如何给上传的图片重命名(给上传文件重命名)
  6. XCTF-MISC-新手区:stegano
  7. 方立勋_30天掌握JavaWeb_使用httpUrlConnection模似ie
  8. Java 8仍然需要LINQ吗? 还是比LINQ更好?
  9. 【DeepLearning】Exercise:Learning color features with Sparse Autoencoders
  10. 麻雀优化算法_多种智能优化算法应用案例分享-附代码
  11. 实战 | Python批量提取Win10锁屏壁纸
  12. tensorflow sigmoid 如何计算训练数据的正确率_“来自蒙娜丽莎的凝视”— 结合 TensorFlow.js 和深度学习实现...
  13. 牛逼!mysql创建库books
  14. 图解谷歌地球使用入门、谷歌地球COM API 开发入门、谷歌地球使用的初步协议分析
  15. python 描述性分析_python数据分析:美国巴尔的摩16年公务员工资数据集描述性分析...
  16. EDI的含义及其重要性
  17. 软件架构设计---产品线及系统演化
  18. 微信小程序实现评论多级展开收起以及点赞功能
  19. (软件)商标名称可用查询 申请
  20. 线程池ExecutorService

热门文章

  1. Hi3798 PWM输出控制背光
  2. 管家婆软件二次开发(在管家婆财贸双全中实现建行支付)
  3. R 计算时间序列自相关性教程
  4. 如何查找孔与轴配合的公差带表
  5. GitHub服务中断24小时11分钟事故分析报告
  6. 使用uTools快捷地图片转文字
  7. c语言erfc函数,erf、erff、erfl、erfc、erfcf、erfcl
  8. 解决servlet中post请求和get请求中文乱码现象
  9. UE4 Datasmith 材质
  10. 省花博会,或将成为跳马百亿产业的跳板