随着SMT生产工艺技术的提高,生产车间对环境的温湿度提出了温度25±3℃。湿度45%RH~65%RH的要求。为了达到这样的温湿度要求,就不仅需要提高温湿度传感器的精度,而且要求现场的管理人员能够实时的查看现场的环境数据,同时要求远程的上级管理人员能够查询和管理各个监测点的温湿度数据。
为了解决现场温湿度实时显示的问题,张晨吴等人在基于485总线的数字化温湿度测控系统的设计一文中,提出为485温湿度变送器扩展LCD显示模块来实现温湿度实时显示的方案。这种独立实时显示方案需要为每个监测节点配置LCD模块,存在成本投入高、不方便实时查看的缺点。文中针对这一缺点,提出了利用QT技术实现现场温湿度集中实时显示的方案,这个方案只需一个LCD模块即可实现各监测点温湿度实时查看,不仅成本低,而且方便管理。为了解决温湿度的远程管理问题,肖鸿威在基于modbus协议的空间分布式温湿度测控系统设计一文中,提出了采用工控机和SQLserver的方案来实现温湿度的远程采集和管理,这种方案需要配置高性能的工业PC,成本昂贵。针对这一不足,本文提出了采用嵌入式ARM平台和SQLITE数据库方案,这种方案不仅成本低,而且设备小巧,安装维护灵活方便。
根据SMT车间温湿度数据采集、监控的要求,本文设计了基于SQLITE数据库的分布式温湿度远程监控系统。本系统充分利用了QT技术和SQ LITE数据库的优点,搭建基于ARM微处理器和Linux操作系统的嵌入式Web服务器,从而实现现场数据的集中实时显示和远程管理。
1 系统的硬件平台和软件平台本系统以嵌入式Linux系统为核心,包括硬件平台和软件平台。首先在以S3C2440微处理器为核心的硬件平台上搭建嵌入式Linux环境,然后在Linux环境下移植Qtopia、SQLITE数据库和Boa服务器,最后通过Qtopia开发环境完成QT实时显示界面的设计,利用CG1技术实现Web服务器对SQLITE数据库的远程数据查询。并且通过485总线搭建温湿度的底层采集网络。系统的平台示意图如图1所示。
1.1 系统的硬件平台传统的以单片机为核心的分散式仪表监控模式,显然已经不能满足当前监控系统对远程访问和集中管理的要求。采用主机-终端的监控模式,虽然能够对现场的温湿度进行实时管理,但是这种监控模式布线相对复杂,传输的距离受到限制,很难对不同地点的温湿度进行监控。
为了对不同地点的温湿度进行实时的远程管理,需要搭建一个基于以太网的分布式监控系统。基于以太网的监控系统可以采用PC、PLC或者ARM为核心,采用PLC为核心的以太网监控系统通常需要配备以太网模块,采用PC为核心的监控系统通常需要配置高性能的工业PC,这样与以ARM为核心的监控系统相比,价格要昂贵的多。因此,本文采用以ARM为核心的以太网温湿度远程监控系统。
1.2 系统的软件平台本系统的软件平台主要包括宿主机和目标机。宿主机是VMware8.0虚拟机下Fedora9.0的Linux操作系统+PC机,目标机为ARM9电路板。其中在宿主机上需要完成Bootloader的编译,裁剪内核,制作内核映像文件和根文件系统映像文件,然后将其下载到ARM板的Flash,从而完成嵌入式Linux操作系统的搭建。
本系统的软件设计是建立在已搭建好的嵌入式Linux操作系统的基础上。要设计QT实时显示界面需要在宿主机上搭建起QT开发环境,需要在ARM板上通过移植Qtopia2.2.0搭建起QT运行环境,最后将在宿主机编译的执行文件下载到ARM板上。要实现采集数据的远程web查询,需要在ARM板上移植SQLITE数据库和Boa服务器,然后通过CGI程序实现对SQLITE数据库的访问。
2 QT实时显示界面的设计 Qtopia是一个基于Ote的类似桌面系统的应用环境,它能够为基于嵌入式Linux的消费电子产品提供和创建图形用户界面,使用Qtopia开发的应用程序界面清晰美观、操作方便,多用于PDA产品的界面开发中。
2.1 QT开发环境和运行环境的建立QT开发是在宿主机上完成,而QT程序的运行是在ARM板上完成的,因为宿主机是X86体系,而ARM板一般是ARM体系,所以必须在宿主机上既要搭建适合X86的开发环境,又要搭建适合ARM体系的开发环境。本系统通过编译X86版本的Qtopia-2.2.0和ARM版本的Qtopia-2.2.0恰当的实现了QT开发环境的搭建。
QT程序的运行环境是在ARM板上,因此需要将Qtopia移植到ARM板上,即将Qtopia添加到文件系统中,为了让Qtopia能够在ARM板上运行起来,需要制作一个Qtopia运行脚本,然后将其权限设置为可执行文件,同时修改文件系统的“etc/init.d/rc.S”文件,在其中添加“qtopia &”的语句。
2.2 QT界面程序的设计在QT的程序设计中会用到信号和槽,信号和槽是QT用于对象间通讯的一种机制,它是QT的中心特征,也是QT与其他工具包最不同的部分。而且信号和槽的机制是安全的:一个信号的签名必须与它的接收槽的签名相匹配。因此,信号和槽的机制可以保证一旦一个信号和一个槽连接起来,槽会在正确的时间使用信号的参数而被调用。
在本系统的QT程序中,使用主函数调用初始化函数,进行硬件的初始化,并打开传感器设备;然后调用读取函数,读一次底层数据后发送一个信号,在QT程序中该信号连接一个槽,每发送一个信号,就会执行一次数据的显示。程序流程如图2所示。[page]
本系统中实现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数据库进行访问的结构图。[page]
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显示的是温湿度的历史数据页面。
该运行结果说明Boa服务器和SQLITE数据库已成功移植到了设计的ARM电路板上,并且编写的CGI程序完成了对SQLITE数据库的远程访问功能。经多次实验运行,本系统的嵌入式web服务器工作稳定,执行速度快并且安全、可靠。
4 结束语文中设计了基于SQLITE数据库的嵌入式Web服务器,引入QT技术来设计温湿度实时显示界面,利用SQLITE数据库和Boa服务器实现温湿度的远程管理。本系统是嵌入式技验测试稳定可靠,可应用到其他相关领域,为实现现场数据的集中实时显示和远程数据访问提供了一种切实可行的方案。