基于双口RAM的LonWorks智能通信节点设计
摘要:介绍一种基于双口RAM的LonWorks现场总线智能通信节点的设计方法,并给出详细的设计步骤、硬件及软件实现。通过此LonWorks智能通信节点,能够完成RS-232-C/RS-485标准与LonTalk协议间的转换提供RS-232-C/RS-485网络到LonWorks网络的接口,因此,具有很高的应用价值。
关键词:现场总线 LonWorks 智能节点 神经元芯片 双口RAM
引言
LonWorks(Local Operating Networks,局部操作网络)总线是由美国Echelon公司推出的一种现场总线技术。由于LonWorks控制网络的开放性、高速性和互操作性,它已广泛用于工业、楼宇、家庭、办公设备、交通运输、能源等自动化领域。EIA RS-232-C/RS-485通信网络在控制系统中应用最为普及,许多设备大都只提供RS-232或RS-485/422接口,不能直接接入LonWorks网络。因此,需要将现场LON网络介质上的信息转换为RS-232-C/RS-485标准的信号,或将RS-232-C/RS-485标准信号转换为包含LonTalk协议的数据,从而实现不同网络间的数据传输,同时也为上位PC机、底层工作站提供转换接口。本文所设计的LonWorks智能通信节点方便地与EIA RS-232-C/RS-485标准的串行I/O设备进行通信,轻松实现现场节点与上位PC机或其它RS-232-C/RS-485控制设备之间的可靠、准确、快捷数据传递。
1 LonWorks智能通信节点的硬件结构
1.1 节点硬件电路设计
智能节点以Neuron神经元处理器芯片为核心,其硬件电路还包括收发器、EEPROM、双口RAM、译码电路和service电路等。以神经元芯片构成网络接口,由它通过LonTalk协议与网上的其它智能节点通信,并通过双口RAM的访问实现与其它网络系统的数据交换。节点中用双口RAM充当不同网络通信过程中现场信息的接收、发送缓冲区,完成最近发送到达的交换数据的存储转发功能,缓解和避免系统缓存紧张和瓶颈的产生。用非易失性存储器EEPROM存放LonTalk网络协议固件、多任务调度程序、网络适配器通信管理程序以及网络配置信息等。节点的硬件组成结构如图1所示。
javascript:window.open(this.src);" style="cursor:pointer;"/>
智能节点的基本结构可分为两部分:以Neuron 3150神经元芯片主构成的LonWorks现场总线一侧,其基本功能是实现LON网络上的智能节点功能;另一侧是由单片机系统构成的串行通信接口,其功能是实现EIA RS-232-C/RS-485标准的串行通信。在这两部分间采用了双口RAM CY7C130芯片作为数据共享区。CY7C130通信接口电路的左端口与Neuron 3150芯片连接,右端口与8051单片机系统连接,如图2所示。双口RAM的两端都有独立的数据线、地址线和控制线,两端都可对双口RAM的任意单元进行操作。只要两端不同时对同一地址单元进行操作就不会发生冲突。BUSY显示本端口想要存取的地址正在被另一个端口操作,发生硬件冲突时,后操作一端的BUSY信号有效。
在应用中分别对双口RAM 1KB的存储空间进行定义,即CY7C130的同一存储单元对于Neuron3150芯片及8051单片机系统各有一个地址,这样两个系统均能对其进行存取操作。在智能节点中,Neuron3150芯片对1KB空间的地址为D000H~D3FFH。8051单片机系统对它的定义为0000H~03FFH。值得注意的是,CY7C130芯片3FFH和3FEH两个单元被用作固定用途:当左端Neuron3150芯片向3FFH单元写入数据时,将产生中断信号INTR;同理,当右端8051单片机向3FEH单元写入数据时,将产生中断信号INTL。利用这两个信号,可以将系统设置为中断工作方式,达到节省通信时间的目的。由于双向数据信息的交换,可以这样来划分双口RAM存储区间:000H~01FFH单元存入Neuron 3150芯片向8051传送的信息,而200H~3FFH单元存放由8051向Neuron 3150发送的信息,并将同类但不同次的信息放在固定的存储单元,每次都以新的数据覆盖上次的数据。这样就不必进行标志的判断,只需要固定单元取数据就可以进行处理,既节省时间,又安全可靠。
1.2 硬件的抗干扰
Lon Works设备往往工作在复杂的电磁环境中,其自身各部分与周围其它电子设备之间,都不可避免地存在各种形式的电磁干扰和静电放电。为了保证通信的准确无误,延长硬件使用寿命,该通信节点在设计上结合LonWorks电路自身特点,采用有关接地、屏蔽和滤波的适当处理,有效减小了电磁干扰的影响。针对收发器FTT-10A,设计抗干扰电路时,应主要围绕印刷电路板上星形地结构和火花隙的设计。对于静电放电(ESD),在印刷电路板(PCB)设计中,采用火花放电隙,能够削弱到达收发器和后续缓冲器电路的ESD能量,使用箝位二极管,能大大增强节点承受来自网络连接端的ESD能力。对于电磁干扰,应尽量保证强噪声源(如DC/DC变换器、时钟电路等)远离收发器FTT-10A。
2 LonWorks智能通信节点的软件设计
在LON网程序设计中使用Neuron C语言。Neuron C是一种基于ANSI C且带有网络通信和高级硬件设备接口扩展语句的高级不应该。它增加了对I/O、事件处理、消息传递和分散数据目标的支持,扩充了包括软件定时器、网络变量、显示消息、一个多任务调度程序以及其它各具特点的函数等。采用Neuron C语言开发的应用程序,可直接在Lonbuilder神经元仿真器上进行调试,因此应用程序的开发可独立于硬件设计进行。智能节点通信流程如图3所示。
javascript:window.open(this.src);" style="cursor:pointer;"/>
程序中,节点Neuron 3150侧使用显示报文通信,能有效实现智能节点与单片机进行双向通信的功能。用Neuron C语言进行节点设计编程时,必须首先查询IO_6和IO_7的内容。定义两个比特类型的输入变量INTL和BUSYL,通过查询这两个变量的内容来确定程序的运行流程。编程如下:
//*****包含文件*****
#include<string.h>
#include<control.h>
//*****公共变量声明*****
#define Tlon_485 0xd000 //定义从LON网上所接收数据在双口RAM存储单元首址
#defin T485_lon 0xd0200 //定义从单片机侧所接收数据在双口RAM存储单元首址
IO_6 input bit INTL;//定义IO_6,IO_7为比特类型的输入变量
IO_7 input bit BUSYL;
Msg_tag tag_out1; //定义输出消息标签
//****系统主程序********priority when(msg_arrives)//显示网络消息事件
{unsigned int *p; //存储从LON网上接收的数据
int i;
p=(unsigned int*)(Tlon_485);
for(i=0;I<30;i++)
{*p=msg_in.data;
p++;
}
}
}
when(io_in(INTL)= =0)//当单片机侧有数据时申请中断
{when(io_in(BUSYL)= =1)
{unsigned int*u;
int j;
u=(unsigned int*)(T485_lon);
msg_out.code=1;
msg_out.tag=tag_out1;
for(j=0;j<30;j++)
{msg_out.data[j]=*u;
u++;
}
msg_send();//向LON网其它相关节点发送数据
}
}
图3
3 结论
实际运用证明,该智能通信节点能实现与其它多种常规智能节点(如模拟量I/O节点、开关量I/O节点等)构成现场总线控制网络,实现了RS-232-C/RS-485到LonWorks网络网关的关键技术,保证了网络接口的高速数据传送。特别在当前楼宇自动化DCS控制系统中,基于控制器串口的小型主从式RS-485控制网络系统仍然应用得相当普遍。将Lonworks和RS-485两种控制网络进行网络集成,就可以充分发挥LonWorks技术在通信上的优势,构成节点的主从式RS-485网络的分级混合控制网络设计方案,因此有很高的推广应用价值。