文本建模

外部模块访问( EMA, External Model Access),它采用文本方式建模,可以用循环语句来刻画多个特定规格的节点。

 

一般过程:

首先在图形界面下做一个简单的网络模型(可以只包含一个网络对象,例如一个固定节点或一个移动节点),选择 Topology→Export Topology→To EMA 就可以生成 EMA 文件( *.em.c),仔细观察这个文件,就可以发现文件中包含设置节点属性的函数,通常是ema_obj_attr_set()等函数,手动把这个函数放置到一个 for 循环语句里,再把函数设置的属性值(如坐标、名称)改为变量,这样就可以通过循环设置大量的节点。

改完后需要在 OPNET 控制台( console)下进行编译,具体步骤如下:

( 1)打开 OPNET 控制台窗口,进入修改过的*.em.c 所在目录

( 2)输入命令 op_mkema -m 文件名<不加后缀>。

( 3)执行刚创建的可执行文件<文件名.i0.em.x>。整个操作过程如图所示。

  

( 4)在 OPNET 菜单中点击 File->Model Files->Refresh Model Directories 刷新模型目录,在项目编辑器中选择Scenarios→Scenario Components→import...

 

EMA 与外部数据的接口

EMA设置对象的自定义属性

( 1) 读取数据文件,这里给出一个样本程序:

double double_data;
string node_name;
printf ("开始读入%s 文件.\n", FILE);
fp = fopen(FILE, "r");
if (fp == NULL)     printf ("打不开文件%s.\n", FILE);
while (fscanf (fp, "%f;%s", &double_data,node_name) != EOF)
{
    //找到 node_name 对应的节点 Objid
    //根据这个 Objid 给节点设置属性值 double_data
}
fclose(fp);
printf ("成功读入文件%s.\n", FILE);

( 2)定义所需变量

EmaT_Model_Id model_id;

这时整个 EMA 模型的 ID 号,导出的 EMA 文件已经自动定义好

EmaT_Object_Id node_objid, self_attr

定义需要设置属性的节点 Objid ( node_objid)和自定义属性对象的 Objid ( self_attr)
( 3)创建自定义属性对象

Self_attr = Ema_Object_Create (model_id, OBJ_ATTR_PROPS);

( 4)

Ema_Object_Attr_Set (model_id, self_attr,
"units", COMP_CONTENTS, "",
"default value", COMP_CONTENTS_TYPE, EMAC_DOUBLE,
"default value", COMP_CONTENTS, (double) 0,
"high limit", COMP_CONTENTS, (double) 0,
"low limit", COMP_CONTENTS, (double) 0,
"symbol map list", COMP_INTENDED, EMAC_DISABLED,
"flags", COMP_CONTENTS, 0,
"data type", COMP_CONTENTS, 1,
"count properties", COMP_INTENDED, EMAC_DISABLED,
"list attribute definitions",COMP_INTENDED, EMAC_DISABLED,
EMAC_EOL);

( 5)绑定自定义属性的名称( attr name)及其 Objid( self_attr)

Ema_Object_Prom_Attr_Set (model_id, node_objid, "attr name", self_attr);

 

(6 )将从步骤( 1)读到的数据 double_data 设置为自定义属性的值。

Ema_Object_Attr_Set (model_id, node_objid, "attr name",COMP_PROMOTE,
EMAC_DISABLED, "attr name",COMP_CONTENTS, (double) double_data, EMAC_EOL);

 

posted @ 2017-08-11 10:24  Vivian_liwei  阅读(624)  评论(0编辑  收藏  举报