APP下载

基于嵌入式服务器在监测控制中的应用

2011-06-01范郁宝

自动化仪表 2011年4期
关键词:源代码嵌入式网页

范郁宝

(上海电机学院高职学院,上海 200093)

0 引言

随着网络技术的不断发展,各种嵌入式设备进行网络互联变为现实。同时,随着实时操作系统和TCP/IP协议在嵌入式设备中的广泛应用,可使用标准浏览器在Internet网络的远端对这些设备进行访问与控制。浏览器通过存储在现场设备中的网页,动态地反映现场设备的运行状态以及执行操作后的反馈信息,同时,嵌入式Web服务器与现场控制系统、仪器仪表相连结,就可通过Internet实现远程监控和控制系统维护。因此,嵌入式Web技术对这些众多的联网设备的访问简单方便,易于实现。利用这种特性,可采用多种方式实现对设备状态的实时监测,从而达到可靠的控制效果

1 嵌入式Web技术的应用方式

在工业现场中,由于各种智能仪表的运算能力、储存空间和其他各种硬件资源均有不同,因此,它们接入到网络中的方式也不同,嵌入式Web技术在具体的实现中有以下几种方式。

1.1 设备内部实现方式

在设备内部实现Web服务器的关键就是用纯软件来实现TCP/IP的协议栈[1],使嵌入式Web服务器软件在协议栈上运行,并可以直接连接到网络上。这种方式通常要求CPU具有很强的运算处理能力,TCP/IP的协议栈通常有串口与modem连接,或可通过以太网芯片组连接到以太网上。这种方式的Web服务器结构如图1所示。

图1 软件实现的Web服务器Fig.1 The Web server implemented by software

通过软件实现Web服务器的特点是设备可以直接挂接到网络上,用到的硬件只有CPU和接口芯片,不需要其他辅助硬件,硬件设计简单。而其不足之处在于CPU处理能力要求较高,通常为32位运算能力的处理器;代码鼠很大,需要较大的存储空间;纯软件协议栈,软件调试复杂。

1.2 硬件实现方式采用硬件实现Web服务器的结构如图2所示。

图2 硬件实现的Web服务器Fig.2 The Web server implemented by hardware

在这种方式下,设备完全由硬件来实现TCP/IP协议栈,目前己经有这种功能的芯片投入市场。也可以采用能实现TCP/IP的硬件电路板,通过串口接入到现场智能设备上,从而实现TCP/IP协议。现场设备的处理器只需要运行嵌入式Web服务器软件即可。

通过硬件实现Web服务器的优点是设备可以直接挂接到网络上;全部的TCP/IP协议栈由外围芯片硬件实现,减轻了调试软件的负担;CPU不用运行TCP/IP协议栈软件,减轻了处理负担,因而对CPU的性能要求降低,减少了存储器的使用空间。其缺点是增加了处理TCP/IP的外围芯片成本;增加了硬件设计复杂度和硬件调试难度。

1.3 外部网关实现方式

采用外部网关实现嵌入式Web服务器的结构如图3所示。

图3 外部网关实现嵌入式Web服务器Fig.3 The Web embedded implemented by external gateway

这种结构由一台PC机充当外部网关[2],Web服务器运行完整的TCP/IP协议和部分嵌入式Web服务软件,并通过串口等方式使每台PC机可以控制一个或多个现场设备。外界对现场设备进行访问时,Web服务器先要通过网关进行解析,然后与现场设备交换信息,提取网页等,并将最终的信息送给外部访问者。

2 GoAhead嵌入式服务器应用研究

GoAhead服务器是源代码公开的嵌入式Web服务器[3],是为嵌入式设备而设计的,可以在 www.GoA-head.com网站上下载。这个开放、免费并且标准化的产品可以快速地与嵌入式设备结合,实现Web解决方案。它在标准的Web服务器的基础上将源代码简化,通过模块化的方法将各个处理构件集中到单独的文件中,如处理与Socket有关的函数均在Sock.c和 Sock-Gen.c中[4]、处理用户管理的函数均在 um.c中以及处理安全认证的均在security.c中等,从而使得体系结构十分清晰,源码也易于理解。

GoAhead嵌入式Web服务器的开放源代码如同Linux一样,也是开放源代码的软件产品。开发源代码可以有助于开发者更好地理解软件的内部构成,也可以得到更多的技术内幕,这是选择GoAhead的原因。其他一些源代码不开放的嵌入式Web服务器通常需要利用专门的开发工具对这些软件进行开发,因此增加了软件开发的复杂性,也提高了购买开发工具产品的成本。GoAhead的体系结构如图4所示。

图4 GoAhead的体系结构Fig.4 Architecture of GoAhead

2.1 动态网页的支持

标准Web服务器通常含有大量的静态存储网页,而嵌入式Web服务器则根据需求动态地生成所需的网页。这些网页需要实时地反映设备的状态、采集的信号、报警的信息和反馈操作的执行结果等。嵌入式Web服务器必须要求网页能够随嵌入式设备的变化而动态更新和生成[5]。GoAhead采用ASP的应用和嵌入式JavaScript两种方法实现动态网页。

许多嵌入式Web服务器都是通过专有的方法来产生动态数据的,而GoAhead则更多地采用工业标准来实现,如ASP和JavaScript。ASP是微软开发的用于产生动态网页的方法,允许多种脚本语言来动态地表示各种数据,而不用对服务器进行重新编译。GoA-head中的JavaScript是一种脚本语言,已经得到了广泛的应用。但是这种脚本语言的解释器所需要的代码空间为200~400 kB,不适用于嵌入式设备中,而GoA-head采用的是JavaScript的一个子集,称之为Embedded JavaScript,它只需要完成嵌入式设备通常需要的流程控制、变量赋值和结构测试等。

2.2 GoAhead服务器的安全保护

GoAhead嵌入式Web服务器采用安全套接层SSL(secure socket layer)协议在TCP/IP网络上进行加密和认证,支持更高级的安全认证机制DAA(digest access authentication)。同时,通过用户管理,可以给不同的用户设置不同的访问权限。

2.3 GoAhead服务器的系统设备

许多嵌入式设备通常没有磁盘文件系统或其他大容量存储设备,但仍需要通过网页对其进行访问和控制,这就要求嵌入式Web服务器能够通过ROM或Flash这样的存储设备来进行网页的存储。GoAhead先对要存储的网页进行编译,将所有的网页转换成一个大的矩阵数组,并将最终生成的可执行文件存储在ROM中;在网页提取时,通过另外的解释程序对这些数组进行解压缩转换成所需的网页,从而避免对文件系统的依赖。

2.4 GoAhead服务器与仪器的集成

嵌入式Web服务器能与现有的设备进行很好的集成,设计方便。这里的集成通常是指两个方面:①嵌入式Web服务器与实时操作系统的集成;②嵌入式Web服务器与设备应用程序的集成。

对于前者,GoAhead提供了操作系统抽象层,在移植到不同的操作系统上时,只需对系统抽象层的接口函数进行修改[6],就可以使服务器程序较方便地在不同操作系统上运行。

目前,GoAhead操作系统己经在 Linux、QNX、Vxworks和Windows CE等系统上得到了实现。对于后者,可以通过不同的途径使与设备相关的应用程序接口API与Web服务器集成。GoAhead通过动态服务网页ASP和JavaScript使设备应用程序产生的动态结果链接到网页上。

2.5 GoAhead源代码分析

GoAhead自身定义了两个重要的结构体,即维护每一个socket()所有信息的结构体类型socket_t和维护每个Web访问信息的结构体类型WebsRec。GoA-head服务器主流程如图5所示。

图5 GoAhead服务器的主流程Fig.5 Main process of GoAhead server

2.6 GoAhead在操作系统上的移植

尽管GoAhead已经能够移植到很多操作系统上[7],如 Linux、Windows、Vxworks、和 ECOS 等,但目前还没有Nucleus上的版本。因此,只能选择一个与Nucleus最接近的操作系统ECOS,并参照GoAhead在ECOS上的软件移植版本进行修改。GoAhead服务器的Socket接口采用的是Berkley的标准API,Nucleus的NET部分也是遵循Berkley的标准,这就增加了移植的方便性。由于Nucleus的NET部分是一个精简的TCP/IP协议栈,有许多功能函数或者函数选项没有实现,同时一些结构体的定义也经过了简化,这就给移植带来了很多需要考虑的问题。

2.6.1 对Socket接口函数的替代

GoAhead总共有30多个源文件(C文件),但是其中主要的Socket接口函数所在的文件是Sock.c、Sock-Gen.c、主函数(mainfunction.c)和几个头文件。其中Sock.c和SockGen.c文件中的函数均需要调用TCP/UDP套接字的Socket接口函数,是GoAhead集中维护的位于Socket API和Web API中间的一层。由于在这两个文件中均是调用标准的Berkley Socket API,因此,在移植时需要把这些Socket API完全替换成Nucleus的Socket API。同时,在调用函数时,由于参数的类型有差异,需要对参数进行强制转换。替代的API函数如表1所示。

表1 Socket API函数替代表Tab.1 Substitution for Socket API functions

2.6.2 对类型和结构体的替代和更改

①基本类型

GoAhead自身定义了许多基本数据类型,但与Nucleus相对应定义的类型表达方式不一致,这时就需要在Nucleus的源文件 target.h中对应地增加这些定义[8],以使类型保持一致。

②与套接字和TCP/IP有关的类型

GoAhead采用Socket的结构体定义与Nucleus不同,必须替代,而且在对Socket结构体赋值时,必须注意要强制转换,其相关的结构对照如表2所示。

表2 套接字结构体对应关系Tab.2 Correspondence relationship of the Socket structure

2.6.3 GoAhead 编译预处理的定义

对于编译器来说,要想正确编译GoAhead和Nucleus移植后的源代码,就得把各自的编译预处理定义加在一起,且相互之间不能产生语义上的歧义。

此外,在GoAhead的头文件Uemf.h中有专为移植后的操作系统(如Linux、WindowsCE、和EEOS等)定义的 include[9-10],所以也要为 Nucleus 移植版本定义一个条件编译。其中,NU为编译预处理定义,表明此版本是在Nucleus操作系统上运行;PLUS ucleus.h是Nucleus的内核头文件;netinc unet.h是Nueleus网络包的头文件,这就包含了在GoAhead中把所要用到的Nucleus头文件,使用时就不会再出现问题;STX和ETX分别为数据帧的起始标志和结束标志;Data为消息正文,包含向控制器发送的控制命令以及控制器返回的数据。

3 结束语

嵌入式设备以其体积小和性能稳定等特点成为远程监控系统的主流方向。本文主要论述了嵌入式Web服务器在远程控制系统中的应用。在传统的控制系统中引入嵌入式Web服务器,实现了实时、方便的远程控制,用户只需输入嵌入式Web服务器的地址即可控制远程控制系统[11]。软件设计使得该系统程序结构清晰,维护方便,能够满足系统对现场设备的控制要求,促进低端控制设备的信息化。

本系统的研究与实验对远程控制系统具有一定的参考价值,系统经过测试,取得了比较满意的运行效果。

[1]吕京建,肖海桥.面向二十一世纪的嵌入式系统综述[J].电子质量,2001(8):3-8.

[2]葛源,胡荣强,吴小娟.嵌入式Web服务器与plc的通信实现[J].电力自动化设备,2005,25(12):70 -72.

[3]贺磊.一种嵌入式实时操作系统Nucleus plus[J].信息工程大学学报,2000(4):12-25.

[4]张湘,肖建.嵌入式系统和嵌入式操作系统[J].世界仪表与自动化,2002,6(5):12 -16.

[5]魏忠,蔡勇,雷红卫.嵌入式系统开发详解[M].北京:电子工业出版社,2006:63-70.

[6]钱斌,徐海云,林少华.嵌入式Web服务器在CTM系统中的应用[J].微计算机信息,2006(17):99-101.

[7]罗蕾.嵌入式实时操作系统及应用开发[M].北京:北京航空航天大学出版社,2007:6-20.

[8]吴小红,杨海涛,王万良.基于Web的远程控制实验系统的设计[J].浙江工业大学学报,2004(6):700-705.

[9]李善平,刘文峰,王焕龙,等.Linux与嵌入式操系统[M].北京:清华大学出版社,2003:25-25.

[10]王传启,邓文栋,金敏.工业控系统制中嵌入式Web服务器的设计与实现[J].计算机工程与应用,2002(10):227-230.

[11]刘立芳,齐小刚.远程设备实时监控管理系统的设计与实现[J].计算机工程,2000,26(4):91 -92.

猜你喜欢

源代码嵌入式网页
Focal&Naim同框发布1000系列嵌入式扬声器及全新Uniti Atmos流媒体一体机
基于TXL的源代码插桩技术研究
基于HTML5与CSS3的网页设计技术研究
TS系列红外传感器在嵌入式控制系统中的应用
基于CSS的网页导航栏的设计
基于HTML5静态网页设计
软件源代码非公知性司法鉴定方法探析
搭建基于Qt的嵌入式开发平台
基于语法和语义结合的源代码精确搜索方法
基于URL和网页类型的网页信息采集研究