摘 要:为了解决多普勒天气雷达实时处理系统研发过程中并发线程难以进行控制的问题,设计了一种多线程控制结构,在充分利用目前发展水平的多普勒天气雷达产品处理模块的基础上,实现了对江苏省全部多普勒天气雷达站的实时监控与数据的实时处理。该控制结构的应用,增强了对各雷达站点雷达基数据的监控与产品处理能力。
关键词:多普勒天气雷达;多线程;实时;控制结构
实时系统的开发过程中通常需要解决这样的问题:实时地或软实时地对数据进行处理,并能够及时地对用户的操作做出响应。由于数据的处理需要大量的计算,这势必影响到系统对用户操作的响应。为了解决这一矛盾,多线程是必然的选择[1]。实践证明,实时系统中,开辟与用户操作无关的、专门负责数据处理的线程可以解决这个问题。典型的应用有激光雷达实时处理显示系统[2]、遥测参数的实时判读和传输监控[3]、测震实时数据保护系统[4]、基于主从异步复制技术的容灾实时系统[5]与基于多线程的实时信息处理系统[6]。多线程技术在这些系统中的成功应用,为多普勒天气雷达实时处理系统的研发提供了良好的参考与借鉴。
在开发多普勒天气雷达实时处理系统的过程中,如果系统并发开辟过多的产品处理线程,会造成系统本身甚至操作系统的崩溃,因此如何对系统中并发的线程进行控制,成为系统开发成功的关键。本文采用了并发地处理各雷达站点、串行生成各站点目标产品的折衷策略。考虑到进一步研发雷达产品的必要性以及未来增设雷达站点的可能性,系统的设计采用了一个二维的多线程控制结构,因而可以较容易地扩展系统的目标产品和能够处理的雷达站点。
1 多普勒天气雷达实时数据处理系统的设计
目前江苏省气象部门拥有5部多普勒天气雷达,另有2部在建,雷达监测网已经建成。如何充分利用该资源是目前气象科研工作者的一项重要工作。除了已有的雷达产品外,科研人员应用雷达基数据研究开发出多种适合于业务使用的雷达产品。目前已自行研发的雷达产品的生成算法先进、稳定、可靠,但在多算法、多数据集成工作上还略显不足,研究成果的业务化效果不够理想。为了对所有雷达站点数据进行实时产品处理,使得这些研究成果适合在业务中使用,本文设计开发了多普勒天气雷达实时处理系统。该系统能够对多个雷达站点的数据实施有效的监控,并实时地将所有雷达站点的数据处理成多个雷达产品,同时便于业务人员掌握并控制雷达数据的处理,因此特别适合业务推广。
系统的硬件结构如图1所示。目前需要处理的数据来自南京、徐州、连云港、苏州与南通5个雷达站点,这些站点的数据通过网络传输到文件服务器上。多普勒天气雷达数据实时处理系统监控文件服务器上的雷达数据,并发地开辟与站点数目对应的产品处理线程,由用户控制系统生成各雷达站点的目标产品。
系统的总体设计如图2所示。由于目标产品的生成都依赖于雷达数据的读取,需事先监控雷达数据的传输是否已经完成,雷达数据6 min到达一次,因此必须在6 min之内,即在下一个雷达数据到达之前将所有站点的雷达数据实时处理成多个目标产品。其中包括雨量直方图产品、CAPPI(等高平面位置显示)产品、VIL(垂直累积液态含水量)产品、TREC风场产品、OHP产品、Div(散度)产品、雨量预报产品(包括1 h雨量、2 h雨量和3 h雨量)以及与这些产品相关的图片产品。所有目标产品的生成过程都由线程来实现,用户通过多线程控制结构来控制目标产品的生成,并在人机界面中进行消息的实时显示以及对用户选定的产品进行显示。
由于各个产品处理线程运用自身已有的方式各取所需,因此对雷达数据的读取可以串行进行,避免了各个产品处理部分之间数据访问的冲突,同时也无需使用其他机制控制数据的访问。如何实现并行处理各雷达站点、串行生成目标产品的策略以及各产品处理线程的执行可视化等系统设计与实现的关键部分都是通过多线程控制结构来实现的。
2 多线程控制结构
阵列逻辑控制器采用阵列逻辑的方法构成组合逻辑控制电路,一种实现控制器的电路结构是可编程逻辑阵列(PLA)结构,如图3所示,其中对门电路的输入端作了简化表示[7]。阵列中每个交叉点可以像写ROM一样进行设置,这种设置的过程称为编程。
基于可编程逻辑阵列的启发,本文设计了一个多线程控制结构。可以将这个控制结构看作一个M行N列的二维数组,其中行定义了需要生成的M种雷达产品,列定义了需要监控的N个雷达站点。这里用Control[M][N]表示这个二维数组,Control[i][j]则代表了是否可以开始第j个雷达站点的第i个产品处理过程。若Control[i][j]为true,则当前可以开始雷达站点j的第i个产品处理过程;若Control[i][j]为false,则表明对雷达站点j中的第i个产品已经处理完毕或正在等待处理。需要注意的是第0行代表了雷达站点的数据是否已经传输到了服务器上,只有当第0行为true时才能开始各项目标产品的处理,否则系统中不存在任何产品处理过程。通过图4的多线程控制结构可以很容易地实现并发处理各雷达站点、串行生成目标产品的策略。具体地只需要控制这个结构使得每一列都只有一个为true,而各列之间的不同元素可以同时为true即可。系统的实际运行情况表明,不同时并发地将所有雷达站点的雷达数据处理成所有的目标产品,而是采用这种并发与串行相结合的方式,有效地控制了系统产品处理线程的数量,减轻了系统运行时对内存和CPU的需求,同时也不影响人机之间的交互。
通过多线程控制结构的状态可以准确得到系统在某一时刻开辟了哪些产品处理线程。如果用当前各站点正在处理的产品的索引来表示控制结构的状态,则图5中控制结构的4个状态可以编码为11111、12254、33445、56555。与可编程逻辑通过对图3中的交叉点进行编程设置一样,用户可以对控制结构中交叉点进行设置,即对多线程控制结构进行编码,控制系统生成用户所指定的目标产品。
3 产品处理过程
系统的主要处理过程包含2个定时器。
数据检测定时器:为各个雷达站点开辟各自相应的数据检测线程,每6 min进行一次数据检测。当检测到雷达站点j的数据已经传输完成,数据检测线程将Control[0][j]设置为true,以此通知产品处理定时器可以开始站点j的各项产品处理过程。
产品处理定时器:轮询多线程并行控制结构,以便为各个站点开辟目标产品的处理线程。如果站点j的产品i-1已经处理完成,即Control[i-1][j]为true,则说明可以开辟产品i的处理线程;否则需要等待下一次轮询,直到Control[i-1][j]为true时,才能开始产品i的处理。产品i处理完成之后,自动地将Control[i][j]设置为true,以表明当前产品已经处理完毕,以便进行下一个产品的处理过程。这里需要注意,为了避免开辟相同的产品处理线程,开辟产品处理线程i之前,应先将Control[i-1][j]设置为false,以保证每一列要么全为false,要么只有一个true。
Div散度产品的处理过程中需要耗费巨大的内存,不适合在多个站点之间并发处理,因此将Div散度产品视作一个关键产品,各站点之间串行生成Div散度产品,即使系统中每一时刻最多只有一个这样的关键产品处理过程。由于整体上串行处理Div产品,当各个站点都要进行Div产品处理时,将会产生各个站点对Div产品的竞争。开发过程中赋予每个站点一个Div产品的处理权,并在各个站点之间传递这个处理权,即只有当前拥有处理权的站点才能进行Div产品的处理,从而使Div产品的处理在整体上进行串行处理。
为了提高产品生成过程的实时性,一旦站点j完成Div产品的生成,则立刻将Div产品的处理权传递给站点j+1;通过多线程控制结构,站点j+1获知自己已经得到了Div产品的处理权,则立即开始Div产品的处理。这里存在一个潜在的问题,即一旦某个站点的数据传输因为某些原因而暂时中断或停止,则这个站点的Div产品的处理权难以自动传递给下一个站点。为此,每个站点附加了一个计数器,通过这个计数器来指定限制某个站点掌握Div产品处理权的时间。只有当前获得处理权的站点才能进行计数器的计数,一旦计数器超过了预设的上限,则强制其交出处理权。这样使每个站点不能无限制地拥有处理权,从而解决了由于数据传输中断而引发的处理权难以传递的问题。
假设当前系统需要将5个雷达站点的数据分别生成6个目标产品,图5所示为从一次数据处理过程中选取的控制结构的几个状态,其中产品6为一个关键产品。图的底部是为各站点设置的计数器的计数值,这里设置计数器的上限是400。第1个状态代表数据检测线程检测到雷达数据之后,刚刚开始进行各个雷达站点第一个产品的处理,此时第0个站点拥有对关键产品的处理权。由第2个状态可以看出对各站点数据的并行处理过程是不同步的。对比第3个和第4个状态图可知虽然第4个雷达站点首先将除了关键产品6之外的其他产品处理完毕,但是却不能最先处理产品6;第4个状态图可以解释为由于站点0的计数器在其处理产品6之前已经超过了设定的阈值,站点0被迫提早将产品6的处理权交给了站点1,因此站点1首先进行产品6的处理。由于系统中每一时刻只有一个站点拥有对关键产品的处理权,假设此时各站点的数据传输正常,且产品6的处理过程将在计数器到达阈值之前结束并传递产品6的处理权给下一个站点。如果将此时产品6的各站点处理权编码为01000,则各站点对产品6的处理权循环编码为01000、00100、00010、00001、10000,1所在的位为拥有处理权的站点。对应的多线程并行控制结构状态的编码为56555、60655、50065、50006、60000,每个状态中只存在一个6。
本文结合一个类似可编程阵列控制逻辑的多线程并行控制结构,完成了对江苏省多普勒天气雷达实时数据处理系统的设计与实现。系统在Windows下开发,目前并发处理5个站点雷达数据的时间平均只需1 min~2 min,其中包括16幅雷达产品图片。与此同时,用户可以方便地知道系统当前时刻开辟了哪些产品处理线程,同时可以方便地对各站点所需生成的产品进行控制。系统的实际运行表明,系统运用时,横向上至少可以对10个雷达站点的数据进行综合处理,与此同时纵向上仍可以扩展添加新的雷达产品。由于可以方便地对控制结构进行扩展,未来进一步的工作可以集中在各种雷达产品的研发上,提高各产品生成算法的效率以及系统的扩展性。
参考文献
[1] BEVERIDGE J,WIENER R.Win32多线程编程设计[M]. 候捷,译.武汉:华中科技大学出版社,2002.
[2] 方欣,胡顺星,赵培涛,等.ATS-1激光雷达实时处理显示系统设计[J].计算机工程,2009,35(11):276-279.
[3] 赵文策,苗岩松.利用多线程技术实现遥测参数的实时判读和传输监控[J].导弹试验技术,2009(1):22-24.
[4] 盛琰,毕卉娟.测震实时数据保护系统的建立及应用[J].内陆地震,2005,19(2):181-184.
[5] 杨朝红,宫云战,桑伟前,等.基于主从异步复制技术的容灾实时系统研究与实现[J].计算机研究与发展,2003,40(7):1104-1109.
[6] 张坚英,詹彩菊.基于多线程的实时信息处理系统的设计与实现[J].导弹试验技术,2009(1):37-39,53.
[7] 胡越明.计算机组成和系统结构[M].上海:上海科学技术文献出版社,1999:219-223.