kaiyun官方注册
您所在的位置: 首页> 通信与网络> 设计应用> 基于uIP协议栈的嵌入式Web服务器的实现
基于uIP协议栈的嵌入式Web服务器的实现
来源:微型机与应用2011年第4期
张 勇1,朱志红1,2,田茂胜1,2
(1.华中科技大学 国家数控系统工程技术研究中心,湖北 武汉430074;2.武汉华中数控股份有限公
摘要:为使数控系统具备网络访问功能,通过移植嵌入式TCP/IP协议栈—uIP,并且编写网络控制芯片驱动程序接口以及能实现HTTP协议的通用应用程序,使数控系统具备Web服务器的功能。用户可以使用PC接入Internet,通过标准浏览器远程监测数控系统的运行状态。
Abstract:
Key words :

摘 要:为使数控系统具备网络访问功能,通过移植嵌入式TCP/IP协议栈—uIP,并且编写网络控制芯片驱动程序接口以及能实现HTTP协议的通用应用程序,使数控系统具备Web服务器的功能。用户可以使用PC接入Internet,通过标准浏览器远程监测数控系统的运行状态。
关键词:uIP协议栈;HTTP协议;Web服务器;数控系统

数控技术的网络化是数字制造技术的发展方向,利用网络技术使数控系统具备远程监控和故障诊断功能可以极大地提高产品的市场竞争力。TCP/IP协议已经在全球互联网上取得了巨大成功,通过实现TCP/IP协议使系统直接接入内部网或者互联网,这种方案利用了现有的网络线路,避免了成本高昂、繁琐的布线工作,已成为大多数用户的选择。而基于Web服务器的远程监控技术,可以为用户提供一个统一、简洁的操作界面。
整个设计中的关键是TCP/IP协议栈的实现,完全从零开始去实现一个嵌入式TCP/IP协议将耗费大量的时间和资源,导致产品跟不上市场需求。而商业的TCP/IP的网络组件实现过于复杂,需要占用大量的系统资源,同
时会导致成本的提高,本设计选用精简的开源uIP协议栈作为网络通信协议,采用嵌入式的uIP协议栈,编写基于DOS操作系统的网络芯片驱动程序接口,在应用层实现HTTP协议,最后将其运用于华中数控的HNC-21系统,使系统具备了远程监控功能。
1 uIP协议栈分析
uIP协议栈是专为8/16 bit的嵌入式微处理器设计的小型TCP/IP协议栈,采用BSD授权,遵循RFC标准,完全由C语言编写,具有良好的互操作性、完整的源代码和注释,可免费用于非商业和商业用途。uIP协议栈有多
个版本,本设计采用的是uIP0.9。
为了减小代码量,降低对系统资源的要求,uIP的内部实现具有如下特点[1]:只实现了网络通信所必要的协议机制;不支持内存动态分配机制,使用单一的全局缓冲区收发数据包;各层协议不严格独立,紧密耦合;
应用程序主动参与部分协议栈的功能实现。
uIP协议处于网络通信的中间层,其设计重点放在IP(网际互联协议)、ICMP(网络控制报文协议)和TCP(传输控制协议)的实现上, UDP(用户数据报协议)和ARP(地址解析协议)实现只是作为可选模块。其体系结构[2]如图1所示。

uIP协议栈提供了三个函数给底层设备驱动程序:uip_periodic()、uip_init()和uip_input()。其中uip_input()和uip_periodic()在内部的实现采用同一个函数,即uip_process(u8_t flag),区别在于调用的参数和使用情况不同。uIP协议栈中应用程序基于事件驱动模式,作为一个独立的模块由用户实现。为了将应用程序挂接到uIP中,用户需将宏UIP_APPCALL()定义为自己的应用程序函数名。
2 嵌入式Web服务器的实现
uIP协议栈以函数库的形式提供,本身不提供底层网络驱动和上层应用程序。因此为了完成指定的功能,开发者必须添加网卡芯片的驱动模块和特定的应用程序模块。
2.1 uIP协议栈的移植
协议的实现核心是\uip目录下的7个程序文件[3],本设计中用到uip.c、uip.h、uip_arp.c、uip_arp.h、uip_arch.h 5个文件。其中uip.c和uip.h实现了IP、TCP、ICMP协议,uip_arp.c和uip_arp.h实现了ARP协议。\unix目录下有5个程序文件,本设计中用到的主要是uip_arch.c和uipopt.h。其中uip_arch.c是校验和文件,uipopt.h是参数配置文件。
设计中根据需要修改uipopt.h,使用静态IP地址,故将UIP_FIXEDADDR设置为1;不支持数据包分割重组,设置UIP_REASSEMBLY为0;不需要UDP协议支持,设置UIP_UDP为0;设置UIP_CONNS为5,允许同时开启5个TCP连接。因为在应用层只需要实现HTTP协议,设置UIP_LISTENPORTS为1。最后根据实际应用修改MAC地址、IP地址、子网掩码和网关地址中相应的宏变量。
2.2 网卡驱动程序接口
本设计中使用的网络控制芯片是台湾Realtek公司的RTL8019AS,系统环境是16位的DOS操作系统。设计中遵循Packet Driver接口协议来操作网卡,提供给上层的函数接口包括网络芯片的初始、发包、收包。
网卡的初始化接口函数int tapdev_init(void),主要完成获取网卡句柄和Packet Driver[4-5]提供服务的软中断号、注册网络数据包的接收程序。函数流程如图2所示。

网卡的接收数据包接口函数为unsigned int tapdev_read(void),主要功能是判断是否有新的数据包到来。如果有,则将数据存储到全局变量uip_buf中供进一步的处理,并返回数据包的长度。
网卡的发送数据包接口函数int tapdev_send(void)通过调用Packet Driver的send_pkt()将封装好的数据包发送到以太网。全局变量uip_len表示要发送的数据包长度。发送数据包的实现代码如下:
while(times--)
{
regs.r_ax=PD_SEND;
regs.r_ds=FP_SEG(tmpbuf); //temp为待发送数据包缓存区
regs.r_si=FP_OFF(tmpbuf);
regs.r_cx=uip_len; //待发送数据包长度
intr(pkt_interrupt,®s);
if(regs.r_flags &CARRY)
continue;
break;
}
2.3 应用层协议实现
HTTP(HyperText Transfer Protocol)超文本传输协议是用于从WWW服务器传输超文本到本地浏览器的传送协议。要实现Web服务器[6]的功能,就需要在应用层实现HTTP协议。HTTP协议采用的是客户端与服务器模式。在客户端产生数据请求,在服务器端产生应答数据,然后以Web页面形式返回给客户端。为了达到统一通用的要求,Web页面采用HTML格式传输。
设计中将应用层函数http_call定义为宏UIP_APPCALL, 主程序首先调用函数uip_listen开启80号端口监听。如果监测到远程连接请求,分配一个连接项给客户端,然后等待客户端的发送具体的数据请求。在接收到客户端的数据请求后,根据相应语法解析请求指令,将相关信息以网页形式返回到客户端。
用户只要通过标准的浏览器输入相应的IP地址就可以查看服务器提供的Web网页。Web服务器软件实现框图如图3所示。

3 Web服务器的应用
将设计的Web服务器应用于华中数控HNC-21系统,可远程监控机床的当前运行位置、参数设置、报警信息等。设置数控系统的IP地址为192.168.0.2,同时设置相应的子网掩码和默认网关,然后将数控系统接入局域网。在接入同一局域网的PC机上打开浏览器窗口,在地址栏中输入192.168.0.2,出现图4所示界面,说明Web服务器已运行成功。

按照本设计中的配置参数,整个系统中核心协议的实现代码量约为20 KB,核心协议的实现占用的内存约为10 KB,资源占用量很小,能很好地满足资源有限环境下的应用需求。采用移植精简的TCP/IP协议栈uIP,使数控系统具有网络接入功能,是一种低成本、高效的网络接入方案。通过实现Web服务器的功能,可以让用户使用统一、简洁的界面对数控系统进行远程监控,降低了用户的使用难度。

参考文献
[1] ADAM D.uIP-a free small TCP/IP stack[EB\OL].[2010-06-25].http://www.sic.se/~adam/download/uip-doc-0.6.pdf.
[2] ADAM D.Full TCP/IP for 8-bit architectures[EB\OL].[2010-06-25].http://www.sics.se/~adam/mobisys2003.pdf.
[3] Doxygen. uIP 0.9 reference manual[EB\OL].[2010-06-25].http://www.sics.se/~adam/download/uip0.9-refman.pdf.
[4] FTP Software Inc.PC/TCP packet driver specification[EB\OL].[2010-06-25].http://www.crynwr.com/packet_ driver.html.
[5] 黄皓.ARP协议分析及在网络安全中的应用实现[D].成都:电子科技大学,2007.
[6] JEREMEY B.嵌入式系统Web服务器-TCP/IP Lean[M].陈向群,译.北京:机械工业出版社,2003:313-319.

此内容为AET网站原创,未经授权禁止转载。
Baidu
map