随着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以硬件平台和软件平台为核心的系统。首先在以S3C嵌入式硬件平台以2440微处理器为核心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程序中使用的两个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按钮可以获得相关的测试数据。最后重启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,甚至可以缩小到1500 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_calback,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服务器实现温湿度的远程管理。本系统是嵌入式技验测试稳定可靠,可应用到其他相关领域,为实现现场数据的集中实时显示和远程数据访问提供了一种切实可行的方案。