摘 要 笔者基于嵌入式实时操作系统uc osII 和常用的AT89C51单片机设计了一种典型的数据采集监测系统。该系统的安全性、实时性较好,而且调试方便、灵活,可扩展性强。
1 地铁杂散电流产生原理
地铁牵引供电一般为直流供电,而当直流大电流沿地面敷设的轨道流动时,直流电流除了在轨道中流动外,还会从轨道泄漏到大地,在大地中的各种金属物体上流动,然后再回到电源系统。这部分泄漏出来的电流称为杂散电流,在地铁工程中又称为迷流,如图0所示。由于杂散电流对埋入地下金属产生腐蚀作用,就可能使得某些地方的地下金属在自然腐蚀的同时又受到严重的杂散电流电腐蚀作用,导致地铁电化腐蚀速度加快。有关地铁杂散电流的原因、危害、防治可以参考《地铁杂散电流腐蚀防护技术规程 CJJ49-92》。
2 实验室模拟装置的设计
由于地下铁道的特殊环境, 理论上和实际中都难以在现场进行实验, 因此这类课题的研究和实验, 多数情况下往往要在实验室里进行,图1是自行设计的一个实验室模拟地下铁道杂散电流的产生和对地下金属腐蚀作用的实验装置。
3 数据采集系统的设计
3.1 系统概述
本系统由硬件和软件两部分组成。硬件以SST89C51 和8位ADC 芯片AD0809 为核心,具有键盘控制和液晶显示功能,该系统还具有实时时间显示和看门狗功能,可以通过RS232接口与外部(微机) 通信。系统的软件以实时嵌入式操作系统ucos2 为基础,采用多任务机制,通过任务调度和任务监视,系统具有较好的实时性和安全性。ucosII 是源码公开的实时嵌入式操作系统,采用优先级调度算法完成任务间的调度,并支持抢占式调度。ucosII 具有可裁减的体系结构,并具有内存管理、中断管理和任务控制块( TCB) 扩展的功能。ucosII 还提供很多系统服务,例如邮箱、消息队列、信号量等等。还具有可移植性好,结构简单等优点。
3.2 系统的硬件设计
系统的硬件组成框图如图2 所示。各电阻电压信号经过隔离放大,然后通过线性光耦的隔离后,分别传送到多路采集A/D转换芯片0809的输入端进行数据采集。经A/ D转换后的数字量被单片机读入,经处理后可,在液晶上显示出具体数据。同时也可以由通信接口读入微机进行进一步的处理和分析。液晶有系统提示和实时时间显示,可以通过键盘进行选择和控制。
A/ D 转换可采用价格低廉又通用的8位逐次逼近式ADC ,适合数据采集,转换时间可达100 us 。系统外部扩展32 kROM 和RAM ,供缓存数据和存贮程序。液晶采用日立公司系列产品中的D44780 ,可以显示16字×2行的字符模组。时间芯片采用的是M48T86 ,具有实时时间和日历显示功能。整个系统采用全地址译码法,外部设备和存储器统一编址。CPU 访问外部存贮器的一切指令均可用于对I/O 端口的访问, 大大增强了CPU 对外设端口信息的处理能力。
可以看到,传统的程序是基于单任务机制的,各个模块构成一个整体,作为一个任务运行。在实际应用中,这种程序的安全性差,只要一个系统的设计模块出了错误,整个系统工作就会被打乱,只有利用看门狗进行复位。这对于比较复杂的系统,在实际运行中看门狗就会频繁地发生复位操作。而且由于数据采集和键盘程序的执行频率可能相差很多,这样对系统的定时要求就会很高,传统的程序流程对实时性就难以很好地满足。
3.3.2 基于ucosII 的系统程序流程
基于ucosII 的程序流程如图4所示。程序中,每个模块对应一个任务,彼此之间是并行的,但每个模块都对应着一个不同的优先级,由操作系统进行调度运行。系统可以通过监控模块对其他模块的工作进行监控,从而减少看门狗的复位次数。而且通过ucosII 内核的任务调度,系统的实时性会提高很多。
3.4任务的划分和构成
系统中并行存在的几个任务按优先级从高到低依次是:显示任务、键盘管理任务、输出任务、各路数据数据采集任务和数据处理任务。系统采用静态优先级,这样系统的控制会相对比较简单。
系统中的每个任务包括应用程序、任务堆栈以及任务控制块( TCB) 三部分。任务控制块是一个数据结构,当任务的CPU 使用权被剥夺时,ucosII 用它来保存该任务的状态。当任务重新获得CPU 的使用权时,任务控制块能确保任务从被中断的那一点执行下去。操作系统可以通过查询任务控制块的内容从而对任务进行管理。系统中任务的状态有5 种:休眠态、就绪态、运行态、中断服务和等待态。状态之间的转换如图5所示。
休眠态时任务驻留在程序空间中,还没有交给uc/ os2II 管理。当任务一旦建立,就进入就绪态。就绪态中优先级最高的任务转为运行态。如果系统的运行导致就绪态中的一个任务优先级高于运行态的任务优先级,则系统通过调度使运行态任务丧失对CPU 的控制权转为等待态或者就绪态,转而运行就绪态中的那个任务。这样就实现了任务的切换。
每个处于等待态的任务都对应一个等待时间,时间管理函数可将等待时间已过的等待态的任务转为就绪态,这实际上也就是时钟中断的中断服务程序。
3.5 任务的通信和调度
本系统中任务间的通信采用消息队列来完成的。消息队列是uc/ os2II 中的一种通信机制,可以使一个任务或者中断服务子程序向另一任务发送以指针方式定义的变量。为方便易用,采用消息队列,用于数据采集任务、数据处理任务、键盘管理任务、输出任务、显示任务之间的通信。系统通过队列控制块来管理消息队列,每个消息队列对应一个队列控制块。消息的存取基于优先级原则,队列控制块中等待任务列表内优先级任务最高的任务先从消息队列中取消息,系统采用抢占式内核,调度函数总是保证优先级最高的就绪态任务转为运行态。当就绪态的任务抢占CPU 时,系统执行一次中断服务程序。当任务中的消息发送完成以及中断返回时,系统调用调度函数,将任务从等待态转为就绪态,这样就绪态中任务的最高优先级就会发生变化,进而影响到运行态和就绪态间的任务切换。在本系统中,正在运行的任务需要通过消息(调用OSQPEND( ) 函数) 来等待一个事件的发生。假如该事件一直没有出现,调用该函数的任务将被置于等待状态(优先级最低的任务可不需要等待某个消息) 。此时下一个优先级最高的任务将立即获得CPU 控制权。
4 系统的工作过程
本系统采用两种方式显示采集电流的大小,循环显示和指定显示,在正常工作情况下,采用循环显示方式显示8路采集电流大小,每采集完一路电压,就向数据处理任务发送一条消息,而数据处理任务每处理完一路就向显示任务发送一条消息,由于键盘扫描任务优先级比数据采集任务最高,每当用户键盘选择时,就抢断当前采集任务,而去处理用户需要选择的那路电压,并相应显示。当采集电流超过一定标准时,系统会报警,以告之监测人员,另外本系统还留有串行232接口,用于和微机通信,以储存杂散电流的历史情况。当所有任务运行完后,开始下一个周期的运行。应用程序与uc/ os2II 的内核是一起下载到单片机系统中。成功的移植需要对内核程序进行一定的修改,主要是修改内核中与硬件密切相关的几个文件,具体可参考相关文献.
5 结束语
本系统经调试,软硬件工作均正常。实验证明,本系统较传统的数据采集系统在安全性和实时性方面都有了很大的提高,完全能够适应复杂系统的需要。随着网络和多媒体技术的发展,嵌入式系统的应用有着更广阔的空间。
参考文献
[1] J EAN JLABROSSE 着. uc/ os2II 源码公开的实时
嵌入式操作系统[M] . 邵贝贝译. 北京:中国电力
出版社,2001 .
靳其兵. 单片机数据采集卡及其实时多任务机制
的实现[J ] . 自动化仪表,2002 ,23 (6).
李永刚. 地铁杂散电流模拟实时监测系统 . 中国铁道科学,2005,9,119-122
汪园园, . 杂散电流监测方案的探讨[J ] . 城市轨道交通研究, 2000 , 2 (3) : 45 —48.