关键词:嵌入式Web服务器 嵌入式Internet TCP/IP协议 CAN总线
引言
嵌入式系统指被嵌入到各种产品或工程应用中的,以微处理器或微控制器为核心的软硬件系统。嵌入式系统与Internet技术相结合,形成的嵌入式Internet技术是近几年随着计算机网络技术的普及而发展起来的一项新兴技术。它通过现有嵌入式系统,增加因特网接入能力来扩展其功能,创造性地提出以低价位单片机作为微处理器,使嵌入式设备而非PC系统直接接入Internet。在本文中,采用Ubicom公司的SX52单片机外接以太网控制芯片RTL8019AS实现嵌入式Web服务器硬件结构和软件功能。传统的基于DCS结构工控系统向嵌入式Web结构转移,可有效降低成本,这是因为没有必要开发专有的GUI,还可以方便最终用户,并改善故障检测和设备维护的远程访问能力。
图1
1 嵌入式Web服务器硬件设计与实现
通常嵌入式系统硬件包括微控制器、存储器外设器件和I/O端口等,其核心是嵌入式微控制器。为适应上网需求,嵌入式微控制器不仅要能执行传统的控制功能,还要能执行与连接因特网相关的功能,而Ubicom公司的SX52芯片能比较容易地实现TCP/IP协议,所以我们选择它作为微控制器。
实现嵌入式设备接入Internet,从原则上来讲最关键的就是要实现TCP/IP协议,还有一人关键的问题就是传输信息媒质的选择。我们采用最常用的连接模式,即通过以太网连接Internet,利用网络接口控制器来实现数据链路层协议。嵌入式系统应用最广泛的网络驱动芯片就是NE2000兼容系列网络芯片,它具有接口方便、驱动简单、占用资源少等优点,特别适合嵌入式系统。我们选用其中性能较了,供货比较稳定的RTL8019AS芯片。嵌入式Web服务器硬件结构框图如图1所示。
嵌入式Web服务器用SX52微控制器作为处理器,以太网驱动芯片RTL8019AS经耦合隔离滤波器HR61101G和RJ45接口接入以太网,配有RS232和CAN总线两个扩展接口,可以将具有RS232接口的设备或采用CAN总线协议通信的设备连到以太网上。RS232接口采用MAX232CPE芯片,CAN总线控制器采用Philips公司的SJA1000芯片,CAN收发器则采用了Philips公司的PCA82C250。
数据的流向为:请求和控制信息从局域网中来,通过RJ45送到RTL8019AS,RTL8019AS负责将以太网帧的首部和尾部信息剥离,将处理后的数据包送入SX52的TCP/IP协议栈,由协议栈对数据报进行解析,得到原始的请求和控制信息。请求和控制信息再经过SJA1000进行CAN协议格式的数据封装,再和现场的CAN总线设备进行通信。请求和控制的回复领先局域网的过程与上面正好相反。图2为Web服务器主要芯片连接电路简图。
SX52有5个I/O口,共40个引脚。在设计中,利用SX52的C口的RC0~RC7连接RTL8019AS的数据口SD0~SD7;SX52的B口兼顾选址和读写控制功能,在开发中用它与RTL8019AS的地址及读写控制引脚连接。在确保通信功能顺利实现的同时,充分利用了SX52芯片I/O口灵活配置的特点,最大程序地节约了微控制器SX52的硬件资源。
图2
RTL8019AS基地址选择引脚IOS0~IOS3接地,此时I/O基地址为300H,即0011 00000 000,所以地址线SA9、SA8接+5V。因为寄存器地址偏移量为00H~1FH共32个,对应地址从300H到31FH,所以只需将地址线SA0~SA4接SX52的RB0~RB4,其余地址线接地即可。芯片IORB、IOWB引脚为读写信号线,接SX52的RB6、RB5读写控制引脚。
RTL8019AS可以兼容8位和16位操作。图2中IOCS16是16位I/O的选择脚。当RTL8019AS上电复位的时候,如果这个脚为低电平,RTL8019AS将选择8位模式;如果这个脚为高电平,RTL8019AS将选择16位的模式。由于SX52是8位的数据总线,因此要用8位总线模式(每次读入或写入1个字节,只需8根数据线SD0~SD7),所以将这个脚接地。
RTL8019AS有3种工作方式:第一种为跳线方式,芯片的I/O和中断由跳线决定;第二种即插即用方式,由软件进行自动配置;第三种为免跳线方式,芯片的I/O和中断由外接的93C46里的内容决定。常用网卡上的RTL8019AS一般只支持第二种和第三种方式。在嵌入式应用的场合,为降低成本,同时又减少连线,不使用93C46。本设计中使用第一种方式,此时JP引脚接高电平。
AUI引脚决定使用AUI还是BNC接口。高电平时使用AUI接口,低电平时使用BNC接口,支持8线双绞线或同轴电缆。本设计中采用双绞线为通信介质,将该引脚接地。
RTL8019AS使用引脚TPIN+、TPIN-、TPOUT+和TPOUT-连接耦合隔离滤波器HR61101G,利用RJ45插头实现与以太网的连接。
SJA1000是独立的CAN通信控制器,支持CAN2.0B协议,其工作频率为6~24MHz。它的AD0~AD7为地址数据复用线,与SX52的D口RD0~RD7相连。当远端用户通过Web服务器查询现场的CAN总线数据时,SJA1000负责将现场控制单元的CAN总线数据解析,发送到SX52,再传到网上。
PCA82C250是CAN协议控制和物理总线的接口,它对总线提供发送能力,并对CAN控制器提供接收能力,它支持1Mbps速度。为保证SX52与SJA1000协同工作,在硬件设计中们将两个芯片共同一个硬件复位线,确保SX52与SJA1000硬件同步复位。
AT24C256是I2C总线的EEPROM,通常可以用来存储用户的一些设置,比如IP地址、网关等。在本设计用它存储静态网页。SCL接SX52的RA4脚,SDA接SX52的RA5脚。
MAX232CPE完成232电平与TTL电平转换,提供一个本地接口,为调试和维护提供方便。TXD接SX52的RA5脚。
MAX232CPE完成232电平与TTL电平转换,提供一个本地接口,为调试和维护提供方便。TXD接SX52的RA2脚,RXD接SX52的RA3脚,RS-RXD和RS-TXD是RS232电平,为标准串口电平。数据可以从串口输入到单片机SX52,SX52再把数据送到RTL8019AS传出去。
2 嵌入式Web服务器软件设计与实现
2.1 以太网接口驱动程序的实现
要将嵌入式Web服务器接入以太网,就要对RTL8019AS进行编程,完成以太网帧的数据收发,相当于实现PC机中网卡的驱动程序功能。以太网控制器驱动程序用于设置RTL8019AS的工作状态和工作方式,分配收发数据的缓冲区,通过对地址及数据口的读写来完成以太网帧的接收与发送。首先要对RTL8019AS进行复位,并将其设置为跳线模式;然后对RTL8019AS的工作参数进行设置,以使其开始工作;接下来就读写RTL8019AS的RAM以完成数据包的接收和发送。程序流程如图3所示。
2.2 嵌入式Web服务器TCP/IP协议栈的实现
TCP/IP协议栈是SX虚拟外设的一个重要实现,是基于SX处理器的应用系统与Internet实现互联的基础。通过这些协议栈,可以更加方便地开发基于Internet的嵌入式应用系统。
以太网数据的传输是采用MAC地址来识别的,而ARP协议提供IP地址和数据链路层使用MAC地址之间的转换功能。为了保证系统在太网的通信,首先要实现ARP协议。由于嵌入式Web服务器要能在Internet上通信,在网络层一定要实现IP协议,还要实现能报告数据传送差错等情况的ICMP协议。在应用层,主要实现远端主机通过浏览器的访问控制方式,所以要实现HTTP协议;而HTTP协议是基于TCP协议实现传输的,加上TCP协议是面向可靠的数据流的传输,基于应用的需要对可靠性的要求,在传输层采用TCP协议,并对TCP协议进行了简化处理,主要针对HTTP协议开发TCP协议。
图4为TCP/IP协议栈主流程图。系统初始化后,进入主程序循环部分。主程序循环包括两大部分:对接收到的以太网数据帧进行解包和对欲发送的数据进行封装并发送。对接收到的以太网数据帧进行解包,供应用程序使用;对欲发送的数据进行打包,将数据以以太网数据帧的格式发送出去,使采用TCP/IP协议的以太网内所有计算机能收到此数据帧。
图4
2.3 嵌入式Web服务器应用程序的实现
工业现场数据经嵌入式Web服务器上传到以太网才能被用户利用,因此网络用户和Web服务器之间通信程序的开发也是本课题中很重要的一部分。课题中嵌入式Web服务器实现的功能主要是现场实时数据发布功能。实时数据包括温度、设备运行状态信息、通信状态信息、时钟信息等。嵌入式Web服务器将实时数据以网页形式发布到Internet上,远方客户通过接入Internet浏览该服务器发布的工业现场实时信息。本设计采用Brower/Server(简称B/S)开发模式。用这种方式开发嵌入式Web服务器应用程序具有很多优点。比如降低客户端的要求,方便客户端的分布使用,客户端的开发和维护费用降低等。但是因为SX单片机的资源有限,在用单片机搭建的服务器上编程实现实时动态数据的浏览任务较重。在服务器端运行程序,速度也受到限制,加上网页界面或程序结构的单方面调整都将导致整个系统全盘修改,系统的灵活性与可扩展性差。在设计中,如果仅仅采用B/S访问方式,其功能是难以完全完成的。针对应用传统B/S模式开发Web服务器应用软件的弊端,提出了改进方案。
为克服传B/S访问模式的弊端,做了以下两点改进。
①采用套接字编程,实现部分服务器程序在客户端运行,在客户端浏览器实现动态网页显示实时数据。在改进方案中,实现动态数据的实时浏览采用了Java applet技术。
②不再将HTML语言写入汇编程序,在浏览器端解板成网页,而是利用嵌入式Web服务器扩展的EEPROM24C256与SX52相连,用来存储要浏览的Web文件。当浏览器与Web服务器交互时,利用HTTP协议通过统一资源定位器URL来确定Web服务器应该为浏览器提供哪些资源。
这种改进方案在访问模式上还是通过浏览器访问嵌入式Web服务器,在通信模式上却利用了C/S(Client/Server)模式,其于套接字来编程,即所谓的B/S和C/S相结合模式。图5为B/S和C/S结合模式的原理。
通过B/S方式访问Web服务器上的静态网页,在个网页中嵌有Java applet文件。客户端的IE浏览器浏览这个网页时,会把网页中标识的Java applet源程序下载到客户端执行。在Java applet源程序中,创建了一个套接字来完成与服务器的通信(前提是在Web服务器上同时运行一个相应的服务器监听程序),主要是获取实时数据,用于在浏览器中显示。事实上,Java applet中的Socket通信是一个典型的C/S访问方式。
通过这种B/S和C/S相结合的访问方式,能够很好的实现实时数据的动态浏览。特别是这种实现方式秉承了B/S和C/S两者的优点,具有很大的灵活性。
以下是服务器与客户端applet通信具体实现过程。
①创建Socket。用tcbLocalPortMSB和tcbLocalPortLSB设置服务器监听端口号,具体设为8080;用myIP3~0设置服务器IP址,具体设为192.168.1.111。
②将服务器设为Listen监听状态,等待接收客户端连接。用TCP API函数建立被动连接代码如下:
TCPAppInit
Bank TCB_BANK
Mov tcbLocalPortLSB,#APPLET_PORT_LSB;设置TCP服务端口
Mov tcbLocalPortMSB,#APPLET_PORT_MSB
Jmp @TCPAppPassiveOpen;跳转到TCP被动连接程序,进行端口侦听
_TCPAppPassiveOpen
_bank TCP_BANK
mov tcpState,#TCP_ST_LISTEN
clr tcpUnAckMSB
clr tcpUnAckLSB
retp
③当TCP的状态为established时,双方连接建立,可以开始传输数据。此时产生新的套接字,用来管理远端客户机服务,原来的端口继续用来监听。
④数据传输包括数据接收和数据发送的两问好。接收数据时,用TCPAppRxBytes()函数获得接收到的数据字节数,根据得到的字节数多次调用TCPAppRxData()函数接收数据,在全部数据接收完毕后可以在TCPAppRxDone()函数中做相应的处理。发送数据时,首先调用函数TCPAppTxBHytes()设置要发送数据的字节数,根据此字节数调用TCPAppTxData()函数发送数据,全部数据发送完毕后调用TCPAppTxDone()函数确认。其中采集的动态数据保存在变量globTemp3中。
⑤当TCP状态为closed时,服务器关闭连接,不再发送和接收数据。程序具体实现时,设定客户端和服务器端连接建立后,服务器端即向客户端发送数据。
3 结论
本文所设计的嵌入式Web服务器,采用改进的Web应用程序开发模式,用Java applet实现客户端程序,不用在客户端应用程序,方便用户使用;能取代传统的工控机和接口卡,实现现场设备数据直接上网,小巧轻便,成本低。
该Web服务器不仅可以广泛应用于工业控制领域,实现小型工业监测系统网络化,还可以实现智能仪器、智能园区、环境工程、植物工厂、工业制冷等方面的应用。