嵌入式Web服务器的实现_第1页
嵌入式Web服务器的实现_第2页
嵌入式Web服务器的实现_第3页
嵌入式Web服务器的实现_第4页
嵌入式Web服务器的实现_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 第二章嵌入式Web服务器的实现3.1嵌入式Web服务器的概况随着计算机的日益普及,互联网络(Internet)已经成为人们日常生活的一部分。互联网络是覆盖率极广、联网设备众多、协议完善、功能强大的一种通信方式,已经成为社会重要的基础信息设施,是重要的信息流通渠道。具备互联网络的接入功能,已经成为众多使用微处理器的嵌入式应用的发展方向。网络控制设备逐渐成为一种趋势。使用互联网络的接入功能将给嵌入式的微处理器应用带来很多好处:利用无所不在的互联网络,可以从全球的任何一个角落实现对设备的监控;利用开放的TCP/IP网络通信协议,任何的计算机都可以使用通用的网络浏览软件访问设备,不需要专门的计算机和

2、专门的软件;设备的信息通过网页的形式体现。因此从概念性上来讲,嵌入式Web服务器(EmbeddedWebServer)是指将Web服务器引入到现场测试和控制设备中,在相应的硬件平台和软件系统的支持下,使传统的测试和控制设备转变为具备了以TCP/IP为底层通信协议,Web技术为核心的基于互联网的网络测试和控制设备。嵌入式Web服务器系统与传统的Web应用相比,简化了系统结构,将信息采集和信息发布都集成到现场的测控设备中。一般来说,Web服务器通常由以下几个部分组成:服务器初始化部分。这部分主要完成Web服务器的初始化工作,如建立守护进程、创建TCP套接字、绑定端口、将TCP套接字转换成侦听套接字

3、,进入循环结构,等待接收用户浏览器连接。接收客户端请求。由于客户端请求以文本行的方式实现,所以服务器也以文本行为单位接收。解析客户端请求。这部分工作比较复杂,需要解析出请求的方法、URL(统一资源定位符)目标、可选的查询信息及表单信息。如果请求方法为HEAD,则简单地返回响应首部即可;如果方法是GET,则首先返回响应首部,然后将客户端请求的URL目标文件从服务器磁盘上读出,再发送给客户端:如果是POST,则比较麻烦,首先要调用相应的CGI程序,然后将用户表单信息传给CGI程序,CGI程序根据表单内容完成相应的工作,并将结果数据返回。发送响应信息之后,关闭与客户机的连接。Linux环境下,主要有

4、三个Web服务器:Httpd、thttpd和BoaHttpd是最简单的一个Web服务器,它的功能最弱,不支持认证,不支持CGI。thttpd和Boa都支持认证和CGI等,功能都比较全。如果Web服务器仅需提供一些静态页面,例如系统介绍、简单的在线帮助等,完全可以用静态服务器Httpd来实现。但若需要与用户进行交互,例如数据查询、实时状态查询等,则必须使用动态Web技术,可以选用thttpd或者Boa来实现。目前实现动态Web页面有多种技术可供选择,CGI,ASP,PHP等技术。针对具体的嵌入式人机界面要实现动态数据和状态查询,而且要实现逻辑算法的实现,因此选择支持ASP、CGI、embedde

5、dJavaScript等脚本语言的Goahead。3.2Goahead服务器Web服务器米用GoAheadWeb服务器,一款主要面向嵌入式系统的Web服务器。它的体积非常小巧,但提供了不少的服务特性,它支持ASP,嵌入的JavaScript与内存CGI处理。3.2.2GoAheadWeb服务器的结构图3-1为GoAheadWeb服务器的处理流程,下面简单介绍其结构:main.c:GoAheadWeb服务器的主程序文件,完成初始化、设置环境和启动Web服务器等功能。网页的根目录:*rootWeb=T(web);修改*rootWeb到新的网页目录下。设置网站主页:websRedirect(wp,T

6、(home.asp);设置访问密码:*password=T();设置访问端口:port二80;Asp.c:asp解释器模块,主要有以下几个功能函数:websAspFunctions=symOpen(WEBS_SYM_INIT*2);创建asp函数列表,其中WEBS_SYM_INIT在头文件“wsIntrn.h”中定义。websAspDefine(char_t*name,int(*fn)(intejid,webs_twp,intargc,char_t*argv);创建asp函数命令。websAspFunctions是加载asp函数的标志;aspOpenCount是使用asp功能块的程序的个数;i

7、ntwebsAspOpen()打开websasp正确返回0;voidwebsAspClose()关闭asp模块;intwebsAspRequest(webs_twp,char_t*lpath);处理asp请求和script命令。Form.c:实现/goform的处理,主要有以下几个功能函数:formSymtab是/goform处理列表的标志;intwebsFormHandler(webs_twp,char_t*urlPrefix,char_t*webDir,intarg,char_t*url,char_t*path,char_t*query)处理form请求;intwebsFormDefine

8、(char_t*name,void(*fn)(webs_twp,char_t*path,char_t*query)定义一个form的函数功能块;voidwebsFormOpen()打开form表;voidwebsFormClose()关闭form表。cgi.c:cgi功能块intwebsCgiHandler(webs_twp,char_t*urlPrefix,char_t*webDir,intarg,char_t*url,char_t*path,char_t*query)处理form请求。security.c:安全功能块intwebsSecurityHandler(webs_twp,char_

9、t*urlPrefix,char_t*webDir,intarg,char_t*url,char_t*path,char_t*query)处理安全请求。基于以上GoAheadWeb服务器的结构和特点,针对动态网页的实现方面,采用ASP和embeddedJavaScrip技术来实现,才能实现组态动态网页。3.3Goahead服务器的移植Goahead的移植工作可以分为以下三个步骤来完成:第一步:下载Goahead源码由于Goahead的源代码是开放的,因此可以从Goahead的官方网站上下载到Goahead最新版本的源码。最新开放源代码的oahead版本为2.18。第二步:配置GoaheadWe

10、b服务器解压缩最新版本的Goahead服务器,进入目录,在修改/LINUX下的Makefile文件,将CC=arm-linux-gccAR=arm-linux-ar加到文件开始处,将cc-c-o$(DEBUG)$(CFLAGS)$(IFLAGS)$换成$(CC)-c-o$(DEBUG)$(CFLAGS)$(IFLAGS)$第三步:编译并下载执行$Makeclean$Make将在LINUX目录下生成webs和libwebs两个文件,只需将两个文件拷贝到ARM目标板。由于嵌入式系统没有足够的内存或存储资源来编译可执行代码只,有通过交叉编译代码来创建针对嵌入式系统的可执行文件,并把此文件送到目标机上

11、执行。因此通常的嵌入式系统的开发都是装有Linux的PC机作为宿主机来编译内核和应用程序。编译时可用arm-linux-来指定交叉编译器,不过使用之前先检查PATH路径是否正确。在ARM目标板上运行GoaheadWeb服务器,还必须对目标板进行设置,设置如下:首先,在/etc/modules.conf中加入aliasbinfmt-464coff;其次,由于ARM中的Linux没有hostname,因此设置:hostnamelocalhost;设置IP地址:ifconfigeth04。这样本地的浏览器或者其他主机的浏览器就可以浏览GoaheadWeb服务器网页。注意:编译后用strip裁减生成的

12、静态库与webs的文件大小,两个都在120kb左右,否则两个大小有1.5MB。3.4Goahead服务器功能修改与增加3.4.1Goahead服务器配置Goahead服务器得在程序中编译其配置信息,必须在编译之前将系统参数设置好,编译后,便不可以再改变。针对这个功能,可以采取将配置信息存储在文件中,Goahead运行时去获取相应配置信息即可。那么就不需要重新编译其应用程序,只需要修改一下配置信息。修改一些参数将其设置成配置信息,使其在修改时,不用重新编译和下载程序,现在做如下规定,配置参数存放在webs文件的同目录下,文件名为:“ServerCfg”需要配置的参数主要有以下几个,并定义其顺序,

13、方便程序读取其参数。0*rootWeb=T(web)*password=T(123456)port=8080(int)retries=5(int)umRestore(T(websconfig.txt)T(/goform)/goformhandlerT(/cgi-bin)/cgihandlerT(default.asp)/defaultpageT(asp.asp)/homepagehostname/ip地址定义了初始化程序,在Goahead服务器启动时,首先调用初始化程序;其次才正常启动Goahead服务器。staticintinitconfig();/初始化配置信息为了方便初始化配置数据信息,

14、定义了如下数据结构供初始化函数时使用:#definenmemb11structpara_testcharname30;intsize;serverCfgnmemb;由于Goahead服务器启动过程中需要有hostname和ip地址,因此,在初始化程序中,将设置hostname和ip地址。设置过程中调用system(执行shell命令)系统函数。System()会调用fork()产生子进程,由子进程来调用/bin/sh-cstring来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD信号会被暂时搁置,SIGINT和SIGQUIT

15、信号则会被忽略。如果system()在调用/bin/sh时失败则返回127,其他失败原因返回T。如果string参数为空指针(NULL),则返回非零值。如果system()调用成功则最后会返回执行shell命令后的返回值,但是此返回值也有可能为system()调用/bin/sh失败所返回的127,因此最好能再检查errno来确认执行成功。342时间功能模块为了在人机界面中显示时间,在人机界面做时序调度,方便人机界面做时间轴上的决策,增加了时间功能模块。分成两组:一组为:显示时间;另一组为:获取时间。显示时间分为三个功能函数,分别为:显示时间、显示日期和显示星期。函数原型如下:staticint

16、aspTime(inteid,webs_twp,intargc,char_t*argv)时间;staticintaspDate(inteid,webs_twp,intargc,char_t*argv)日期;staticintaspWeekDay(inteid,webs_twp,intargc,char_t*argv)星期;获取时间分成六个功能函数,分别为:获取小时、分、秒、月、日和星期。函数原型如下:staticintaspGetHour(inteid,webs_twp,intargc,char_t*argv)小时;staticintaspGetMinute(inteid,webs_twp,i

17、ntargc,char_t*argv)分;staticintaspGetSecond(inteid,webs_twp,intargc,char_t*argv)秒;staticintaspGetMonth(inteid,webs_twp,intargc,char_t*argv)月;staticintaspGetDay(inteid,webs_twp,intargc,char_t*argv)日;staticintaspGetWeekDay(inteid,webs_twp,intargc,char_t*argv)星期;为了能在ASP动态网页中调用这些函数,必须将这些功能函数申明成ASP接口函数,如下

18、:websAspDefine(T(aspTime),aspTime);websAspDefine(T(aspDate),aspDate);websAspDefine(T(aspWeekDay),aspWeekDay);websAspDefine(T(GetHour),aspGetHour);websAspDefine(T(GetMinute),aspGetMinute);websAspDefine(T(GetSecond),aspGetSecond);websAspDefine(T(GetMonth),aspGetMonth);websAspDefine(T(GetDay),aspGetDay

19、);websAspDefine(T(GetWeekDay),aspGetWeekDay);在ASP动态网页中使用时,只需调用相应的函数名称即可使用。返回值为int型的数据,用户可以根据返回的时间,做出基于时间轴的逻辑控制。343显示的功能函数网页显示有三种主要的元素:文本显示、数值显示和图象显示。针对这三种不同的元素,将ASP动态网页显示分成三种方式来处理如下:文本显示intwebsWriteText(intejid,webs_twp,intargc,char_t*argv)char_t*text;ejArgs(argc,argv,T(%s),&text);websWrite(wp,T(%S)

20、,text);return0;定义成ASP功能函数为:websAspDefine(T(writeText),websWriteText);在ASP动态网页中显示文本信息,只需在脚本语言中写writeText“文本内容”,就可以将文本信息显示出来。同样可以根据不同情况显示不同的文本信息,这样就可以达到动态效果,而不是静态的网页。数值显示intwebsWriteValue(intejid,webs_twp,intargc,char_t*argv)char_t*value;ejArgs(argc,argv,T(%d),&value);websWrite(wp,T(%d),value);return0

21、;定义成ASP功能函数为:websAspDefine(T(writeValue),websWriteValue);在ASP动态网页中显示变量值,只需在脚本语言中写writeValue(变量名),就可以将变量数值显示出来。用户可以先根据显示格式,将变量值进行逻辑运算,然后再将其显示出来。图象显示intwebsWriteImg(intejid,webs_twp,intargc,char_t*argv)char_t*Path;ejArgs(argc,argv,T(%s),&Path);websWrite(wp,T(),Path);return0;定义成ASP功能函数为:websAspDefine(T

22、(writeImg),websWriteImg);在ASP动态网页中显示图片,只需在脚本语言中写writelmg(“图片路径”),就可以将图片显示出来。使用时,也可以在图片路径后加一些显示参数,也可以根据不同的情况显示不同的图片,这样实现动态网页的效果。344用户跳转实现由于需要用户认证,因此需要对相应的用户的权限进行设置,因此需要对用户的权限进行设置,针对网页的跳转有以下三种方法:一种是在网页(.asp)来认证用户的权限,采用GETVAR方式获取从其他网页传过来的数据。采用ejSetResult(eid,T(3)方式返回数据。另一种是采用在GOFORM中定义一个功能块,在功能块中做认证用户的

23、权限,再跳转到其他的网页的方式来实现用户认证(浏览器和服务器端处理)。!Iarim-touch冶金自动化硏究设计院触摸屏配置程序用户名:密码:I确认I車賈I地址:北京市西四坏南路72匕电话:010-63B12255-3925图卜2用户认证界面处理办法和处理首页的方式一样,就是来一个请求,先处理请求,符合要求,跳转到相应的页面。采用websRedirect(wp,T(first.asp)的方式跳转(服务器端处理)。为了方便用户认证跳转,采用在GOFORM中定义一个功能块,判断从认证页面传递过来的用户名和密码,正确与否使用websRedirect跳转到不同的界面。用户认证的界面如图3-2所示:要完

24、成页面跳转任务,分以下几个步骤:首先,在Goahead服务器的主程序中定义一个用来处理用户认证函数formUsercheck,认证流程图3-3如下:其次,在Goahead服务器启动后,将用户认证函数formUsercheck注册成goform中的模块,如下:websFormDefine(T(Usercheck),formUsercheck);最后,使用时在需要认证的首页面增加:formaction二/goform/Usercheckmethod二POST,用户名和密码正确,自动跳转到index.asp;否则跳转到first.asp。3.4.5I/O数据接口为了能使网页能够读取底层I/O数据,将

25、I/O数据用数据库隔开,动态网页通过ASP解释器中定义的功能函数与数据库交互,而I/O数据接口完成硬件设备数据与数据库之间的交互。因此,在Goahead服务器定义了三个函数来处理与数据库的接口(针对实时数据),分别如下:读取实时数据读取实时数据库中对应变量的数值,当数据库中存在变量的数据时返回真实数据;当数据库中没有变量的数据时,返回wdata。函数的原型为:staticintaspSqDataRD(inteid,webs_twp,intargc,char_t*argv);传递的参数为:变量名称*name。修改实时数据修改数据库中变量的数值,修改成功返回success;修改失败返回fail。函

26、数原型为:staticintaspSqDataWRDR(inteid,webs_twp,intargc,char_t*argv);传递参数为:变量名称*name和变量值*value。可以用于数据逻辑运算,可以将逻辑控制算法写在网页中。更新数据结合网页提交表单要求更新数据,这种方式结合表单处理方式进行处理,修改成功返回success;修改失败返回fail。函数原型为:staticintaspSqDataWR(inteid,webs_twp,intargc,char_t*argv);传递的参数为:变量名称*name。以上三种方式都必须注册成ASP功能函数,才能在ASP的动态网页中应用这些功能。其中

27、读取实时数据是针对INPUT表,而修改实时数据和更新数据是针对OUTPUT表,这将在数据接口章节中详细介绍。346逻辑控制脚本的实现嵌入式人机界面除了能管理数据,还有一个重要的功能,就是进行逻辑运算,针对本人机界面的实现方式,提出了采用ASP和embeddedJavaScrip脚本语言结合Web的技术特点来解决逻辑控制的实现。解决逻辑控制脚本的实现有两方面的技术问题:逻辑脚本解释执行问题;控制的周期性。ASP和embeddedJavaScrip脚本语言只是解决了逻辑脚本的执行问题,对于控制算法的执行周期,执行次数的问题没有解决。采用逻辑控制脚本编写成ASP网页的形式,网页中只有逻辑控制部分,和

28、刷新周期,没有界面;而在编写界面时采用框架的方式包含逻辑脚本的网页。这样在访问网页时,逻辑脚本按照刷新周期执行。这样不仅可以做逻辑控制,而且还可以做时序控制。所谓框架就是将网页画面分成几个框窗,同时取得多个URL。只需要FRAMESETFRAME即可,画面中的所有框架标记都需要放在的html文档中,这个文档只记录了框架如何分割,不会显示任何其他信息,所以不需要加入BODY标记,浏览这个框架必须读取这文档中FRAME所标记的其他文档FRAMESET是用来划分框窗,每一窗框由一个FRAME标记来标示,FRAME必须在FRAMESET范围中使用。在FRAMESET中设置窗框的大小等信息;针对逻辑功能

29、的html文档是不需要分配窗框的大小。3.5Goahead服务器对组态的支持针对本嵌入式人机界面设计的特点,要实现对界面的组态,有以下两种方式可以实现,下面针对两种方式具体详细阐述。在采用上位计算机采用专业、简易的网页编辑软件编辑界面,编写脚本。采用在上位计算机通过软件编辑网页,对于熟悉编辑网页编辑的工程师来说,是比较简单的,但是采用编辑软件编辑的网页,还必须进行处理,主要有以下几个方面,首先在格式上有一些细微的区别;其次在脚本语言上有点不同,因此直接使用编辑软件编写完的网页是不能直接使用的。编写相应的网页,还必须下载到嵌入式人机界面中,下载之前,先进行以下工作:首先,将软件编辑过的界面拷贝到

30、嵌入式人机界面中的某个目录下;其次,设置Web服务器的一些设置,更新设置配置信息文件;最后,重新制作文件系统,并下载到目标板中,才能使用编辑成的界面。采用此方法的工程师不仅仅要知道怎么使用软件编辑网页,还得知道开发的一些步骤,因此,对使用者来说是一件相当复杂的工作。采用网页组态的方式将人机界面在网页中组态。通过对网页元素的选择,填写来完成对网页的编辑,此种方法代替了工程师手工编辑网页,自动在目标板上生成相应的界面。工程师不需要在制作文件系统,下载文件系统。基于上述两种方式,现在基于第二种方式,进行详细的叙述。针对网页组态方式,我们将网页组态专门分配一个端口(0X8080)供组态用,分配一个端口

31、(0XECA0)供人机界面显示的服务器使用。3.5.1访问I/O数据配置欢迎使用冶金自动化研究设计院人机界面增加访问组访诃削名:|端丨丨协i义:|modbusT访训参数:|增加|取消|注意:访问a1名只能由数上f和2&个上f母组成!图d-q増加访问组嵌入式人机界面要与现场的数据连接,就必须能与现场设备进行数据交互(数据接口将在第五章中详细介绍),就必须根据实际需要,对需要访问的数据进行标记,方便界面读取相应设备的数据。因此,针对设备的特点进行分类,将数据配置分成以下两个步骤:配置访问组配置访问点访问组的配置:根据设备访问参数以及连接方式的不同,就需要对不同的设备进行通讯设置。目前支持以下几种通

32、讯协议:ModbusModbusTCPONTOPFIO其配置界面如图3-4所示。对应配置界面,在Goahead服务器注册了goform的adddatagroup模块,此模块主要完成配置I/O管理功能块的设置(详见数据库章节)。增加访问点增加|取消|图”5増加访问貳访问点的配置:访问点是嵌入式人机界面运行的核心。人机界面运行时,数据库包含着所有访问点的当前值;为了创建运行时的数据库,人机界面需要了解所有要创建变量的有关信息。用户必须给每个变量指定标记名和类型,对某些类型的变量,人机界面还需要一些额外的信息。支持的标记名主要有:内存变量I/O变量其中I/O变量是根据访问组来配置一些额外的信息(详细

33、在数据库章节中介绍)。访问点的配置界面如图3-5所示。除了能增加访问组、访问名,还可以删除访问名,同样也可以支持修改访问组,修改访问名等数据处理。352页面配置除了针对数据点的处理外,还需要对人机界面的页面进行配置,页面配置主要是用户的选择生成相应的符合Goahead服务器的Web文档。针对典型的应用划分成三类页面进行配置:监测动态画面数据监测表格交互动态画面下面将详细介绍以上三种配置的实现。监测动态画面:监测动态画面包括几部分:画面标题、画面连接、主体画面、画面背景等几部分;通过对背景图片和主体画面的相应元素的选择,可以根据现场实际的需要画出满意的监控界面。其中画面标题、连接和背景部分可以根据用户需要选择。针对主体画面,有文字显示

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论