SMT车间温湿度分布式远程监控系统的设计

本系统中实现QT界面实时显示的两个重要函数:
信号和槽的连接是通过连接语句实现的。下面介绍QT程序中用到的2个connect语句:
因此,当按下ok后,界面中将有数据显示。
2.3 交叉编译QT程序及实际运行结果
在编译好的ARM版本的Qtopia-2.2.0开发环境下,利用progen工具生成.pro文件,命令行为progen-o xianshi.pro;利用tmake工具生成Makefile文件,命令行为tmake-oMakefile xianshi.pro。然后通过make命令生成可执行文件,并将生成的执行文件xianshi下载到ARM板的/opt/Qtopia/bin/目录下,将桌面图标文件xianshi.png下载到ARM板的/opt/Qtopia/pics/目录下,将桌面启动器文件xiansh i.desktop下载到ARM板的/opt/Qtopia/Apps/Applicationst目录下。最后重启ARM板,在触摸屏上点击xiansh test文件图标,打开QT界面,再点击Initialization按钮和Ok按钮即可得到相关测试数据。最终的运行结果如图3所示。

该运行结果充分证明了QT程序已成功在ARM板上运行。将QT程序设置为每1秒刷新一次温湿度数据,让ARM板长时间运行,QT界面的温湿度显示仍然保持流畅,因此,说明该设计满足实时显示的要求。
3 CGI访问SQLITE数据库的实现
嵌入式系统在数据的采集和处理过程中有大量的动态数据,而对数据的存取主要有两种方式:一种是基于文件的方式,一种是基于数据库的方式。对于文件方式,应用程序通常独占数据文件的读写操作,数据共享性差;对于数据库方式,数据和应用程序相互独立,通过事务进行调度和并发控制,可有效的实现对数据进行存取、查询等共享操作,并且运行时需要较少的内存。因此,本系统采用了基于SQLITE数据库的方式。
嵌入式web服务器对SQLITE数据库的访问是通过CGI技术实现的。本系统在宿主机上通过编译SQLITE数据库工具包搭建起SQLITE数据库开发环境,在ARM板上通过移植Boa服务器和SQLITE数据库搭建起CGI程序运行环境,然后在宿主机环境下编译CGI程序并将生成的执行文件下载到ARM板相关目录下,从而实现CGI对SQLITE数据库的访问。图4为嵌入式Web服务器对SQLITE数据库进行访问的结构图。

3.1 CGI对嵌入式Boa服务器的访问
CGI(Common Gateway Interface)是一个web服务器与外部应用程序交互的标准接口,它允许将其输出结果经web服务器传送给web浏览器。web服务器将web浏览器发来的消息,传递给CGI程序,由CGI程序进行处理,处理完成后把响应的结果再回送给web服务器,web服务器再把消息发送给web浏览器。CGI程序可以用多种语言来实现,如Perl、C、Unix shell等,由于C语言有较强的平台无关性,占用的资源少,效率高,本系统选取C语言来编写CGI程序。
CGI程序有GET和POST两种提交数据的方法。其中,GET方式提交数据,是将数据保存在QUERY_STRING环境变量中,通过调用函数getenv(“QUERY_STRING”)来读取数据;POST方式提交数据,则程序先从CONTENT-LENGTH环境变量中得到数据的字长,然后从标准输入中读取相应长度的字符串。一般,如果只是为取得和显示数据多采用GET方式提交数据,一旦涉及数据的保存和更新,多采用POST的方式提交数据,本系统采用的是GET方式来提交数据。
CGI是建立在Boa服务器的基础上的,关于Boa服务器的移植在此不再赘述。
3.2 嵌入式SQLITE数据库的实现
3.2.1 嵌入式SQLITE数据库简介
SQLITE是D.Richard Hipp开发的开源性嵌入式数据库引擎,全部源代码大约3万行左右,编译后的程序大小250 kB,甚至可以缩小至150 kB左右。它具有体积小、数据容量大、处理速度快、占用内存少的特点。并且它用一个小型的C库来实现嵌入式关系数据库管理体制,提供了对SQL92的大多数支持,包括:多表和索引、事务、视图、触发和一系列的用户驱动及其接口。
3.2.2 SQLITE常用的API函数
1)打开数据库:int sqlite3_open(const char*filename,SOLITE3**db);//*filename是数据库的文件名,**db是数据库句柄。
2)运行函数:int sqlite3_exec (sqlite3*,const char**sql,sqlite3_callback,void*,char**errmsg);callback是回调函数,用户可以根据需要自己编写callback函数获得操作数据库的结果。
3)查询数据:int sqlite3_get_table(sqlite3*,const char*sql,char***result,int *nrow,int *ncolumn,char **errmsg);//参数result以数组的形式存放查询的数据,参数nrow和ncolumn分别为查询语句返回的结果集的行数和列数。
4)关闭数据库:int sqlite3_close(sqlite3*)。
3.2.3 嵌入式SQLITE数据库在ARM—LINUX上的移植
本系统是将嵌入式SQLITE数据库应用到S3C2440+
Linux环境中,首先需要在宿主机的交叉编译环境下,编译生成SQLITE的可执行文件,然后将其下载到ARM板的相关目录下。移植SQLITE的主要步骤如下:
1)解压sqlite-3.5.6.tar.gz工具包,命令为tar-zxvf sqlite-3.5.6.tar.gz;
2)解压完成之后进入sqlite-3.5.6目录下新建一个文件夹build。
3)进入build文件夹,执行./configure--host=arm-linux-prefiX=/opt/sqlite-3.5.6/build,其中host是指定进行编译的交叉编译器.prefix是编译后目标存放的路径。
4)执行make和make install命令,在新建的build目录下生成bin、lib、include、share 4个文件夹。
5)将build/bin目录下的文件拷贝到ARM板的/usr/bin中,将build/lib目录下的文件拷贝到ARM板的lib文件夹下。
6)修改ARM板/usr/bin/sqlite3的权限,命令为chmod 755sqlite3。
完成上述6步后,可以在ARM板的终端输入:sqlite3test.db来验证SQLITE数据库是否移植成功。
3.3 嵌入式Web服务器对SQLITE数据库的远程查询
要实现嵌入式Web服务器对SQLITE数据库的远程数据查询,需要实现数据的查询和网页显示。针对生产车间温湿度数据的当前值、最大值和最小值,本系统设计了对最近五次的温湿度和所有温湿度的最大值、最小值进行查询的CGI程序。在CGI程序中,利用sqlite3_get_table(db,“selectmax(temperature)from dhtll;”,&result,&nrow,neolumn,errmsg)来实现对温度数据最大值的查询,其它数据的查询类似。要实现温湿度的网页显示需要在CGI程序中指定输出一个文本的html网页,通过printf(“Content-type:text/html\n\n”)程序语句即可实现。
编写好的CGI程序需要在特定的交叉编译环境下才能编译成功。这里使用arm-linux-gcc-I/opt/build/include-L/opt/build/lib-o main.cgi main.c-lsqlite3编译生成main.cgi(其中-I和-L后面指定的是头文件和链接文件),然后将其下载到ARM板的www目录下,并将该文件设置为可执行文件权限。最后在客户端的IE浏览器上输入http://192.168.58.230/main.html即可进入温湿度实时查询界面,其中下图5显示的是温湿度的历史数据页面。
SOLITE数据库 QT界面 嵌入式Web服务器 CGI 相关文章:
- 嵌入式Web服务器移植与测试(03-03)
- 基于嵌入式Linux视频的网络监控系统设计(07-27)
- 一种实用的嵌入式Web服务器设计(01-15)
- 一种嵌入式Web服务器的设计方案(01-08)
- 基于uIP与AJAX的动态Web服务器设计(11-07)
