当前位置: 首页 > 范文大全 > 公文范文 >

智能电表检测系统通信协议栈设计与实现

时间:2022-03-15 08:43:32  浏览次数:

zoޛ)j馒:L#P
 ?i @NzS7yӍL5
tӍ}׭uMӏ춶iay'rبzWإ6+bv謊ب̬颲V
j^*^ު詙황}-޽-(kƭyؚrxjب趇(ƫzf+޲q,j-ibaz)z)z(kƭ鮋hrljl^+-'gz'^^ @NzJjب+,by֧uy'֧uݶjh~^rxjب趇(ZrJ^趇(׬)+-zl׬	u8b趇(h!ڭbq]zȠ)'!z&qbyur[zZbIZڝazr'VzZ) @Nz㦬jZ=&qbyur[zay0h*'检查该服务能否被提供(检查合法性、客户机访问权限、可行性等)。如果一切都正确,服务器应用进程应在本地使用相应的“实际”对象提供所请求的服务;如果需要响应,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层与应用层之间加入封装层。

3 协议栈的实现

3.1 协议层结构的实现

协议栈由多个协议层相互连接组成,一个协议层有一个下一层协议层,有一个或多个前一层协议层,下一层协议向上一层协议提供四个接口:连接接口,断开接口,发送接口和接收接口。连接接口负责处理客户端与服务器端建立连接;断开接口负责处理客户端与服务器端断开连接;发送接口负责有客户端向服务器端发送数据;接收接口负责处理服务器端向客户端发送数据。

应用层和数据链路层的协议都采用状态转移的方法来处理不同状态下对不同事件的处理。状态分为四种:Disconnected,Connecting,Connected和Disconnecting。

当应用层客户端收到建立连接的指令时,首先应检查数据链路层的连接是否存在,如果不存在则建立链路层连接;数据链路层收到建立连接的指令时,首先应检查物理层连接是否存在,如果不存在则建立连接物理层连接。

3.2 应用层的实现

(1) ASN.1编码模块实现

ASN.1 编解码模块实现了应用层数据对象和传输报文的相互转换,对于所有在系统中应用到的 APDU,都将它们与一个 Java 类相对应,所有的类都实现encode()和decode()方法以实现编解码。

在生成AARQ的过程中,通过构造方法为AARQ类中的属性设置参数,然后调用自身的encode()方法,将自身的类编码为一段字符串,就实现了AARQ帧的编码工作,AARQ帧的类图如图1所示。

(2) 应用层数据服务实现

当应用层建立好连接后,应用层客户端可以与服务端执行数据通信,应用层可以提供get服务和set服务两种数据服务,每种数据服务包括以下操作流程:

① 生成数据服务请求pdu;

② 处理数据服务响应pdu;

③ 处理数据服务响应信息;

④ 获取数据服务结果。

选择模板方法设计模式封装数据服务处理流程,模板方法模式通过把不变的的行为搬移到超类,去除子类中的重复代码来体现它的优点;当不变的和可变的行为在子类的实现中混合在一起时,不变的行为会在子类中重复的实现,通过模板方法模式把这些方法搬移到单一的地方,就可以帮助子类摆脱重复不变方法的纠缠。采用模板方法设计模式的应用层数据服务模块类图如图2所示。

3.3 基于串口底层协议的实现

基于串口底层协议的数据链路层也采用和应用层相同的状态转移模式来处理不同状态下对不同事件的处理,除了建立断开链路层连接外,链路层的主要功能就是对上下层数据帧的一收一发,接收应用层的信息并组帧转发给物理层,从物理层接收帧并拆帧将信息转发给应用层。数据链路层的类图如图3所示。

数据链路层将本层具体的控制逻辑放在自己的四个状态类中去实现。例如当调用到本层的connect()方法时,链路层类会用this.getLayerState().conect()方法将控制流转移到状态类中去处理事件。这样可以很好地完成不同状态下对不同事件的处理。

3.4 基于TCP层的底层协议实现

封装层其存在的重要性在于支持单一TCP端口对应多逻辑设备的通信。因此在数据被转发给TCP层之前,需要为数据加上WPDU帧头,以标识数据属于哪个逻辑设备,数据要发送给哪个逻辑设备。WPDU帧中包含源WPort地址,目的WPort地址,帧长度和信息数据。协议使用SocketChannel实现TCP层的传输功能。Channel类是TCP层的核心,里面实现了建立通道,注册和收发数据等方法。

4 测 试

4.1 模拟电表

当使用一台计算机对电表进行测试时,本系统的测试架构如图4所示,测试系统可选择串口通信或者TCP通信的方式与受测设备相连接,进行合规测试。

实际环境中,测试系统往往需要部署在多台PC机上,需要同时测试多台设备。在多机测试环境中,测试控制台可能连接着数十台电脑,在这数十台电脑的测试代理上可能又悬挂着数十块电表。而实际的测试环境中难以搭建成百上千块电表,对多机测试系统的功能进行验证。

对于模拟电表,通信协议栈是它的主要组成部分。由于电表是作为服务端出现的,所以模拟电表的通信协议要实现的就是IEC 62056规则服务端部分的处理、收发逻辑。在实现模拟电表协议的过程中,首先沿用客户端的框架,采用相同分层结构和职责链设计模式来串连各个协议层。模拟电表的界面采用Java的JFace绘制,可设置的参数包括串口号,电表地址和开启电表个数如图5所示。TCP通信方式运行的模拟软表可设置的参数包括网络端口好和开启电表个数如图6所示。

4.2 合规测试

本规约一致性测试系统的设计目的是,用于验证各厂商提供的设备是否符合协议规范。通过软、硬编码结合的方式组成需要的协议帧,按照测试用例流程的要求,逐个发送,根据响应的结果,判断电表协议是否符合规范。

所有的测试用例被分为应用层测试和链路层测试两类,它们都继承TestCase类。合规测试模块为上层的应用进程提供了三个服务调用接口init(),check()和test(),init()负责初始化测试用例,test()负责执行用例,check()负责检查测试结果。TestCase类中完成了这三个接口方法的具体实现。TestCase类继承了ClientProtocolLayer,因此所有的测试用例类都本质上都是一个虚构的协议层。这样做可以使测试用例摆脱真实的协议栈的规则限制,按照测试用例的需要,实现特定的数据帧收发逻辑,以检测协议栈的合规性。

案例(见表1):规约一致性测试→链路层测试→帧类型错误测试测试分类。反向测试测试过程如下:

(1) 选择规约一致性测试,包含帧类型错误测试案例;

(2) 测试工具构建SNRM帧,将其Format type子域设置为0101(正确值为1010),而其他域(帧头、帧尾、地址、控制字、CRC等)均为正确设置;

(3) 测试工具发送SNRM帧给电表;

(4) 电表收到报文后,应该检查报文的合规性并进行正确的反应(如:发现SNRM命令帧的Format type域设置不正确,则对该命令帧不应答);

(5) 测试工具在规定时间内,如果接收不到应答,则认为电表“帧类型错误”校核合规;

(6) 否则,认为不合规。

5 结 论

本文研究了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.

推荐访问: 电表 检测系统 通信协议 智能 设计