DLT645-2007多功能电表通信规约
中华⼈民共和国电⼒⾏业标准 DL/T 645-2007 多功能电表通信规约解析 最近在给⼀家企业做能源管理系统(EMS),⽤C#做上位机采集⽤电、⽤⽔、⽤汽等信息,其中常⽤的接线⽅式为RS485,常⽤通信协议为MODBUS协议。
在做电能表数据采集的时候,电表的协议是 DL/T 645-2007,之前花了好多时间寻资料,解析协议,所以特此记录⼀下。全球地震带分布图
整个EMS系统的通信⽅式为:
主机发送请求——从机接收请求——从机返回数据——主机接收数据 下图是实际在⼚区中安装的⼀块电能表,我印象中这种表好像是宁波三星⽣产的(不是韩国那个三星)。
这块电能表的编号(条形码)是:20200211849964,这⼀串编号中包含了这块表的地址。 编号的最后12个数字是 20 02 11 84 99 64
这12个数字两两⼀组,颠倒顺序:64 99 84 11 02 20,这就是这块表的地址
以下数据均为16进制数据
读正向有功总电能
主机发送:FE FE FE FE 68 64 99 84 11 02 20 68 11 04 33 33 34 33 66 16
从机返回:FE FE FE FE 68 64 99 84 11 02 20 68 91 08 33 33 34 33 66 37 33 33 ED 16
请求的命令:FE FE FE FE6864 99 84 11 02 20681104 33 33 34 33 66 16
FE FE FE FE 唤醒接收⽅,发送⼀个或多个FE(发4个正好凑够20字节)。
68 帧起始符,规定68。
才利民>黑箱方法64 99 84 11 02 20 地址域,上⾯的地址。
68 帧起始符,规定68。
11 控制码,11代表读取数据。
04 数据长度,长度是多少看协议。
33 33 34 33 数据域(这个计算⽐较复杂,以后再说)
7D 校验码(8位校验和)
16 结束符,规定是16
城市让生活更糟糕返回的数据:FE FE FE FE 68 64 99 84 11 02 20 68 910833 33 34 33 66 37 33 33ED 16
FE FE FE FE 唤醒接收⽅(同上)
68 帧起始符(同上)
68 93 38 18 80 00 地址,表号按两位拆分后倒序排列(同上)
68 帧起始符(同上)
91 控制码(91⽆后续数据帧,B1有后续数据帧)
08 返回的数据长度
33 33 34 33 数据域
64 34 34 33 数据域(真正的数据,这才是需要解析的数据)
ED 校验码(8位校验和)
独享体罚之秘密16 结束符(同上)
理论上来说,是这样,但是在实际的调试过程中,地址并不是这样
地址是 64 99 84 11 00 00 只⽤到了最后8个数字。
实际发送:FE FE FE FE 68 64 99 84 11 00 00 68 11 04 33 33 34 33 44 16
实际接收:FE 68 64 99 84 11 00 00 68 91 08 33 33 34 33 66 37 33 33 CB 16
XCOM调试界⾯:
返回的数据起始也只有⼀个FE。
初除此之外,另外⼀个⼚家⽣产的电能表,同样⽀持DL/T 645-2007协议的表,其地址⼜不相同
编号:1808359810008897
发送:FE FE FE FE 68 97 88 00 00 00 00 68 11 04 33 33 34 33 D1 16马俏
返回:FE 68 97 88 00 00 00 00 68 91 08 33 33 34 33 B9 54 54 33 E9 16
这⾥只⽤了编号的最后4位数字(两两倒序)作为地址。
虽然发送和返回的数据都遵守DL/T 645-2007通信规约,但地址是多少,还需要根据具体的电能表来测试。