一种IEC103主子站协议的双重引擎驱动的通用处理方法及系统
技术领域
本发明应用于电力系统调度自动化领域,抽象目前国内主流的各种基于IEC103的故障信息系统的协议,提出通用的可以统一处理的实现方法,解决故障信息子站在国内应用的协议处理屏障。
背景技术
由于故障信息系统在国内发展的不均衡,目前一直没有统一的主子站协议规范。作为IEC61850获得推广实现前的过渡方案,各地均以IEC103协议作为主子站传输的应用层规范,并且根据各地对于故障信息系统的理解以及当地的故障信息系统建设水平做了各种扩展或裁减。另外由于各地电力通信网络建设的起步不一样,先后又出现了不面向联结的问答式通信链路和面向联结的基于IEC104的主动式通信链路。由于这些不同的应用层的扩展和链路层的搭配,国内目前的主子站协议有数十种之多,甚至同一个省份的地调、中调、网调就是完全不同的协议,对于企业生产统一的子站产品造成了很大的障碍。同时开发和维护不同的软件产品,培养熟悉各地协议的工程师对于企业是一个很大的负担。
发明内容
为了解决现有技术中存在的上述问题,本发明提出了一种通用的故障信息系统子站的服务端的基于面向对象编程(OOP)的实现方法,包含应用数据处理和链路处理。该方法在应用上基于故障信息系统子站的功能模块,面向目前国内统一使用的IEC103协议的数据族建模;在链路上使用定时器/消息驱动机制,解决了对主从式和平衡式两种链路的统一支持。使用该方法可以封装链路和协议层的差异,推出基于功能模型的子站处理方案,使得工程服务人员可以用唯一的系统统一处理目前国内电力网络的各个区域的各种主子站协议,达到简化二次开发、提高现场服务效率的目的。
根据本发明的一个方面,提出了一种IEC103主子站协议的双重引擎驱动的通用处理方法,采用广义的服务器端OOP业务模式和关联的实现方式,用于统一处理电力网络基于IEC103主子站协议的故障信息系统,该方法包括:
a)抽象各种区域的电力网络故障信息系统IEC103主子站协议的应用层,在业务层开放一个驱动引擎的接口给链路层,链路层根据链路的特点驱动业务引擎,使得业务层可以获得统一的基于IEC103的数据族;
b)抽象各种区域的电力网络故障信息系统IEC103主子站协议的具体链路层,所有业务模块平行处理,处理结果打包成IEC103协议的统一的ASDU数据族,存入缓存的数据区域,对应用层的各种业务处理和数据流的维护实施分离;
c)作为统一IEC103主子站协议的前提,在b)的基础上再次抽象建立的统一的与IEC103业务层交互的通用链路;
d)重构业务层和数据链路传输层的关联,采用一个递归的双重驱动引擎作为衔接前面处理的接口,业务驱动引擎负责根据业务要求,按照优先级和命令要求递交数据,同时递交数据的速度和窗口递归自链路的处理结果。
根据本发明的另一方面,上述步骤a)进一步包括:
在实现该方法时,以预编译方式解决基于多CPU的IEC103业务方案和基于单CPU的IEC103业务方案的统一问题。
根据本发明的另一方面,上述步骤b)进一步包括:
在统一各种链路时抽象出的故障信息系统IEC103链路的属性集合,包括增强型链路、严格型链路。
根据本发明的另一方面,上述步骤d)进一步包括:
为实现高效的双重驱动的通用驱动引擎接口,采用递归驱动的实现方法。
根据本发明的另一方面,提出了一种IEC103主子站协议的双重引擎驱动的通用处理系统,用于统一处理电力网络基于IEC103主子站协议的通用故障信息系统,包括如下模块:
1)通用链路处理模块,用于统一基于问答式和基于主动上送式的具体链路传输,该模块具有链路解析接口和链路发送/窗口控制接口;
2)通用业务处理模块,用于针对故障信息系统的实际业务对象建模,协调处理主站的实际业务流程,控制子站的应用数据的优先级别;
3)IEC103应用层统一转换模块,用于对来自主站下发的各种格式和版本的IEC103协议的数据应用层进行统一转换,抽象后转换为通用业务处理模块所能识别的通用的业务模块数据族,并对通用业务处理模块的处理结果进行转换,转换为具体的IEC103协议的应用层数据;
4)双重驱动引擎接口模块,该模块同时和链路层与应用层接口,一方面接收来自通用业务处理模块按照业务指派来的IEC103协议的应用层数据报文给链路层封装发送,一方面把来自链路层的发送情况和当前窗口情况再反馈给应用层,达到业务处理和链路处理的平衡,均衡链路的处理能力和业务的优先级。
根据本发明的另一方面,所述通用链路处理模块中,链路解析接口用于处理来自主站的报文数据,并将处理后的数据传递给IEC103应用层统一转换模块,链路发送/窗口控制接口作为与双重驱动引擎接口模块的接口,负责对双重驱动引擎传递过来的数据进行链路封装然后发送,并把链路当前的窗口情况传递回双重驱动引擎;
根据本发明的另一方面,所述通用业务处理模块针对故障信息系统的实际业务对象建模,包括变电站模型召唤业务、故障动作信息收集业务、定值维护业务等。
本发明具体采用以下技术方案:
作为一种实现各种基于IEC103的电力故障信息系统子站的通用解决方法,其特征在于抽象各种故障信息系统子站协议族,拆分为完全独立的链路层和应用层,并设计一个全新的、统一的方法来重新连接这两个层次。所述方法包括以下步骤:
(1)第一步,解决链路层报文收发的统一问题。本发明方案以驱动的方法来解决链路层的不同模式问题。目前在网运行的故障信息系统IEC103主子站协议,根据链路方式区分,有主从的问答式和平衡的主动上送式之分。这两种链路的主动权一个在主站,一个是主站和子站均衡。传统方式下子站必须分别开发两套整体的系统来解决各自的模式,从而导致应用层功能的重复开发。本发明针对链路层和应用层的交互入手,把目前这两种截然不同的主子站链路机制从作为业务的驱动引擎这一角度做了统一。业务层开放一个驱动引擎的接口给链路层,链路层根据实际链路的特点驱动这一业务引擎,就实现了业务和传输,对应于协议也就是应用和链路的彻底分离,这是本发明统一目前国内各种模式的IEC103主子站协议的构架基础。通过该步骤,业务层可以获得统一的基于IEC103的数据族。
(2)第二步,从业务应用上统一各种版本的基于IEC103的故障信息系统协议族。以步骤1的处理为开始,本发明在协议处理上就摈弃了传统的报文驱动的模式,在设计上采用了面向对象的业务处理机制。对于各种版本的故障信息系统的传输协议,在业务层次上,抽象出统一的业务模块,即变电站模型同步部分、设备模型数据解析交互部分、子站数据维护部分。所有业务模块平行处理,处理结果打包成IEC103协议的统一的ASDU数据族,存入缓存的数据区域。
针对缓存的数据区域,本发明使用了双向链表的数据结构,支持按照优先级别的随机访问(存储顺序无关)。使用了按照级别访问应用服务数据单元(ASDU)数据结构的方法,配合以双向链表自身数据链的灵活性,把应用层的各种业务处理和数据流的维护实施了分离,使得针对各种业务的扩展有统一性,提高了代码的可维护性。本发明定义的全面的基于IEC103协议的各种业务方案和双向链表的数据结构是统一故障信息系统IEC103协议的数据解决基础。
(3)第三步,重构业务层和数据链路传输层的关联,设计了一个递归的双重驱动引擎作为衔接前两步处理的接口。问答式链路在协议上是以主站的循环二级数据访问和加速的一级数据获取驱动数据交互的,其数据窗口为1,上送过程受主站的访问时间间隔控制。而平衡式链路是以子站对突发数据的主动递交为交互的基础,数据发送的驱动在于子站服务器端自主判断的待递交的数据量。其链路数据窗口受链路预置参数的限制,上送过程以窗口是否满为限制。为此设计了一个递归的业务驱动引擎,业务驱动引擎负责根据业务要求,按照优先级和命令要求递交数据,同时递交数据的速度和窗口递归自链路的处理结果。以使得数据的传送既不单独被应用层驱动,也不单独由链路驱动,而是在应用层和链路层双重的交互控制下工作,既可以最快的发起数据传输,又不会在链路上造成拥堵。该引擎是本发明统一目前故障信息IEC103主子站协议链路的技术核心。
附图说明
下面结合附图及具体实施例对本发明再作进一步详细的说明。
图1是基于本方法构建的故障信息系统的模块组织结构;
图2是本方法的实现流程图;
具体实施方式
在模块组织上,如附图1所示。本方法构建的故障信息系统可以分为4个模块组织:
1)通用链路处理模块,该模块负责统一无论是基于问答式的还是基于主动上送式的具体链路传输。来自主站的报文数据经该层的“链路解析接口”处理后,剥离了具体的链路特征,只保留IEC103协议的应用层,传递给模块3,即应用层统一转换模块;同时该模块还有一个“链路发送/窗口控制接口”,作为与双重驱动引擎接口模块的接口,负责对双重驱动引擎传递过来的数据进行链路封装然后发送,并把链路当前的窗口情况传递回双重驱动引擎。
2)通用业务处理模块,该模块针对故障信息系统的实际业务对象建模,如变电站模型召唤业务、故障动作信息收集业务、定值维护业务等,是对各种具体的IEC103规约在业务上的抽象与统一。它负责协调处理主站的实际业务流程,控制子站的应用数据的优先级别,即根据通用的业务数据模块决定具体的IEC103应用层数据与双重驱动引擎模块的交互。
3)IEC103应用层统一转换模块,该模块负责对来自主站下发的各种格式和版本的IEC103协议的数据应用层进行统一转换,抽象后转换为模块2)所能识别的通用的业务模块数据族;也负责对业务处理模块的处理结果进行转换,转换为具体的IEC103协议的应用层数据。
4)双重驱动引擎接口模块,该模块同时和链路层与应用层接口,一方面接收来自通用业务处理模块按照业务指派来的IEC103协议的应用层数据报文给链路层封装发送,一方面把来自链路层的发送情况和当前窗口情况再反馈给应用层,达到业务处理和链路处理的平衡,均衡链路的处理能力和业务的优先级。
下面从具体实施方法上阐述附图1。首先建立变电站模型,即图中所示的“通用的IEC103业务模块数据族”。该数据族是根据站内待接入的智能设备的信息建立的变电站的模型,包括一次设备和二次设备的信息以及之间的关联关系,所统一抽象出来的。子站维护全站设备的模型,但是针对各级调度,如网调、中调、地调,有独立的模型文件,允许各级调度有层次、有级别的管理和访问站内设备。根据通信要求,设置通信参数,包括主子站协议使用的地区版本识别码。通信参数针对目前的电网管理情况,各级调度配置独立的服务端伺服任务管理数据传输,各个彼此独立的服务终端关联各自独立的数据模型。子站端启动时,根据模型文件依次完成业务层和链路层的初始化。业务层建立针对ASDU的双向数据链表,包括服务端数据链表和客户端命令链表,管理业务数据。链路层建立针对链路方式的报文队列,管理带有链路封装的数据报文。队列的深度和单元大小是根据链路方式和运行的地区版本自动调整的,以防止国内繁多的主子站协议版本导致子站配置复杂化。
附图1中的链路处理模块中,完成初始化的子站实现业务和链路的分离。链路专注于管理与客户端的通信,对于链路层次的通信,不必与业务层交互独立完成。接收到客户端带有ASDU的数据报时,由业务端开放的ASDU递交接口传递给业务层处理。以上的实施是实现各种基于IEC103的故障信息主子站协议统一的前提,由于各种版本的协议虽然有链路和应用层各种组合的复杂搭配,但都基于IEC103的ASDU。因此在实现了链路统一的基础上,需要剥离出ASDU在形态上的差异,使业务层的转动以高于ASDU具体形式的方式运行。本发明把各种ASDU的具体封装作为静态的资源文件独立出去,业务层在运转中根据当前业务的地区版本识别码把各种ASDU转换为统一的内部业务数据结构,在业务处理完后再把需要递交的数据根据地区版本封装成具体的ASDU,从而一次开发只需完成业务内核,二次开发简化到具体对ASDU的封装。在链路层已经完成统一的基础上,就完成了对整个故障信息IEC103主子站协议数据从ASDU到链路数据报文的统一封装。
主站发起的命令传输过程,从响应的实时要求上有两种。一种是可以实时响应的命令,例如模型召唤,我们称之为实时命令。一种是子站需要从智能设备获取从而有准备时间的命令。例如智能设备定值的获取,我们称之为过程命令。问答式链路和平衡式链路对这两种命令有不同的协议跟踪机制,为了使得应用层的处理不受这种协议机制的约束,我们使用了这两种协议机制最终面向的目标,即附图1中的通用业务处理模块来控制事件的发展,从而可以由统一的业务驱动引擎加以解决。在问答式链路以二级数据轮询,或者平衡式链路无数据可送的空闲态,业务驱动引擎会保持对过程命令的跟踪,一旦过程命令超时或者返回结果都能立即响应。对于主站同时下发的多个命令,也由业务驱动引擎进行逐条执行。
具体到双重驱动引擎方法的流程,可以简化为附图2所示的流程图。问答式的链路在主站无ASDU发布且子站无数据递交的形式下,以二级数据的轮询保持链路的运作驱动通信的运转。平衡式链路在这种情况下,仅以定时的测试帧维持链路。统一后的公共链路模块则不以链路驱动,而是以业务驱动引擎推动数据链路的通信。业务层的开发使用了目前主流的消息驱动机制,保持对业务数据准备的实时性。当问答式链路收到主站的查询请求时,即触发双重驱动引擎接口,获得准备好的数据后,完成链路的封装并响应。对于平衡式链路,则一旦数据准备好就立即触发双重驱动引擎。二者递交数据的接口以可用窗口数目返回,如果有窗口未闭合,可以持续处理数据,一旦所有的窗口闭合,则停止递交,直到有新的窗口打开为止。
结合流程图来具体说明。
1)当子站服务端业务层有自发数据需要传送,或者主站命令要访问的数据准备好后,我们可以统称为有业务数据待处理,此时即分别由触发点进入双重驱动引擎的开始点。
2)双重引擎驱动模块检测各种应用业务,看是否有待处理的当前业务,没有的话进入6,如果有的话,就进入3。
3)调用通用业务处理模块处理,然后检测是否有业务处理模块产生的ASDU链表。
4)如果ASDU链表非空,即递交ASDU数据给链路层,进入5,否则递归进入1,重新进入驱动引擎。
5)链路层封装ASDU数据并发送,发送时检测链路窗口大小。如果窗口已经闭合,则进入6结束,否则的话,递归进入1。
6)结束驱动引擎,让出处理器资源。
虽然本发明已经详细的示出并描述了一个相关且特定的实施范例参考,但本领域的技术人员应该能够理解,在不背离本发明的精神和范围内可以在形式上和细节上作出各种改变。这些改变都将落入本发明的权利要求所要求保护的范围。