2008-8-25 16:40
bika
LON现场控制网络到以太网互连适配器的设计
[b][size=13.5pt][font=Times New Roman]LON[/font][/size][/b][b][font=宋体][size=13.5pt]现场控制网络到以太网互连适配器的设计[/size][/font][/b][b][size=13.5pt][/size][/b];]8pUVWLH6x'h
[align=center][align=center][b][font=宋体][size=9pt]摘要:[/size][/font][/b][font=宋体][size=9pt]以51单片机为核心连接LON现场控制网络与以太网互连适配器的设计方案,描述了神经元芯片使用并行I/O模式与51单片机通信的方法,介绍了51单片机控制以太网控制芯片8019as的方法。并采用C51语言实现UDP传输,完成了系统的调试与验证。 [/size][/font][/align][/align][font=宋体][size=9pt]
^$^Vd\5o.d/yV
[/size][/font][b][font=宋体][size=9pt]关键词:[/size][/font][/b][font=宋体][size=9pt]Lonworks 以太网 RTL8019as隔离变压器YL18-1001D 80C51单片机[/size][/font]w4c_Z7E z
[align=center][align=center][font=宋体][size=9pt]随着互联网的发展,在使用计算机进行互联的同时,各种智能家电、工业控制、智能仪器仪表、数据采集都在逐步趋向网络化。但由于以太网在实时性和可靠性的先天不足,各种现场总线技术应运而生;更因为其彻底的开放性、分散性和完全可互操作性等特点,正成为未来新型工业控制系统的发展方向。以太网以其应用的广泛性和技术的先进性,逐渐垄断了商用计算机的通信领域和过程控制领域的上层信息管理与通信。为实现上层管理网络与下层控制网络的集成,在实际中必须实现现场总线与以太网互联。[/size][/font][/align][/align][align=center][align=center][font=宋体][size=9pt]Lonworks现场总线是美国Echelon公司1991年推出的局部操作网络。Lonworks现场总线在网络通信方面具有突出优点,如网络物理层支持多种通信介质,支持多种网络拓扑结构等。目前使用Lonworks技术的产品广泛应用于工业、楼宇、家庭、能源等自动化领域。本文提出的适配器连接方案,能将LON控制网与以太网无缝连接,实现透明传输。[b]\e \#oK&zFt
_Dc@dG%Z T
[url=http://www.avrw.com/article/pic/200610310856734.gif][color=#0000ff]图1 互连适配器的电路框图[/color][/url](qDL$W%PDf
Ph]
}Q D4{
1 互连适配器硬件电路设计[/b][/size][/font][/align][/align][align=center][align=center][font=宋体][size=9pt]适配器使用的主要芯片为神经元芯片TMPN3150、51单片机89C51RD和以太网控制器RTL8019as。主要分为Lonworks控制模块、协议转换模块和以太网通信模块。其中,协议转换由单片机内部软件完成。[/size][/font][/align][/align][align=center][align=center][font=宋体][size=9pt]1.1 Lonworks控制模块[/size][/font][/align][/align][align=center][align=center][font=宋体][size=9pt]Lonworks控制模块主要完成对LON网数据的管理并向单片机传输数据,其核心是神经元芯片。神经元芯片与其他设备的互连是通过其11个I/O口,编程人员可以定义多个引脚为输入/输出对象。用户程序可通过io_in()和io_out()访问这些I/O对象,并在程序执行期间完成输入/输出操作。本文设计的适配器采用Neuron芯片预定义的并行I/O对象,实现了高数据速率和全双工工作方式。[/size][/font][/align][/align][align=center][align=center][font=宋体][size=9pt]并行I/O对象利用Neuron的11个I/O口进行通信。其中IO0~IO7为双向数据线,IO8~IO10为控制信号线。借助令牌传递握手协议,并行I/O口可外接处理器,实现Neuron芯片与外接各类微处理器之间的双向数据通信。并行口的速率可达3.3Mbps,工作方式有三种,即主模式、从A模式和从B模式。不同的模式下,IO8~IO10这三根控制信号线的意义不同。本文应用从A模式与单片机连接如表1所示。
8{+ox0pc*} b:rZ
[b]表1 Neuron芯片与单片机的连接[/b][/size][/font][/align][/align][align=center][table=98%][tr][td=1,1,41%][align=center][align=center][font=宋体][size=9pt]IO8[/size][/font][/align][/align][/td][td][align=center][align=center][font=宋体][size=9pt]片选信号线(CS)接P2.5[/size][/font][/align][/align][/td][/tr][tr][td=1,1,41%][align=center][align=center][font=宋体][size=9pt]IO9[/size][/font][/align][/align][/td][td][align=center][align=center][font=宋体][size=9pt]读写信号线(R/W)接P3.6[/size][/font][/align][/align][/td][/tr][tr][td=1,1,41%][align=center][align=center][font=宋体][size=9pt]IO10[/size][/font][/align][/align][/td][td][align=center][align=center][font=宋体][size=9pt]握手信号线(HS)接P1.0[/size][/font][/align][/align][/td][/tr][tr][td=1,1,41%][align=center][align=center][font=宋体][size=9pt]IO0[/size][/font][font=宋体][size=9pt]~IO7[/size][/font][/align][/align][/td][td][align=center][align=center][font=宋体][size=9pt]数据总线接P0.0~P0.7[/size][/font][/align][/align][/td][/tr][/table][/align][align=center][align=center][font=宋体][size=9pt]从A模式中,Neuron芯片为从机,51单片机为主机。主机与从机间的数据传输通过虚拟的写令牌传递协议(VirtualWrite Token-Passing Protocol)实现。主机和从机交替地获得写令牌,只有拥有写令牌的一方可以写数据(不超过255字节),或者不写任何数据传送一个空令牌。传送的数据要遵从一定的格式,即在要传送的数据前面加上命令码和传送的数据长度。命令码有CMD_XFER(写数据)、CMD_NULL(传递空令牌)、CMD_RESYNC(要求从机同步)、CMD_ACKSYNC(确认同步)四种,最后以EOM字节结束。写数据和传递空令牌的格式分别如表2、表3所示。.z;N{._:FkbBwz
[b]表2 写数据的格式[/b][/size][/font][/align][/align][align=center][table=98%][tr][td=1,1,25%][align=center][align=center][font=宋体][size=9pt]CMD_XFER[/size][/font][/align][/align][/td][td][align=center][align=center][font=宋体][size=9pt]Length[/size][/font][/align][/align][/td][td=1,1,25%][align=center][align=center][font=宋体][size=9pt]Data[/size][/font][/align][/align][/td][td][align=center][align=center][font=宋体][size=9pt]EOM[/size][/font][/align][/align][/td][/tr][/table][/align][align=center][align=center][b][font=宋体][size=9pt]表3 传递空令牌的格式[/size][/font][/b][font=宋体][size=9pt][/size][/font][/align][/align][align=center][table=98%][tr][td=1,1,50%][align=center][align=center][font=宋体][size=9pt]CMD_NULL[/size][/font][/align][/align][/td][td][align=center][align=center][font=宋体][size=9pt]EOM[/size][/font][/align][/align][/td][/tr][/table][/align][align=center][align=center][font=宋体][size=9pt]1.2 以太网通信模块[/size][/font][/align][/align][align=center][align=center][font=宋体][size=9pt]以太网通信模块由51单片机和RTL8019as及隔离变压器YL18-1001D组成。以太网控制器RTL8019as由台湾Realtek公司生产,100脚PQFP封装。它支持8/16位数据总线及16个I/O基地址选择,使用Ne2000兼容的寄存器结构。它有一块16K字节的RAM,地址为0x4000~0x7fff。实际上它是双端口RAM,可以同时被网卡读/写和用户读/写,相互之间不影响。网卡读写比用户读写的优先级高。RAM分页存储,每256字节称为一页。将前12页作为发送缓冲区(0x4000~0x4bff),后52页作为接收缓冲区(0x4c00~0x7fff)。[/size][/font][/align][/align][align=center][align=center][font=宋体][size=9pt]以太网的介质访问控制、CRC校验及数据帧的接收和发送都由网卡自动完成,只需将IP包加上目的MAC地址和源地址,再通过远端DMA接口对RTL8019as内部RAM进行读写即可。网卡的地址线共20根。用到的网卡地址为十六进制的0240H~025FH,基地址为0240H,从地址240H~25FH。地址线的A19~A5是固定的000000000010010,只需5根地址线即可。所以RTL8019as输入输出地址共32个,地址偏移量为00H~1FH(对应于240H~25FH)。对于8位操作方式,32个地址中只有18个有用:00H~0FH共16个寄存器地址,10H为DMA地址,1FH为复位地址。本适配器采用轮询方式,不使用中断。故RTL8019as与单片机的连接如表4所示。
pbIs2SUE7E
[b]表4 RTL8019as单片的连接[/b][/size][/font][/align][/align][align=center][table=98%][tr][td=1,1,41%][align=center][align=center][font=宋体][size=9pt]IORB[/size][/font][/align][/align][/td][td][align=center][align=center][font=宋体][size=9pt]读信号,接P3.6[/size][/font][/align][/align][/td][/tr][tr][td=1,1,41%][align=center][align=center][font=宋体][size=9pt]IOWB[/size][/font][/align][/align][/td][td][align=center][align=center][font=宋体][size=9pt]写信号,接P3.7[/size][/font][/align][/align][/td][/tr][tr][td=1,1,41%][align=center][align=center][font=宋体][size=9pt]RSTDRV[/size][/font][/align][/align][/td][td][align=center][align=center][font=宋体][size=9pt]复位信号,P3.4[/size][/font][/align][/align][/td][/tr][tr][td=1,1,41%][align=center][align=center][font=宋体][size=9pt]AEN[/size][/font][/align][/align][/td][td][align=center][align=center][font=宋体][size=9pt]地址信号,接地[/size][/font][/align][/align][/td][/tr][tr][td=1,1,41%][align=center][align=center][font=宋体][size=9pt]IOCS16[/size][/font][/align][/align][/td][td][align=center][align=center][font=宋体][size=9pt]接下拉电阻,选择8位模式[/size][/font][/align][/align][/td][/tr][tr][td=1,1,41%][align=center][align=center][font=宋体][size=9pt]S0[/size][/font][font=宋体][size=9pt]~S7[/size][/font][/align][/align][/td][td][align=center][align=center][font=宋体][size=9pt]数据总线,接单片机P0口[/size][/font][/align][/align][/td][/tr][tr][td=1,1,41%][align=center][align=center][font=宋体][size=9pt]A19[/size][/font][font=宋体][size=9pt]~A10,A6[/size][/font][/align][/align][/td][td][align=center][align=center][font=宋体][size=9pt]地址线接地[/size][/font][/align][/align][/td][/tr][tr][td=1,1,41%][align=center][align=center][font=宋体][size=9pt]A9[/size][/font][font=宋体][size=9pt],A5[/size][/font][/align][/align][/td][td][align=center][align=center][font=宋体][size=9pt]接P2.5(高电平时选中)[/size][/font][/align][/align][/td][/tr][tr][td=1,1,41%][align=center][align=center][font=宋体][size=9pt]A4[/size][/font][font=宋体][size=9pt]~A0[/size][/font][/align][/align][/td][td][align=center][align=center][font=宋体][size=9pt]接单片机P2.0×P2.4[/size][/font][/align][/align][/td][/tr][/table][/align][align=center][align=center][b][font=宋体][size=9pt]表5 单片机发往RTL8019as的数据格式[/size][/font][/b][font=宋体][size=9pt][/size][/font][/align][/align][align=center][table=98%][tr][td=1,1,25%][align=center][align=center][font=宋体][size=9pt]以太网首部[/size][/font][/align][/align][/td][td][align=center][align=center][font=宋体][size=9pt]IP[/size][/font][font=宋体][size=9pt]首部[/size][/font][/align][/align][/td][td=1,1,25%][align=center][align=center][font=宋体][size=9pt]UDP[/size][/font][font=宋体][size=9pt]首部[/size][/font][/align][/align][/td][td][align=center][align=center][font=宋体][size=9pt]数据[/size][/font][/align][/align][/td][/tr][tr][td=1,1,25%][align=center][align=center][font=宋体][size=9pt]14[/size][/font][font=宋体][size=9pt]字节[/size][/font][/align][/align][/td][td][align=center][align=center][font=宋体][size=9pt]20[/size][/font][font=宋体][size=9pt]字节[/size][/font][/align][/align][/td][td=1,1,25%][align=center][align=center][font=宋体][size=9pt]20[/size][/font][font=宋体][size=9pt]字节[/size][/font][/align][/align][/td][td][align=center][align=center][font=宋体][size=9pt]128[/size][/font][font=宋体][size=9pt]×n字节[/size][/font][/align][/align][/td][/tr][/table][/align][align=center][align=center][font=宋体][size=9pt]本适配器使用UDP传送数据,同时支持ICMP的回应应答和回应请求报文(Ping命令),单片机发往RTL8019as的数据帧格式如表5所示。[/size][/font][/align][/align][align=center][align=center][font=宋体][size=9pt]用单片机实现UDP协议要作一些简化,不考虑数据分片和优先权。因此,在IP首部中不讨论服务类型和标志偏移域,只需填“0”即可。[/size][/font][/align][/align][align=center][align=center][font=宋体][size=9pt]1.3 互连适配器的硬件电路设计[/size][/font][/align][/align][align=center][align=center][font=宋体][size=9pt]由于P89C51RD2只有四个8位I/O口,无法同时与RTL8019as 和TMPN3150通信,故使用P0口作为数据总线。P2.5作为片选信号,高电平为RTL8019as,低电平为TMPN3150。图1给出了互连适配器的电路框图。其中3150和RTL8019as复用同一条8位数据线,依靠P2.5进行片选。当P2.5高电平时,RTL8019as地址(1XXXXX)有效,被选中。Max232作为单片机的下载线,互联适配器也可使用RS232口与计算机通信。[b]
ePv|[
}:c:H/q
6TK8a(U,~2N%?"M
[url=http://www.avrw.com/article/pic/200610310857580.gif][color=#0000ff]图2 适配器工作流程图[/color][/url]
~pM2s$\ te
)@8r T(XvU.L
2 互连适配器的软件设计[/b][/size][/font][/align][/align][align=center][align=center][font=宋体][size=9pt]适配器的软件编写包括两部分:一部分是TMPN3150上用Neuron C语言编写;另一部分是在P89C51上用C51语言开发TCP/IP协议栈和与TMPN3150、RTL8019as的通信软件,可读性强,可方便地移植到其他51核心单片机上。[/size][/font][/align][/align][align=center][align=center][font=宋体][size=9pt]2.1 适配器的初始化[/size][/font][/align][/align][align=center][align=center][font=宋体][size=9pt]P89C51单片机和TMPN3150之间先建立握手信号,即HS信号有效(由TMPN3150的固件自动实现);然后,主机发送一个CMD_RESYNC命令,要求从机同步,而从机接收到这个信号后,则发送CMD_ACKSYNC,表示已同步,可以通信了。RTL8019在通信前要先读取93C46的内容并设置内部寄存器的值(配置寄存器CONFIG1~4,网络节点地址),再由89C51对RTL8019的页0与页1相关寄存器进行初始化,即可正常工作。[/size][/font][/align][/align][align=center][align=center][font=宋体][size=9pt]2.2 适配器工作流程[/size][/font][/align][/align][align=center][align=center][font=宋体][size=9pt]考虑到LON网主要作为监控网络,特别在楼宇自动化中的监控,由LON网发往以太网的数据较多,应首先保证其优先权。且89C51RD只有1024字节的内存,无法处理大的以太网帧。经过实验比较,在最后具体实现时,选择LON最大为每帧64字节,尽量做到每收10个LON帧,发一个以太网帧,流程如图2所示。
K1J;nE}
!wZ"s7d"Z3_l)[
[/size][/font]
2g`-[2Kg;A)R&IvV
[font=宋体][size=9pt]2.3 服务器监控软件的设计[/size][/font][/align][/align][align=center][align=center][font=宋体][size=9pt]Lonworks现场总线使用网络变量的方式传送数据。一个网络变量是Lonworks网络节点的一个对象,各个节点之间的联系通过网络变量实现。当一个网络变量在一个节点中被应用程序改变时,LonTalk协议自动将新值构成隐式消息透明地发往可与之共享的其他节点,而应用程序则不必考虑发送、接收和寻址的问题。安装在服务器上的监控软件将需要改变的网络变量数据利用UDP通过以太网发往指定IP地址的适配器,适配器将自动完成各个数据向相应设备的传输。同样,适配器也将设备发来的网络变量使用UDP发往指定IP的服务器。使用Delphi6.0编写了一个简单的设备监控软件。实验中,它能同时管理16路的数据采集和控制,适配器达到了12kbps的峰值速率。实验模型如图3所示。[/size][/font][/align][/align][b][size=13.5pt][font=Times New Roman] [/font][/size][/b]