DL/T645规约是针对电表通信而制定的通信协议,主要有两个版本,分别是DL/T645-1997和DL/T645-2007,2007版是要替代97版的通信协议的,但是目前很多厂家的电表是支持这两种通信协议的,目前新表主流还是07版的,下面就解析这种通信协议:


DL/T645-07:



注意事项:

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

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

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

(4)数据与传输运算方式:主站加0x33,从站减0x33。

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


1、读表地址

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



这个表的出厂地址为:8866126775,虽然在协议里,表是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、读当前正向有功总电量

命令:FE FE FE FE 68 75 67 12 66 88 00 68 11 04 33 33 34 33 C6 16

其中: 75 67 12 66 88 00 是表地址,传输次序是低在前,高在后,而且是十六进制。

    11-控制码(读数据命令)。



   04-数据域长度为4

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



所以,传输次序-低在前,高在后,然后再加0x33,就是33 33 34 33了。

返回数据:68 75 67 12 66 88 00 68 91 08 33 33 34 33 A4 56 79 38 F5 16  

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

其中:75 67 12 66 88 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度