要读任意一个电表的数据,首先要关注的不是电表的地址,而是电表所支持的通信协议,验证电表所支持的通信协议只需要两步:
1. “485接口”或“红外接口"建立连接 |
---|
-
使用RS485接口连接电表,默认波特率是2400bps或9600bps,偶校验,数据位8,停止位1。
-
使用红外接口,默认波特率是1200bps或9600bps,偶校验,数据位8,停止位1.
不管是485接口还是红外接口,在确定接口和模块没问题的情况下,如果两个波特率都无法读到数据,请查看电表说明书(应该不支持DLT645或DLT698协议)。
(精通DLT645协议和DLT698协议,Contact:xiaoyiyz)
2. 发送广播指令(通配符指令) |
---|
DLT645协议广播指令:
FE FE FE 68 AA AA AA AA AA AA 68 13 00 DF 16
FE FE FE(前缀唤醒电表)
68(起始符)
AA AA AA AA AA AA(电表地址编号通配符)
68(起始符)
13(控制码)
00(数据域长度)
DF(校验码)
16(结束符)
返回指令:
FE FE FE FE 68 14 35 09 03 12 24 68 93 06 47 68 3C 36 45 57 B1 16
68(起始符)
14 35 09 03 12 24(电表地址)
68(起始符)
93(控制码)
06(数据域长度)
47 68 3C 36 45 57(电表地址,需减0x33)
B1(校验码)
16(结束符)
DLT698协议广播指令:
68 17 00 43 45 AA AA AA AA AA AA 10 DA 5F 05 01 03 40 01 02 00 00 90 0F 16
68(起始字符)
1700(长度域)
43(控制域)
45(服务器地址标志)
AAAAAAAAAAAA(服务器地址)
10(客户机地址)
DA5F(帧头校验)
0501(读取请求GetRequestNormal)
03(PIID)
40010200(OAD)
00(时间标签域)
900F(帧校验)
16(结束字符)
返回指令:
FE FE FE FE 68 2D 00 C3 05 14 35 09 03 12 24 10 5C 20 85 01 03 40 01 02 00 01 09 06 24 12 03 09 35 14 01 01 01 33 20 02 01 01 51 30 11 02 00 00 7F 21 16
68(起始字符)
2D00(长度域)
C3(控制域)
05(服务器地址标志)
143509031224(服务器地址)
10(客户机地址)
5C20(帧头校验)
8501(GetResponseNormal)
03(PIID)
40010200(OAD)
010906(响应结果octet_string长度6)
241203093514(字符串)
010101(跟随上报信息域长度1)
33200201(OAD)
015130110200(响应结果OAD)
00(时间标签域)
7F21(帧校验)
16(结束字符)
总结 |
---|
使用RS485或红外正确连接电表,并打开串口,发送DLT645广播指令和DLT698广播指令,如果都无数据返回,切换波特率再次尝试,如果还是没有数据返回,说明电表不支持标准协议或者通信接口故障。
有些小厂家的非标准电表(可能是因为成本原因)只支持内部自己定义的Modbus协议,这种情况只能参考电表说明书。