引 言
自从1984年第一套微机保护投入试运行并通过鉴定以来,微机型继电保护装置的种种优越性为大家所认识,国内开始了广泛应用,并取得了相当的成功,现在新投入的继电保护装置几乎无一例外地选用了微机保护.随着微机保护装置的大量使用,开发人员也体会到传统的继电保护软件设计在灵活性方面有所欠缺,不易维护.这就要求我们重新审视微机保护装置的软件设计思路.实时操作系统(Real-time
Operation Sysytem,RTOS)已经在航天装备和通信设备等嵌入式应用中崭露头角,在电力自动化设备中近年来也有一些应用,例如励磁控制设备和调度自动化前置机等.笔者将RTOS的概念引入继电保护的软件设计中,探讨了RTOS在继电保护中应用的前景及需要考虑的问题.
1 实时操作系统(RTOS)
1.1 RTOS概述
操作系统是计算机系统中的一个系统软件,是一些程序模块的集合.这些程序模块用于管理和控制计算机系统中的硬件及软件资源,合理地组织计算机工作流程,以便有效地利用这些资源为用户提供一个功能强、使用方便的工作环境,从而在计算机和用户之间起到接口的作用.操作系统是对硬件层的第一次扩充,可以为程序员提供有效的服务.
什么是实时操作系统?“实时”就是能够对随机发生的外部事件作出及时的响应,并对其进行及时的处理.这里所谓的外部是指与计算机系统相连接的设备所采集到的数据.外部事件所触发的处理活动是由一串处理任务来完成的,其中每个处理任务必须在严格规定的时间内完成.RTOS是一段嵌入在目标代码中的软件,用户的其他应用程序都建立在RTOS之上.RTOS使各个任务“准同时”地运行,这意味着看上去各个任务似乎是在同时运行.不但如此,RTOS还包含一个可靠性和可信性很高的实时内核,将中断、I/O和定时器等资源都包装起来,留给用户一个标准的应用编程接口(Application
Programming Interface,API),并根据各个任务的优先级,在不同任务之间合理地分配CPU时间.
RTOS是随着计算机用于实时控制和实时信息处理领域而发展起来的.总的来说,RTOS是由事件驱动的,能对来自外界的信号在限定的时间范围做出响应,它强调的是实时性、可靠性和灵活性,与实时应用软件相结合成为有机的整体,起核心作用,用于管理和协调各项工作,为应用软件提供良好的运行环境和开发环境.
1.2 RTOS与普通操作系统的区别
RTOS与桌面操作系统或大型机操作系统相比,有以下几个特点:
1 受限的中断服务 有一个允许系统转向处理中断的最大时间;
2 基于优先级的调度 在实时系统中,所有任务都被安排某个优先级,这个优先级可能基于一些准则(例如运行时间);
3 悬挂任务 所有任务和队列能被一些已经准备就绪的高优先级的任务或队列悬挂;
4 可衡量性 操作系统所提供的服务不是单一的,而是一系列的调度模块和库.
除了上述4个特点外,RTOS和桌面OS相比,RTOS更能适应处理较多终端应用的需要、嵌入式开发的需要和利用有限资源的需要,其中最重要的是对RAM需求的安排.考虑到大部分嵌入式系统的成本和体积,操作系统必须能高效地使用内存,防止产生存储碎片;在任务完成时能够重用内存;当任务创建时用最小的内存,提供有效的堆栈结构.
1.3 使用RTOS的单片机程序与传统单片机程序的区别
传统的单片机程序是线性程序,这种程序机制具有简单直观、易于控制的优点.然而由于程序只能按单一的线索顺序运行,缺乏灵活性,难以运用在复杂系统中.例如一个典型的单片机监控系统通常包括输入/输出控制、数据处理、显示,以及键盘管理等功能模块.在传统的单任务机制下,程序采用循环方式.其流程图如图1所示.
由图1流程可知,在传统单片机程序机制下,各功能模块按固定顺序构成一个整体,作为一个任务得到执行,而在实际应用中,各个模块要求的执行频率往往不一致.如输入采样频率可能要求很高,而单位时间内键盘扫描的次数则相对较少.系统这种复杂的定时要求在单任务机制下难以满足.此外,在这种结构下程序一旦建立,各模块的执行顺序即已固定,对于需在运行时动态改变执行结构的系统,程序需用许多条件判断和分枝转移语句进行控制,从而增加了程序的复杂性.程序可读性和可维护性很差,调试不便;对已有程序进行扩充,也需先了解整个程序结构,这就增加了操作的难度.
RTOS采用了先进的多任务机制,这是现代操作系统才具有的突出优点.在这种机制下,CPU的运行时间被划分为许多小的时间段,由某种调度算法按不同优先级别分配给不同的应用程序;多个应用程序分别在自己的时间段内访问CPU,从而造成在微观上轮流运行,宏观上并行运行的多任务效果.这样,可以把输入、输出数据处理、显示,以及键盘管理视为若干相对独立的模块,由RTOS进行管理,从而形成一种崭新的程序结构.其示意图如图2所示.
在这种结构下,各功能模块由系统调度程序启动执行完毕后返回系统调度程序,彼此处于等同地位.其执行顺序也比较灵活,且可在程序运行过程中动态地改变执行结构;各子任务的执行频率要求表现为它们的优先级,即:优先级越高的子任务,其单位时间内执行次数越多,执行频率就越高.各子任务在自己的时间段内运行,通过合理设计时间段大小和各任务的优先级,可以自然地满足系统内各种复杂的定时要求.
在RTOS结构下程序的调试与维护变得较为容易.程序以分立模块形式存在,各模块间功能独立,相互影响小,可以方便地单独调试,寻找问题所在;对程序的扩充更为方便,不用更改原有结构,只需增加要扩充的部分即可.
2 继电保护软件设计引入RTOS概念的必要性
2.1 微机保护软件维护要求的需要
微机保护的各种复杂功能都是由相应的软件来实现的,如果需要增加新的功能,就需要修改相应的软件.在电力运行部门,各个地区对于继电保护的要求是不尽相同的,因此,继电保护程序修改是不可避免的.例如,各电力运行部门在低压保护领域中形成的运行习惯差异比较大,华东地区在低压馈线上使用前加速功能,北京供电局在某些线路上使用多次重合闸,各地对低频减载闭锁条件的要求也各不相同.为了适应现场的不同要求,需要针对不同情况对程序作出修改.诸如此类的比较小的修改要求非常多.
电力设备供应商为了满足用户的需求,进行产品的维护,需要有专门的维护人员.由于汇编语言的缺点以及原先的保护软件设计思想的缺陷,造成长期需要专门的开发人员进行软件维护.这就带来以下几个问题:
1 由开发人员进行程序维护,致使开发人员的时间被大量占用,无法进行新的开发;
2 由于各种要求比较多,造成需要维护的各种程序版本很多;
3 当用户关于修改或修正的合理要求不能及时处理时,用户的满意度就会下降;
4 工程的时间通常比较紧张,所修改的软件不可能经过详细测试,这就可能在维护过程中引入潜在的错误,有可能导致投入到现场中的软件是有缺陷的软件.
有些缺陷常常是到了现场,在某种事先没有预想到的运行方式下才会显露.这会使得电网遭到巨大的损失,而电力设备供应商的无形资产损失更是难以估计.在这方面是有前车之鉴的,在每年的220~500kV继电保护和安全自动装置的运行事故分析中可以看到,因软件问题而造成的故障是占有相当比例的.
继电保护装置的功能将会有进一步的扩展,很多不同的保护功能将会融合在一套保护装置中;而继电保护设备的通信功能将进一步加强,传送的数据将更加丰富.可以想象,以后的继电保护程序将更复杂,而进行软件修改时需要考虑的问题将会更多.
根据软件工程理论,与软件维护有关的多数问题都归因于软件计划及软件开发方面的缺陷.微机保护作为一个计算机系统,它具有计算机系统的共性,即硬件在总成本中只占较小的份额,而软件的开发和维护是一个较大的部分.一个软件的维护成本在软件开发时就应当给予考虑,在软件设计之初就应考虑怎样才能减少软件的维护工作,降低对维护人员的要求.
微机保护软件维护出现困难就是因为传统软件设计方法上存在缺陷,为了容易地去了解、维护、修改大型的动态的实时软件系统,就必须要有先进的操作系统.
2.2 实时软件的需要
微机保护的软件是一个要求很高的实时软件.实时程序设计从概念上说与一般的程序设计(数值计算、数据处理)具有根本的不同之处.实时程序执行的正确性不仅与程序逻辑计算结果有关,而且与程序被执行的先后次序和时间限制的关系也十分密切.我们知道,一般的程序是对输入数据进行加工、处理产生出输出数据的过程,与程序执行的时间关系不大;而实时程序若不能满足时间限制条件,就会直接影响其执行结果的正确性.因此,实时程序设计将会比一般的程序设计更加复杂和困难.在实际的计算机应用系统中,人们通常把时间限制的要求强加于物理硬件设备上,因而就忽视了对这一问题的深入研究.
对于继电保护系统来说,“不死机”是最起码的要求.因此,一方面要在系统的硬件设计上尽量提高抗干扰能力,满足电磁兼容性要求;另一方面要在软件上采取措施.长期以来,国内传统的开发方式是:针对某一应用绘制程序流程图,编制应用程序.这种程序可以称之为线性程序.在遇到很强干扰时,程序在任何一处断线都会引起死机,只能依靠硬件的最后防线看门狗复位,重新启动系统.而对于RTOS管理系统,这种干扰可能只是引起若干个进程被破坏,可以用另外的进程对其进行修复.RTOS不仅可以将应用程序分解成若干独立的任务,而且可以另外启动一个监控进程,监视各程序运行状况,遇到异常情况时采取一些措施,可以像在UNIX中自动将有问题的进程终止掉,再调用另一个进程将任务修复,从而使系统的可靠性大大提高.
3 继电保护软件设计引入RTOS概念的可行性
随着集成电路技术的快速发展,微机保护系统将会得到更加廉价快速的CPU与更大容量的RAM,从而拥有更加强大的硬件平台,可实现更多的功能及更好的算法.在编写保护程序时,可以考虑如何使程序灵活地适用于多种情况,如何在不改动程序的情况下使装置能够适应新的情况;可以采用较为复杂的编程方法,使用对硬件要求较高的算法,以实现程序的灵活性.现在硬件的发展已经为我们提供了一个足够强大的平台,使我们将RTOS引入保护软件设计成为可能.
例如:在1999年南瑞继保电气公司推出的LEP-915等保护设备中已经使用了Motorola的MC68332的32位单片机,人们往往只注意到32位MCU比8位和16位MCU速度快这一特点,而忽略了另一个重要特征,这就是32位CPU本来是为运行多用户、多任务的操作系统(如UNIX)而设计的.因此,特别适于运行多任务实时系统.
在微机保护中,MCU/DSP的处理能力、存储器和I/O带宽这些资源是有限的,而且存在多个MCU/DSP同时工作的问题.在程序设计过程中,如果处理不当,就可能导致任务得不到及时的响应,处理时间过长.此外,各种资源如果调度不当就会发生死锁,从而使系统失效.为了保证微机保护系统的正常运行,可以采用RTOS合理地管理和分配CPU进程和内存这些关键资源.RTOS根据任务的要求进行资源管理、任务调度、异常处理等工作.
在实时性方面,由于RTOS将前后台系统分割为各个优先级不同的任务,并根据每个任务的优先级,动态地切换各个任务,总是运行优先级最高的任务,这就保证了系统对实时性的要求.每个任务可以有自己的定时与延时,这使得任务的删减与增加变得很简单,而且可以满足继电保护装置对时间的各种要求,例如出口时间的整定,对程序执行时间的限制(每周波12点采样,要求程序在1.667ms内走完一圈)等.RTOS的优先级管理、多任务调度、事件触发机制正是对提高实时性的最有力的支持.
继电保护的设计、开发,实际上也是一个大型软件工程的设计、开发.RTOS体现了一种新的系统设计思想,具有一个开放的软件框架,设计者可以在采用RTOS的系统中方便地增加或删去一个任务.在保护系统的开发过程中,由于系统比较复杂,工作量很大,需要有很多设计人员同时进行系统的软件开发;如果采用RTOS,就可以提高开发效率,缩短开发周期.一个复杂的应用程序可以分解成多个任务,每个任务模块的调试、修改几乎不影响其他模块.设计人员进行协同工作时,只需要定义好重要的数据结构、变量、常数和函数功能,依照系统的要求进行设计开发.设计人员编写程序时,可以分别编写各个任务,不必同时将所有任务运行的各种可能情况记住,从而大大减少程序编写的工作量,减少程序的出错可能性,提高软件的可靠性.这样既缩短了开发时间,加速了研制速度,又降低了最终产品对某个设计者的依赖性,避免出现由于一两个人的原因而使工程无法完成的情况.
4 继电保护软件设计引入RTOS需要考虑的问题
在前/后台系统的设计中,对存储器的容量的需求仅仅取决于应用程序代码,而使用RTOS的情况则很不一样.RTOS内核本身需要额外的代码空间,内核的大小取决于很多因素,但主要取决于内核的特性.8位CPU的最小内核只提供任务调度、任务切换、信号量处理、延时超时服务,大约需要1~3kB的代码空间.
总代码量=应用程序代码+内核代码
每个任务都是独立运行的,必须给每个任务提供单独的栈空间(RAM).应用程序设计人员在决定分配给每个任务多少栈空间时,应该尽可能使之接近实际的需求量.栈空间的大小不仅要计算任务本身的需求(局部变量、函数调用等),还需要计算最多中断嵌套层数(保存寄存器、中断服务程序中的局部变量等).根据不同的目标微处理器和内核的类型,任务栈和系统栈是可以分开的,系统栈专门用于处理中断级代码.这样做的好处是每个任务需要的栈空间大大减少.内核的另一个应该具有的特性是,每个任务所需的栈空间大小可以分别定义.所有内核都需要额外的栈空间以保证内部变量、数据结构、队列等.如果内核不支持单独的中断用栈,其总的RAM需求的表达式为
RAM总需求=应用程序RAM需求+(任务栈需求+最大中断嵌套栈需求)×任务数
如果内核支持中断用栈分离,则总的RAM需求量的表达式为
RAM总需求=应用程序RAM需求+内核数据区RAM需求+各任务栈需求的总和+最多中断嵌套栈需求
除非有特别大的RAM空间可以使用,对栈的分配与使用均要特别小心.
实时多任务系统比前后台系统需要更多的代码空间(ROM)和数据空间(RAM).额外的代码空间取决于内核的大小,而RAM的用量则取决于系统中的任务数.使用RTOS所产生的额外需求如下:内核的价格;额外的ROM/RAM开销;2%~4%的CPU额外负荷.如果应用项目对额外的需求可以承受,就应该考虑使用RTOS.
5 结束语
RTOS是计算机科学发展的重大成果之一,已经在通信、航天等嵌入式系统中有成功的应用,在电力系统的应用才刚刚开始.目前的继电保护软件不易维护,灵活性较差,没有充分发挥芯片的功能,不适应继电保护发展的需要.采用RTOS的继电保护软件具有可靠性高、灵活性好和易于维护等优点.
|