opnet添加进程属性和使用oms分布函数

创建进程模型属性的作用

可以方便的在外部实现对进程的控制,而不需要进入代码中修改

创建进程模型的属性

进入进程模型——Interfaces——Model Attributes

在这里插入图片描述

创建属性项

依据需要创建各种类型的属性,填写属性名,类型,默认值,如果是string类型,默认值可以为空,如果是复合属性,现在还不能指定默认值。如下图所示:
【复合属性】:类似树形结构的属性,有多个子属性
在这里插入图片描述

这时,其实属性的创建对于一般使用已经结束,可以返回进程模块,右键-编辑属性,可以看到属性列表已经有刚刚创建的三个属性(此时复合属性还不能使用),接下来的步骤是对属性的特性进行具体的设置。
在这里插入图片描述
在这里插入图片描述

编辑属性特性

integer类型的属性

选中属性——底部Edit Properties

在这里插入图片描述

在特性编辑对话框主要有以下5项可以配置,逐一介绍

在这里插入图片描述

  1. Attribute Properties 可以选择Private或Public。如果是Private,表明该项属性只能是在该进程中使用;如果是Public,表明该项属性可以在其他进程中也可以使用,此时点击右侧的Save Public可以将已经编辑好的属性保存到本地(opnet模型库),这样在另一个进程的某个属性可以通过Load Public直接加载出来你刚刚保存的属性特性,前提是这两个属性类型一致(指的是string、int等这个类型一致)。当然,加载进来公共属性特性后,你就不能继续对该属性特性进行编辑,因为它不是你私有的,公共的东西怎么可以动呢,哈哈。此时,如果想要增加一些自己特有的属性特性,需要将public改为private,此时就可以继续编辑了。

  2. Range:有三种类型:open inclusive exclusive 表示该项属性的范围。open表示上下无限制,inclusive表示包含,exclusive表示除外

  3. Symbol map:符号映射,一种符号对应一个值,设置该项是为了方便该属性值的选择,在这儿设置后,之后选择属性值时会有下拉列表,直接从下拉列表中选择需要的值即可。如下图:
    在这里插入图片描述

  4. Default value:默认值,顾名思义

  5. 还有一个Units忘了框住了,表示该属性的单位,只是一个让人易于理解字面值,没有实际意义,之后会自动在属性一栏中用括号括住,用于备注,帮助理解(此处的单位的显示只会在复合属性的子属性中生效,对于其他类型的属性不会显示)

  6. Comments:备注,说明该属性的含义和作用,在进程块将鼠标放到属性左侧的"?"上会提示信息
    在这里插入图片描述

  7. 这样,对于integer类型的属性就完整的创建完了,其他除复合属性的类型创建方法与此一致

string类型的属性

  1. string类型的属性一般用于生成分布函数,我是在研究分布函数,所以单独拿出来介绍
    在这里插入图片描述
  2. 如上图Symbol map中,符号和值都设成了一样的名字,便于理解,而每个值代表一中分布函数的string类型(手动输入的),之后会通过函数来调用该类型的分布函数
  3. 此处分布函数的值可以设置具体的某个参数,也可以不设置具体参数,比如exponential(mean),你也可以直接设置为exponential(10),只是如果不设置具体的参数值,需要在设置参数时,先选中该属性函数,在点击Edit,手动修改mean为某个值。
  4. 关于如何依据属性获取分布函数,下面再介绍

复合属性

  1. 将属性类型设置为Compound——选择该属性——Edit Properties
    在这里插入图片描述
  2. 在该对话框编辑复合属性的子属性
    (1)同样,复合属性的子属性也可以设置对应的特性,同上面int和string类型属性的设置方法
    (2)复合属性中也可以嵌套复合属性
    如下图第一行:Default number of rows,表示默认生成几个这样的复合属性(不是子属性)
    在这里插入图片描述
  3. 点击Edit Row Count Properties,如下图,主要更改的一般就是Range,表示生成该复合属性数目的范围限制,如果将from和to都设为inclusive,值都为1,表示只生成一个该复合属性,这时在进程模块右键编辑属性中可以看到该复合属性下的Row标志也直接没有了,如果将To设为open,表示用户可以生成多个该复合属性,这个有点类似于无线发射机的channel属性,可以生成多个信道channel。
    在这里插入图片描述
    如下图所示,复合属性1只有一个,且并没有Row选项,而复合属性2有Row选项,右键Row,可以复制、删除、插入多个该复合属性
    在这里插入图片描述
  4. 编辑复合属性的特性Edit Compound Attribute Properties
    在这里插入图片描述
    在该对话框可以设置复合属性的子属性组合,如下是设置了两个组合,一个Default ,另一个是None
    设置好Symbol后,点击对应的Value,可以直接设置对应子属性的值
    在这里插入图片描述
  5. 此时复合属性的子属性如果设置了Unit,则会显示
    在这里插入图片描述

获取进程的复合属性

属性结构

如图所示是属性结构

  1. 说明:属性Traffic Generation Parameters限制了只有一个Row,只能创建一个该复合属性,所以没有显示Row,但还是有Row0的
    Row0的子属性有5个,如下图
    进程模块-右键-编辑属性
    在这里插入图片描述
    debug模式下左下角的Attrbute栏描述
    在这里插入图片描述

在状态机中编写代码获取属性

  1. 获取进程模块的id
Objid my_id;
my_id = op_id_self();
  1. 获取进程模型属性的复合属性名为Traffic Generation Parameters的Objid
Objid traf_gen_comp_attr_objid;
op_ima_obj_attr_get(my_id,"Traffic Generation Parameters",&traf_gen_comp_attr_objid);
  1. 获取第一个该复合属性(即第一个Row:Row0)的Objid,如果有多个该项复合属性,则有多个Row,Row1、Row2
Objid traf_conf_objid;
traf_conf_objid = op_topo_child (traf_gen_comp_attr_objid, OPC_OBJTYPE_GENERIC, 0);//0表示是第一个Row:Row0,如果是Row1,则将0该为1
  1. 获得Row0的各项子属性
char start_time_string[128];
double stop_time;
op_ima_obj_attr_get (traf_conf_objid, "Start Time", start_time_string);
op_ima_obj_attr_get (traf_conf_objid, "Stop Time", &stop_time);
  1. 获得Row0的复合属性Objid,同样是使用Row0的属性获取方式
Objid  pk_gen_arg_objid;
op_ima_obj_attr_get(traf_conf_objid,"Packet Generation Arguments",&pk_gen_arg_objid);

由自定义的string类型属性使用分布函数

声明外部文件

进入进程模型——File——Declare External Files
在这里插入图片描述
选择两个外部文件:oms_dist_support 、oms_string_support
在这里插入图片描述

添加头文件

在进程模型HB中添加头文件

#include "oms_dist_support.h"

使用分布函数

  1. 获取分布函数句柄
OmsT_Dist_Handle	start_time_dist_handle;
start_time_dist_handle = oms_dist_load_from_string (start_time_string);
  1. 由分布函数句柄得到一个输出值
double start_time;
start_time = oms_dist_outcome (start_time_dist_handle);
printf("start time is ",start_time);
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值