徐淑萍,李 军,张 军,敬 伟
(西安工业大学 计算机科学与工程学院,西安710021)
随着信息网络的发展和技术的革新,远程控制不再是指局域网中的远程控制,而是基于信息网的远程控制[1-2].信息网与控制网相比具有更大的优势,将两者结合起来,借助信息网的优势发展远程控制系统早已受到广泛关注.网络技术和嵌入式技术的快速发展及其相互融合,为现场检测与控制设备的微型化、智能化奠定了良好的技术基础,同时也直接推动着嵌入式应用向着更深层次发展[3-4].将TCP/IP协议嵌入到现场设备中去,使其具备嵌入式 Web服务器的功能,并借助于通用网关接口(Common Gateway Interface,CGI)技术实现现场数据与嵌入式 Web服务器之间的实时动态交互,就可以满足嵌入式设备直接与Internet联网的需求,为实现网络化实时监控奠定了良好基础[5].
嵌入式Web服务器具有Web服务器所不具有的优势,体积小、价格便宜、良好的平台移植等优势.在系统中选用嵌入式Web服务器除了考虑其以上优点外,更重要的是考虑到嵌入式Web服务器比较适用于工业控制领域[6-8].将嵌入式 Web服务器应用于控制系统中,不仅简化了控制系统的结构,将信息的采集和发布集成到嵌入式设备中,而且可以利用嵌入式Web服务器标准的接口形式和标准的通信协议,为任何接入它的用户提供统一的、基于浏览器方式的操作和控制界面[9-10].这种方式从根本上改变了设备的运行和管理方式,降低了控制运行的维护成本,提高了控制系统的维护效率.本研究将信息网引入到控制网络中,在嵌入式设备中加入HTTP服务并将其转化成Web服务器,向Internet网提供基于 Web的图形化管理接口.用户可以使用浏览器作为接口来访问嵌入式设备,这样不仅能使嵌入式设备的易用性大大提高,而且方便统一管理.
图1 系统总体结构图Fig.1 System’s overall structure
如图1所示,系统主要由客户端模块,互联网Internet模块,嵌入式Web服务器模块,PLC可编程控制器及被控对象模块构成.位于客户端的用户使用浏览器访问嵌入式Web服务器,通过HTTP协议将数据传给嵌入式Web服务器,嵌入式Web服务器作为上位机将所有从可编程控制器传送来的串口数据自动封装为传输控制协议(Transmission Control Protocal,TCP)或用户数据报协议(User Datagram Protocal,UDP)然后在网络上传输,同理,也可以将网口接收到的TCP或UDP包自动拆封出数据并发向串口,进而完成串口与网络信号之间的转换,上位机经过串口,通过通信协议把数据传送给下位机.下位机根据通讯协议,收到上位机发送过来的数据从而实现嵌入式Web服务器与PLC之间通信,嵌入式Web服务器是整个控制系统的核心,实现远程客户端与被控对象间的信息交互.下位机部分它主要接收远程客户端的命令,完成对被控对象的控制,并将被控对象的运行信息反馈给远程客户端.
远程客户端主要功能是完成与嵌入式Web服务器的通讯,以提供给用户一个友好直观的交互界面;接收来自PLC对现场设备控制的运行参数,并动态显示于Web页面.用户通过浏览器登陆到嵌入式Web服务器,进入控制页面,然后在相应的表单中进行控制操作,点击提交按钮后,数据传送到嵌入式Web服务器端,然后嵌入式Web服务器通过一系列处理通过串口将控制指令发送给下位机,浏览器端再作为接收端,接收下位机反馈的信息.远程客户端主要完成与嵌入式Web服务器通讯,在加入无线路由模块后实现多客户端模式,用户可通过PC机,手机等支持HTTP协议带有浏览器的终端对下联设备惊醒控制与监控.
本系统是在Internet上进行的远程控制,网络模块对应于物理上的一系列网卡、网线和无线路由器,用于连接远程客户端和嵌入式Web服务器,作为信息的传输通道.Internet仅将信息从一个地方传送到另一个地方,它不对数据做任何处理,仅实现客户端和服务器端的连接,并保证通路的畅通和安全性.同时网络模块使得整个控制系统与信息网相结合,使得远程控制系统不再局限于局域网中,而是可以借助信息网的优势进行更加便利的远距离控制.并通过加入无线路由器用其WIFI功能可以达到用智能手机控制PLC下联设备的效果.
这部分是整个控制系统的中枢部分,完成远程用户和PLC控制对象中信息交互的中转功能.嵌入式Web服务器一方面建立和下位机的连接,把从下位机传送过来的串口数据封装成在Internet上传输的TCP/IP包,将下位机的运行状态参数实时地向远程客户端传送.另一方面把从网络上发送过来的TCP/IP包根据HOST LINK串口通信协议解成串口数据供可编程控制器识别,将来自远程客户端的控制命令传给下位机,通过可编程控制器完成了对下位机的控制,同时他还实现HTTP的协议转换和封装,当用户通过浏览器访问网页时,只需输入嵌入式Web服务器的IP地址,就可以进行访问了.
该模块是整个系统最终的被控对象,通过所选用的可编程控制器实现对被控对象的控制,通过RS232串口实现与上层服务器的数据信息交换,实现上位机对下位机的控制.可编程控制器按照传送过来的指令进行工作,并把当前设备的执行情况通过相应的串口消息通信协议送回到嵌入式Web服务器,最终通过互联网到达用户浏览器端,使得远程客户端用户即使在远离工业现场的情况下也可以对被控对象进行控制并得到对象的执行情况.
本系统软件设计采用基于组件的思想,主要包括Web服务器组件,CGI组件,串行通信组件,数据存储组件等.这些组件之间的逻辑关系如图2所示.Web服务器组件是指实现了TCP/IP协议的基本内容、能够响应和处理用户请求、实现独立通信的程序模块,也称 Web服务器.通过对TCP/IP相关协议的实现,Web服务器即具有与浏览器交互的能力,能够处理客户端用户请求、传递网络消息并向浏览器返回结果,同时能够与其他应用程序协同工作.CGI组件是指按照CGI标准设计的具有独立功能的程序模块,是嵌入式Web服务器与外部扩展应用程序交互的一种标准接口.通过它把现场设备的数据实时地传递给嵌入式Web服务器,从而实现远端客户与现场设备之间的动态数据交互.串行通信组件是指完成串行通信功能的独立程序模块,由其完成现场设备到CGI组件的数据传送,他与CGI程序组件相互配合,共同完成对嵌入式Web服务器的数据更新.数据存储组件是指能够对现场采集的数据进行保存,并为其他功能组件提供读写使用方法的一类功能模块.数据存储组件的实现形式可以采用文件方式也可以采用嵌入式数据库方式.
图2 软件体系结构图Fig.2 Diagram of Software architecture
本系统中远程控制端的用户在与Internet相连接的浏览器中输入嵌入式Web服务器的地址,登陆到相应页面,并发送控制指令,嵌入式Web服务器收到控制指令后进行处理,响应客户端浏览器的连接请求,获取控制信息并发往被控对象,通过嵌入式Web服务器内部一系列的操做过程,将其转换为PLC可以识别的消息,实现数据处理从而完成通信.嵌入式Web服务器也获取来自被控对象的实时信息,经过数据处理后发往远程客户端,同时响应客户端浏览器的连接请求,将处理结果以动态页面的形式返回给客户端,其中嵌入式 Web服务器工作于“串行通道模式”,即,所有串口来的数据都被自动封装为TCP或UDP包在IP网络上传输;同理,从网口上接收到的TCP或UDP包也会被自动拆封出数据并逐个字节发往串口.嵌入式服务器在系统启动时会自动装载嵌入式多任务操作系统,以及一套精简的 Web服务器.Web服务器会监听客户端发送过来的HTTP请求,并将其委派给服务器进程处理,该进程即CGI程序,它负责接收Web请求数据,与串口通信实现数据处理,并将处理结果以动态页面的形式返回给客户端.
Boa Web服务器是一种非常小巧的Web服务器,其可执行代码只有大约60kB左右.作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求.但Boa支持CGI,能够为CGI程序fork出一个进程来执行.
从网上下载一个linux操作系统下的Boa服务器,并且在徽处理器(Advanced Risc Machines,ARM)开发环境下配置好和开发板相应编译环境,此设计中ARM所烧系统为linux-2.6.32.2-1208-nfsandjffs2-w35-ok,叉编译环境为arm-linux-gcc-3.4.1,将下载Boa服务器通过tar命令解压缩,压缩包里有个 MAKEFILE,对其交叉变异,所得到的一个在ARM环境下可以运行的Boa可执行文件,并且按照其boa.conf文件在ARM环境中对其ARM系统进行配置.
按照Boa.conf对ARM进行相应的配置并且将错误日志,访问日志,Boa可执行文件,网站网页,CGI程序等等放到相应目录下.然后在更改ARM 下 的/etc/init.d/Rcs文件,是 我 们 编译 的Boa开机自启,至此Boa服务器搭建好了.简单的boa.conf代码事例为
#Boa v0.94configuration file
#version changes are noted in the comments
# boa-c/usr/local/boa
//Boa版本的说明以可执行文件boa在ARM中所存放的路径
#Port:The port Boa runs on.The default port for http servers is 80.
#If it is less than 1024,the server must be started as root.
//端口号的设定
#CGIPath:The value of the$PATH environment variable given to CGI progs.
CGIPath/bin:/usr/bin:/usr/local/bin
//CGI程序设置以及在ARM环境中存放路径
嵌入式Web服务器使用linux操作系统,CGI程序以C函数的形式来实现,其中CGI程序里提供的组件的格式为int NAME(WCT*w,char*file,char*head);其中NAME为CGI组件所对应的函数的名称,w为通信结构体,数据的请求接收和接收数据的响应都是通过他来操作的;file为所请求的通用网关接口名字;head为消息的请求头,请求的数据包长度和Cookie信息都是通过它来得到的.
开发CGI后,还必须在Web服务器中进行注册,这样当调用时,才能将函数与对应CGI联系起来,启用相应的CGI进程进行处理.
开发好的CGI注册格式为
Register("POST/GET",NAME,"NAME.cgi");
CGI开发中用户的请求方式有GET和POST两种方式,GET是把表中的参数数据提交到表单中的action属性所指的URL统一资源定位中,提交的值和表单中的各个字段是一一对应的,GET请求方式提交的数据是放在HTTP请求协议头中的,POST通过HTTP POST机制,将表单中的各个字段和内容放在HTML HEADER内,然后一起传送到action属性所指向的URL地址,整个过程用户是看不到的,POST提交的数据放在实体数据中.GET是通过在URL里面进行参数传递,用来传递一些不需要保密的数据,POST的安全性比GET高,GET传送的数据量较小,不能大于2 kB.POST传送的数据量较大,一般被默认为不受大小限制.CGI组件在Web服务器中注册好后,就可以进行工作了.
在系统中串行通信接口是连接嵌入式Web服务器与可编程控制器的桥梁,当数据从嵌入式Web服务器的串口发送后,数据将由字节数转换为串行的位,当下位机数据经串口发往上位机上,数据又由串行的位转换为字节数,在使用串口进行通信时,必须将串口打开,通信结束后将其关闭.
CGI进程完成与用户动态网页的交互,交互的信息是通过串口从下位机发送来的,需要和串口通信提取对象状态或控制对象动作,需要设计相应的串口通信组件,提取被控对象状态或控制对象动作.在本系统中,串口通信组件是针对下位机串口数据所开发的一系列函数,其获取被控制对象的串口消息,交给CGI程序处理.针对串口消息中指定的各条控制命令,分别设计相应的函数,实现命令的发送和返回数据的接收,并定义相应的结构体保存接收到的数据.以查询对象状态命令为例,其设计函数为
int set_opt(int fd,int nSpeed,int nBits,char nEvent,int nStop)
//设置串口属性:fd:文件描述符nSpeed:波特率nBits:数据位nEvent:奇偶校验nStop:停止位.
int open_port(int fd,int comport)
//打开S3C2440的串口设备节点
int dakai()
//向PLC发送控制命令.
Int jianshi()
//读取PLC对应通道的值 以监视PLC下联设备的状态.
在系统中提交命令数据,或者写数据,都需要从表单或者缓冲区中获取得到的信息,这就需要再设计一些相关的提取数据,获取数据的函数,方便与所设计的CGI串行函数一起工作,将复杂的实现过程封装起来,从而提高效率.
基于此设计的函数原型
cgiFormResultType cgiFormSelectSingle(char*name,char**choicesText,int choices-Total,int*result,int defaultV)
//将提交的表单里的数据提取出来,将数据保存到缓冲区中
cgiFormResultType cgiFormSelectMultiple(char*name,char**choicesText,int choices-Total,int*result,int*invalid)
//从缓冲区中根据变量名获取变量值
cgiFormResultType cgiFormCheckboxSingle(char*name)
//从缓冲区中根据按钮名获取用户输入的控制命令
在嵌入式远程监控系统中,以最小的系统开销来保证系统的实时性、安全性、实用性和易维护性,是系统设计时必须考虑的问题.采用组件化的设计方法为这些问题的解决提供了一种有效的途径,但需要处理好以下几个关键性问题.
系统安全都是非常重要的.对于基于嵌入式Web的远程监控系统,要求能保护系统中的信息安全,防止恶意破坏;不许无权限的人观察到重要资料和进行有关操作.针对此,在内网和外网增设防火墙用以保护内部局域网免受安全攻击.嵌入式Web服务器作为内部局域网上的一个节点也受到防火墙的保护.为了防止非法用户的访问,远端监控计算机在用Web浏览器访问嵌入式Web服务器时,需要进行身份验证.用户名和登录口令存放在外部存储器中.当嵌入式Web服务器上电启动或复位时,微处理器就把用户名和登录口令从外部存储器中读到其RAM中.在收到远程监控主机的登录连接后,按字节方式逐个比较来验证登录信息,如果验证通过,则设置登录成功标志位,否则向远程监控主机的Web浏览器发送登录失败Web页面.
建立合理的系统模型及组件模型是组件化设计的基础.对系统功能模型进行合理分解,以相对独立的功能模块为基础来定义组件,每个组件要有清晰的边界.实时性是嵌入式监控系统设计和实现时必须关注的问题.为保证其实时性,应尽量避免TCP/IP协议的冗余实现,构造瘦 Web服务器,以减少对嵌入式系统资源的占用.否则,如果实时性得不到保证,远程监控就失去意义.标准化是保证组件具有兼容性的前提.对每种组件的接口和操作定义应尽量做到标准化,包括对组件的属性访问和对组件的操作都需要标准化.
嵌入式Web服务器是实现嵌入式系统通过Web方式与Internet互联的关键组成部分,对其进行研究对嵌入式Internet技术的发展有重要意义。支持Web浏览功能的嵌入式设备不但可以简化设备的设计,而且可以通过浏览器方便地设置嵌入式设备的参数.本嵌入式监控系统以其体积小、可连续工作时间长、性能稳定可靠等特点,成为今后远程监控技术发展的主流方向.组件化设计思想与CGI技术的成功应用,为嵌入式监控系统的动态数据交互提供了有效的手段,从而为网络化远程实时监控系统的实施提供了可靠的技术保障.随着互联网应用领域的不断深入,嵌入式Internet技术将得到更为广泛的应用和发展.
[1] 吴迎年,张建华,侯国莲,等.网络控制系统研究综述(I,II)[J].现代电力,2003,20(6):54.WU Ying-nian,ZHANG Jian-hua,HOU Guo-lian,et al.Research Review of Networked Control System(I,II)[J].Modern Electric Power,2003,20(6):54.(in Chinese)
[2] ZHUANG Y,WANG W,YUN W M.The Research on and Development of Network Based Robot Control Technology[J].Robot,2007,24(3):276.
[3] LIAN Feng-li.Network Desing Consideration for Distributed Control Systems[J].Control Systems Technology,IEEE Transactions on March,2012,10(2):297.
[4] 李恒超,张家树.基于嵌入式 Web的远程监控研究[J].西南交通大学学报,2003,38(3):263.LI Heng-chao,ZHANG Jia-shu.Research on Remote Monitoring System Based on Embedded Web[J].Journal of South West Jiao Tong University,2003,38(3):263.(in Chinese)
[5] RAJESH K,SRIDHARAN K,SRINIVASAN K.Design and Development of A Web-Based Data Acquisition System[J].IEEE Instruction and Measurement,2006,51(3):427.
[6] WANG S W,XIE J L.Integrating Building Management System and Facilities Management on the Internet[J].Automation in Construction,2004,11(6):707.
[7] 谢仕义,徐兵.嵌入式 Web服务器的设计及其CGI实现[J].计算机工程与设计,2007,28(7):1598.XIE Shi-yi,XU Bing.Design of Embedded Web Server and Its Implementation of CGI[J].Computer Engineering and Design,2007,28(7):1598.(in Chinese)
[8] 付保川,王中杰,班建民,等.基于CGI嵌入式监控系统动态数据交互的实现[J].计算机工程,2005,31(24):196.FU Bao-chuan,WANG Zhong-jie,BAN Jian-min,et al.Realization of Dynamic Data Exchange Based on CGI for Embedded Remote Monitoring System[J].Computer Engineering,2005,31(24):196.(in Chinese)
[9] 马亚娜,钱焕延,孙亚民.Cookie在 Web认证中的应用[J].小型微型计算机系统,2004,25(2):207.MA Ya-na,QIAN Huan-yan,SUN Ya-min.Research on Cookie's Application in Web Authentication[J].Mini-Micro Systems,2004,25(2):207.(in Chinese)
[10] AURER C,KLIMBACHER A P.Embedded Web Server Technology for Remote on-Line Labs[C]//Dubrovnik:ISIE,2005:157.