两级队列调度通信模型设计及应用

2011-09-19 13:24胡浩民
自动化仪表 2011年10期
关键词:实时性线程队列

胡浩民 张 菁

(上海工程技术大学电子电气工程学院,上海 201620)

0 引言

在太阳能光伏发电系统中,光伏电池(光电阵列)和蓄电池组成了系统的电源单元[1]。对光伏电池和蓄电池的各种参数(如电压、电流、温度等)进行实时采集与检测,不仅有利于筛选性能优良的电池,而且对系统的维护也非常重要。目前,数据采集技术已向着并行、高速、大量存储、实时分析处理、集成化等方向发展[2]。对于批量电池的实时检测,如果采用轮询方式采集数据,很难保证采样周期的一致性。因此,构建了一种星型拓扑的以太网采集环境,并设计了两级队列调度的数据通信模型。通过编程实现相应算法,确保数据采集的实时性与采样周期的一致性,这不仅使采集的数据有利于分析挖掘,而且该模式可应用于物联网中的信息交换。

1 系统结构

目前,有不少电池巡检仪和电池参数监测仪提供了电池组实时在线巡回检测的功能,包括对每节单体电池或整组电池的电压、电流、温度进行自动检测等[3]。计算机通过RS-232或RS-485接口实现在线监测电池状态、显示曲线及生成报表等。这既提高了电池的检测效率和测试的安全性,又降低了维护人员的测试劳动强度。采用RS-232或RS-485接口虽然可以很容易地实现对外围仪表设备的通信,但当通信结点比较多时,会受到接口数量的限制(如RS-232只提供点对点通信,RS-485支持多点通信,但一个网段最多连接32个结点[4])。为了实现对太阳能电池的批量检测,设计了如图1所示的系统结构。

图1 系统结构Fig.1 Structure of the system

在图1所示的太阳能电池检测系统中,主控计算机与“以太网/串口适配器”通过RJ-45接口连接到交换机,形成星形的拓扑结构。结点之间采用客户服务器模式,通过TCP面向连接的可靠数据传送进行通信[5]。数据采集采用了分布式的系统结构。每个电池巡检仪中的微处理器可实现对单组太阳能电池的检测,采集的数据通过串口传送到以太网/串口适配器,适配器再将转换后的TCP数据报交付以太网。

系统结构只是提供了一种分布式的处理环境,采用怎样的通信模型与算法,将会在很大程度上影响数据采集的实时性。

2 调度通信模型设计

2.1 设计原理

通常实时数据采集系统要求定时准确,即采样间隔具有较好的一致性[6]。在图1所示的电池检测系统中,主控计算机通过以太网/串口适配器将数据采集指令发送给电池巡检仪,巡检仪根据指令从电池采集电流、电压、温度等数据,以太网/串口适配器再将巡检仪采集的数据返回给主控计算机。当被测电池数量较多时,如果采用轮询采集方式,采样周期的一致性将很难得到保证。这是因为任一采集通道的阻塞都会干扰采样周期,影响实时性,降低系统的效率。虽然采用多线程并发方式能隔离采集通道之间的干扰,但如果没有合理的同步调度机制,也难以避免这一现象。两级队列调度通信模型描述了如何在确保线程在完成周期性采样的前提下,实现对临界资源的互斥与同步,达到实时采样与可靠归档。根据程序并发执行条件可知,若p1和p2这两个程序能并发执行,且具有可再现性,需要满足以下Bernstein条件[7]:

式中:R为“读集”;W为“写集”。设采集线程集合为S={thread1,thread2,…,threadn},由式(1)可知,对于∀ti、∀tj(ti∈S,tj∈S,ti≠tj),如有 R(p1)∩W(p2)∪R(p2)∩W(p1)∪W(p1)∩W(p2)={},则能使任意数据的采集通道均不会因竞争资源而阻塞。若为每个采集线程分配独立的缓冲队列存放数据,即可满足上述条件。

采集线程除了实现数据采集功能(入队操作)之外,还能实现数据归档功能(出队操作)。设归档数据库所支持的并发度为p,则当p<n时,并发度p成为采集线程集合的临界资源,推导的Bernstein条件被破坏;当p≥n时,虽不会出现资源竞争而引起的阻塞,但普适性较差。这是因为p是由数据库的性能所决定的,n随着实际的应用而变化,很可能会出现无法满足这一条件的情况。因此,增加一个归档队列,用于实现数据归档前先进入该缓冲队列,再由m个归档线程完成存数据库操作。因为数据库系统常用基于锁的并发控制,获得一个锁的开销远小于处理数据的开销[8],所以m可取小于或大于p的值,且与n无关。

由于归档队列是临界资源,因此,缓冲队列与归档队列之间的数据调度由“队列线程”完成,否则会出现采集线程竞争归档队列而引起的阻塞。此外,当缓冲队列空时,队列线程会阻塞,所以队列线程个数需要n个,否则会引起其他缓冲队列的溢出和采集线程的阻塞。两级队列调度通信模型如图2所示。

图2 两级队列调度通信模型Fig.2 Two-stage queue scheduling communication model

由以上模型可知,在缓冲队列不满的条件下,采集线程可以获得最大程度的并发,数据采集周期的一致性可以得到有效保证。队列线程与采集线程分别操作的是out和in指向的存储空间,因此对并发不产生影响,只有在队列空和队列满的状态下需要同步。队列线程之间竞争的是归档队列尾指针,虽然需要同步,但临界区很小,所以对并发影响不大。需要指出的是,归档线程应带一个数据项的内部存储区,当某一线程获得队列头时,将队列头指针指向的数据项复制到自身的存储区,然后立即释放队列头临界资源,再进行写数据库操作。试验表明,这有利于提高归档速度。

2.2 算法描述

信号量提供了一种方便有效的进程同步处理机制,但由于大量的同步操作分散在每个要访问临界资源的进程中,不仅给系统的管理带来麻烦,还会由于使用不当而导致一些难以检测的时序错误[9]。而管程定义了一个数据结构和能为并发进程所执行在该数据结构上的一组操作,这组操作能同步进程和改变管程中的数据。鉴于这一特征,定义了类似管程功能的两个类(CMonitorQ1和CMonitorQ2)来实现三种线程对两级队列的同步与互斥。设缓冲队列为一级队列,归档队列为二级队列,模型对应的算法描述如下。

每路数据采集通道均需要一个CMonitorQ1对象。该对象用于采集线程(调用putQ1Data)和队列线程(调用getQ1Data)对一级缓冲队列buffer的同步操作。由于两类线程各只有一个,且操作的分别是队列头和队列尾,因此在队列空或满时同步即可。另外,getQ1Data在对缓冲队列空信号量进行V操作之前必须将数据存入临时空间,而不能只保存下标,否则就会出现数据被覆盖的可能。

第二级队列的同步与互斥操作由CMonitorQ2对象实现。该对象只需要一个,队列线程调用putQ2Data,归档线程调用getQ2Data。由于有多个线程竞争队列头与队列尾,所以引入两个互斥量mutexHead和mutexRear,用于互斥操作。为防止死锁的出现,以下的P、V操作次序不能交换。同样地,getQ2Data中对queueEmpty的V操作之前,归档线程需要把数据复制到自身的临时空间。

以上列出了两个类的主要成员与方法,其中对信号量和互斥量的P操作可用WaitForSingleObject实现;V操作则分别用ReleaseSemaphore和ReleaseSemaphore完成[10]。因为所有的同步与互斥操作全部集中到CMonitorQ1和CMonitorQ2对象,所以有效地控制了三类线程的复杂度。以队列线程的Execute方法为例,描述如下。

在以上算法中,getQ1Data()在一级缓冲队列空时阻塞;putQ2Data()在二级归档队列满时阻塞。虽然二级归档队列是多个归档线程竞争的临界资源,但因为临界区很小,且有一级缓冲队列为采集线程服务,所以系统的实时性与采集周期可以得到有效保证。

3 应用实例

两级队列调度通信模型已应用于太阳能电池的巡检。这一系统可对太阳能电池进行批量检测与监控,掌握电池组的运行状态,实时检测记录并显示各单体电池或电池组电压、电流、电池温度等参数,以及时发现劣质电池,保证系统正常可靠、无故障运行。采集的数据在归档的同时,还可以实时、直观地用趋势图显示。采集周期一致的归档数据为后续的数据分析、处理与挖掘提供了有利条件。

4 结束语

两级队列调度通信模型是在批量电池巡检中,为防止局部模块异常对数据采集周期一致性的影响而提出的。该模型通过三类线程调度和两级缓冲队列隔离的方法,有效地确保了局部采集模块的阻塞不会成为采样实时性的瓶颈。实践表明,该模型有效实现了数据采集的实时性、采样间隔的一致性、归档过程的可靠性以及归档模块对不同数据库并发功能的支持。

[1]董宏,张飘.通信用光伏与风力发电系统[M].北京:人民邮电出版社,2008:20 -23.

[2]徐德炳,徐兴.数据采集与总线技术的发展[J].测控技术,2002,21(6):1 -6.

[3]宋森涛,杨运国.用于智能巡检仪的数字滤波技术研究[J].华东电力,2005,33(9):47 -49.

[4]王华忠.监控与数据采集(SCADA)系统及其应用[M].北京:电子工业出版社,2010:27 -28.

[5]Andrew S,Tanenbaum.Computer networks[M].Fourth edition.Pearson Education,2004:454 -457.

[6]郑存红,胡荣强,赵瑞峰.用Visual C++实现实时数据采集[J].计算机应用研究,2002(4):103 -104.

[7]汤子瀛,哲凤屏,汤小丹.计算机操作系统[M].西安:西安电子科技大学出版社,2001:38 -39.

[8]王振明.SCADA监控与数据采集软件系统的设计与开发[M].北京:机械工业出版社,2009:51 -52.

[9]Abraham S,Peter B G,Greg G.Operating system concepts[M].Seventh edition.Wiley,2007:209 -210.

[10]Jeffrey M R,Christophe N.Windows via C/C++[M].Microsoft Press,2008:246 -269.

猜你喜欢
实时性线程队列
基于C#线程实验探究
队列里的小秘密
基于多队列切换的SDN拥塞控制*
基于国产化环境的线程池模型研究与实现
线程池调度对服务器性能影响的研究*
在队列里
丰田加速驶入自动驾驶队列
航空电子AFDX与AVB传输实时性抗干扰对比
计算机控制系统实时性的提高策略
一种车载Profibus总线系统的实时性分析