网络拓扑结构中包含2类独立的节点模型 :信标节点和未知节点.本节将分别介绍2类节点的功能及详细创建过程.
1 网络拓扑结构
1.1 创建数据包模型
信标节点通过向邻居节点按一定周期发送数据包达到使邻近的未知节点定位的目的,数据包中包含有该信标节点的位置信息.质心算法要求包中含有信标节点的x、y坐标和id号.数据包模型创建过程如下 :
在包格式编辑 器 (packet format)中新建包格式,命名为“wsn_location_format”.添加个32bits的包域,如图2所示,“anchor_id”为节点的 id,数据类型设置为“object id”“tx_x_position”和“tx_y_position”分别记录信标节点的X和Y坐标,数据类型为“floating point”.
数据包格式,包含节点ID,横纵坐标,以及发射功率
1.2 信标节点模型
信标节点以相同强度功率向各个方向发送携带自身位置信息的数据包.此节点包含一个包生成模块tx_gen、一个包处理模块tx_pro、一个无线发射机模块radio_tx和一个天线模块ant_tx(仿真模型中所涉及到的天线均为全向天线).如图所示,在节点编辑器中创建各个模块.
(若是编辑栏没有天线模块,License->Produce Modules->Wireless)
- 无线发射机及天线模块 配置无线发射机“radio_ tx” 的“channel"属性,使得无线发射机支持包格式“wsn_ location_ format" ,并将“power"属性提升,将天线模型设置为“isotropic",即全向天线).发射机和天线的其它属性保持默认属性不变.
- 包生成模块 将包生成模块“tx_gen"中的“process model"修改为“simple_ source" ,此进程模块将以按一定的时间间隔产生数据包,修改“Packet Format"属性,使得产生的数据包格式为“wsn_location_format" ,将Packet Interarrival Time 属性提升“simple_ source" 进程模块为系统自带模块,这里不进行详细闹述.
- 包处理模块 包处理模块“tx_pro"将信标节点的信息写入来自于包生成模块的数据包,然后将数据包发送到无线发射机.其内部的进程模块“wsn_location_tx_process" 的状态转换如图所示.仿真开始后仿真核心等待流中断,当有来自于包生成模块的包流时(即满足条件SRC_ ARRVL) ,执行函数xmt()被触发.xmt()函数将信标节点的位置信息及id写人数据包并将其发送到无线发射机。
在状态变量SV中定义如下如图所示变量
在头文件HB中输入如下代码:
#define XMT_OUT_STRM 0
#define SRC_ARRVL (op_intrpt_type () == OPC_INTRPT_STRM )
在功能函数FB中输入以下代码
static void xmt(void)
{
Packet * pkptr;
FIN(xmt());
tx_node_id = op_topo_parent(op_id_self());
pkptr=op_pk_get(op_intrpt_strm());
op_ima_obj_attr_get_dbl(tx_node_id,"x position",&src_nx);
op_ima_obj_attr_get_dbl(tx_node_id,"y position",&src_ny);
op_pk_nfd_set(pkptr,"tx_x_position",src_nx);
op_pk_nfd_set(pkptr,"tx_y_position",src_ny);
op_pk_nfd_set(pkptr,"anchor_id",tx_node_id