引言
作为一种功能强大的通信技术,以太网技术已经广泛应用于办公自动化和数字商务领域,正在向工业自动化、仪表自动化和楼宇自动化等领域发展;而这些领域对应用成本的要求更加苛刻,所以迫切需要一种低成本的解决方案。本文正是基于这种考虑,提出了一种基于8位微处理器的低成本、高精简度的嵌入式以太网解决方案。
传统的嵌入式以太网解决方案多采用16或32位微处理器,这也正是目前大多数嵌入式以太网通信的应用成本居高不下的原因。考虑到工控领域中网络通信应用模式相对单一,本方案在保证其性能的基础上,对Ethernet TCP/IP协议进行了最大限度的精简,然后采用高性价比的8位微处理器实现。
1 PIC微处理器简介
PIC微处理器是Microchip公司生产的高性能8位微处理器,具有指令少、执行速度快等优点。该系列单片机引入了原用于小型计算机的双总线和两级指令流水线结构。这种结构与一般采用CISC(复杂指令集计算机)的单片机在结构上是有显著不同的。
在本设计中,由于TCP/IP协议栈代码比较庞大,同时针对于远程文件传输的应用对处理器的程序存储器Flash和数据存储器RAM的要求比较高,所以选择了PIC18F452这一款处理器。
为了对这款处理器的性能有一个直观的认识,可以与x86系列处理器进行对比。首先,单纯从时钟频率来看,80386的最高时钟频率为33 MHz,PIC18F452的时钟频率最高可达到40 MHz,略高于80386;但是80386并不支持RISC(精简指令集)技术,所以PIC18F452的指令执行速度要比80386高得多。Intel公司直到80486系列才首次采用了RISC技术,主频包括20 MHz、33 MHz和50 MHz三种。可以看到,本系统选用的微处理器的时钟频率已经超过80386,与80486基本相当。因此,这款微处理器的性能是完全可以满足以太网应用要求的。
2 TCP/IP协议栈的实现
TCP/IP不是一个孤立的协议,而是由众多分布在各层上的、小的专业化的子协议组成的协议族。
TCP/IP协议的众多子协议之间相互独立,相互配合实现完备的网络通信功能。工业测控网络相对商用互联网络来说,并不需要如此复杂和庞大的通信功能;同时,微处理器也没有足够的资源和处理能力来实现如此复杂的应用。因此需要对TCP/IP协议栈进行一定程度的精简,只保留以下模块:
◇ ARP(Address Resolution Protocol,地址解析协议)
◇ ICMP(Internet Control Message Protocol,网络控制报文协议)
◇ IP(Internet Protocol,网际协议)
◇ TCP(Transmission Control Protocol,传输控制协议)
目前,市场上几乎所有的嵌入式TCP/IP协议栈都是根据BSD(Berkeley Systems Distribution)版的TCP/IP协议栈改写的。本设计选择Microchip公司提供的协议栈MCHPStack作为参考,在对其进行详细分析的基础上,根据实际需要进行适当修改和裁剪。
MCHPStack是Microchip公司为其生产的微处理器进行以太网应用而开发的一个协议栈,整个框架结构清晰地体现了OSI参考模型的分层思想。
3 硬件电路设计
本系统的硬件电路可以大致分为两部分: 一部分是以太网通信模块,主要包括RTL8019AS及其外围电路;另一部分就是实现本地数据采集以及本地控制的功能模块,主要包括CPU、串行通信、数据存储器等模块。
3.1 CPU模块
本设计使用的CPU为Microchip公司的PIC18F452,它有多种封装形式,采用DIP40。PIC18F452共有40个引脚,除2个Vcc和2个GND、2个时钟脚、1个复位脚MCLR以外,其余33个引脚是被划分为A、B、C、D、E五个端口的I/O脚(B、C、D口分别有8个I/O脚,A口有6个I/O脚,E口有3个I/O脚)。其中,D口作为并行数据口连接到RTL8019AS的数据端口SD;RB0~RB5作为地址线连接到RTL8019AS的地址端口SA。其余I/O引脚用作本地控制。
作为一个通用的开发平台,只支持一种处理器是不够的,所以在硬件电路设计过程中,选择了双CPU模块,在PIC18F452的基础上,又设计了PIC18F6621(本文所有的软件设计都基于PIC18F452)。PIC18F6621拥有48 KB程序存储器,4 850字节SRAM数据存储器,1 024字节EEPROM以及53个I/O脚;处理能力与PIC18F452相比有显著的提高,但对PIC18F452向下兼容,PIC18F452的程序无需任何改动就可以直接在PIC18F6621上运行。
3.2 以太网通信模块
RTL8019AS外围电路参考RealTek公司提供的典型应用,选用20 MHz晶振提供时钟源。LED0~LED2三个引脚通过限流电阻连接LED发光二极管,可用来指示网络控制器的工作状态,分别为LINK(已连接)、RX(接收)、TX(发送)。TPIN+、TPIN-、TPOUT+、TPOUT-分别连接到网络隔离变压器FL1012上,FL1012另外一端对应的4个引脚分别连接到RJ45接口的1、2、3、6四个引脚上。网络接入端应该使用耐压额度为2 kV的保护电容,由于在实验条件下传输线路一般不会发生雷击等意外情况,这里使用0.1 μF的普通电容来代替。RTL8019AS的写操作支持8位或者16位两种方式,由于PIC18F452的I/O脚有限,选择使用8位操作,将D端口连接到网络控制器的SD端口。当使用PIC18F6621时,由于它比PIC18F452多20个I/O脚,因此可以在本系统中把PIC18F6621的F口连接到RTL8019AS的SD8~SD15,从而选择16位写操作模式,这样数据的处理速度会比8位操作有一定的提高。
3.3 数据存储模块
本系统采用Microchip公司的24LC256作为数据存储器。它是32 KB的EEPROM存储器,工作电压为2.5~5.5 V;可通过I2C总线进行读写,最高读写频率可达到400 kHz,同时具有长达64字节的页操作功能;可重复擦写100 000次,数据可保存200年以上;片上有3条扩展地址线,允许同一总线扩展8片,容量可以达到2 MB。24LC256有多种封装形式,本设计中选择DIP8。
3.4 实时时钟模块
控制器在进行数据采集时,需要对每组数据的采集时间进行记录,这就需要在系统中设计实时时钟(RTC)芯片。设计中选用Dallas公司生产的DS1302时钟芯片。其工作时钟源为32.768 kHz的晶振,可正确计算年、月、日、小时、分钟、秒,直到2100年;支持备用电池,工作电压为2.0~5.5 V;独特的低功耗设计,在工作电压为2.0 V时,工作电流不到200 nA;内部使用NV(非易失性)RAM作为数据存储介质;拥有多种常用封装形式,此处选用DIP8。
3.5 USART通信模块
PIC18F452芯片内部集成了一个USART(可寻址通用同步/异步收发器)通信模块,可以使用它进行串口通信。在系统运行过程中,还可以通过串口向PC发送状态信息或者报告错误信息,这样可以在系统调试过程中非常方便地实时观察系统的运行状态。
本设计中选用Maxim公司的MAX232串口驱动器。它的工作电压为5 V,有2组驱动/接收器,标准波特率为200 kbps,外接电容的典型值为1μF。芯片封装形式为DIP16。
4 监控系统软件设计
本设计在实现协议栈基础上设计了一个远程监控系统,可将现场信息通过以太网发送到远程监控端,同时可在远程端实时地对现场设备进行远程控制。
整个软件系统可以划分为两部分: 一部分是PIC18F452的嵌入式模块,作为服务器端进行现场数据的采集与发布;另一部分是运行在远程的上位机监控软件。
4.1 服务器端程序设计
嵌入式软件的开发工作是在MPLABIDE下完成的。MPLABIDE是由Microchip公司提供的,面向PIC系列单片机、基于Windows的集成开发软件。用户可以在MPLAB集成环境下编写、汇编、调试及优化单片机的应用程序,并且能够迅速地在Programmer和Debugger模式之间进行切换。
服务器端的程序可以划分为两部分: 一部分是TCP/IP协议栈的程序代码,它通过协议栈管理函数StackTask的管理,为应用程序提供统一的TCP/IP通信应用接口;另一部分就是结合不同的实际需求来编写的应用函数代码。主函数的框架如下:
main( ) {
SystemInit();//系统初始化函数:包括设定CPU的
//I/O引脚输入/输出属性,全局变量的
//初始化等
StackInit();//协议栈初始化函数:对网络控制器进行
//初始化,设定本地IP地址和MAC地址,
//设定本地工作状态,初始化本地所有
//socket
while(1) {
StackTask();//协议栈管理
ServerProcess();//应用函数
}
}
4.2 客户端程序设计
客户端程序是运行在上位机中的Windows应用程序,使用Visual C++进行开发。可通过MFC AppWizard来创建一个应用程序框架,由于此应用程序需要使用操作系统的TCP/IP通信,所以在创建过程中的高级属性栏中要选中Windows Sockets选项。
结语
本文通过分析以太网技术在工控领域的应用,提出了一种低成本、高性能的嵌入式以太网解决方案;在此基础上进行了软件和硬件系统的设计,实现了一个基于以太网技术的远程监控系统;在局域网中对此系统进行了测试,验证了方案的可行性,并结合测试中暴露出来的各种问题,对系统进行了进一步的优化和完善。