张国强,林永峰
(国网天津市电力公司 电力科学研究院,天津 300384)
智能电表检测系统通信协议栈设计与实现
张国强,林永峰
(国网天津市电力公司 电力科学研究院,天津300384)
目前我国用电信息采集系统的建设规模大,设备厂家型号多,通信介质和通信协议种类多,需建立具有互操作性的电能表通信协议标准体系。研究了IEC 62056规范,以此为标准设计完成智能电表规约测试系统的通信协议栈部分。协议采用分层设计,串口通信方式包括以IEC 62056-46为标准的数据链路层和物理层,TCP通信方式包含中间封装层以及采用JAVANIO技术的TCP传输层。为了对电表协议本身进行合规测试,设计了单独的合规测试模块,用特定的测试用例对电表协议的合规性进行检测,并反馈结果。
智能电表检测;IEC 62056;通信协议栈;合规测试
在庞大的电力系统中,终端往往存在多种智能电表,由于智能电表通信协议不同,在对用户管理、电费结算、读表抄表等方面综合管理时,会造成系统互连、互操作性困难。因此作为智能电网系统的重要组成部分,亟需对智能电表建立具有互操作性的通信协议标准体系[1]。为了解决上述问题,满足电力系统对仪表计量一致性、安全性、合法性的要求,IEC根据电力部门的商业过程的特点,制定了IEC 62056《电能计量——用于抄表、费率和负荷控制的数据交换》系列的国际标准体系[2]。
本文基于某电力科学研究院在所承担的国家“863”项目“灵活互动的用电关键技术研究”,提出采用IEC 62056通信协议作为广西电网AMI用电信息采集系统的标准通信协议,制定基于该协议标准的互操作标准规范,并开发一套规约一致性检测系统,用于验证各厂商提供的设备的通信协议是否符合规范,为AMI用电信息采集系统的建设提供服务支持[3]。
1.1协议层的划分
依照IEC 62056的通信协议模型标准和客户的需求,为智能电表测试系统的通信协议栈制定了三层通信协议模型,包含应用层、数据链路层(或中间协议层)和物理层(或TCP层)[4]。
使用IEC 62056标准的计量仪表通信模型采用客户机/服务器的通信模型,量计费系统(读表设备)作为客户机,计量仪表作为服务器,为客户机提供服务,因此在IEC 62056协议规范中,计量仪表也被称为服务器[5]。
1.2应用规范
本系统通信协议栈所采用的通信协议栈规范如下所示:IEC 62056-21,直接本地数据交换;IEC 62056-42,物理层服务协议,基于连接的异步数据交换;IEC 62056-46,基于HDLC的数据链路层;IEC 62056-47,COSEM传输层;IEC 62056-53,COSEM应用层;IEC 62056-61,OBIS对象标识系统;IEC 62056-62,IC接口类。
1.3实现目标
规约一致性测试系统中的通信协议栈部分用以实现对应用模型数据结构的编解码,实现测试系统与各类接入终端(表计、集中器、智能交互终端)以指定的组网方式、通信信道(或介质)的通信建立、断开、信息交互等过程的控制。
2.1应用层设计
(1)应用层编码模块
在应用层协议中,对数据对象的编码是其中重要的组成部分,通常采用ASN.1语法和BER编码方法来设计应用层的编码模块。ASN.1语法是适合用来描述应用层数据帧的语法。对于数据对象,它不是用一些表格或固定的帧格式来描述的,而是用一种抽象语法语言描述。这样做极大地提高了协议的通用性和抽象性,有助于程序的移植。BER编码用来实现ASN.1语法。为了实现ASN.1的抽象性和通用性,BER用特殊的编码来描述ASN.1语法[6]。
(2)建立应用连接
应用层连接的建立是在链路层连接已建立的条件下通过客户端发送AARQ类型的数据帧,服务端响应AARE类型数据帧来实现的。除了建立连接,这两个数据帧还有是协商应用层数据通信参数的作用。
(3)数据通信
当应用层建立好连接后,应用层客户端可以与服务端执行数据通信,应用层可以提供两种数据服务:get服务和set服务。根据IEC 62056应用层规范的说明,COSEM客户端只能在确认的应用连接中采用确认的方式调用这些服务的request原语。COSEM服务器的应用进程一旦接收到数据通信服务指示,应检查该服务能否被提供(检查合法性、客户机访问权限、可行性等)。如果一切都正确,服务器应用进程应在本地使用相应的“实际”对象提供所请求的服务;如果需要响应,COSEM服务器应用进程应生成一个适当的response报文。
2.2底层协议设计
底层协议有两种实现方式:一种是基于串口方式的协议栈,包括应用层,数据链路层和串口通信层;另一种是基于TCP方式的协议栈,包括应用层,封装层和TCP通信层。
(1)基于串口通信的底层协议
基于串口通信的协议采用物理层、链路层、应用层的三层协议栈。链路层基于IEC 62056-46协议规范设计,由LLC层和MAC层两个子层构成。LLC层的作用是将MAC层的数据转发到应用层,或将应用层数据转发到MAC层。MAC子层在链路层中负责检查数据传输的可靠性,包含源、目的地址检查,数据的FCS校验,长数据帧的打包拆包等。
启动长数据帧链路控制流程后,当使用长数据帧时,必须把长数据帧分割成短数据帧。然后把这些短数据帧依次发送出去,在接收端将这些短数据帧依次处理。这样就实现了将一个较大的数据包完整地传送到接收端。物理层基于IEC 62056-42协议规范设计,协议位于IEC 62056协议簇的最底层,负责数据通信在物理信道的传输。IEC 62056可以支持于多种不同的物理介质上(红外,串口通道等)。
(2)基于TCP的底层协议
基于TCP的通信采用物理层、中间层、封装层、应用层的协议栈。与串口通信相比,基于TCP通信的协议,将物理层和链路层的功能交给TCP/IP协议处理,在TCP层与应用层之间加入封装层。
协议栈由多个协议层相互连接组成,一个协议层有一个下一层协议层,有一个或多个前一层协议层,下一层协议向上一层协议提供四个接口:连接接口,断开接口,发送接口和接收接口。连接接口负责处理客户端与服务器端建立连接;断开接口负责处理客户端与服务器端断开连接;发送接口负责有客户端向服务器端发送数据;接收接口负责处理服务器端向客户端发送数据。
应用层和数据链路层的协议都采用状态转移的方法来处理不同状态下对不同事件的处理。状态分为四种:Disconnected,Connecting,Connected和Disconnecting。
当应用层客户端收到建立连接的指令时,首先应检查数据链路层的连接是否存在,如果不存在则建立链路层连接;数据链路层收到建立连接的指令时,首先应检查物理层连接是否存在,如果不存在则建立连接物理层连接。
3.2应用层的实现
(1)ASN.1编码模块实现
ASN.1编解码模块实现了应用层数据对象和传输报文的相互转换,对于所有在系统中应用到的APDU,都将它们与一个 Java类相对应,所有的类都实现encode()和decode()方法以实现编解码。
在生成AARQ的过程中,通过构造方法为AARQ类中的属性设置参数,然后调用自身的encode()方法,将自身的类编码为一段字符串,就实现了AARQ帧的编码工作,AARQ帧的类图如图1所示。
图1 AARQ帧的类图
(2)应用层数据服务实现
二十一世纪网络科学技术飞速发展,移动互联网更是融入到人们的日常生活当中,因此,传统的媒介都已经通过网络技术向新媒体发展与融合。传统媒介传播方式单一,宣传成本高,技术不足,再加上传统媒介的本身的制约,很难取得很大的发展。
当应用层建立好连接后,应用层客户端可以与服务端执行数据通信,应用层可以提供get服务和set服务两种数据服务,每种数据服务包括以下操作流程:
①生成数据服务请求pdu;
②处理数据服务响应pdu;
③处理数据服务响应信息;
④获取数据服务结果。
选择模板方法设计模式封装数据服务处理流程,模板方法模式通过把不变的的行为搬移到超类,去除子类中的重复代码来体现它的优点;当不变的和可变的行为在子类的实现中混合在一起时,不变的行为会在子类中重复的实现,通过模板方法模式把这些方法搬移到单一的地方,就可以帮助子类摆脱重复不变方法的纠缠。采用模板方法设计模式的应用层数据服务模块类图如图2所示。
图2 应用层数据服务模块类图
3.3基于串口底层协议的实现
基于串口底层协议的数据链路层也采用和应用层相同的状态转移模式来处理不同状态下对不同事件的处理,除了建立断开链路层连接外,链路层的主要功能就是对上下层数据帧的一收一发,接收应用层的信息并组帧转发给物理层,从物理层接收帧并拆帧将信息转发给应用层。数据链路层的类图如图3所示。
数据链路层将本层具体的控制逻辑放在自己的四个状态类中去实现。例如当调用到本层的connect()方法时,链路层类会用this.getLayerState().conect()方法将控制流转移到状态类中去处理事件。这样可以很好地完成不同状态下对不同事件的处理。
图3 数据链路层的类图
3.4基于TCP层的底层协议实现
封装层其存在的重要性在于支持单一TCP端口对应多逻辑设备的通信。因此在数据被转发给TCP层之前,需要为数据加上WPDU帧头,以标识数据属于哪个逻辑设备,数据要发送给哪个逻辑设备。WPDU帧中包含源WPort地址,目的WPort地址,帧长度和信息数据。协议使用SocketChannel实现TCP层的传输功能。Channel类是TCP层的核心,里面实现了建立通道,注册和收发数据等方法。
4.1模拟电表
当使用一台计算机对电表进行测试时,本系统的测试架构如图4所示,测试系统可选择串口通信或者TCP通信的方式与受测设备相连接,进行合规测试。
图4 单机测试架构图
实际环境中,测试系统往往需要部署在多台PC机上,需要同时测试多台设备。在多机测试环境中,测试控制台可能连接着数十台电脑,在这数十台电脑的测试代理上可能又悬挂着数十块电表。而实际的测试环境中难以搭建成百上千块电表,对多机测试系统的功能进行验证。
对于模拟电表,通信协议栈是它的主要组成部分。由于电表是作为服务端出现的,所以模拟电表的通信协议要实现的就是IEC 62056规则服务端部分的处理、收发逻辑。在实现模拟电表协议的过程中,首先沿用客户端的框架,采用相同分层结构和职责链设计模式来串连各个协议层。模拟电表的界面采用Java的JFace绘制,可设置的参数包括串口号,电表地址和开启电表个数如图5所示。TCP通信方式运行的模拟软表可设置的参数包括网络端口好和开启电表个数如图6所示。
图5 串口通信方式运行的模拟软表
图6 TCP通信方式运行的模拟软表
4.2合规测试
本规约一致性测试系统的设计目的是,用于验证各厂商提供的设备是否符合协议规范。通过软、硬编码结合的方式组成需要的协议帧,按照测试用例流程的要求,逐个发送,根据响应的结果,判断电表协议是否符合规范。
所有的测试用例被分为应用层测试和链路层测试两类,它们都继承TestCase类。合规测试模块为上层的应用进程提供了三个服务调用接口init(),check()和test(),init()负责初始化测试用例,test()负责执行用例,check()负责检查测试结果。TestCase类中完成了这三个接口方法的具体实现。TestCase类继承了Client-ProtocolLayer,因此所有的测试用例类都本质上都是一个虚构的协议层。这样做可以使测试用例摆脱真实的协议栈的规则限制,按照测试用例的需要,实现特定的数据帧收发逻辑,以检测协议栈的合规性。
案例(见表1):规约一致性测试→链路层测试→帧类型错误测试测试分类。反向测试测试过程如下:
(1)选择规约一致性测试,包含帧类型错误测试案例;
(2)测试工具构建SNRM帧,将其Format type子域设置为0101(正确值为1010),而其他域(帧头、帧尾、地址、控制字、CRC等)均为正确设置;
(3)测试工具发送SNRM帧给电表;
(4)电表收到报文后,应该检查报文的合规性并进行正确的反应(如:发现SNRM命令帧的Format type域设置不正确,则对该命令帧不应答);
(5)测试工具在规定时间内,如果接收不到应答,则认为电表“帧类型错误”校核合规;
(6)否则,认为不合规。
表1 帧类型错误测试
本文研究了IEC 62056规范,以此为标准设计完成智能电表规约测试系统的通信协议部分。本测试系统的通信协议栈遵循IEC 62056标准规范,整体上可分为两大部分,应用层协议和底层协议。应用层的功能包含以ASN.1语法对数据对象的编解码,以及为应用进程提供查询、修改电表等数据通信服务。底层协议支持串口通信和TCP通信两种模式。串口通信方式主要工作在于设计IEC 62056-46为标准的数据链路层,负责数据传输的可靠性,TCP通信方式包含中间传输层以及采用JAVANIO的TCP传输层。
由于实际环境难以搭建多块电表进行合规测试,所以设计了模拟软表来模拟多块电表同时测试。模拟软表的通信协议为服务端协议,与客户端的处理逻辑不同,需设计与客户端协议完美对接。为了对电表协议进行合规测试,设计了单独的合规测试模块,软硬编码相结合,用特定的测试用例对电表协议的合规性进行检测,并反馈结果。
[1]王思彤,周晖,袁瑞铭,等.智能电表的概念及应用[J].电网技术,2010,34(4):17-23.
[2]雷利兵,朱青,张利平.基于DLMS/COSEM协议的智能电表设计[J].微计算机信息,2010,26(2):44-46.
[3]武岳山.HDLC/SDLC串行通信规程的帧校验序列(FCS)[J].电子技术应用,1996(1):35-37.
[4]彭照辉.基于IEC 62056三相多功能电能表的研究与实现[D].长沙:湖南大学,2009:25-32.
[5]韩朋哲.DLMS/COSEM电能表通信协议在自动抄表系统中的应用[J].自动化与仪器仪表,2008(4):68-70.
[6]常婧.智能电网建设对智能仪表的技术需求分析[J].仪表技术,2010(4):58-60.
[7]李亦非,王文静,丁潇雪,等.电子式电能表可靠性预计及验证分析[J].现代电子技术,2011,34(22):141-143.
Design and im p lem entation of comm unication p rotocol stack for sm artm eter detection system
ZHANG Guoqiang,LIN Yongfeng
(Electric Power Research Institute,Tianjin Electric Power Company of State Grid,Tianjin 300384,China)
At present,the construction scale of electric-utilization information acquisition system is large in China,the types of equipmentmanufacturers are various,the communication medias and communication protocols are massive,so it is necessary to establish the interoperable communication protocol standard system for the electric energy meter.In this paper,the IEC62056 Specification is studied,and based on this standard,the part of the communication protocol stack of the smartmeter protocol testing system was designed.This protocol adopts hierarchical design,in which the serial communication mode includes data link layer and the physical layer taking IEC 62056-46 as the standard,and TCP communication mode includes the TCP transmission layer using JAVANIO technology and intermediate packaging layer.In order to perform the compliance test ofmeter protocol itself,a separate compliance testmodule was designed.The compliance of themeter protocolwas detected with a specific test case to feed back the results.
smartmeter detection;IEC 62056;communication protocol stack;compliance test
TN915.04-34;TM 417
A
1004-373X(2016)11-0034-04
10.16652/j.issn.1004-373x.2016.11.009
2015-10-28
张国强(1984—),男,山西人,工程师,硕士。研究方向为信息安全技术监督。
林永峰(1982—),男,吉林人,工程师,硕士。研究方向为信息安全风险测评。