基于嵌入式Linux的烟道粉尘测定仪无线远程监控系统WirelessRemoteSupervisorySystemForSoot-MeasurationInstrumentsBasedOnEmbeddedLinux丁海鸣唐明浩徐薇菁DingHaimingTangMinghaoXuWeijing(东华大学信息学院上海200051)(InformationScienceandTechnologyCollegeofDongHuaUniversity.Shanghai200051)摘要:本文提出了一种烟道粉尘测定仪无线远程监控系统的设计和实现的方法,并着重介绍了嵌入式Linux和GSM短消息在此无线远程监控系统中的应用及其所用到的相关关键技术。关键词:嵌入式Linux短消息无线远程监控烟道粉尘测定仪中图分类号:TP277文献标识码:BAbstract:Inthispaper,amethodofdesigningandimplementingawirelessremotesupervisorysystemforsoot-measurationinstrumentsisproposed.TheapplicationofembeddedLinuxandGSMSMSinthissystemandthekeytechnologiesusedareintroducedindetail.Keywords:embeddedLinuxSMSwirelessremotesupervisorysystemsoot-measurationinstrument1引言烟道粉尘测定仪是一种用于监测工厂烟道所排放烟尘浓度的环保监测仪器。传统的烟道粉尘测定仪如Model-160系列红外烟道粉尘测定仪,其可以用来传送采集的烟尘浓度信息只有一个5-20mA电流环方式的模拟信号输出口和一个由89C52单片机控制的点对点方式的RS232串行通信接口,传输距离短,不能满足当前工业控制领域对测控系统提出的实现远程监控功能的要求。本文给出了一个应用嵌入式Linux和GSM手机短消息实现烟道粉尘测定仪无线远程监控系统的设计实例。嵌入式LINUX系统烟道粉尘测定仪1烟道粉尘测定仪2……RS422RS232GSM短消息本地监控系统远程监控端图1烟道粉尘测定仪无线远程监控系统接口转换接口转换接口转换接口转换接口转换2系统结构图1所示烟道粉尘测定仪无线远程监控系统结构示意图,系统由本地监控系统和远程监控端两部分组成。本地端,应用嵌入式Linux系统通过串行通信总线统一管理工厂内部所有的烟道粉尘测定仪和用于无线数据通信的GSM手机,基于PC机的远程控制端通过GSM手机短消息同嵌入式Linux系统进行无线数据通信,从而实现对烟道粉尘测定仪的无线远程监控。由于现有Model-160系列红外烟道粉尘测定仪只有一个点对点方式的RS232串行通信接口,GSM手机也只有一个UART串行接口,所以必须为这些设备增加和RS422总线之间的接口转换电路,才能实现嵌入式Linux系统和这些设备之间的主从式多机串行通信。3基于uClinux的嵌入式系统开发平台在嵌入式系统中应用操作系统已是越来越普遍,嵌入式多任务操作系统为用户提供了标准的API接口,方便了用户对嵌入式系统各种资源的管理,并根据各个任务的优先级,合理地在不同任务之间分配CPU时间,这种多任务的内核运行方式可以大大降低软件设计的难度。近年来Linux在嵌入式领域获得了飞速的发展,这与其自身的优良性能是分不开的。嵌入式Linux具有免费开放源代码,软件资源丰富,内核功能强大、性能稳定、高效、支持多任务,支持多种体系结构处理器,有完善的网络通信、图形和文件管理机制,支持大量的周边硬件设备,驱动丰富,大小功能都可定制等优点。目前市场上有很多种国内外的嵌入式Linux开发平台可供选择,但是,多数嵌入式Linux开发平台需要硬件仿真器,商品化的集成开发环境等等,而购买这些软硬件动辄需要数万元的投资,作者经过比较鉴别之后选用了华恒公司的嵌入式Linux开发套件HHDREZ328-R2。HHDREZ328-R2是一套基于龙珠MC68EZ328处理器的嵌入式Linux开发平台,采用专门针对无MMU(内存管理单元模块)的中低档嵌入式处理器的uClinux作为嵌入式操作系统,所提供的硬件开发板有4M的RAM、2M的FLASH、带触摸屏的LCD显示屏、一个RS232串口和一个10M的以太网接口,定位于各种能接入Internet的手持设备、工控设备以及网络设备的应用开发[1]。该开发套件省去了昂贵的仿真器,使用GCC编译器等GNU系列软件开发工具,采用串口和以太网口结合的方式高速下载uClinux内核以及应用程序。作者使用该套件完成了上述烟道粉尘测定仪无线远程监控系统的设计与实现。4系统工作原理烟道粉尘测定仪无线远程监控系统由本地监控系统和PC远程监控端两大部分组成。串口通信管理进程本地监控管理进程GSM手机烟道粉尘测定仪1烟道粉尘测定仪2RS422进程间通信……液晶显示器触摸屏图2本地监控系统工作原理示意图基于嵌入式Linux的本地监控系统内部工作原理如图2所示,系统软件部分分为两个任务分别由一个串口通信管理进程和一个本地监控管理进程实现。串口通信管理进程以基于RS422总线的主从式多机串行通信方式和所有本地被监控的烟道粉尘测定仪及GSM手机进行通信,并通过通信协议统一管理这些设备。本地监控管理进程主要管理用于本地监控的输入输出设备(即一个160×160像素带触摸屏的单色液晶显示器),并为用户提供图形化的本地监控操作界面。4.1本地监控管理进程华恒uClinux开发平台为用户提供了与WIN32相似的GUIAPI的接口,利用这些接口函数可以很方便地开发图形化的本地监控界面。本地监控的输入是采用软键盘技术实现的,即在单色液晶显示器上用ShowBMP()函数显示一个键盘图形的bmp单色位图,用get_handpad()得到显示器表面的触摸屏上落点位置,从而判断出哪个按键被选中。文本信息的输出可使用textout()函数。本地监控管理进程对系统监控是通过与串口通信管理进程之间的通信进行的,由串口通信管理进程处理监控指令并返回监测数据或操作确认信息。4.2串口通信管理进程嵌入式Linux系统与测定仪及GSM手机之间是以基于RS422总线的主从方式连接的,但由于测定仪和GSM手机使用不同的通信波特率(测定仪为56000bps,手机为19200bps),因此嵌入式Linux系统与所有烟道粉尘测定仪之间的通信与嵌入式Linux系统与手机之间的通信是独立的。可以参照一些国际上流行的串口通信协议(如Modbus协议)设计嵌入式Linux系统与所有测定仪之间的串口通信协议。协议设计中规定嵌入式Linux系统为主机,所有基于89C52单片机的粉尘测定仪为从机,并为每一个从机分配一个地址,地址可以是0到FD,字节FE,FF保留作为帧头帧尾字节使用。主机发出的命令帧格式如表1所示。协议中主机所使用的几个常用命令码功能如表2所示。表1主机命令帧格式命令帧帧头字节目标地址字节命令码字节命令参数和校验字节帧尾字节内容FF0-FD0-7F0-7F0-FFFE表2主机命令帧中常用的命令码功能命令码010203040506功能请求烟尘浓度数据请求测定仪探头内工作温度数据查询测定仪探头工作状态切断测定仪探头电源使其停止工作恢复提供探头电源使其继续工作设置探头超温保护临界温度(温度参数放在命令帧的命令参数字节)在通信过程中,从机一直处于被动地位。所有从机都能同时收到主机发出的命令帧,根据命令帧中的地址判断主机是否和自己通信,若是则根据命令帧中的命令码执行相应的操作并返回数据帧给主机。从机数据帧格式如表3所示,协议中从机使用的几个常用数据帧类型码如表4所示。如从机用数据帧来确认主机对从机的控制操作,可以在从机数据帧第四字节返回控制命令码,第五、第六字节返回字符‘O’‘K’确认已执行该命令。在主机命令帧或从机数据帧中的校验字节若为FE,FF等保留字节在软件中加以区别。表3从机数据帧格式数据帧帧头字节本机地址字节数据帧类型码5字节数据段和校验字节帧尾字节内容FF0-FD0-7F0-7F0-FFFE表4从机数据帧中常用数据帧类型码在串口通信管理进程中,嵌入式Linux系统必须不断通过AT指令检测手机是否收到来自远程控制端的短消息命令,若有便阅读短消息内容,进行相应处理并把返回信息以短消息方式发给远程控制端。命令短消息与返回信息短消息的内容格式与上面的主从式多机串行通信协议相似。类型码01020304含义本机烟尘浓度数据本机探头工作温度探头工作状态回复确认已执行主机命令4.3uClinux下的多进程编程实现多进程的编程方式可以简化软件的结构,通常Linux下的多进程是由调用fork实现的,当进行fork调用时,调用fork的父进程会将自己拷贝一份给新产生的子进程,两者各自拥有自己的堆栈、数据段、用户空间及进程控制块。若子进程再进行exec系统调用即可执行另一个进程。uClinux没有MMU管理存储器,在实现多进程时需要实现数据保护,实际上uClinux的多进程管理通过vfork来实现(其fork等同于vfork),vfork假定系统在调用完成vfork后马上执行exec,因此vfork不拷贝父进程,只是初始化私有的数据结构与准备足够的分页表。实际使用中,让嵌入式Linux系统启动后自动运行串口通信管理进程,在串口通信管理进程中vfork后进行exec调用启动本地监控管理子进程。4.4uClinux下的进程间通信串口通信管理进程除了要处理通过远程控制端通过GSM手机短消息发来的的指令,同时还要处理来自本地监控管理进程的指令,根据指令返回烟道粉尘测定仪测量数据,或返回对控制操作指令完成的确认回复信息。这些都必须通过两个进程间的通信实现的。Linux下进程间通信的实现方法有信号、管道、SYSTEMV进程间通信机制(消息队列、信号灯、共享内存)等等。但老版本的uClinux不支持SYSTEMV进程间通信机制,可以采用另一种较常用的方法——共享文件来实现WEB服务进程与串口通信管理进程间的通信。为便于进程间的双向通信,建立两个文本文件command.txt和reponse.txt,当本地控制管理进程需要向串口通信管理进程发命令时就往command.txt写入命令信息数据,串口通信管理进程就可以从该文件中读取命令并执行相应操作,但是两个进程对这个文件访问必须是互斥的,即同一时刻最多只能有一个进程在访问这个文件。用文件锁command.lock可以实现互斥访问,即进程在访问command.txt文件之前先判断command.lock是否存在,若有则等待,若没有就先创建command.lock文件锁,然后就可以打开command.txt文件进行访问,文件访问完成后删除文件锁。同样,使用response.txt文件和response.lock文件锁可以实现串口通信管理进程向本地控制管理进程的数据传递。4.5远程控制端远程控制端基于windowsPC,采用VB或DELPHI开发监控界面,通过串口使用AT指令控制GSM手机短消息通信实现对烟道粉尘测定仪的无线远程监控,使用ACCESS数据库存储自动定时请求的离散监测数据用于长期的烟尘排放的统计。5用GSM手机收发短消息GSM网络是国内应用最为普遍的无线通信网络,本系统应用GSM短消息(SMS)实现无线数据通信,相比其他一些数据传输方法如专用无线电台数字通信、电力线载波等,具有覆盖范围广,可靠性高,设备投资少等优点。短消息收发设备可用专用的GSM无线调制解调器如SIEMENS公司的TC35系列GSM模块,也可以使用具有短消息收发功能的GSM手机。系统采用SIEMENS的C3508手机作为GSM短消息收发设备。如图3所示该手机外部接口中几个用到的引脚功能定义。123456789121110Pin1-GNDPin2-VCCPin5-DataoutPin6-Datain图3手机12针接口引