DL/T645规约解析

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://zhuge.blog.csdn.net/article/details/77869547

摘要:DL/T645规约是针对电表通信而制定的通信协议,主要有两个版本,分别是DL/T645-97和DL/T645-07,97代表是97年制定的协议,07则是2007年修正后的协议,而且基本上07版出来时,是要替代97版的通信协议的,但是比较坑的是,目前很多厂家的电表是支持这两种通信协议的,目前新表主流还是07版的。下面就解析这两种表通信协议:

DL/T645-07:

数据帧格式:

注意事项:

(1)前导字节-一般在传输帧信息前,都要有0~4个FE不等,所以这里要注意,对于主站来说,直接发送4个FE作为前导字节即可。而从站回复,就不一定了,根据厂家不同而不同,

我见过回复信息中,没有FE的,也有4个FE的,所以对于接受程序,一定要慎重。

(2)传输次序-所有的数据项都是先传低字节,再传高字节,这里的数据项,主要涉及到地址域和数据域,因为其他都是1个字节。

(3)差错控制-通信偶校验。

(4)数据与传输运算方式:主站加0x33,从站减0x33(为嘛这么定义,可能是考虑BCD码吧)

电表的数据参数有很多,而我们经常使用的就两种,读表地址和读当前正向有功总电量(耗电量)

1、读表地址

   虽然电表出厂的地址已经在标牌上了,8位数,而且,他们都是 BCD码,不是十进制。

这个表的出厂地址为:00613310,虽然在协议里,表是6个字节,补0即可。

但是有些表是被改过地址的,为了读准确的地址,读表地址命令为:

FE FE FE 68 AA AA AA AA AA AA 68 13 00 DF 16

其中FE 为前导地址,AA AA AA AA AA AA算是读表地址专用地址,13控制码,根据协议,就是读地址控制码,DF为校验,16是结尾。

   2、读当前正向有功总电量(假设表号为12345678)

命令:FE FE FE FE 68 78 56 34 12 00 00 68 11 04 33 33 34 33 C6 16

其中:78 56 34 12 00 00 是表地址,传输次序是低在前,高在后,而且是十六进制。

    11-读数据命令。

   04-数据域长度为4

  33 33 34 33-这里真实的含义应该是想读 00 00 01 00,因为加了0x33 ,而

所以,传输次序-低在前,高在后,然后再加0x33,就是33 33 34 33了,(这里面好绕)

返回数据:68 78 56 34 12 00 00 68 91 08 33 33 34 33 A4 56 79 38 F5 16  

注意,这里面没有前导字节FE,并不代表所有的电表厂家都没有,而且还是不固定的,所以一定小心写程序,因为不同厂家电表回的前导字节个数不一样。

其中:78 56 34 12 00 00 是表地址,传输次序是低在前,高在后,而且是十六进制。

  91-为从返回命令

 08-共8个字节

33 33 34 33-数据块,可以理解成寄存器地址。

A4 56 79 38-具体数据,分析时,应减33,所以为:

A4-33=71
56-33=23
79-33=46
38-33=5

实际的电表数为:54623.71度

 


展开阅读全文

没有更多推荐了,返回首页