本发明涉及数据处理技术领域,更具体地,涉及一种面向对象的用电信息数据交换协议(dl/t698.45)中记录型数据的解析方法。
背景技术:
现行用电信息采集系统中通信协议不统一的问题突出,如主站、采集终端、智能电能表三者之间的通信规约有q/gdw1376.1、q/gdw1376.2、dl/t645及其各种扩展版本,导致了用电信息采集过程中增加了大量不必要的规约转换工作。当前用于用电信息采集的通信协议主要是面向过程的数据型协议,其拓展性、复用性和灵活性方面显现出一些不足。
基于面向对象的用电信息数据交换协议,即dl/t698.45可以贯穿系统主站、采集终端以至智能电能表,实现用电信息采集系统通信协议的统一性和规范性,提升系统运行的可靠性。dl/t698.45协议是根据《国家电网公司关于下达2017年度公司第一批技术标准制修订计划的通知》(国家电网科﹝2017﹞72号)的要求而制订的面向对象的用电信息数据交换协议。
技术实现要素:
为了推进dl/t698.45协议在用电信息采集过程中的应用,本发明提供一种dl/t698.45协议中记录型数据的解析方法。在采集终端接收到智能电能表响应的记录型数据报文后,对应用层协议数据单元(apdu)进行分解:
步骤一:对应用层协议数据单元(apdu)进行分解,根据分解出的第一列对象属性描述符(oad_1)以及其数据类型和数据长度,可得到oad_1的结果数组(resultarray_1)、执行步骤二;
步骤二:对resultarray_1的第一个字节(databyte)进行判断,若为1,执行步骤三;否则,执行步骤五;
步骤三:对resultarray_1的数据类型进行判断,判断数据类型是否为data_time_s,若是,执行步骤四;否则,执行步骤五;
步骤四:对data_time_s型数据进行分解,得到时间数据信息,执行步骤五;
步骤五:根据resultarray_1的长度定位到第二列对象属性描述符(oad_2)的起始位置,对oad_2进行分解,得到oad_2的对象标识、数据类型和数据长度信息,进而得到oad_2的结果数组(resultarray_2),执行步骤六;
步骤六:对resultarray_2的数据类型进行判断,数据类型包括数组类(array)、布尔值(boolean)和长整型(long)等。不同数据类型得到不同的结果数据,执行步骤七;
步骤七:根据步骤五中oad_2的对象标识与步骤六中结果数据生成接口类,在接口类下确定记录型数据单位并进行数据换算,执行步骤八;
步骤八:获得最终解析结果数据,解析结束。
进一步地,在步骤六中,当数据类型是数组(array)类型时,需对数组(array)类型数据具体分解:
首先、分解resultarray_2中共有几组数据,获得每组数据中的子数据类型;
然后、根据子数据类型确定数据长度,进行具体的数据分析;
当数据长度大于1字节时,结果数据将是二维数据,二维数据需降维处理成一维数据,并将其存入结果数组。例如当数据长度为4个8位字节时,要将此4个8位字节的数据变换成1个32位的整型数据,使得结果数组保持一维数据;
当数据长度小于等于1字节时,将分解后的数据存入结果数组。
附图说明
通过参考下面的附图,可以更为完整地理解本发明的示例性实施方式:
图1为本dl/t698.45协议中记录型数据的解析流程图;图2为数组类型的数据处理流程图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的方法进行详细地描述,然而,本发明可以用许多不同形式来实施,并且不局限于此处描述的实施例,提供这些实施例是为了详尽地且完全公开本发明,并且向所属技术领域的技术人员充分传达本发明的范围。
图1是本发明具有具体实施方式的dl/t698.45协议中记录型数据的解析流程图,在终端接收到智能电能表响应的记录型数据报文后,对应用层协议数据单元(apdu)数据逐位进行分解,解析方法从步骤s101开始。
在步骤s101,对应用层协议数据单元(apdu)进行分解,根据分解出的第一列对象属性描述符(oad_1)以及其数据类型和数据长度,可得到oad_1的结果数组(resultarray_1)、执行步骤s102;
在步骤s102,对resultarray_1的第一个字节(databyte)进行判断,若为1,执行步骤s103;否则,执行步骤s105;
在步骤s103,对resultarray_1的数据类型进行判断,判断数据类型是否为data_time_s,若是,执行步骤s104;否则,执行步骤s105;
在步骤s104,对data_time_s型数据进行分解,得到时间数据信息,执行步骤s105;
在步骤s105,根据resultarray_1的长度定位到第二列对象属性描述符(oad_2)的起始位置,对oad_2进行分解,得到oad_2的对象标识、数据类型和数据长度信息,进而得到oad_2的结果数组(resultarray_2),执行步骤s106;
在步骤s106,对resultarray_2的数据类型进行判断,数据类型包括数组类(array)、布尔值(boolean)和长整型(long)等。不同数据类型得到不同的结果数据,执行步骤s107;
在步骤s107,根据步骤五中oad_2的对象标识与步骤六中结果数据生成接口类,在接口类下确定记录型数据单位并进行数据换算,执行步骤s108;
在步骤s108,获得最终解析结果数据,解析结束。
优选地,在步骤s106中,当数据类型是数组(array)类型时,需对数组(array)类型数据具体分解,图2为数组类型的数据处理流程图:
首先、分解resultarray_2中共有几组数据,获得每组数据中的子数据类型;
然后、根据子数据类型确定数据长度,进行具体的数据分析;
当数据长度大于1字节时,结果数据将是二维数据,二维数据需降维处理成一维数据,并将其存入结果数组。例如当数据长度为4个8位字节时,要将此4个8位字节的数据变换成1个32位的整型数据,使得结果数组保持一维数据;
当数据长度小于等于1字节时,将分解后的数据存入结果数组。