徐卫中,陈勤
(华东桐柏抽水蓄能发电有限责任公司,浙江天台317200)
桐柏电厂计算机监控系统以冗余双光纤环交换式工业以太网为工作平台,以IEC870-5-104为通信规约。所有现地控制LCU都采用冗余的CPU(分别为C2和C4)和冗余网卡分别挂在双光纤环网上,实现如下任务:
(1)实现真正的双机冗余,保证任何一套LCU的主用CPU或主用网卡发生故障时,均能快速可靠地切换至另一套热备用的CPU或网卡,保证控制任务能平稳无扰动的无缝切换。
(2)实现现地控制单元LCU之间、LCU与电厂控制级之间、LCU与保护、励磁、调速器、机组在线监测、SIS等设备之间的以太网冗余通信。
因此,监控系统机组LCU的冗余主备CPU和冗余主备网卡的快速可靠平稳无缝切换对于桐柏电厂的机组安全稳定可靠运行具有极其重要的安全意义和极其重大的经济意义。
从2005年12月中旬桐柏电厂计算机监控系统投产以来,在4台机组的发电、抽水启动过程中,每年均频繁出现以下问题:
(1)桐柏电厂机组LCU的主备CPU会异常切换。
(2)机组LCU的主备CPU切换时间过长,长达50多s。
以上两个原因最终导致机组开机启动失败,多次被上级调度部门考核,对桐柏电厂抽蓄机组的安全稳定运行和电厂的安全、经济考核指标均造成了严重的影响。
桐柏电厂机组LCU所配的两块冗余CPU分别为C2和C4,其分别带有独立的以太网卡。
机组LCU主备CPU的冗余工作原理为:主备CPU分别通过内部总线实时检测自身和所有外围板件(包括所配网卡)的工作状态,并通过内部总线交换数据状态;冗余CPU将各自检测到的自身和所有外围板件(包括所配网卡)的健康值汇总之后进行比较,健康状况好的作为主用CPU运行工作,备用CPU则通过内部总线和主用CPU保持数据状态实时同步。根据这一原理,结合机组LCU的冗余CPU主备切换控制逻辑程序RED_SWT.GPS,我们采用溯源的方法对机组LCU主备CPU(C2和C4)的切换逻辑进行了分析和研究:
(1)CPU主备切换控制逻辑中:GB-_C2_ACTIVE_C或GB-_C4_ACTIVE_C分别为切换激活机组LCUCPUC2(当CPUC4为主用时)或CPUC4(当CPUC2为主用时)的最终出口命令,根据逻辑可倒推出:产生GB-_C2_ACTIVE_C或GB-_C4_ACTIVE_C命令的条件是:命令LB-_activate_C2或LB-_activate_C4激活。
(2)命令LB-_activate_C2或LB-_activate_C4是由机组LCUCPUC2或CPUC4的相应三部分健康值通过算术和运算及大小比较而产生,这三部分健康值分别为:
1)CPU本身健康值:LA_Res_C2、LA_Res_C4;其由CPU本身自检产生。
2)网卡健康值:LA_Res_C2_128、LA_Res_C4_128;其由对应的CPU实时检测产生。
3)外围板(指DI、DO、AI、AO板)健康值:LA_Res_C2_MPE1、LA_Res_C2_MPE2、LA_Res_C2_MPE3、LA_Res_C4_MPE1、LA_Res_C4_MPE2、LA_Res_C4_MPE3(MPE1、MPE2、MPE3分别指CPU所带的三条外围总线);其由对应的CPU实时检测产生。
系统对健康值的定义为:物理部件(如CPU、网卡、外围板件)越健康(工作状态越佳、故障越少越轻),其相应的健康值越小。因此,可以推导出:当机组LCUCPUC2或CPUC4的总健康值(CPU本身健康值+网卡健康值+外围板健康值)越大,表明该CPU当前的工作状态越差,则系统逻辑会产生LB-_activate_C2或LB-_activate_C4的切换命令,命令系统切换到当前工作状态更佳(总健康值更小)的CPU上去工作。
(3)至此,我们可以得出一个初步结果:导致机组LCU的主备CPU和主备网卡异常切换的原因是:当前主用CPU的总体健康值变大(大于备用CPU的当前健康值)。CPU的总体健康值是由三部分组成:CPU本身健康值+网卡健康值+外围板健康值。因此,针对桐柏电厂的情况,进一步研究分析出究竟是哪一些健康值异常变大。
我们采用了在线动态实时监测法进行进一步的分析和研究:在机组发电、抽水的启动过程中,我们将装有实时监测软件的笔记本电脑在线联到机组LCU的主用CPU上,对逻辑中的CPUC2和CPUC4的三部分健康值进行实时监测。通过对各台机组的长期在线实时监测,发现:在机组发电、抽水启动过程中,每次机组LCU发生主用CPU切换至备用CPU之前的瞬间,其对应的网卡健康值LA_Res_C2_128或LA_Res_C4_128均不同程度的变大,使得当前主用CPU的总健康值大于备用CPU的总健康值,最终导致CPU切换。因此,可以认为:在机组发电、抽水启动过程中,机组LCU主用CPU的网卡健康值异常变大,是导致CPU异常切换的原因。
(4)机组发电、抽水启动过程中,机组LCU主用CPU的网卡健康值异常变大原因分析:
主用CPU的网卡健康值异常变大表明主用CPU的网卡工作状态和性能下降,通过分析和归纳,导致网卡工作状态和性能下降的原因不外乎以下几种:
1)网卡本身软、硬件损坏或存在软、硬件性能下降缺陷;
2)该网卡所接的交换机相应端口工作不稳定,导致网卡通信异常;
3)连接该网卡的网线和RJ-45接头工作不稳定(接触不良),导致网卡通信异常;
4)外界因素(如温度、湿度、网卡网口通信流量等)的影响。
对于1)、2)、3)三种怀疑的原因,我们采用了替换法进行排查:
1)用新的网卡进行更换;
2)将该网卡所接的交换机端口更换至其它空闲的端口,甚至更换相应的交换机;
3)重新制作网线和RJ-45接头并进行更换;
上述所有替换完成后,再次进行在线动态开机启动测试,结果仍然为主用CPU的网卡健康值异常变大。由此,可排除1)、2)、3)这三种原因。
这样,外界因素如温度、湿度、网卡网口通信流量等则成为下一步的排查目标。通过采用红外测温仪和湿度仪对机组LCU盘柜内的温度和湿度进行多次检测,其温度和湿度均在电子设备正常工作的范围内,不可能导致CPU的网卡健康值异常变大。
因此,我们将排查分析重点放在网卡网口通信流量上。背景资料:
1)桐柏电厂机组为300MW的大型抽水蓄能机组,单台机组的信号量要比同类常规水电厂机组的信号量多很多,接近5000点。
2)桐柏电厂的计算机监控系统采用VATECH公司特有的海王星(NEPTUN)系统,监控系统、保护系统、励磁系统以及调速器系统均统一接入双光纤环网的监控网络平台,现地控制单元LCU之间、LCU与电厂控制级之间、LCU与保护、励磁、调速器、机组在线监测、SIS等设备之间均通过IEC60870-5-104规约实现以太网冗余通信。
基于上述两点,我们分析认为:在机组开机过程中,机组LCU与保护系统、励磁系统、调速器系统等外围系统会有大量数据通过网络进行交换,同时机组LCU还有大量数据要通过网络上送到监控系统上位机,有可能会造成机组LCU的当前主用CPU自带的网卡需处理的瞬时数据流量(负荷)过大,而目前所用的网卡SM-2554其缓存堆栈仅为50K,有可能会造成网卡缓存堆栈溢出,导致网卡死机。为验证这一分析,我们用HERSIMAN交换机(桐柏监控系统网络系采用HERSIMAN交换机)管理软件对机组开机过程和稳态运行过程中的网卡端口(通过IP地址定位)流量进行实时监测,发现:在开机过程中,主用CPU自带网卡的网口流量达到900kb/s,而在机组稳态运行过程中,其网口流量仅为30kb/s。这样就证实了我们上述分析:在机组开机过程中,主用CPU自带网卡所需处理的瞬时数据流量(负荷)确实相对过大。
查看机组LCU的冗余CPU主备切换控制逻辑程序RED_SWT.GPS中生成网卡健康值LA_Res_C2_128或LA_Res_C4_128的逻辑模块:GB_P00_C2_128至GB_P15_C2_128(GB_P00_C4_128至GB_P15_C4_128)这16个中间量用来表示本网卡通过104规约与网上其它站点的通信状态(由104规约进行通信判断),其赋值公式为GB_Pn_C_128=2n,其中GB_P15_C_128=215=32768代表本网卡死机,与全网所有的其它站点104通信全部中断。这16个中间量通过多选一逻辑对LA_Res_C_128进行赋值,参与CPU总健康值累加和比较。为进一步证实我们的判断,我们做了以下比较试验:
1)在机组开机过程中,实时监视逻辑中的LA_Res_C_128变量的赋值,我们发现:每次切换发生时,LA_Res_C_128的赋值均为32768。
2)在机组开机过程中,人为拔出主用CPU网卡的网线,并实时监视逻辑中的LA_Res_C_128变量的赋值,发现:每次拔出网线时,LA_Res_C_128的赋值也均为32768。
这样,就完全验证了我们的判断。
至此,我们可以得出结论:在抽水和发电启动过程中,因桐柏机组LCU与保护系统、励磁系统、调速器系统等外围系统会有大量数据通过网络进行交换,同时机组LCU还有大量数据要通过网络上送到监控系统上位机,就造成机组LCU的当前主用CPU自带的网卡需处理的瞬时数据流量(负荷)过大(达900kb/s),而目前所用的网卡SM-2554其缓存堆栈仅为50K,这样就极可能造成网卡缓存堆栈溢出使网卡死机,在逻辑上导致主用CPU的总体健康值变大(性能下降),最终发生主备CPU异常切换。
通过上述2.1对机组LCU的主备CPU异常切换的原因的分析,我们知道:对于桐柏机组LCU主备CPU异常切换的情况,在主备CPU冗余切换的逻辑程序RED_SWT.GPS中,CPU网卡健康值LA_Res_C2_128变量是启动主备CPU冗余切换逻辑程序RED_SWT.GPS的源头,只要LA_Res_C2_128变量发生变化,其后续的逻辑程序的执行(直至最终切换激活命令GB-_C2_ACTIVE_C的产生)是无延时的,因此,我们初步判定:从主用CPU网卡死机(即网卡的IEC870-5-104通讯全部中断)到主用CPU网卡健康值LA_Res_C2_128变量被附值为32768的时间应是主备CPU切换时间过长的主要原因。
通过查阅研究IEC870-5-104通信规约的相关协议文件和规定,我们知道:IEC870-5-104通信规约判定网络通信中断一般是采用在连续一段时间(T104)内收不到有效的报文为依据的。当桐柏机组LCU的主用CPU网卡因死机通信中断,且在连续一段时间(T104)内收不到有效的报文,则判断104通信确实中断,并产生激活GB_P15_C_128这一变量,由其对主用CPU网卡健康值LA_Res_C2_128赋值32768。因此,我们分析认为:桐柏电厂计算机监控系统IEC60870-5-104通信规约中对时间参数T104的设置较大会导致CPU切换时间过长。而在开机过程中,机组LCU顺控程序需要间断地(间隔时间较短,加延时共约15~25s左右)与外围系统(如励磁、调速器系统)进行信息交互(接受它们的状态信息和向它们发出相关指令),CPU切换时间过长(在这一切换时间段内,CPU与外界的通信是中断的)则会导致机组LCU顺控程序接受不到外围系统的状态信息,也无法向它们发出相关指令,从而会导致顺控程序执行超时,使开机失败。为验证这一分析和判断,我们做了如下试验:
将装有实时监测软件的笔记本电脑在线联到试验机组LCU的主用CPU上,打开冗余CPU主备切换控制逻辑程序RED_SWT.GPS中生成网卡健康值LA_Res_C2_128或LA_Res_C4_128的逻辑模块,人为拔出主用CPU网卡上的网线(为了准确地定义104通信开始中断的时刻),此时用秒表开始计时,当LA_Res_C2_128或LA_Res_C4_128被赋值32 768时,停止计时,秒表显示的时长为49s。多次重复上述试验,结果均为49s左右。
由此,我们可以得出结论:桐柏电厂计算机监控系统IEC60870-5-104通信规约中对通信中断判断时间参数T104的设置较大(约为49s左右)应是机组LCU的主备CPU切换时间过长并导致开机失败的原因。
该问题的主要原因是:在机组抽水和发电启动过程中,主用CPU自带的网卡需处理的瞬时数据流量(负荷)过大(达900kb/s)和网卡上的缓存堆栈容量过小(仅为50K)。经初步研究,解决方案有二:
(1)通过修改提高送给机组LCU的各类模拟量(如温度、震动、摆度)的自发上送门槛值来降低开机过程中的瞬时数据流量。
(2)通过加大网卡上的缓存堆栈容量来提高网卡的数据通信和处理能力。
经过进一步分析和研究,我们认为:
方案(1)尽管可以降低开机过程中的瞬时数据流量,但提高各类模拟量的自发上送门槛值后,会降低模拟量的精度,必然会降低监控系统对相关目标的测控精度。方案(1)不可行。
经过与VATECH公司的工程师联系,得知:VATECH公司已有新版本的网卡SM-2556,该网卡有2M的缓存,其中用于缓存数据的存储有1M,能保存更多的临时数据,可极大的提高网卡的数据通信和处理能力。因此,决定采用方案(2)。
该问题的主要原因是:桐柏电厂计算机监控系统IEC60870-5-104通信规约中对通信中断判断时间参数T104的设置较大(约为49s左右)。初看,解决方案很简单:只要将T104时间常数改小(小于15s)即可。但事实却并非如此:VATECH公司在当初编程时,将T104设为不可修改的常数,没有向用户和VATECH公司北京的工程技术人员提供任何可以修改T104的界面和程序,必须通过VATECH公司奥地利总部的编程工程师才能修改。通过VATECH公司北京的工程技术人员与VATECH公司奥地利总部联系,答复为:无法修改。此方案被否。
通过对主备CPU冗余切换的逻辑程序RED_SWT.GPS进一步的研究和分析,我们构思了一套创新的方案:采用一种新的网卡通信状态即时判断(脉冲判断)和CPU即时切换机制。具体介绍如下:
如图1所示:我们在监控网络中不同地点的交换机上增加2套冗余的实时网络通讯状态监测装置,分别同时向4台机组的现地控制LCU发送2路周期为1s的脉冲信号,作为监测机组LCU网卡工作是否正常的信号源。
图1
4台机组LCU的主备CPU通过各自的网卡同时接收来自2台监测装置的脉冲信号,并将其送入主备CPU冗余切换的逻辑程序RED_SWT.GPS的相关模块(需新加更新)用于监测判断其网卡通信状态是否正常,当2路脉冲信号均丢失时,则即时判断该网卡通信中断。
基于上述构思,我们相应地对主备CPU冗余切换的逻辑程序RED_SWT.GPS中的相关模块进行了更新设计,具体如下:
设计原则:在原来仅通过104规约判断机制来测定网卡健康值的基础上,增加通过检测来自外部冗余的网络通信检测装置的2路脉冲信号来即时测定健康值的逻辑,并将通过104规约判断机制测定的网卡健康值和通过检测2路脉冲测定的网卡健康值之和作为网卡的总健康值,参与主备CPU的切换逻辑运算,以实现快速切换。
设计更新后的相关逻辑共有4个,具体分别说明如下:
(1)脉冲检测逻辑,其中GB_PULS1为来自于网络通信监测装置1的脉冲信号,GB_PULS2为来自于网络通信监测装置2的脉冲信号。
其逻辑功能是:当2路脉冲信号同时丢失超过5s,则立即判网卡通信中断(LBX_PULSE_FAULT输出信号跃变为高电平)。具体介绍如下:
当GB_PULS1和GB_PULS2两路周期为1s的脉冲信号均正常时,4个延时为5s的延时器输出均为低电平,通过随后的“或”、“与”运算后,LBX_PULSE_FAULT信号也为低电平(表示网卡工作正常);
当GB_PULS1和GB_PULS2两路周期为1s的脉冲信号1路正常,另1路丢失(相应的端口电平表现为持续高或持续低)超过5s,通过后续相应的2个延时为5s的延时器和“或”运算后,输出电平分别为一高一低,再通过“与”运算后,LBX_PULSE_FAULT信号也仍为低电平(表示网卡工作正常);
当GB_PULS1和GB_PULS2两路周期为1s的脉冲信号均丢失(相应的端口电平表现为持续高或持续低)超过5s时,通过后续相应的2个延时为5s的延时器和“或”运算后,输出电平全为为高电平,再通过“与”运算后,LBX_PULSE_FAULT信号为高电平(表示网卡通信中断)。
(2)网卡健康值计算逻辑以及切换闭锁逻辑
其逻辑功能为:完成当前主用CPU的网卡健康值逻辑计算和切换闭锁逻辑的任务。具体介绍如下:
当LBX_PULSE_FAULT信号为高电平后会触发切换命令LBC_CPU_SWITCH,LBC_CPU_SWITCH命令表明当前主用CPU的网卡工作不正常,需要进行切换,将此信号和当前主用、备用CPU的状态信号GB-_C2_ACT、GB-_C4_ACT进行逻辑“与”运算之后触发激活备用CPU命令LBC_C2_ACT、LBC_C4_ACT,该命令通过MUX模块将健康值32768累加到当前主用网卡健康值上,产生当前主用网卡健康值中间变量LA_C2_128_PRIORITY、LA_C4_128_PRIORITY,将该健康值送往逻辑用以判断CPU的健康状态。
另外,LBC_CPU_SWITCH命令还通过R-S(置位复位)触发器确保在120s内不会被再次触发,即在120s内将会闭锁再次切换。此功能是为了防止CPU切换之后通讯没有稳定造成的CPU频繁切换。
(3)CPU总健康值计算及比较逻辑
其逻辑功能为:完成主备CPU的总健康值计算及比较逻辑的任务。具体介绍如下:
CPU的健康值由三部分组成:CPU本身健康值(LA_Res_C2或LA_Res_C4)+网卡健康值(LA_C2_128_PRIORITY或LA_C4_128_PRIORITY)+外围板健康值(LA_Res_C2_MPE1、LA_Res_C2_MPE2、LA_Res_C2_MPE3或LA_Res_C4_MPE1、LA_Res_C4_MPE2、LA_Res_C4_MPE3)。
正常情况下,在没有故障的时候,主用CPU和备用CPU健康值都为0(健康值越小越好,说明没有故障,健康值会随着故障程度的增加而增加),所带外围版健康值也相同。如果主用CPU所带网卡健康值LA_C2_128_PRIORITY、LA_C4_128_PRIORITY因为通讯故障而增大,经过“和”运算后,主用CPU的总健康值也会增大,与备用CPU的总健康值经过COMPARATOR模块进行比较,并经过防抖滤波之后产生激活备用CPU的命令LB-_activate_C2、LB-_activate_C4。如果两个CPU健康值相同,则激活当前CPU保持命令LB-_keep_CPU。
(4)最终主备CPU切换命令出口逻辑
其逻辑功能为:完成对主备CPU进行切换的任务。具体介绍如下:
当有切换命令LB-_activate_C2、LB-_activate_C4或者保持信号LB-_keep_CPU,将会产生CPU激活命令GB-_C2_ACTIVE_C、GB-_C2_ACTIVE_C,从而完成最终主备CPU的切换或者保持当前主用CPU的工作状态。
对本方案可靠性的分析:
本方案的核心是通过快速判断送往主用CPU网卡的两路脉冲信号的同时丢失来实现对主备CPU的快速切换。我们分析认为:以下几种情况会导致送往主用CPU网卡的两路脉冲信号的同时丢失:
1)2套网络通信监测装置同时下电检修
2)2套网络通信监测装置本体同时故障
3)2套网络通信监测装置的网卡同时故障
4)1套网络通信监测装置本体故障另外1套下电检修
5)1套网络通信监测装置本体故障另外1套网卡故障
6)1套网络通信监测装置下电检修另外1套网卡故障
7)机组LCU主用CPU网卡故障,通信中断。
我们认为,1)、2)、3)、4)、5)、6)出现的概率非常低,这种小概率事件可以忽略不计。因此在正常情况下,只要送往主用CPU网卡的两路脉冲信号同时丢失,我们可以判定是机组LCU主用CPU网卡故障,通信中断,从而进行正常切换。
再者,我们还设计了将网络通信监测装置的故障信号实时上送到监控系统的上位机。即使出现极端的情况:上述、2)、3)、4)、5)、6)几种状况万一出现,运行人员也能及时从监控系统的上位机读到该故障信息,从而进行人工干预,以避免频繁切换事件的发生。因此,本方案的可靠性是极高的。
所以,我们确信:采用这一新的方案,可以有效的实现我们的目标:当主用CPU的网卡通信中断时,可以实现主备CPU的快速切换。
(1)将一号机组LCU主备CPU的网卡SM-2554升级为新网卡SM-2556,并在相关数据库里面完成相应的参数更新。
(2)进行多次重复开机试验,观察:是否会产生更换网卡之前的异常切换现象。结果:重复开机二十几次,均未发生异常切换现象,且与各系统通讯也均正常。
(3)进行两个星期的正常开停机观测,结果:均未发生异常切换现象,且与各系统通讯也均正常。
(4)更换二号机组网卡,重复上述试验,结果:均未发生异常切换现象,且与各系统通讯也均正常。
(5)对一、二号机组进行半年时间的监测,结果:均未发生异常切换现象,且与各系统通讯也均正常。
(6)将三、四号机组网卡全部更新为SM-2556,重复上述试验和监测,结果:均未发生异常切换现象,且与各系统通讯也均正常。
(1)在中控楼公用LCU7现地控制柜内安装第一套网络通信监测装置AMC1703(以下简称一号监测装置),硬件配置为:双CPU、双网卡和双电源。
(2)在地下公用控制LCU5现地控制柜内安装第二套网络通信监测装置AMC1703(以下简称二号监测装置),硬件配置为:双CPU、双网卡和双电源。
(3)编写上述逻辑程序模块并下载,对原来的冗余CPU主备切换控制逻辑程序RED_SWT.GPS进行更新。
(4)进行网络通信故障模拟试验
分别对4台机进行了网络通信故障模拟试验,以验证所实施方案的有效性和可靠性。
模拟方式为:拔掉机组LCU主用CPU网卡的网线、一套网络通信监测装置下电、网络通信监测装置同时下电。以下是试验结果:
1)拔掉机组LCU主用CPU网卡网线模拟主用CPU网卡故障。试验记录见表1:
表1 模拟主用CPU网卡故障
表1试验数据表明:采用新的网卡通信状态即时判断(脉冲判断)和CPU即时切换机制之后,主备CPU切换时间大幅度缩短,从原来的接近1min缩短到8s之内。且所有切换均平稳快速完成,从未发生因切换造成机组开机流程超时而导致开机启动失败或者停机现象。
2)将一套网络通信监测装置下电,模拟一路脉冲信号丢失。试验记录见表2:
表2 模拟一套网络通信监测装置故障
表2试验数据表明:当一套网络通信监测装置发生故障时,不会导致机组CPU误切换。
3)将两套网络通信监测装置同时下电,1min之后再上电。模拟两路脉冲信号同时丢失,1min后再恢复。试验记录见表3:
表3 模拟两路脉冲信号同时丢失,1min后再恢复
以上试验数据表明:当两套监测装置同时故障后,机组CPU能正确切换,并且在120s内不会发生二次切换,避免了主备CPU在短时间内的频繁切换。
本项目对华东桐柏抽水蓄能电厂4台抽蓄机组在发电、抽水启动过程中,频繁出现的机组LCU的主备CPU异常切换,且切换不成功,导致机组开机启动失败的原因进行了研究和分析并阐述了解决方案的研究制定和实施、验证。
通过试验验证和实际运行检验,本项目的研究是成功的,取得了理想的效果,有效地提高了桐柏电厂抽蓄机组的安全稳定运行水平和电厂的安全、经济考核指标。研究成果对其他同类电厂也具有较强的借鉴意义。