微波EDA网,见证研发工程师的成长!
首页 > 测试测量 > 测试测量技术文库 > Lonworks网络虚拟监测系统研究

Lonworks网络虚拟监测系统研究

时间:06-24 来源:中电网 点击:

拟仪器测试的物理量较少,而且被测试的设备比较集中,因而信号通道一般采用并行方式。但是在设计网络虚拟仪器系统时,除了要解决接口问题,还要考虑由于网络的多种拓扑结构而要解决虚拟仪器与各个节点的有效通信问题,如寻址信息、控制信息以及数据传输等。

3.1 控制信号的传输

一个Lonworks网络包括多个节点,每个节点可以监测多个信号,即一个节点有多个测量通道。当虚拟仪器要获取某个被测量数据时,必须同时指定该被测量所在的节点和通道。可在虚拟仪器的软面板上根据实际要测量的物理量设置选择开关,当选中某一开关时,这样程序将根据预先的设置自动形成包含节点号、通道号的控制信息,其消息格式包括节点号、通道号、控制命令代号共3个字节。经过接口卡转换后,节点号、通道号、控制命令代号将被写入LonTalk显式消息报文数据的前三个字节,报文消息代码为CONTRL_MSG,该报文以广播方式在LON网上传播。具体实现代码如下:

IO_0 parallel slave s_bus;  //定义并口I/O对象

#define DATA_SIZE 255

Typedef struct

{

unsigned int length;

unsigned int data[255];

} pio; //定义并口通信结构

far pio p_in;

msg_tag tag_out0;

when(io_in_ready(s_bus))  //并口有数据来

{

p_in.length=DATA_SIZE

io_in(s_bus,&p_in); //从并口读取数据

//构造显式报文

msg_out.code=CONTRL_MSG //CONTRL_MSG是预定义的消息代码

memcpy(msg_out.data,p_in.data,3);

msg_out.dest_addr.bcast.type=BROADCAST;

msg_out.dest_addr.bcast.domain=0;

msg_out.dest_addr.bcast.subnet=0;

msg_out.tag=tag_out0;

msg_send(); 

}

一般情况下,节点通过when(msg_arrives(CONTRL_MSG))接收该消息,然后判断消息数据的第一个字节的节点信息,如果不是本节点,则不作处理,如果是本节点,再判断第二个字节的通道号,然后作相应的处理并将选中通道的数据传送出去。

3.2 测量数据的传输

在测控系统中,各个需要测量的参数每次需要采集的数据个数可能各不相同,少的可能只有一个数据,多的可能有上千个数据,因此节点收到虚拟仪器传来的控制信号后,选中通道的监测数据要采用显式消息报文传输。在LON网中,设计的接口卡也是一个节点,当其余节点收到发给本节点的控制信号后,会同时将相应通道的数据都发送到接口卡上。笔者采用的是消息标签寻址。消息标签是显式消息的一个连接点。网络管理工具给输入标签和每个输出标签都会赋一个唯一的网络地址。这样,利用捆绑器可将各个节点发送给接口卡的显式报文的消息标签与接口卡节点的消息输入对象msg_in连接起来,这样就可以实现点对点的数据传送。下面以节点2收到要求发送给1号通道的数据,且该通道每次发送40个字节的数据为例,给出其发送程序:

msg_tag LON_232;

when(msg_arrives(CONTRL_MSG))

{

if(msg_in.data[0]==2)

{

switch(msg_in.data[1]) 

{ case 1: //通道1

msg_out.tag=LON_232;

msg_out.code=0x0c; //消息代码,接口卡依此处理接收的数据

msg_out.service=ACKD;

memcpy(msg_out.data,ch1_buf,40);

msg_send(); 

break;

case 2: //其他通道的处理

......

}

}

}

LON_232是定义的输出消息标签,由网络管理器将LON_232与接口卡的输入消息标签msg_in相关联。在接口卡上对该消息进行处理的程序如下:

far pio p_out;

when(msg_arrives(0x0c))

{

p_out.length=msg_in.len;

memcpy(p_out.data,msg_in.data,msg_in.len);

//接收从LON网来的数据

mio_out_request(s_bus); //向并口总线请求获取令牌

}

when(io_out_ready(s_bus))

{

io_out(s_bus,&p_out); //数

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top