摘 要 针对变电站综合自动化系统越来越多的数据通信需求,在对监控主站的任务进行详细分析的基础上,采用了Windows NT的基于线程的并行处理机制,着重分析了采用多线程机制实现监控主站规约转换器的关键技术,并对该监控主站进行了实验室测试,测试结果表明其能够满足较高通信要求。 关键词 变电站综合自动化 监控主站 多线程 分类号 TM 63 TM 734
0 引言
在变电站综合自动化系统中,监控主站负责站内的保护、测量、控制装置的数据转换和传输,并提供人机界面。以往许多变电站综合自动化系统采用问答式规约,通过RS—232串口与站内装置通信。随着用户对系统性能要求的提高,变电站内通信量日益增大,特别是在变电站发生故障时,可能会有多个保护与测量装置同时上送报文,可以使通信量达到14000 bit/s以上。速度较慢的串行通信远不能适应如此大的通信需求。 目前的变电站综合自动化系统越来越多地采用现场总线(FF,Fieldbus,Profibus,CAN等)作为站内通信网,将变电站内的所有装置与监控主站联接起来。此时,如果监控主站再采用串行处理方式,就很可能会丢失报文。本文基于Windows NT的多线程机制,以并行处理方式实现了变电站综合自动化系统的监控主站,并对其进行了实验室测试。测试结果表明,采用这种方式所实现的监控主站,能够满足较大通信量的要求。
1 变电站综合自动化系统结构
在分布式变电站综合自动化系统中,采用现场总线作为站内通信网,把站内的保护、测量、控制及通信装置与监控主站联接起来[1]。其系统结构如图1所示。

图1 变电站综合自动化系统结构示意图 Fig.1 structure of integrated sybstation automation system
在分布式变电站综合自动化系统中,监控主站主要包括两个功能模块:规约转换器和人机界面。规约转换器主要完成两项任务:一个是接收并解释站内保护、测量等装置发送的上行报文,并将结果反映到人机界面;另一个是接收并解释变电站操作员通过人机界面下达的控制命令,随后通过现场总线将其下传至保护及控制装置。人机界面则是变电站综合自动化系统与运行人员的接口,运行人员通过直观、友好的人机界面来了解变电站的运行状态及下达控制命令。
2 监控主站的多任务机制
2.1 Windows环境中的多任务机制[2] 在Microsoft公司的Windows环境中,迄今为止存在两种形式的多任务机制:一种是协作式多任务,另一种是抢先式多任务。 在协作式多任务环境下,操作系统将系统的控制权移交给应用程序,以利其运行,当应用程序运行结束后,再将控制权交回给操作系统,然后再移交给下一个应用程序。只要占有系统控制权的应用程序良好地运行,在将控制权返还给操作系统之前保持对系统的控制,则所有应用程序就能很好地配合。但问题是,一旦某个应用程序出错,就会抓牢系统的控制权不放,而不理会其他应用程序甚至操作系统。显而易见,这种多任务机制对于变电站综合自动化系统这种可靠性和实时性要求很高的任务来说是不合适的。 在抢先式多任务环境下,操作系统一般采用微内核设计,基于时间片的轮转来调度多个任务的执行。系统的微内核始终保持对系统的控制。它给应用程序分配时间片使其运行,在指定时间片结束之际,将控制移交给下一进程。抢先式多任务克服了协作式多任务过于依赖应用程序的弱点,提供了一个可靠的运行环境。因此,变电站综合自动化系统中,其监控主站应该基于抢先式多任务来实现。 Windows NT Workstation是Microsoft公司推出的新一代操作系统,采用微内核设计,支持抢先式多任务。另外,Windows NT的时间片划分得比较小,这样就可以较充分地利用系统的资源,有利于变电站综合自动化实时性要求较高的应用。 2.2 Windows NT的多任务机制[3] Windows NT支持两种形式的多任务:基于进程(process)的多任务和基于线程(thread)的多任务。一个进程是一个正在执行的应用程序。系统为每个正在执行的应用程序创建并仅创建一个进程。多个进程,也就是多个应用程序可以并行执行。线程是进程的一条执行路径,是一个可分离的执行代码片段。每个进程至少有一个线程,但也可以有多个线程。Windows NT允许多个线程并行执行,即允许一个程序的两个或多个部分同时执行。如果多个进程之间需要交换数据,那就要使用IPC(interprocess communication)在进程之间传递消息。而对于从属同一进程的多个线程,就可以通过全局共享缓冲区交换数据,其效率远高于IPC。因此,采用基于线程的多任务所实现的应用程序,要比采用基于进程的多任务运行效率高。
3 规约转换器的任务分析
在监控主站中,规约转换器充当了装置和人机界面之间的桥梁,乃是核心所在。在保护与测量装置上送的各种报文中,大多数报文的处理过程比较简单,诸如遥测报文、遥信报文等,它们的处理时间与接收时间相当或者处理时间略小于接收时间,可以采用串行处理办法。少数几种报文处理过程比较复杂,例如在变电站发生故障时上送的保护动作报文、SOE报文等,这些报文需要弹出消息窗口去通知运行人员或者刷新大幅画面,其处理时间就会长于接收时间。此类报文,不仅不能丢失,而且收到后要立即反映到人机界面,通知变电站的运行人员,因此不能采用串行办法处理。 可以把规约转换器的任务分解为下面4个元任务,每个元任务由一个程序单元来完成。 a.接收上行报文; b.解释高优先级的上行报文; c.解释低优先级的上行报文; d.接收和解释人机界面命令并下传报文。 这样,就必须采用支持多任务处理的操作系统来实现变电站综合自动化系统的监控主站。 由于规约转换器的4个元任务之间存在紧密的联系,元任务之间需要交换大量数据,并且对规约转换器的实时性要求较高,所以采用基于线程的多任务来实现比较合适。 首先要创建4个线程T1,T2,T3,T4来分别负责这4个元任务。与单任务编程不同,采用基于线程的多任务来实现规约转换器时,需要解决以下问题。 3.1 多线程的序列化 在规约转换器中,由于上行报文的接收由线程T1负责,而其处理则依报文的优先级不同由线程T2和T3分别完成,所以需要建立两个缓冲区B1和B2来暂时存放高优先级和低优先级的上行报文。这样,缓冲区B1就为线程T1与T2所共享,B2则为线程T1与T3所共享。但在同一时间只能有一个线程存取缓冲区。如果在线程T1向缓冲区B1写入上行报文的同时,线程T2要从B1读出报文,就会产生内存的访问冲突。对于缓冲区B2也存在相同的问题。因此,就需要序列化线程T1和T2以及线程T1和T3的行为,使它们对共享缓冲区B1和B2的读写不会同时进行。 Windows NT提供了4类基于信号量的同步对象来实现多个线程活动的序列化与同步。这里采用事件对象(event)来控制缓冲区B1和B2的存取权限。为此,创建两个事件对象SO1和SO2分别负责B1和B2的存取。当线程T1申请对缓冲区B1进行写操作时,必须先取得其对应事件对象SO1的所有权。只有当SO1处于置位(set)状态时,这意味着没有任何线程访问缓冲区B1,T1才能取得其所有权。线程T1取得SO1的所有权后,立即将其状态改为复位(reset),以阻止线程T2访问。Windows NT保证取得事件对象所有权的操作与复位该对象的操作是不可中断的。如果在T1申请对缓冲区B1进行写操作时,线程T2已经取得了SO1的所有权,并将其复位,那么,T1只有等待T2释放SO1(将SO1置位)之后,才能继续执行。正如前文所提到的,Windows NT的时间片划分得比较小,所以T1等待的时间是极为短暂的,不会对程序的执行效率造成不利影响。同样,线程T1和T3通过事件对象SO2来访问共享缓冲区B2。 3.2 多线程和DDE 在监控主站中,规约转换器与人机界面采用Windows DDE(dynamic data exchange,动态数据交换)互相交换数据。由于Windows NT将DDE消息发给系统中的所有窗口,而DDE是基于请求—应答机制来完成应用程序间的数据交换的,所以,当用户的请求发出一条DDE消息后,只有收到系统中所有窗口对于该DDE消息的应答后,才会继续下面的操作。这样,如果某个线程创建了一个窗口,而该线程又在无限期等待共享缓冲区的访问权,在这种情况下,该窗口就不能处理收到的DDE消息,从而使得Windows NT不能收到所要求的全部应答,就会导致系统死锁。为避免这种情况,程序中对于需要访问事件对象的3个线程T1,T2,T3采取了两项措施: a.均不创建窗口,这样,线程就不会收到DDE消息; b.线程等待取得事件对象的所有权时,均设定一个有限的等待时限,而不是无限期地等待。 规约转换器的运行机制与线程T1的执行流程如图2和图3所示。线程T2和T3的执行路径与T1基本相同,不再另行表示。

图2 规约转换器的多线程示意图 Fig.2 Multithread illustration of protocol translator

图3 线程T1的执行路径 Fig.3 The execution path of thead T1
另外,在程序初始化时,线程T4与人机界面之间就建立了DDE的热连接。当运行人员下达控制命令后,T4对其进行解释并形成报文,随后通过站内通信网下传至保护装置。
4 结语
采用基于线程的多任务机制并行实现变电站综合自动化系统监控主站,其主要目标是满足现场越来越庞大的通信需求。因此,开发完成后,在实验室内建立了仿真测试环境,对监控主站的并行处理方案进行了全面测试,并且重点测试了吞吐量。在测试环境中,使用PC机来模拟变电站中的实际装置,向被测试的监控主站上送报文。由于单台PC机的处理能力有限,达不到所要求的通信量,所以采用4台PC机同时向测试对象上送报文。此时,报文接收线程负责接收这4台PC机所发送的上行报文。随后,该线程将收到的报文放入共享缓冲区。报文处理线程逐个处理缓冲区内的报文。测试结果表明,监控主站的吞吐量可达15000 bit/s,而且处理遥控等下行报文的速度也大大提高。 目前,采用该方案的监控主站已应用于西安徐家湾110 kV变电站。
作者简介:王海猷,男,1973年生,博士研究生,研究方向为变电站综合自动化。 贺仁睦,女,1944年生,博士,教授,博士生导师,研究方向为负荷建模及电力系统的分析与控制。 作者单位:华北电力大学电力工程系 100085 北京
参考文献
[1]杨奇逊.变电站综合自动化技术发展趋势.电力系统自动化,1995,19(10) [2]Jason Garms著.Windows NT Server 4大全.郭漫雪等译.北京:机械工业出版社,1997 [3]Herbert Schildt著.Windows NT编程指南.梁超译.北京:学苑出版社,1994
|