2. 解析DLT698.45-2017通信规约--正向有功总电能

在DLT645-2007规约中,想要读正向有功总电能直接根据对象标识(00010000)就可以了,非常简单快捷;但是在DLT698-2017里面,需要先找到 "电能量的接口类",然后根据类的定义读相关属性,每个属性根据索引ID来区分。

下面以电能量接口类为例,演示读取一个属性和多个属性

图片

GetRequestNormal 读取一个对象属性

先看完整请求报文

68 15 00 43 03 91 78 41 28 00 eb 64 05 01 00 00 10 04 00 00 0c cb 16

帧头:68 15 00 43 03 91 78 41 28 00 eb 64

68:起始符

15 00:长度21(不包含起始符和结束符)

43:控制域

    0100 0011

        01:传输方向位和启动标志位(客户机发起的请求)

        0:分帧标志(完整APDU)

        0:保留

        0:扰码标志(不加扰码)

        011:功能码(应用连接管理及数据交换服务)

03:服务器地址特征

    0000 0011

        00:地址类型(单地址)

        00:逻辑地址(0)

        0011:地址长度(4)

            (011不是3吗?仔细看文档0-15对应表示1-16)

91 78 41 28:服务器地址(28417891)

00:客户机地址

eb 64:帧头检验码

APDU部分:05 01 00 00 10 04 00 00

05:APDU的读请求

图片

01:然后找到GET-Request,请求读取一个对象属性

图片

然后,看GetRequestNormal的数据类型

图片

    00:PIID(优先级一般)

    00 10 04 00:OAD

图片

根据OAD的数据类型,其中对象标识OI占两个字节

图片

图片

    00 10:OI(电能量 总 正向有功 合相)

    04:属性标识及其特征

        0000 0100:

            0000:特征(0)

            0100:类属性,扩展精度总及费率电能量数组(4)

    00:属性内元素索引(整个属性全部内容)

00:无时间标签

0c cb:帧校验码

16:结束符

响应报文:

68 46 00 C3 03 91 78 41 28 00 06 2D 85 01 00 00 10 04 00 01 01 05 15 00 00 00 00 00 00 00 00 15 00 00 00 00 00 00 00 00 15 00 00 00 00 00 00 00 00 15 00 00 00 00 00 00 00 00 15 00 00 00 00 00 00 00 00 00 00 C3 52 16

忽略帧头,来看看APDU部分

85 01 00 00 10 04 00 01 01 05 15 00 00 00 00 00 00 00 00 15 00 00 00 00 00 00 00 00 15 00 00 00 00 00 00 00 00 15 00 00 00 00 00 00 00 00 15 00 00 00 00 00 00 00 00 00 00

85:十进制是133

图片

01:读取一个对象属性的响应

图片

图片

00:PIID(普通优先级,服务序号0)

00 10 04 00:OAD(和请求的一致)

01:读取结果(数据Data)

图片

01:数据类型 array

05:长度

15:数据类型(long64-unsigned,64位正整数,占8字节)

00 00 00 00 00 00 00 00:数值(0)

15 00 00 00 00 00 00 00 00:64位正整数,数值0

15 00 00 00 00 00 00 00 00:64位正整数,数值0

15 00 00 00 00 00 00 00 00:64位正整数,数值0

15 00 00 00 00 00 00 00 00:64位正整数,数值0

00:跟随上报信息域

00:时间标签域

GetRequestNormalList 读取若干个对象属性

我们要读电能量接口类中的五个属性

图片

先看完整请求报文

68 26 00 43 03 91 78 41 28 09 80 27 05 02 3e 05 00 10 01 00 00 10 02 00 00 10 03 00 00 10 04 00 00 10 05 00 00 14 be 16

帧头:68 26 00 43 03 91 78 41 28 09 80 27

68:起始符

26 00:长度38(不包含起始符和结束符)

43:控制域

    0100 0011

        01:传输方向位和启动标志位(客户机发起的请求)

        0:分帧标志(完整APDU)

        0:保留

        0:扰码标志(不加扰码)

        011:功能码(应用连接管理及数据交换服务)

03:服务器地址特征

    0000 0011

        00:地址类型(单地址)

        00:逻辑地址(0)

        0011:地址长度(4)   

91 78 41 28:服务器地址(28417891)

09:客户机地址

80 27:帧头检验码

APDU部分:

05 02 3e 05 00 10 01 00 00 10 02 00 00 10 03 00 00 10 04 00 00 10 05 00 00

05:读请求

02:读若干个对象属性

3e:PIID普通优先级,服务序号62

图片

05:Sequence Of 长度

00 10 01 00:正向有功总电能,对象属性1

00 10 02 00:正向有功总电能,对象属性2

00 10 03 00:正向有功总电能,对象属性3

00 10 04 00:正向有功总电能,对象属性4

00 10 05 00:正向有功总电能,对象属性5

00:无时间标签

帧尾

14 be:校验码 

16:结束符

响应报文

68 80 00 c3 03 91 78 41 28 09 6c 36 85 02 3e 05 00 10 01 00 01 09 02 00 10 00 10 02 00 01 01 05 06 00 00 00 00 06 00 00 00 00 06 00 00 00 00 06 00 00 00 00 06 00 00 00 00 00 10 03 00 01 59 fe 21 00 10 04 00 01 01 05 15 00 00 00 00 00 00 00 00 15 00 00 00 00 00 00 00 00 15 00 00 00 00 00 00 00 00 15 00 00 00 00 00 00 00 00 15 00 00 00 00 00 00 00 00 00 10 05 00 01 59 fc 21 00 00 d2 3f 16

帧头帧尾跳过,看APDU部分

85 02 3e 05 00 10 01 00 01 09 02 00 10 00 10 02 00 01 01 05 06 00 00 00 00 06 00 00 00 00 06 00 00 00 00 06 00 00 00 00 06 00 00 00 00 00 10 03 00 01 59 fe 21 00 10 04 00 01 01 05 15 00 00 00 00 00 00 00 00 15 00 00 00 00 00 00 00 00 15 00 00 00 00 00 00 00 00 15 00 00 00 00 00 00 00 00 15 00 00 00 00 00 00 00 00 00 10 05 00 01 59 fc 21 00 00

85:十进制是133,读取响应

02:读取若干个对象属性的响应

3e:PIID普通优先级,服务序号63

图片

从数据类型可看出,Sequence of a-ResultNormal,它的结果是由多个A-ResultNormal组成,意思就是每一个结果都是一个完整的A-ResultNormal;那我们再看一遍,表52

图片

05:长度(5)

第一个ResultNormal

    00 10 01 00:OAD正向有功总电能,对象属性1(逻辑名)

        01:读取结果(数据)

        09:类型9(octet-string,占1个字节)

        02:长度

        00 10:这两个字节是内容(逻辑名)

第二个ResultNormal

    00 10 02 00:正向有功总电能,对象属性2(总及费率电能量数组)

        01:读取结果(数据)

        01:数据类型 array

        05:长度

        06 00 00 00 00:类型6,数值0(总)

        06 00 00 00 00:类型6,数值0(费率1,尖)

        06 00 00 00 00:类型6,数值0(费率2,峰)

        06 00 00 00 00:类型6,数值0(费率3,平)

        06 00 00 00 00:类型6,数值0(费率4,谷)

第三个ResultNormal

    00 10 03 00:正向有功总电能,对象属性3(换算及单位)

        01:读取结果(数据)

        59:类型89(Scaler_Unit)

        FE:换算-2

        21:单位,看枚举定义表(kWh有功能量)

第四个ResultNormal

    00 10 04 00:正向有功总电能,对象属性4

        01:读取结果(数据)

        01:数据类型 array

        05:长度

        15 00 00 00 00 00 00 00 00:类型21,数值0

        15 00 00 00 00 00 00 00 00:类型21,数值0

        15 00 00 00 00 00 00 00 00:类型21,数值0

        15 00 00 00 00 00 00 00 00:类型21,数值0

        15 00 00 00 00 00 00 00 00:类型21,数值0

注意!属性4和属性2的区别,精度不同

第五个ResultNormal

    00 10 05 00:正向有功总电能,对象属性5

        01:读取结果(数据)

        59:类型89(Scaler_Unit)

        FC:换算-4

        21:单位,看枚举定义表(kWh有功能量)

00:无跟随上报信息域

00:无时间标签

### DLT698.45-2017通信协议的详细介绍 DLT698.45-2017 是一种用于电力数据采集与传输的标准通信协议,广泛应用于智能电网中的电表数据读取和管理。该标准通过定义一系列的数据结构、命令集以及交互流程,实现了设备间高效可靠的信息交换。 #### 协议概述 DLT698.45-2017 的核心目标是提供一套标准化的方法来访问用电信息管理系统中的各类数据。它不仅支持传统的电量计量功能,还扩展到更多高级应用领域,例如负荷控制、事件记录等[^1]。 #### 数据模型 在 DL T698.45-2017 中,所有的数据都被抽象成对象的形式存储于终端设备内部。这些对象按照特定逻辑分组并分配唯一标识符 (OID),以便客户端能够准确定位所需资源。对于正向有功电能这一参数来说,其获取过程涉及以下几个方面: 1. **定位目标对象**: 需要识别出代表 “电能量”的具体接口类别及其子项; 2. **调用相应方法**: 使用协议规定的操作指令提取指定索引下的实际数值; 3. **解析返回结果**: 将接收到的数据包解码还原为可理解形式[^2]。 以下是实现上述步骤的一个简化 Python 示例程序片段: ```python def read_active_energy(): # 假设已建立好连接, 并初始化了必要的会话变量. object_id = '000C00' # 对应电能量类别的 OID 示例值 attribute_index = 2 # 正向有功电能对应的属性编号 request_frame = construct_request(object_id, attribute_index) response_data = send_and_receive(request_frame) active_energy_value = decode_response(response_data) return active_energy_value # 辅助函数省略... ``` 此代码仅作为概念演示用途,在真实环境中还需考虑诸多细节因素如异常处理机制等等。 #### 连接管理 为了保障通讯质量,本规约引入了严格的握手确认机制——即所谓的“预连接响应”。当发起方发送请求消息后,接收端需及时给予反馈表明自己处于就绪状态方可继续后续动作链路构建工作流。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值