APP下载

一种基于ARM-Linux的分布式管道泄漏监测系统*

2011-06-03陈世利谭皓予王伟魁

电子技术应用 2011年10期
关键词:线程队列客户端

陈世利,谭皓予,李 健,王伟魁

(天津大学 精密测试技术及仪器国家重点实验室,天津300072)

输油管道泄漏监测技术是当今石油化工领域科研工作者研究的热门课题[1]。目前,输油管道现场应用的泄漏监测系统存在各种问题。首先,现场很多站点正在使用太阳能阀室设计,而广泛使用于全国各地输油管道监测系统中的基于PC的采集传输设备,因其高功耗、高成本的缺点不适合在太阳能阀室中应用。其次,许多现场管道为分布式网络布局,一个站点可能安置了多个测量节点,并且在主站有多个监控PC获得现场数据进行监测,很多监测系统的多通道采集和多用户处理能力达不到满意要求。再次,由于一些现场会使用电话线拨号网络或微波无线网络,带宽和稳定性无法达到正常网络环境要求,很多现场设备因经常出现数据丢失的情况而不能对泄漏发生做出及时判断定位。所以针对这种情况需要应用一些专门机制来保证网络通信的实时性和完整性,为输油管道泄漏监测与定位提供准确的数据来源。为解决上述泄漏监测系统的问题,设计了一套基于ARM的分布式管道泄漏监测系统。

在当今嵌入式应用领域,ARM由于性价比、功耗、可靠性在同类产品中非常突出,尤其是结合开源的嵌入式Linux操作系统以后,得到了越来越多设计者的青睐[2]。在本输油管道泄漏监测设计中,远程测控终端(RTU)采用ARM和嵌入式Linux的方案,监控PC采用LabVIEW图形编程方案,所有节点通过基于TCP/IP协议的局域网进行通信。

1 系统概述

管道泄漏检测系统采用分布式网络结构,由多个主站监测PC和多个从站远程测控终端(RTU)组成。图1是分布式管道泄漏监测系统结构示意图。

系统基于负压波原理,通过安装在各个管道测量节点的压力变送器测得压力变化情况,并通过从站RTU将各个节点信号数据传送给主站监测PC。当管道网络中某段发生破裂时,主站监测PC能立即接收到管段内输送介质泄漏瞬间所产生的泄漏信号,通过比较数据库中的模型来确定管道是否发生泄漏,利用管道两端节点RTU传送信号的时差确定泄漏位置。多个主站监测PC可同时监测整个管道网络的状态。

2 系统硬件组成原理

2.1 RTU硬件组成原理

S3C2440是SAMSUNG公司生产的一款基于ARM920T内核的32位RISC微处理器,其具有低功耗、高速的处理计算能力,负责控制整个RTU。以太网控制器通过隔离器高速、稳定地将系统接入局域网。GPS校时模块把导航信息通过UART总线传送至S3C2440芯片,利用秒脉冲中断实现RTU自动高精度时钟同步。由于S3C2440已经集成了SD模块,直接外接SD物理层接口实现本地数据储存功能。

根据系统要求设计的RTU系统框图如图2所示。

2.2 A/D模块硬件设计

RTU工作时,首先由信号调理单元电路获取压力变送器采集到的电流信号,经由光电隔离芯片和数字滤波器得到适合于模/数转换器(ADC)的输出。模/数转换器(ADC)采用一款内置序列器的 4通道、200 kS/s、12 bit AD7923芯片。AD7923芯片由AD780芯片提供2.5 V参考电压。该A/D模块通过SPI总线将转换后的数字信号传送给ARM核心控制模块进一步处理。A/D模块接口电路如图3所示。

3 系统软件设计

软件总体设计包括RTU服务器程序、A/D模块驱动程序和监控PC的LabVIEW客户端程序设计。RTU选用代码开放、快速高效且易于移植的分时Linux作为嵌入式操作系统,在其基础之上开发应用程序和驱动程序。RTU服务器程序负责从A/D模块获得数据,并通过网络接口与监控PC进行数据交互,完成压力信号的采集、存储和通信等一系列功能。其中,A/D模块的驱动程序作为应用程序与AD7923芯片沟通的桥梁,将SPI总线传来的数据通过特定接口传递到用户空间。监控PC的LabVIEW客户端程序接收到RTU服务器的数据,在处理和分析判断后决定是否报警和泄漏定位。LabVIEW客户端还需有实时显示和本地存储功能,以供现场人员在线监测和后续数据分析。

3.1 A/D模块驱动程序

A/D模块驱动程序主要实现配置模块和接收A/D转换数据功能。由于AD7923芯片与S3C2440芯片通过SPI总线通信,实际相当于通过SPI总线接口来间接驱动AD7923芯片。AD7923驱动模块为字符型设备,其主要驱动接口函数如下:

AD7923_open():该函数对设备进行初始化,是其他接口函数执行的前提。它首先申请I/O内存区域,将S3C2440芯片中SPI总线相关的寄存器硬件地址映射成Linux内核的虚拟地址。映射成功后可以直接访问虚拟地址读写SPI寄存器。然后,它对SPI各个寄存器进行初始化配置。

AD7923_ioctl():用户空间的应用程序通过此函数配置设备的功能。函数的主要工作是解析用户空间传过来的配置命令(cmd),并将其转换成符合AD7923芯片控制寄存器格式的2 B配置数据。

AD7923_read():该函数将配置数据发送给AD7923芯片。同时,AD7923芯片将上次发送配置数据后得到的A/D转换结果传回给该函数,再通过函数返回给用户空间的应用程序。

驱动程序编译完毕之后,将其动态加载到内核之中,并以设备文件的形式保存。这样,RTU服务器程序可以直接通过打开、读写设备文件的方式与A/D模块进行通信。

3.2 RTU软件设计

应用程序总体结构如图4所示。

管道泄漏监测系统各节点通过基于TCP/IP协议的以太网进行通信。RTU作为服务器,需要同时处理多个监测PC客户端的请求,所以提前创建线程池为客户端的登录作资源预分配。同时,需要独立的线程实现SD卡存储与管理、GPS同步校时等功能。

在数据采集主线程中,系统压力信号采样时间间隔一般为50 ms,由于声波在液体中的传播速度高达每秒上千米,如果采集时间间隔精度不够高,将直接造成泄漏点位置计算的误差过大。所以使用捕获SIGNAL信号软中断的方法,设置精度为微秒的定时函数,实现50 ms精确定时,完全保证定位泄漏点的准确度。

为了保证网络通信的实时性和完整性,同时也针对分布式网络结构,RTU使用了打包时间标识、消费者/生产者模型和心搏包等方案。当一个客户端连接入服务器时,服务器获取客户端信息并判断客户端是否为已注册客户端,如果已注册并且首次连接则为其数据缓冲队列分配内存空间,拒绝未注册的客户端。RTU采用消费者/生产者模型,将数据缓冲区设计为先进先出的队列,大大提高整个数据通信流程的效率。建立数据缓冲队列线程作为生产者,已连接成功的客户端处理线程和SD卡存储线程作为消费者。时间标识可以使监控PC获得采集数据的绝对时间,对网络通信的实时性起到重要作用。数据采集主线程在中断20次后得到1 s的采样数据,与时间标识一并打包分别插入生产者线程中的各个已连接客户端缓冲队列,客户端处理线程负责将缓冲队列中的数据发送至各个客户端。同时,打包的数据也通过SD卡存储线程写入SD卡。服务器生产/消费模型图如图5所示。

为保持服务器与客户端的实时连接性,客户端需每秒向服务器发送心搏包。服务器收到心搏包后将对应的缓冲队列中已有全部数据发送给客户端并清空队列。服务器一旦未收到数据而超时,将自动关闭与某个客户端的连接,但它不会释放生产者线程中对应的缓冲队列。客户端可能因为某些异常情况(如设备掉电、强制退出、网络异常或人为误操作等)暂时终止传输。为保证采集数据的完整性,需要在与客户端被动断开时仍能把这段时间所采集的数据保存在缓冲队列中,待网络重新连接成功后将缓冲队列中累积的全部数据发送给客户端。服务器只有在接收到对方客户端断开连接请求时才会释放其缓冲队列。

客户端在接收到指定时间的数据之后会进行一次完整性检查,确定这段时间没有数据丢失。由于网络环境不一定理想以及缓冲队列所分配内存有限,服务器不可能完全保证采集数据都发送到客户端。客户端检查到某些段时间有数据丢失,向服务器申请重传已丢失的数据。服务器接收到重传申请,临时建立新的线程处理这些申请并重新发送数据到客户端。

3.3 监测PC软件设计

监测PC软件在LabVIEW平台下开发。监测PC的LabVIEW程序框图如图6所示。

为了实现客户端数据通信的实时性和完整性,数据通信模块每秒钟向服务器发送脉搏包用以请求数据接收和保持与服务器实时连接,将各个RTU服务器发送的数据传入数据处理模块。数据处理模块检查到某个RTU服务器的数据有丢失,发送时间标识包请求服务器重新发送已丢失的数据。实时、完整的数据传到压力分析模块作数据处理,用以判断管道是否发生泄露以及泄露的具体位置。

4 管道泄漏监测实验

为了验证分布式管道泄漏监测系统的实际性能,在新疆塔里木油田东轮线搭建了整个监测系统平台,组织了放油实验。主站监测PC接收轮西站和东一联站RTU传送的数据,得出监测结果。轮西站放油前后数据如图7所示,东一联站放油前后数据如图8所示。

由上两图得知,放油后,16:59:10,轮西站压力由0.281 MPa下降到 0.276 MPa,16:59:59,东一联站由0.307 MPa下降到0.302 MPa。系统结合这两个下降进行分析,泄漏发生在距东一联站62.81 km,而实际放油点在62.64 km处,误差0.17 km。为保证实验数据准确性,共做了多次实验。实验数据如表1,定位结果均值为63.06 km,最大定位误差为0.65 km。由实验结果可以看出,主站监测PC能够准确地监测管道压力变化,做出及时的泄漏预警与定位。

表1 管道泄漏定位实验数据

本文设计了一个分布式管道泄漏监测系统,由于远程测控终端(RTU)采用了嵌入式ARM-Linux解决方案,其低功耗、低成本等特点非常适用于现场多测量节点的太阳能阀室设计。文中提及的一系列网络机制,保证了信号采集时数据传输的实时性和完整性,为避免现场因网络不稳定和异常造成传输误差提供了有力支持。该系统已经在输油管道现场进行了网络传输和泄漏监测实验,实验结果充分地证明了分布式管道泄漏监测系统的准确性和可靠性。

[1]张 宇,陈世利,李 健.基于动态压力变送器的输油管道泄漏检测与定位系统[J].传感技术学报,2009,22(9):1347-1351.

[2]陈 璞,刘文波.基于 ARM和嵌入式Linux的远程数据采集系统的软件设计[J].测控技术,2007,26(9):54-56.

[3]Li Jian,Zhang Yu,Jin Shijiu.Pipeline leakage monitor system based on virtual instrument[C].In:The 2009 IEEE Intl Conf.on Mechatronics and Automation,Changchun,China,2009.

[4]CORBET J,RUBINI A,HARTMAN G K.Linux device driver 3rd[M].Oreilly&Associates Inc,2005.

[5]艾 红,王洪涛.基于ARM的嵌入式远程监控系统[J].电子技术应用,2008,34(9):66-69.

[6]刘贵杰,王 强,梅 宁.海底油气管道检测数据采集系统研究 [J].仪器仪表学报,2006,27(6):1379-1380.

猜你喜欢

线程队列客户端
基于C#线程实验探究
队列里的小秘密
基于多队列切换的SDN拥塞控制*
基于国产化环境的线程池模型研究与实现
如何看待传统媒体新闻客户端的“断舍离”?
在队列里
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
丰田加速驶入自动驾驶队列
浅谈linux多线程协作