兰州理工大学 电气工程与信息工程学院(甘肃 兰州730050) 陈 伟 郝晓弘 张 帆
变电站自动化通信系统是变电站自动化系统的关键组成部分,它直接影响着整个系统的性能。特别是近年来随着数字式继电保护等智能化电子设备IED(Intelligent Electronic Device)的大量推广和使用,变电站自动化系统要监视和控制的对象数目急剧增加,这些设备都需要通过内部通信网络实现快速通信和数据共享,传输大量的遥测、故障录波等信息,这些都对变电站自动化通信系统提出了更高的技术要求,同时也促使了变电站自动化通信系统向以太网技术的变迁[1]。
目前变电站自动化系统所采用的几种网络通信模式各有特点,但各种协议统一到以太网上是网络通信发展的一大趋势。国际电工委员会(IEC)推出了迄今为止最为完善的关于变电站自动化通信的标准IEC61850,为高速的、开放协议的以太网在变电站中的应用铺平了道路[2-4]。未来变电站自动化系统的通信网络,将以采用以太网技术为主,结合各种串行通信和现场总线技术、Internet、WEB等通信技术,使得变电站内的各种自动化设备面向互联网,实现电力系统信息的互联,这也是智能电网发展的必然要求[5]。
基于上述背景,本文基于嵌入式以太网,设计了一种基于嵌入式以太网的变电站自动化网络通信平台,实现了变电站中现场级设备与网络中其它通信设备的数据传输。
变电站自动化装置需要对大量的实时数据进行处理,并且要根据实时处理的结果进行跳合闸等操作,另外要将实时数据、历史记录传送到监控系统,用于数据显示和事故分析。这就要求变电站自动化装置的微处理器具有高速数据处理的能力。目前,应用于工业控制系统的微处理器主要有单片机、ARM和DSP等。综合考虑变电站自动化装置对主控制器的要求以及上述各控制器的特点,本文选用TI公司生产的DSP芯片TMS320F2407作为主控制器。嵌入式设备要实现网络接入还需要解决与以太网的接口问题。在本文中,采用Realtek公司生产的RTL8019AS以太网控制器实现了DSP嵌入式系统接入以太网的功能。系统整体硬件结构如图1所示。
图1 系统硬件结构框图
硬件系统的设计是在主控制芯片TMS320F2407的基础上,分模块完成的。主要包括电源模块、复位电路模块、时钟模块、存储器扩展模块、CPLD模块及以太网通信模块等。其中,以太网通信模块的设计是硬件系统设计的核心。这里采用以太网控制芯片RTL8019AS通过ISA接口与TMS320F2407相连,同时通过网络隔离器隔离后,接入以太网络中,电路图如图2所示。
图! 以太网控制器电路图
RTL8019AS是一种高度集成的以太网控制器,它实现了物理层(PHY)和以太网介质访问层(MAC)的所有功能。RTL8019AS适应于 Ethernet II、IEEE802.3、l0Base5、10Base2、10BaseT,它与NE2000兼容,支持8位、16位数据总线。采用全双工模式,收发可同时达到l0Mbps的速率,具有睡眠模式,降低了功耗。同时,内置16KB的SRAM,用于收发缓冲,降低对主处理器的速度要求[6]。
RTL8019AS芯片内部集成了DMA控制器、16KB的SRAM、ISA总线控制器以及网络PHY收发器。在数据收发时,可以通过DMA方式把要发送的数据写入片内SRAM中,芯片会自动将数据发送出去;而芯片在接受数据后,可以通过DMA方式将其读出。主处理器需要做的只是在RTL8019AS的外部总线上读写MAC帧。通常将RTL8019AS内部DMA划分为本地DMA(local DMA)通道和远程DMA(remote DMA)通道两个部分。本地DMA完成控制器与网线的数据交换,主处理器收发数据只需对远程DMA操作。
RTL8019AS的外部总线符合ISA标准,它提供三种配置I/O端口和中断的模式[4]:
第一种为即插即用模式(Plug and Play,PnP)。在这种模式下RTL8019AS的I/O端口和中断要由软件进行配置。
第二种为跳线模式(Jumper),RTL8019AS的I/O端口和中断由跳线引脚决定。
第三种为免跳线模式(Jumperless)。RTL8019AS的I/O和中断由外接的9346(一个EEPROM)里的配置信息决定。
本文采用RTL8019AS的跳线模式来选择I/O端口和中断。
在实现网络通信和其他应用程序之前,首先要进行操作系统的移植。然后才能在嵌入式操作系统的管理下,设计适合变电站以太网通信的协议栈,使嵌入式通信平台能够接入以太网中,实现对变电站实时信息的传递。
!C/OS-"是一个公开源代码的占先式多任务的微内核RTOS,其性能和安全性可以与商业产品竞争。!C/OS-"的特点可以概括为以下几个方面:公开源代码,代码结构清晰,组织有条理,可移植性好,可裁剪,可固化。内核属于抢占式,最多可以管理60个任务。!C/OS-"是一个经实践证明性能稳定可靠的内核。
为了方便!C/OS-"内核能移植到某个微处理器或微控制器上运行,大部分的!C/OS-"代码是用C语言写的,但仍需要用C和汇编语言写一些与处理器相关的代码,这是因为!C/OS-"在读写处理器寄存器时只能通过汇编语言来实现。由于!C/OS-"在设计时就已经充分考虑了可移植性,所以!C/OS-"的移植相对来说是比较容易。移植工作主要包括以下三个文件:OS_CPU.H、OS_CPU_C.C和OS_CPU_A.ASMM[7]。
图3 以太网数据接收与发送过程流程图
以太网驱动程序主要作用是屏蔽底层硬件的处理细节,同时向上层软件提供硬件有关接口,主要完成以下三部分工作:网卡初始化、发送数据包与接收数据包。
初始化程序主要完成:复位网卡、接收发送缓冲区配置、初始化物理地址组播地址、安装网卡中断等工作。RTL8019AS在工作前必须复位,复位比较简单,对RTL8019AS的复位端口RSTDRV进行读操作或者写操作都将复位RTL8019AS。
接收数据包是通过以太网中断服务程序、以太网接收任务、操作系统信号量及内存管理机制来完成的。当网卡收到数据包时进入以太网中断服务程序,由以太网中断服务程序把数据包从网卡接收到主控制器分配的接收缓冲区,然后发送信号量到以太网接收任务。接收数据帧时,RTL8019AS将网络中的数据通过本地DMA存储到环形接收缓冲区,再由DSP通过远程DMA读取数据帧。最后要检验数据包的合法性并调整相应的指针。接收数据包的流程如图3(a)所示。
图4 ARP请求和应答函数流程图
数据发送时先将待发送的数据帧,用远程DMA方式从主控制器的缓冲区发送到RTL8019AS的发送缓冲区。然后配置发送计数器,启动发送命令把数据往外发送。数据发送过程流程如图3(b)所示。
在完成系统硬件电路的设计与以太网驱动程序的开发之后,系统已能发送和接收网络数据包。然而如何将网络数据包里的纯数据分解出来,将纯数据封装成符合协议的网络数据包则需要嵌入式TCP/IP协议处理程序来完成。需要在!C/OS-"操作系统上定制的嵌入式TCP/IP协议栈主要有ARP协议、IP协议、ICMP协议和UDP协议[8-9]。
在ARP模块中,为了便于地址解析,系统中设置了一定ARP缓存空间用于存储IP地址和硬件MAC地址之间的关联。在发送IP数据报时,首先查看ARP缓存空间中目标IP是否有对应的MAC地址。如果有就直接发送;否则,就向网络发送ARP请求帧,并等待ARP应答帧。另外一种情况是收到正确的ARP应答帧时,就要更新ARP缓存空间,并把IP报发送出去。在程序设计中主要是针对ARP请求函数和ARP应答函数的设计。ARP应答函数的流程如图4所示。
IP协议是TCP/IP协议中最为核心的协议,所有的上层协议都要以IP数据报的格式传输。本文中考虑到嵌入式系统的实际应用场合,为了简化代码,提高效率,只实现了最基本的功能。采用两个函数IP发送函数和IP接收函数来实现IP数据报的处理。
图5 IP发送与接收函数流程图
IP发送函数是由上层协议调用的,负责对上层数据进行格式封装,使之成为IP数据报以及把数据传递到以太网层的发送函数。在IP协议的发送函数中会用到发送信号量,用于发送时的资源管理。使用!C/OS-II的OSSemPend()获取信号量,使用OSSemPost()释放信号量。IP接收函数首先把校验和字段置为0。然后,对首部中每个16位进行二进制反码求和,结果存在校验和字段中。当收到一份IP数据报后,同样对首部中每个16位进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在首部中的校验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该为全1,如果结果不是全1,那么IP就丢弃收到的数据。IP发送函数和接收函数的流程如图5所示。
ICMP协议经常被认为是IP层的一个组成部分。它传递差错报文以及其他需要注意的信息。ICMP报文通常被IP层或更高层协议(TCP或UDP)使用。一些ICMP报文把差错报文返回给用户进程。ICMP报文是在IP数据报内部被传输的。它的实现方式是:把收到的请求的IP源地址与目的地址交换后重新写入,并把ICMP头中的消息类型改为“回响应答”,作为对回响请求的应答发回。
UDP是面向数据报的简单传输层协议,所以UDP的处理过程比TCP简单,UDP向应用程序提供了一种发送封装的原始IP数据报的方法,并且发送时无需建立连接。UDP协议的程序实现主要是两个函数的设计:UDP数据报的发送函数和UDP数据报的接收处理函数。
UDP数据报的发送函数首先判断目的IP是否正确,然后进行相应的数据首部封装以及对校验和的计算。UDP检验和的基本计算方法与IP首部检验和计算方法相类似,是把若干个16 bit字相加,所以如果UDP数据报的长度可以为奇数字节,计算检验和时则在最后增加填充字节0,填充的字节只是为了检验和的计算。UDP数据报的接收处理函数,在这个函数中设置了一系列的确认、超时设置和应答机制来保证UDP数据报的传输可靠性。在判断了正确接收了数据之后,会给主机一个应答信息,通知主机已经正确接收了数据。在正确接收了数据之后,通过调用操作系统内核函数OSSemPost()发出接收信号量唤醒上层应用程序,从而完成UDP数据的接收。
TCP协议与UDP协议一样,也属于传输层协议,都使用相同的网络层。然而,TCP却向应用层提供与UDP完全不同的服务。TCP提供一种面向连接的、可靠的字节流服务。TCP协议是整个TCP/IP协议栈的核心协议。但是,TCP协议的标准实现机制是非常复杂的,对于嵌入式系统而言,较慢的CPU运行速度和有限的内存资源不可能实现标准的TCP协议。同时,嵌入式系统是面向特定的应用的,也完全没有必要实现一个完整的TCP协议。在嵌入式系统上实现TCP协议就有必要对它进行必要的约简和改进。这里我们设计的TCP协议主要包括三个部分:TCP连接的建立、TCP连接的断开以及TCP数据接收处理。
本文建立的通信平台是一个开放型的系统,可以根据需求在嵌入式操作系统的基础上方便的建立用户自定义的任务。系统性能的测试主要包括3方面的内容:以太网通信功能的测试、通信的时延测试以及数据传输的可靠性测试。
系统性能的测试主要包括ARP协议、IP协议、ICMP协议、UDP协议及TCP协议的测试。
首先进行Ping测试,Ping测试是测试网络通信连接的一种简单实用的方式,可以用来测试网络的连接状况,可以对ARP协议、IP协议和ICMP协议进行测试。实验装置能够正确的响应Ping请求,而且没有数据包丢失,说明系统工作正常,网络连接功能得以实现。
UDP测试可以通过在上位机建立UDP服务器向实验装置发送的数据,并通过上位机接收实验装置的回传数据来进行数据传输的正确性验证。实验中对不同长度的数据包传输进行了多次发送与接收测试,测试结果的统计如表1所示。
?
从表中可以看出,在传输数据包长度较小时,传输数据的错误率为0。随着传输数据包长度的增加,误包率出现,但出现的误包率仅为0.005。因此,网络通信数据传输的正确性可以得到保证。
同理,TCP测试可以同时在上位机建立TCP服务器和TCP客户端来分别对TCP协议进行验证。并通过上位机抓包程序对数据传输的正确性进行验证。通过Spynet的分析结果可以看出,服务器端与客户端的地址正确,数据解包分析的结果与设置的传输值一致,且传输协议符合TCP格式。所以,设计的TCP协议栈能够满足传输要求。
设计了一种变电站嵌入式以太网通信平台,对通信平台的软硬件设计做了详细阐述,硬件设计基于TMS320F2407 DSP,软件设计基于嵌入式操作系统!C/OS-II,详细阐述了以太网接口的实现,在对操作系统移植的基础上,对嵌入式TCP/IP协议栈进行了合理的设计,并通过实验测试验证了该通信平台的可行性,同时该系统已在110KV少油式断路器的状态监测系统中得到成功应用。
[1]任雁铭,秦立军,杨奇逊等.变电站自动化系统中内部通信网的研究[J].电网技术,2000,24(5):42-44
[2]谭文恕.变电站通信网络和系统协议 IEC61850介绍[J].电网技术,2001,25(9):8-11
[3]谭文恕,电力系统无缝通信系统体系[J].电力自动化设备,2001,21(11):1-4
[4]IEC 61850-5.Communication Networks and Systems in Substations-Part 5:Communication requirements for functions and device models。2003
[5]EPRI.The common information model for distribution,2008.11
[6]Realteks Emi-conductor Co Ltd.RTL8019AS Realtek Full-Duplex Ethernet Controller with Plug and Play Function(Real PNP)Specification,1996
[7]Jean J.Labrosse.嵌入式实时操作系统 !C/OS-II[M](第二版).北京:北京航空航天大学出版社,2003
[8]Thomas.F.An Introduction to TCP/IP for Embedded Engineers.Embedded System Conference SanFrancisco,2002:350-370
[9]Behrouz A.Forouzan,Sophia Chung Fegan.TCP/IP Protocol Suite Second Edition[M].北京:清华大学出版社,2003