韩 悦,张 文,马全霞,李娟娟,信亚磊
(许继电气股份有限公司,河南 许昌 461000)
在电力系统变电站自动化技术领域,多CPU协同控制技术已经得到了广泛的应用,为了保证数据通信的实时性和可靠性,各CPU之间主要通过以太网进行通信。同时以太网通讯技术广泛应用于现代社会生产生活的各个环节,通过专用网络设备配合交换机、路由器等能够对外部通信接口的各种正常和异常数据进行全面的测试和验证。继电保护装置调试口和应用网口分离,硬件回路、协议栈在设计上实现分离,提供给应用的有站控层接口和过程层接口,满足站控层网络和过程层网络的冗余要求。其中装置调试口既是管理CPU的调试口,也可以通过该调试口实现对各个CPU板卡的访问需求,板卡之间的网卡点对点连接。在各种工程应用中,由于运行环境复杂、内部通信数据通过总线直连,对内部数据验收不充分,实际运行中就会出现各类小概率事件,无法有效的进行问题分析和排查,关键的保护装置在内部数据处理错误时,可能会导致死机、响应能力变差等功能异常,给电网的运行安全带来隐患。
对于多CPU内部通信测试,本文针对继电保护装置的内部CPU之间的数据通信,开发了一种真实高效的测试方法,设置专用内部检测模块,加载在各CPU程序运行模块中,该检测模块能够在不影响各CPU其他功能的情况下,对实际工程应用的各种正常和异常数据处理能力进行充分验证,不会对正常运行的其他数据造成任何干扰,可以保证继电保护装置在各种运行环境下数据交互的可靠性,提高设备抗干扰和异常处理性能。
智能变电站保护装置通常采用分层、模块化的嵌入式平台架构设计原则,主要分为硬件、软件平台和应用三层。硬件层有处理器、通信接口等通用模块组成,能根据不同需求进行配置;软件平台模块有硬件驱动、嵌入式操作系统、功能块库等组成;其中功能块库为应用程序提供人机接口、通信类等功能块,为开发人员调用;应用层是一个图形化的应用开发环境,提供设置、编译和在线调试等所需功能。
结合实际的嵌入式平台架构并针对智能变电站继电保护装置内部通信特点,设计了一个检测模块,嵌入到软件平台内部,通过它可以在不同的互联CPU板卡之间实现实时网络报文交换。
检测模块抽象、隐藏了各种板卡以及链路链接端口的多样性,应用程序仅需知道通讯对端的CPU板卡ID,以及建立通讯的报文类型,就可以和目标板卡对应报文类型的应用程序建立点对点通讯,不用关心板子间的链路层、物理层等底层实现以及联网关系。
检测模块通讯服务承载于以太网链路层之上,和TCP/IP通讯共享以太网接口,通过使用不同的以太网报文类型来实现数据分流,和TCP/IP之间互不影响,没有耦合。TCP/IP主要是用于板子和外部进行通讯,如和各种后台、各种调试工具之间的通讯等。检测模块是设计在程序内部的私有通讯服务模块,TCP/IP协议栈各种运行状态,对装置内部基于检测模块之上的通讯不会产生任何影响,如图1所示。
图1 以太网通讯数据流示意图
在检测模块内部设计一个ID表,类似于交换机内部的MAC表,用于记录不同ID的板卡所在的通讯接口,该表是在系统初始化时创建的,工作机制和交换机的MAC表相同。
通讯报文类型为16位数,类似于TCP/IP中的端口,CPU之间的应用程序如果需要进行通讯,需指定相同的报文类型,即两端的程序必须在相同的端口号上收发数据。发送报文可以指定优先级,优先级定义为0~3,其中优先级0最低。优先级高的报文会被优先发送、转发和处理;优先级高会抢占优先级低的报文的处理流程,从而保证实时性高的报文的通讯需求。
检测模块设置TTL参数,根据需求缺省值设置为4,报文被转发一次,其生成周期会减1,变为0时如果还没有到达目标板卡,报文会被丢弃,从而避免了风暴是回环报文的形成。
检测模块内部传输层报文头记录目标板卡ID、源板卡ID、TTL、报文类型、报文优先级等信息。链路层头部记录目的MAC地址、源MAC地址等信息。检测模块报文结构如图2所示。
图2 检测模块报文结构示意图
多CPU板卡内部通信均是通过背板直连,CPU间的内部交互通过专用数据表进行交互,通过调试工具对测试状态进行控制和设置。设置在CPU内部的专用检测模块能够根据不同应用下的数据结构,自动识别内存数据区,从而按照测试需要对各CPU的通信交互数据进行修改,不会对正常运行的其他数据造成任何干扰。
CPU专用检测模块由调试工具进行使能,能够重新初始化各种内部数据以及网络接口,网络连接方式等,每个CPU检测模块对收发到的数据进行拷贝,然后根据调试工具预设后的数据进行替换,最后传递给调用接口进行发送。如图3为一个管理CPU、两个应用CPU的典型应用结构。
图3 各CPU内部通信图
各CPU通过管理CPU进行统一控制,通过对外通信接口与PC端专用调试工具进行连接,测试时通过专用调试工具对各CPU内部通信数据进行修改和验证。专用调试工具通过加载检测模块对应程序获取内部CPU号识别板卡信息,根据起始函数和全局数据表识别具体数据字段。每个CPU具备唯一的ID,每个管理CPU最多可以管理8个应用CPU板。每个应用CPU板可以处理32种报文类型,发送报文时可以指定其优先级,两个板卡之间通过订阅的报文类型和通信端口进行数据收发。
检测模块由软件平台负责初始化,相关接口不开放给应用层,应用层看到的是一个已经可用的通讯系统。该模块提供了两组应用层可用的API(Application Programming Interface)接口,分为基于回调模式的接口和基于句柄模式的接口,两者接收报文的机制不同。
基于回调模式的API。当本地收到报文后,对于已注册处理函数的报文类型,其处理函数会被直接调用,这样做的优点就是能以最快的速度完成报文的接收处理,适合对实时性有很高要求报文处理。
基于句柄模式的API。该模式的API基于回调模式的API工作,每创建一个句柄会添加一个对应类型报文处理函数回调接口,收到报文时回调接口把报文取出放到句柄对应的报文缓冲区中,然后应用程序可以从缓冲区把数据取走。
两种通讯模式的选择。基于回调模式处理的报文主要用于实时性能要求比较高的场合。回调函数要求要有尽量少的处理时间,否则会影响相同优先级后续报文的处理。由于目前采用的CPU一般已经比较强劲,这个过程几乎可以忽略不计,报文处理的实时性主要取决于调用这些接口的任务优先级以及报文创建时的指定的报文优先级,基于句柄的报文传输基本上能够满足大部分环境实时报文交互的需求。这种工作模式由于每个创建的句柄都有独立的缓冲区,所以相同优先级的报文不会相互影响。
检测模块对CPU间的应用数据进行控制,模拟各种应用工况下各CPU对数据处理的正确性。正常情况下测试各CPU间的心跳报文、突发机制、状态数据和非状态数据等,异常情况下测试数据风暴、写字段被误改、连接状态不稳定等。在正常测试时,各CPU应能正确处理交互信息并进行存储应用,在异常测试时,各CPU应能对异常数据进行正确识别,不影响正常通信数据,同时不出现误发信号或误存储的情况。
为了保证数据处理的快速和高效,多CPU通信数据仅设置了两种类型,一种为状态量,一种为非状态量,两者的通信上送方式不同,状态量数据需要在变化时突发,非状态量数据为定时发送。状态量数据变位时连发3次,间隔2 ms,正常时的心跳报文间隔为5 s,非状态量数据的发送间隔根据实际应用情况进行控制。
双CPU交互状态量通过数据表进行交互。在无变化时,检测模块定时(5 s)发送数据把要发送的状态量状态刷新到数据表,发送接口检测到数据表变化时突发3次数据;检测模块接收到另一块CPU发送的数据后,把数据刷新到数据表,后续保护装置的应用在数据表获取数据。
双CPU交互非状态量数据功能由检测模块通过两个元件完成,一个元件为数据发送元件,一个元件为数据接收元件。数据发送元件定时发送数据给另一块CPU,时间间隔通过元件的属性进行设置,属性为空,则认为间隔为0;数据接收元件连续获取另一块CPU的数据,刷新到数据表。
通信异常判断是通过元件接收数据量进行判别,CPU在接收元件连续10 s未收到对端CPU的数据且无心跳报文时,置通信异常标志,收到报文后立即返回。
多CPU内部通信的数据处理,存在两个特征,一是在交互数据方面,内部通信数据仅在各板卡间进行交互,外部不可见;二是在空间和安全方面,各CPU通过背板直连,仅对通信数据内存进行安全高效处理,不会对CPU的其他功能和性能造成影响。
根据这两个特征,专用检测模块通过全局数据结构自动识别通信数据所属内存,对内存中所有通信数据进行实时控制和修改,从而按照测试需要对各CPU的通信交互数据的每个字段进行测试验证。
在实际应用过程中,理论上存在装置收到干扰后,数据被干扰导致误改或数据丢失的情况,所以需要对内部通信数据的每个字段进行正常和异常测试,保证在内部通信出现异常时,不影响保护装置的其他功能。
内部数据的收发测试是在发送CPU加载检测模块后,通过内部通信数据的结构体进行内存的自动解析和识别,确定每个数据字段定位对应的内存地址。
查看当前内存中的数据内容,同时记录修改前后的3组数据进行缓存,能够完成记录单次内存修改的数据。根据测试数据类型是否为状态量,状态量需要突发时按照2 ms间隔连续发送3帧测试数据,若为非开关量则按照设定的周期要求进行发送。接收CPU收到内部数据后,根据应用程序设定要求进行判别是否为需要的应用数据。当判定接收数据为需要的接收数据时,开始按照内部协议进行数据解析,同时将收到的数据刷新到应用数据表,接收CPU总接收数据统计进行累加。如果经过数据判别,数据类型或格式与需要的数据不一致,则丢弃该通信数据,错误统计累加,同时总接收帧数累加。如果接收到的数据为周期发送数据初步判别后属于需要数据时,总接收帧数累加,同时更新接收数据表中的数据。内部数据收发流程图如图4所示。
图4 内部数据收发流程图
以智能变电站线路保护装置为例,使用专用调试工具对双CPU内部通信状况、通信数据、通信中断闭锁及双CPU之间的通信机制进行测试。检查CPU之间的通信状况是否正常、通信数据是否正确、CPU异常导致发送中断后,是否会导致保护误动及CPU之间的通信机制是否符合设计。
检查双CPU之间的通信机制是否符合设计及通信状况是否正常。通过调试变量检查发送端发送计数与接收端接收计数是否一致,采用增量判断,统计10分钟内发送计数的增量与接收计数的增量差不超过1%。
首先使用专用调试工具同时连接CPU1和CPU2的平台程序,输入变量CExchange,该变量下面的RxdMsgCount为接收报文统计数据,TxdMsgCount为发送报文统计数据如图5所示。
图5 CPU变量收发数据
分别记录CPU1和CPU2当前的接收报文统计数据和发送报文统计数据;
10分钟后再次统计CPU1和CPU2的接收报文统计数据和发送报文统计数据。
计算10分钟内测试通信数据是否符合设计,查看10分钟后CPU1的接收报文数据增加是否与CPU2在10分钟内发送报文增加数据相等,CPU1在10分钟的发送报文是否与CPU2在10分钟内接收报文的增加数据相等。
将验证数据计入表1中,并对记录数据进行计算,10分钟后CPU1的接收报文数据增加(7 575-6 975=600),发送报文数据增加(7 557-6 958=599)。CPU2的接收报文数据增加(11 549-10 950=599),发送报文数据增加(11 783-11 183=600)。从计算结果可以得出结论:CPU1在10分钟内的接收报文数量等于CPU2在10分钟内的发送报文数量;CPU1在10分钟内的发送报文数量等于CPU2在10分钟内接收报文数量,经过验证可以看出双CPU之间的通信机制符合设计要求,发送端发送计数与接收端接收计数增量差相同及通信状况正常,满足10分钟内发送计数的增量与接收计数的增量差不超过1%的要求。若10分钟内CPU1接收报文数据与发送报文数据与CPU2数据增量不同,则说明CPU1和CPU2通信状态异常。
表1 10分钟内CPU1和CPU2接收/发送数据
检查当单个CPU异常导致发送中断后,是否会导致保护误动,验证该项目时可通过插拔CPU插件模拟单个CPU异常,验证通信中断闭锁正确性。
测试步骤如下:投入差动保护硬压板,差动保护软压板,差动保护控制字,变化量启动电流定值0.1 A,差动动作电流定值0.2 A,通道自环。两个CPU均正常运行,施加A相电流0.11 A,通过查看装置差动保护是否动作,检查装置是否可正常跳闸出口,验证通信中断闭锁功能正确性。
测试时,在保护CPU1与启动CPU2通信中断前后,分别模拟启动CPU2异常(如拔掉该插件),查看装置差动保护动作情况及装置是否跳闸出口;模拟保护CPU1异常,查看装置差动保护动作情况及装置跳闸出口是否异常。
拔掉CPU2插件,在CPU1报出CPU2通信中断前,施加A相电流0.11 A,测试正确结果应为CPU1报差动保护动作,CPU2应不启动跳闸,装置不应跳闸出口。
拔掉CPU2,在CPU1报出CPU2通信通断后,施加A相电流0.11 A,测试结果应为CPU1应报差动保护动作,测试正确结果应为CPU2不启动跳闸,装置不应跳闸出口。
拔掉CPU1,施加A相电流0.11 A,测试正确结果应为差动保护不动作,跳闸不出口。
若模拟以上测试项目的测试结果与上述结果不一致,则说明该装置通信中断闭锁功能有问题。正确测试结果如表2所示。
表2 通信中断闭锁测试
检查CPU之间的通信数据是否正确,通过修改一个CPU的数据,检查另外一个CPU对应的数据是否有效。下面以CPU1传给CPU2数据和CPU2传CPU1状态为例验证CPU之间数据通信正确性。
3.3.1 CPU1传给CPU2数据内容测试
CPU1传给CPU2数据主要用于CPU的启动逻辑判断,具体数据的内容如表3所示,CPU1传给CPU2数据测试步骤为:
1)修改CPU1的CT一次额定值为2 500 A,CT二次额定值为1 A,PT一次额定值220 kV,施加三相正常电压,1 A电流,查看CPU2的采样值,同时查看CPU2的录波文件中的采样数据是否正确。
2)修改突变量启动定值,施加电流突变量大于突变量启动定值,同时施加故障,查看保护跳闸是否出口。施加电流突变量小于突变量启动定值,同时施加故障,查看保护跳闸是否出口。
3)修改零序启动定值,施加零序电流大于零序启动定值,同时施加故障,查看保护跳闸是否出口。施加零序电流小于零序启动定值,同时施加故障,查看保护跳闸是否出口。
4)修改振荡闭锁过流定值,施加三相正序电流大于振荡闭锁过流定值,同时施加故障,查看保护跳闸是否出口。施加三相正序电流小于振荡闭锁过流定值,同时施加故障,查看保护跳闸是否出口。
5)修改过电压定值,施加相电压大于过电压定值,同时施加故障,查看保护跳闸是否出口。施加相电压小于过电压定值,同时施加故障,查看保护跳闸是否出口。
6)修改过压保护动作时间定值,施加相电压大于过电压定值,时间大于过压保护动作时间定值,查看装置是否启动;施加相电压大于过电压定值,时间小于过压保护动作时间定值,查看装置是否启动。
7)投入过压远跳保护,差动保护有效,施加远传1开入,查看装置是否收信启动,远传是否出口。
8)投入过负荷、过负荷跳闸,施加相电流大于过负荷定值,查看装置是否过负荷跳闸;施加相电流小于过负荷定值,查看装置是否过负荷跳闸。
9)投入重合闸,三相或单相启重合,单相跳位启重合闸,三相跳位启重合闸,采用跳位启重合闸,查看装置重合闸是否出口。
10)施加一相电流小于0.04 A,时间13 s,装置报出CT断线,查看装置零序电流是否启动。
由于以上测试项目数据较多,具体验证结果可通过专用调试工具查看。在此不再详述。
表3 CPU1传给CPU2数据内容
3.3.2 CPU2传给CPU1状态数据测试
CPU2传给CPU1的状态数据主要用于触发装置自检,如FLASH自检出错、开出击穿、开入击穿、开出断线、保护程序校验出错、通信中断等,此类功能对于装置异常重要,其中部分功能在装置运行中不易出现,验证该项目时可利用专用装置调试分析工具加载相应平台程序,通过修改变量,模拟平台自检位发生改变来验证CPU2传给CPU1状态数据的正确性以及装置自检功能正确性。模拟装置FLASH自检出错、保护程序校验出错等自检功能后,如图6所示,查看装置是否弹出装置故障报告,后台是否有装置故障报文,自检报文,运行是否灯灭。当装置出现自检出错时,说明装置装置已经有故障,装置运行灯应熄灭,相关自检出错报文在装置界面弹出,并将自检出错报文上送后台。
图6 CPU2传给CPU1状态数据
多CPU协同工作是常见的应用模式,对多CPU内部通信管理、数据异常处理需要进行充分验证,才能保证多CPU装置或系统的稳定运行。本文设计的在CPU内部设置的专用检测模块,不依赖外部设备,不改变原有接线布局,测试方法简单,可以模拟CPU间各类数据通信及对异常数据的处理,使用该专用检测模块能够及早发现和解决智能变电站相关产品在可靠性和长时间运行下可能存在的问题,改进了测试方法,提高了测试效率,保证了智能变电站继电保护装置的运行可靠性,在许继电气股份有限公司智能变电站继电保护产品的质量保障过程中发挥了重要作用。