1 引言
环境问题作为一个全球性的议题越来越受人们的重视,基于嵌入式技术的智能环境监测系统在环境监测领域得到广泛的应用。由于监测数据(如COD、TOC、PH、流量)的复杂性和恶劣的监测现场环境,要求工业现场数据采集系统实时性好、抗干扰能力强、运行稳定可靠、可移植。ARM微处理器具有丰富的外围接口、功耗低、性能稳定;源代码公开的μC/OS-Ⅱ嵌入式系统具有良好的移植性、实时性使得其可靠性高、抗干扰能力强。基于ARM-μC/OS-Ⅱ平台适合构建水质监测点的流量采集系统。流量计在环境监测中起防止偷排漏排的作用,是整个系统的重要组成部分。为了实现多种数据量的宽接入,多种通信方式的融合,设计了A/D转换器、GPRS通信模块。
2 系统总体设计方案分析
2.1 监测点总体设计方案
监测子站将现场多种监测仪器监测到的数据收集整合,完成数据采集、存储、发送及命令接受等方面的功能。我们选用嵌入式计算机作为监测点的主控计算机。由于监测点系统必须承担采样、通信、计算,Web控制等多种功能,8bit/16bit的单片/单板机或PLC,由于自身性能的限制只能作为前置采样机被使用,无法实现以上功能,综合考虑以上因素,采用嵌入系统计算机或者PC工控机来满足系统要求是理想的选择。该计算机利用A/D转换器,I/F接口板,RS485小型工业现场总线和下级的各个监测仪器进行信息交换。并可同时使用调制解调器、GPRS、LAN接口和上级系统,企业级系统进行同时通信。具体硬件构成图1所示:

2.2 LPC2138硬件平台介绍
LPC2138是基于一个支持实时仿真和嵌入式跟踪的32位ARM7TDMI-SCPU,并带有512kB嵌入的高速Flash存储器,该存储器可用作代码和数据的存储;同时也带有128位宽度的存储器接口和独特的加速结构,使32位代码能够在最大时钟速率下运行。对代码规模有严格控制的应用可使用16位Thumb模式将代码规模降低超过30%,而性能的损失却很小。同时在本系统中使用了在应用程序运行时对Flash进行擦除和编程,使用这种方法为数据存储和现场固件的升级都带来了极大的灵活性。
2.3 μC/OS-Ⅱ介绍及其调度算法分析
μC/OS-Ⅱ是专为嵌入式应用设计的源码公开的实时内核,可用于各类8位、16位、32位单片机或DSP,已被移植到各种类型的芯片上。它将流量计的应用程序分成若干个任务,为每个任务分配CPU时间,并负责任务间的通信,而当前运行的任务是最高级别的任务,当需要运行其他任务时,由CPU根据条件进行调配。同时UCOS-II通过提供必不可少的系统服务如信号管理、邮箱、消息队列及时间延时等,使得CPU的利用更为有效。下面将对其中断调度算法进行详细分析。
μC/OS-Ⅱ是一种基于优先级调度的占先式内核,最多支持63个任务,每个任务有独立的优先级。其中Tr为中断等待时间。Tp为系统的中断响应与查找时间,Td为执行中断处理所用的时间,Tw中断任务切换时间,当有多个中断产生的时候,μC/OS-Ⅱ的中断级任务调度按如图2的进行。

3 流量计功能模块的软件实现
水质在线监测项目中,采用超声波测量水位,配合巴歇尔槽把水位转换成累计流量,瞬时流量,并负责向子站中心控制器传送采样数据。下面将介绍主要软件模块的设计。
3.1 数据处理模块软件设计
流量算法:使用标准巴歇尔槽进行流量测量,流经巴歇尔槽的水流量Q与水位高度h及槽的尺寸b的关系可以用以下公式计算:Q=0.372b(3.28h)1.569bm3/s
err=OSTaskCreate(doMySelfWorkTask,(void*)0,&doMySelf-WorkTaskStk[MYSELF_TASK_LEN-1],PRIO_MYSELF_WORK);
通过操作系统的函数OSTaskCreate调用创建MySelfWork-Task任务。doMySelfWorkTask任务创建之后,系统根据为其设置的优先级来调度该任务的执行。如图3为该函数的结构和执行流程的分析。流量数据初始化:通过I2C总线协议读取AT24c064(FLASH地址)起始位置数据,判定不为真后进行槽型、槽高的设置;清零瞬时、累计流量;设置实时上报定时上报时间等。判定为真则读取Flash上的数据保存在结构体SAVE_NumgLLJ_Num中,然后由Read_Meter负责完成超声波水位高度数据到瞬时流量和累计流量的换算,并将数据保存在Flash中。

3.2 人机交互模块软件设计
使用4×4的16字键盘和LCD液晶显示来实现人机交互,键盘由0~9数字、菜单、设置、清除、退出、F1及F2一共16个键组成。其中F1及F2实现翻页功能,设置附带确认功能。键盘接口采用了型号为ZLG7290的芯片,其采用I2C总线方式,与微控制器LPC2138的接口仅需两根信号线,使用和设计非常方便,其芯片内部还设置了有连击计数器,使得键按下后不松手而连续有效。LCD液晶显示选用了周立功公司提供的型号为LCD12864C液晶显示屏。
err=OSTaskCreate(MyLCMTask,(void*)0,&MyLCMTASKStk[MyLCMTask_STK_LEN-1],MyLCM_PRIO);//(创建人机界面显示任务)。
进入系统后的界面显示公司名称,停留2秒后进入主界面(Main_LCD)之后自动进入瞬时流量和累计流量显示界面,按任意键进入用户密码验证界面(Password_LCD)。在污水流量监控过程中,我们可以根据实际需要进行流量计的具体设置。当我们需要进行设置时,需要提供密码,在本系统中设置的初始密码是:123456,同时用户可以根据自己需要修改密码。进入系统后,就是系统设置的主界面包含了流量设置、PH设置、COD设置以及系统设置四个选项。在进行流量监控时,需要设置流量槽型、槽高,其中槽型分为巴歇尔槽和三角堰,其具体的槽号选择可根据工厂实际情况选择,当参数设定以后,按退后键,可退回到流量监控主界面。
3.3 基于DTM6211通讯模块的实现
DTM6211是一款TD-SCDMA&GSM(GPRS)双模无线模块产品,支持TD-SCDMA与GSM系统间跨网自动无缝切换,在TD-SCDMA制式下,支持上下行非对称数据传输,上下行数据传输速率可分别达到384kbps;支持UART和USB两种通信接口,使用更为方便和灵活,可以满足不同主控设备的需求;内部集成H.324协议栈,使得视频电话的功能实现更为简单;内部集成TCP/IP协议,可以方便连接Internet,可以广泛应用不同的行业领域。编写基于μC/OS-Ⅱ的串口控制模块,通过RS232串口发送AT命令来设置GPRS的网络环境,并将采集的数据经串口由GPRS网络发送给监控中心。
4 AD转换模块的软件实现
在废水监测过程当中,现场的监测仪器所监测到的数据(如温度、压力、流量、位移,COD值等)是通过各种模拟信号输出,这些模拟信号无法直接传入PC机或外接数据采集器,必须通过A/D转换器变换为数字信号后才能送入。因此,本文结合实际运用,在综合考虑各因素影响的情况下,决定采用ATmega8型高性能单片机进行A/D转换过程,并结合数据处理中广泛采用的最小二乘算法对输出数据进行修正,最终不仅数据取得理想效果,而且与以往采用AT89CS51单片机外接A/D转换器件的设计组合相比可以有效节省成本。
4.1 基于ATmega8的硬件系统设计

如图4所示是系统电路图,系统中的ATmega8是一款采用低功耗CMOS工艺生产的基于AVRRISC结构的8位单片机。在本数据采集系统中,运用此芯片可以在保证A/D转换高分辨率的同时有效的节省成本。数据采集中运用的模数转换功能就是利用其自身集成的8通道10位高速A/D转换器,本系统只选用单通道PC0作为A/D转换的模拟电压输入,A/D转换的参考电压使用系统自带的AVcc,同时外接一电容于AREF引脚来提高ADC的抗噪性能。单端电压输入以0V(GND)为参考。
ATmega8模数转换功能主要特点如下:10位精度(ADC4和ADC5通道为8位精度)模数转换(ADC)功能;0.5LSB的非线性度;±2LSB的绝对精度;65us-260us的转换时间;每秒最大为15kSPS的采样速率;6路输入复用可选的单端输入通道;连续转换模式和单次转换模式;ADC转换完成触发中断。对于本系统,模拟信号从pc0输入单片机,单片机的ADC通过逐次比较方式,将输入端的模拟电压转换成10位的数字量,并通过TXD和RXD引脚连接MAX232芯片,MAX232芯片连接串口针(其中第2个针脚是接入数据,第3个针脚是发送数据,第5个针脚接地,其他针脚悬空)上传到工控机。
4.2 最小二乘法的转换算法
在上面A/D转换程序中设置中,本系统设计采用设置AD-LAR为1(即左对齐),所以buf2~buf9是转换后数据的高8位,buf0~buf1是转换后数据的低2位。由于模拟量的输入范围是4~20mA,接入阻抗电阻为250Ω,所以转换后电压的范围是1~5V。再根据模拟量4~20mA与测量仪器测出的COD值成线性关系,也就是说与转换后1~5V电压成线性关系,因此可以采用最小二乘法求出线性关系的斜率系数a和常数b,最后求出拟合的COD值,最终通过RS232串口将COD值发送给工控机。具体过程如下所示:
因5V对应的10位二进制数为1111111111(也就是满量程的十进制数1023),将1~5V电压(U)分成1023分,每一份即为4/1023,在1~5V之中的电压与0~1023数之间是一一对应的,因此转换后电压可以按(1)式计算:
U=((uint)buf9*29+(uint)buf8*28+(uint)buf7*27+(uint)buf6*26+(uint)buf5*25+(uint)buf4*24+(uint)buf3*23+(uint)buf2*22+(uint)buf1*21+(uint)buf0)20*4.0/1023+1.0(v)(1)
而COD值与电压成线性关系,所以可以通过(2)式计算:
COD=a*U+b (2)
5 结束语
创新点:本文采用ARM主流嵌入式处理器,移植了μC/OS-Ⅱ实时内核。在此基础上实现了环境在线监测中对流量计的一些功能要求,为现行的智能环境在线监控系统通过了一种通用的解决方案,经实践验证其各方面性能良好。




