详细解读电力DLT698.45-2017通信规约--正向有功总电能

建立连接请看这篇:详细解读DLT698.45-2017通信规约--预连接响应icon-default.png?t=N7T8http://mp.weixin.qq.com/s?__biz=MzA3NjAwMjQzMQ==&mid=2652026396&idx=1&sn=a0a17f005d23136c922a7c381ddb7e75&chksm=8481f30cb3f67a1a94e66db77e61fe73c22b1904fcdbb0144108e132b265e7b40073e59659a7&scene=21#wechat_redirect

DLT698-2017是面向对象的通信协议

说到面向对象你想到了什么?继承封装多态?

通信协议为什么要面向对象,咱们先回顾一下学校里老师教的,面向对象的好处:

-------易于理解,比较灵活,方便维护

-------可扩展、可重用

没错,面向对象编程确实易于理解,但是习惯了传统比较简洁的通信协议,面向对象的通信协议真的挺抽象不易于理解,封装好的对象还要转换成简洁的16进制字符串,这个过程挺痛苦。

这篇文章以集中器和主站通信为例,介绍怎么读取正向有功总电能

(怎么建立连接,去公众号看吧)

我们在用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:无时间标签

那么,怎么通过集中器读电表数据呢

首先,读出集中器下面的所有电表地址(注意不是电表的地址,是电表配置在集中器的编号,比如0001)

然后可以根据对象标识 “6H 采集” 来读相关数据

参考文档中的实例:

主站召测集中器采集到的数据:召测5个电能表的2016-01-20 00:00:00日冻结正向有功电
能总及费率、日冻结反向有功电能总及费率


发送:05 03 04 60 12 03 00 05 07 E0 01 14 00 00 00 03 05 06 04 00 00 00 01 21 06 04 00 
00 00 01 22 06 04 00 00 00 01 23 06 04 00 00 00 01 24 06 04 00 00 00 01 25 05 00 40 01 02 00 
00 60 40 02 00 00 60 41 02 00 00 60 42 02 00 01 50 04 02 00 02 00 10 02 00 00 20 02 00 00


05 —— [5] GET-Request
03 —— [3] GetRequestRecord
04 —— PIID
60 12 03 00 —— OAD 
05 —— RSD,选择方法5
07 E0 01 14 00 00 00 —— 采集存储时间
03 —— 表计集合MS,一组用户地址 [3] SEQUENCE OF TSA
05 —— SEQUENCE OF TSA的个数=5
06 04 00 00 00 01 21 —— TSA1
06 04 00 00 00 01 22
06 04 00 00 00 01 23
06 04 00 00 00 01 24
06 04 00 00 00 01 25 —— TSA5
05 —— RCSD,SEQUENCE OF CSD个数=5
00 40 01 02 00 —— OAD1,通信地址
00 60 40 02 00 —— OAD2,采集启动时标
00 60 41 02 00 —— OAD3,采集成功时标
00 60 42 02 00 —— OAD4,采集存储时标
01 —— ROAD5
50 04 02 00 —— 日冻结
02 —— 关联对象属性描述符 SEQUENCE OF个数=2
00 10 02 00 —— 正向有功总及费率
00 20 02 00 —— 反向有功总及费率
00 —— 没有时间标签

这样的电力规约你受得了吗朋友们

有需求或交流讨论可加WX: xiaoyiyz

留个关注,更快接收消息推送

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/256021.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

黑苹果之显卡篇

一、什么是显卡 显卡GPU(Video card、Display card、Graphics card、Video adapter)是个人计算机基础的组成部分之一,将计算机系统需要的显示信息进行转换驱动显示器,并向显示器提供逐行或隔行扫描信号,控制显示器的正…

springboot 在自定义注解中注入bean,解决注入bean为null的问题

问题: 在我们开发过程中总会遇到比如在某些场合中需要使用service或者mapper等读取数据库,或者某些自动注入bean失效的情况 解决方法: 1.在构造方法中通过工具类获取需要的bean 工具类代码: import org.springframework.beans…

华为OD机试 - 攀登者1(Java JS Python C)

题目描述 攀登者喜欢寻找各种地图,并且尝试攀登到最高的山峰。 地图表示为一维数组,数组的索引代表水平位置,数组的元素代表相对海拔高度。其中数组元素0代表地面。 例如:[0,1,2,4,3,1,0,0,1,2,3,1,2,1,0],代表如下图所示的地图,地图中有两个山脉位置分别为 1,2,3,4,5…

数字人知识库:Awesome-Talking-Head-Synthesis

数字人知识库:Awesome-Talking-Head-Synthesis 文章目录 数字人知识库:Awesome-Talking-Head-SynthesisDatasetsSurveyAudio-drivenText-drivenNeRF & 3DMetricsTools & SoftwareSlides & Presentations Gihub:https://github.co…

【Python源码保护】02 - pyc

1. python编译过程 Python虽然是一门解释型语言,但Python程序执行时,也需要将源码进行编译生成字节码,然后由Python虚拟机进行执行,因此Python解释器实际是由两部分组成:编译器和虚拟机。 Python程序执行过程和Java类…

网工内推 | 国企网工、运维,厂商认证优先,13薪,带薪年假

01 中百集团 招聘岗位:运维工程师 职责描述: 1、对集团内使用云计算架构(Kubernetes)的系统进行规划、运维及管理相关工作。 2、对集团数据中心系统的大数据基础架构(Cloudera Distribution Hadoop)的规划…

在Windows 11中更改文件的扩展名有几种办法,个别办法可以批量修改

本文介绍了如何在Windows 11中更改文件的文件扩展名。 用简单的方法更改文件扩展名 对于大多数人来说,在Windows 11中更改文件扩展名的最简单方法是在更改文件名的同一个地方进行更改。然而,Windows默认情况下不显示文件扩展名,所以在我们可…

『TypeScript』深入理解变量声明、函数定义、类与接口及泛型

📣读完这篇文章里你能收获到 了解TypeScript变量声明与类型注解掌握TypeScript函数与方法的使用掌握TypeScript类与接口的使用掌握TypeScript泛型的应用 文章目录 一、变量声明与类型注解1. 变量声明2. 类型注解3. 类型推断 二、函数与方法定义1. 函数定义2. 方法定…

JDBC常见的几种连接池使用(C3P0、Druid、HikariCP 、DBCP)(附上代码详细讲解)

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍JDBC常见的几种连接池使用(C3P0、Druid、HikariCP 、DBCP)以及部分理论知识 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主收将持续更新学…

【实用经验】如何根据CVE编号找到安全补丁

找到对应补丁页面 例如查找编号为 CVE-2019-0708 的漏洞,访问下面链接即可,替换末尾编号可获取其他漏洞更新补丁。 https://msrc.microsoft.com/update-guide/vulnerability/CVE-2019-0708根据实际情况点击右侧补丁链接即可跳转下载 最后根据实际情况下…

高级搜索——ST表,离线RMQ问题

文章目录 前言可重复贡献问题ST表的定义ST表的存储结构ST表的预处理预处理的实现 ST表的区间查询对于k的获取区间查询的实现 OJ链接 前言 对于查询区间最值的方法,我们常用的就是线段树,树状数组,单调队列,而树状数组更适合用于快…

10款必备设计的工具汇总

在当今数字时代,在线绘图软件已经成为创造、设计和表达创造力的重要工具。无论你是专业设计师还是创意爱好者,这些在线绘图软件都将帮助你实现创造力的无限可能性。本文将介绍10个画图设计软件,并分析功能特点、优点,帮助您找到最…