网络文件系统在继电保护装置的研究及应用

2019-05-16 01:04杨智德郭亚楠陈献庆
自动化仪表 2019年2期
关键词:服务端客户端继电保护

杨智德,郭亚楠,陈献庆

(许继电气股份有限公司,河南 许昌 461000)

0 引言

随着变电站综合自动化技术的发展,电力系统对电力自动化设备,尤其是对继电保护装置的要求不断提高。因此,继电保护装置的功能不断增加,保护算法的不断改进,导致了其内部程序越来越庞大,所需存储和使用的数据量也越来越多。

但是继电保护装置存储空间十分有限。如何提高其数据复用率、提高有限空间的使用率一直是被广泛关注和研究的问题。现有的普遍做法是使用压缩格式对数据进行保存,或者及时删除过期数据以释放存储空间,但这都无法从根本上解决越来越大的数据存储量。

网络文件系统是一种分布式文件系统,其允许一个系统在网络上共享目录和文件,供远端无缝透明访问,从而实现资源使用最大化、占用空间最小化。对此,本文设计并实现了一种适用于继电保护装置的网络文件系统,为装置提供了在存储设备间进行文件共享访问的使用方式,有效降低了本地存储空间的使用,提高了数据的复用率。

1 总体架构

1.1 网络文件系统标准

目前,较为知名的网络文件系统是由Sun Microsystems公司定义的、被称为Sun的网络文件系统,或者简称为网络文件系统(network file system,NFS)。公司制定的NFS协议被收录进请求评议(request for comments,RFC)标准。该标准在整个计算机工业中已被广泛接受[1]。该公司提出NFS的目的是支持异构系统,使运行在不同操作系统和不同硬件上的文件可以共享。NFS采用了客户端和服务端协同工作的架构,将用户共享的数据保存在服务端,供客户端透明访问。

NFS迄今共发布了三个版本。其中:第一版NFSv2有较大的性能和安全缺陷;第二版NFSv3修正了版本一的缺陷,并提高了传输效率;第三版NFSv4支持服务器集群访问。

本文根据继电保护装置板卡间对共享数据并行访问少,对功能实现要求简单、可靠的特点,参考第二版标准进行网络文件系统的设计[2]。

1.2 总体架构

对于继电保护装置,从系统的角度看[3],网络文件系统与其他系统(例如YAFFS Flash文件系统、FAT32文件等)并无区别,都处于文件系统抽象层之下。

文件系统体系架构如图1所示。

图1 文件系统体系架构

文件系统通过抽象层向上层屏蔽了各个文件系统的区别,对外部应用程序只提供统一的标准文件系统接口,使各种文件系统对用户透明。而对于文件系统接入抽象层的部分,提供了基于前缀的设备注册管理机制,方便不同文件系统设备的注册。例如网络文件系统,使用“nfs”作为前缀。如果应用传送的路径以“nfs”为前缀,则会调用网络文件系统进行处理。

NFSv3标准中规定了网络文件系统是基于远程过程调用(remote procedure call,RPC)实现的,具备挂接、端口映射、外部数据表示、认证等功能,并规定了22个过程函数,从而实现客户端对远程服务端文件的访问[4-5]。但是标准制定是针对Linux操作系统的,有些功能并不适用于继电保护装置,例如认证功能和端口映射功能。装置板卡间通信无需进行权限认证,同时文件访问端口可固定,无需端口映射功能。所以在实现时,针对实际应用场景对标准规定的某些功能进行了裁剪、增加和优化,在减少了代码量的同时也提高了通信效率,使其适用于继电保护装置。

网络文件系统总体架构如图2所示。

图2 网络文件系统架构

网络文件系统采用的是客户端/服务端的架构,所有的请求都由客户端发起,通过网络通信模块进行传输,客户端主要完成的工作如下。

①通过客户端挂接模块发起挂接请求,将服务端开放共享的文件夹路径挂接到本地目录。

②挂接完成后,可通过客户端操作处理模块对共享目录下的文件或文件夹进行操作。

服务端的功能主要是接收并响应客户端的请求。

①通过服务端挂接模块,将客户端请求的服务端本地允许共享的文件夹发送给客户端。

②接收客户端的操作,通过服务端操作处理模块完成操作处理,并将结果返回给客户端。

客户端和服务端的请求和回复离不开外部数据表示模块和网络通信模块。外部数据表示模块主要是对发送的数据进行编码,对接收的数据进行解码。这样做的目的是对不同板卡间的数据类型进行抽象和统一,使网络文件系统能够满足不同硬件平台的需要,提高系统通用性。网络通信模块主要实现了数据的可靠传输,重传机制、超时机制、接收监听都是在此模块进行规定和设计的。日志模块会生成日志文件,其系统记录了客户端和服务端对某些文件的某种操作和操作结果,并生成相关的错误信息供用户或开发人员查阅。日志文件是简单的文本文件,可直接阅读。

2 系统实现

网络文件系统客户端主要实现封装并发送操作请求,以及接收并解析返回结果的功能。服务端主要实现接收并解析请求信息,以及封装并向客户端返回操作结果的功能。根据图2的系统总体架构,可按照模块逐个实现。

2.1 挂接模块

挂接操作是网络文件系统运行首先要进行的必要步骤,即将服务端的文件夹目录读取到客户端本地,供后续操作。

挂接操作实质上是获取服务端提供的根文件句柄的过程。文件句柄是网络文件系统中的一个重要概念,用来引用服务器上的一个文件或目录。它是由服务端创建并传递给客户端的。客户端访问文件时,使用对应的文件句柄进行访问[6-9]。文件句柄的内容只对服务端有意义。保护装置的句柄生成方案是在使用时开辟全局存储句柄的空间,将存储的地址作为文件句柄使用,这样既可保证句柄的唯一性,又提高了使用句柄时的查找效率。

客户端提供了挂载文件系统、返回所有被挂载的文件系统的列表、卸载文件系统、结束对服务器目录的挂载、列出服务端所有可以挂载的文件系统、卸载所有挂载项这6项功能。相应地,服务端提供与这6项服务函数对应的请求,并进行相应的处理。一次服务端处理挂接的完整过程主要经过以下3个步骤。

①服务端监听客户端发送的挂接请求。

②收到挂接请求后,服务端判断客户端发送的挂接请求路径是否在允许挂接的文件列表内。

③如果在列表内,则根据路径生成文件句柄,将文件句柄返回给客户端;否则,返回给客户端错误码。

其中,句柄的管理通过桶排序算法实现。

输入X=(x1,x2,...,xn),句柄关键字K(xi)在区间(0,1]上均匀分布。

输出Y=(y1,y2,...,yn)满足y1≤y2≤yn。

链表P=(p1,p2,...,pn)为N个链表头指针。

建立句柄数据表需要以下3个步骤。

①forj=1 toNdo

k=K(xi)

b=[kN]

将xi按照顺序插入到pb中。

②forb=2 toNdo

将链表pb连接到p(b-1)之后。

③将X中记录拷贝到Y。

以下可对算法复杂度进行计算。

由于句柄关键字之间相互独立,则:

桶排序算法的平局算法复杂度为O(N),具有较优的算法效率。

建立了基于桶算法的链表之后,可通过每个句柄分配的下标进行句柄数据的存取。与轮询查找的方法相比,该方法大大降低了查询速度。

2.2 操作处理模块

操作处理实现了继电保护装置中文件系统抽象层所需的接口函数:获取文件属性,查找文件句柄,读文件,写文件,创建文件,删除文件,删除文件夹,重命名,读文件列表,获取文件系统信息,获取文件配置信息。这11个功能函数涵盖了规定的接口函数,满足了装置程序对文件的操作需求。

网络文件系统的处理流程如图3所示。

图3 网络文件系统处理流程图

在客户端,当用户调用到网络文件系统操作时,首先将报文ID号、报文类型(请求为0,回复为1)、程序号(网络文件系统操作标识)、版本号(网络文件系统版本)、函数号(操作处理函数编号)五个元素写到报文头部,再封装上调用的参数,发送给服务端后等待回应。服务端收到报文后,会根据报文头的五个元素解析并辨识操作请求,并将请求分发给对应的操作函数进行执行。执行完成后,将请求ID号、报文类型以及返回的结果进行封装,返回给客户端。

2.3 外部表示模块

外部表示模块为数据的编码和解码提供支撑。这里的数据指的是客户端和服务端进行通信的数据,例如报文类型、操作参数、操作结果等。采用外部表示的方式对数据进行编解码,可统一不同操作系统的数据存储格式,使客户端和服务端在不同的系统环境中进行通信工作。

外部表示模块也采用了面向对象的设计方法,分为抽象层、内存编解码模块、记录编解码模块。抽象层封装了代码接口,其他两个模块则实现了基本的数据操作。其中,内存编解码模块用于用户数据板协议(user datagram protocol,UDP)通信,而记录编解码模块用于传输控制协议(transmission control protocol,TCP)通信。它的工作流程是发送者采用规定的格式构造一个报文,然后接收者将此格式的报文转换为本机的表示形式。

2.4 网络通信模块及日志模块

网络通信模块负责客户端和服务端的通信功能,实现了UDP和TCP的两种通信方式。在对继电保护装置的应用场景分析中,由于需要传输的数据量较小,绝大部分是短消息,对实时性的要求较高,所以采用UDP的通信方式进行。同时,为了保证传输数据的可靠性,实现时设计了重发、超时以及数据校验机制[8-9]。

日志模块主要是对操作过程中的错误信息和关键操作进行记录,供开发和运维人员进行运行状态的跟踪以及出错原因查找。日志文件被设计为文本文件的格式,并逐条按照装置时间进行记录以方便阅读。

3 应用测试

根据系统的设计和实现,在某型号保护装置上进行了功能性测试、时效性测试和可移植性验证。

3.1 功能性测试

将保护装置的其中一块板卡运行客户端程序,另一块板卡运行服务端程序,并建立通信连接。

挂接功能主要测试挂接函数,文件操作功能则对实现的功能函数进行测试。

测试内容包括功能测试,错误码结果测试和分支覆盖测试。在通信工况良好的状况下,网络文件系统是可靠的。在通信工况延时较大、甚至出现通信中断的情况下,本系统也能正确进行重传或返回正确错误码,没有出现接收数据错误情况。

功能测试结果如表1所示。

表1 功能测试结果

3.2 时效性测试

在保证系统功能正确的同时,还需要对其时效性进行验证,以提高用户体验。由于除了写操作和读操作会涉及到报文量较大的传输,其他的操作在通信正常的情况下只需一个或几个通信回合就能完成功能,所以时效性只针对读文件和写文件功能进行测试。

本文设计了8 KB、16 KB、32 KB、64 KB、128 KB、256 KB的数据,并分别对其进行100次读写操作,测试结果如图4所示。

图4 读写操作测试结果

由图4可知,读写操作的时间效率相差不大,传输速率为64 KB/s左右,在保护装置可接受的范围内。但是由于被测装置在协议栈初始化时没有设置巨帧数据包自动分帧功能,所以测试时每帧的数据大小控制在1 024 B之内,导致服务端频繁地进行文件打开和关闭操作;如果装置能对巨帧数据包进行分帧,则可避免服务端频繁打开、关闭文件,从而进一步提升时间效率。

3.3 可移植性验证

网络文件系统系统的可移植性验证包括两个方面,即对不同的硬件电子控制单元(electronic control unit,ECU)和不同的操作系统的可移植验证。首先,将网络文件系统从主控芯片为MPC8377(16位)的ECU移植到主控芯片为MPC8309(16位)的ECU时,功能正常,能够通过所有的功能测试环节,验证了系统在不同芯片类型下的可移植性。然后,对网络文件系统进行测试,使之分别充当客户端和服务端进行通信,同样功能正常,从而表明系统运行正常。

4 结束语

本文实现的网络文件系统,参考标准化网络文件架构,为继电保护装置提供了在板卡或存储设备间进行数据共享访问的解决方案。该方案可有效节省本地存储空间的使用,提高数据的利用率,解决了继电保护装置存储空间有限以及多板卡间文件同步问题。功能性和时效性测试验证了本系统的有效性,可移植性测试验证了本系统的通用性,可为更多型号的继电保护产品提供有力支撑。

猜你喜欢
服务端客户端继电保护
你的手机安装了多少个客户端
你的手机安装了多少个客户端
电气控制系统中继电保护器的整定方法
如何看待传统媒体新闻客户端的“断舍离”?
新时期《移动Web服务端开发》课程教学改革的研究
电力系统及其自动化和继电保护的关系研究
电力系统继电保护二次回路的维护与检修
电力系统继电保护技术的现状及发展趋势
新华社推出新版客户端 打造移动互联新闻旗舰
摸清黑客套路防范木马侵入