电能表与串口助手485通信基于DLT645-2007通讯协议

(1)拿到一个数字电表,是DDS6866杭州中奈电表,想要做485通信读取电表数据,首先要知道电表的地址域也就是通信地址,地址域由6个字节构成(A0~A5),每个字节2个BCD码,每块电表都有一个唯一的通信地址。这个地址域是可以更改的,下面两个图片是更改后的电表实际地址 ,出厂默认的地址是:201602240158,现在更改为:000000000001。

 

(2)本通信是基于DLT645-2007通讯协议

通信时串口助手要设置成8位数据位,偶校验和1个停止位。我手上这块电表的波特率默认是2400bps,如果不知道波特率可以一个个试。

 

下图是控制码格式

下图是数据域编码表,详细的参考DLT645-2007通讯协议数据域为00 00 00 00是读取总电量,发送数据时每位要加上33

 

(3)下面是通信发送例子

以下的数据帧均以表地址000000000001为例:

1、广播设地址

控制字(C):15

数据:00 00 00 00 00 01

数据帧:FE FE 68 AA AA AA AA AA AA 68 15 06 34 33 33 33 33 33 1A 16

正确返回数据帧:68 01 00 00 00 00 00 68 95 00 66 16

 

2、读取总电量:

 控制字(C):11

 数据ID(DS):00 00 00 00

数据帧:FE FE 68 01 00 00 00 00 00 68 11 04 33 33 33 33 B2 16

返回数据帧:68 01 00 00 00 00 00 68 91 08 33 33 33 33 33 33 33 33 02 16

红色的部分是电量,要减33,减后为00 00 00 00 即0.00度

 

3、拉闸命令

 控制字(C):1C

 数据帧:68 01 00 00 00 00 00 68 1C 10 35 33 33 33 44 44 44 44 4D 33 45 68 47 53 43 47 2C 16

 正确返回帧: 68 01 00 00 00 00 00 68 9C 00 6D 16

 

4、合闸命令

 控制字(C):1C

 数据帧:68 01 00 00 00 00 00 68 1C 10 35 33 33 33 44 44 44 44 4E 33 45 68 47 53 43 47 2D 16

 正确返回帧: 68 01 00 00 00 00 00 68 9C 00 6D 16

 

5、读拉合闸状态

  控制字(C):11

数据ID(DS):04000503

数据帧:68 01 00 00 00 00 00 68 11 04 36 38 33 37 BE 16

正确数据返回帧:68 01 00 00 00 00 00 68 91 06 36 38 33 37 33 33 A6 16

红色部分是返回来的状态数据:33 33,要减33,即00 00 根据07协议要求,数据的字节要调换一下,即00 00,即是合闸状态。

如果红色部分返回的数据是:83 33,要减33,即50 00 根据07协议要求,数据的字节要调换一下,即00 50 即是拉闸状态。

 具体数据帧里的数据域的数据字节怎么处理请参照DL/T 645-2007标准。这里就不在具体解释了。

 

(4)下面是读取电表电量数据,通信正常图片。

波特率:2400bps

我发送数据解析:开头是68。电表地址是000000000001(发送地址时要先传送低位)。控制命令11(即读数据)。长度为04。命令为33 33 33 33(这个值要减去33H,即00 00 00 00,这个数据值,就是查电表总有功电量值)。B2是cs校验码,在我自己写的上位机程序里面是自动计算的不需要加上,如果用串口助手需要自己计算并加上。后面还要加上16结束字符;

返回的数据前面的FE忽略即可。91是应答命令(对应控制命令11,正确返回会加上0x80)。08为长度。33 33 33 33 为命令返回值。6C 33 33 33为 39 00 00 00(因为这里是数据域,需要每个字节需要减0x33,且数值为BCD码),这个值为0.39kwh,电表显示的就是这个值,所以符合协议。

 

posted @ 2020-12-11 21:48  炽热的舞者  阅读(16905)  评论(1编辑  收藏  举报