海量数据采集——645协议解析

    该通信规约适用于本地系统中多功能表的费率装置与手持单元(HHU)或其它数据终端设备进行点对点的或一主多从的数据交换方式,规定了它们之间的物理连接、通信链路及应用技术规范。该协议在做“电力监控”、“水监控”等“工控领域”,具有广泛的应用。协议具体内容可以从网上Google,下面主要介绍下协议的解析方法。

      

     DL645协议需要先发送“前导字节”,用来唤醒从站,当然有些设备是不需要这样唤醒的。在发送帧信息之前,先发送1-4个字节FEH,以唤醒接收方("FEH",H表示16进制,是一个字节),  “前导字节”  +  “取数据报文”=“整体报文”。

首先我们先整体了解一个发送报文“68 12 34 56 78 90 12 68 01 02 43 C3 cs 16” 

在这之前呢,先看一下BCD码。

BCD码:二进制编码的十进制代码。

比如:

0=00001=00012=00103=00114=01005=01016=01107=01118=10009=1001 BCD码:ASCII表示(都是字符)
BCD码都是由0~9,10个字符构成。
也就是说,BCD码一个字节是两位,一位是0~9,一个字节能够表示00~99。 BCD码1位是2进制的4位。按16进制表示,没有ABCDEF。  发送报文

68 12 34 56 78 90 12 68 01 02 43 C3 cs 16

说明如下:

68(帧起始符)

12   34  56  78  90   12 (6字节,没字节两位,共12位地址,BCD码表示。)  

 

68(帧起始符)

01(控制码“包含功能码”= 01 = 读取数据)

02 (数据域长度,指 “43,C3”一共是两字节。) 

“43 c3” (“43 C3”是数据域,表示读取数据类型 = “10 90”, 发送报文中 数据域需要做“+0x33处理”)

cs(加校验和,一个字节,根据前面的计算)

16(帧结束符)

 

下面详细的解释下:

帧起始符(645协议规定由68H开始,16进制。)

 

0x12(BCD数值码) --- 12(string)      转为字符串0x12.ToString("X2")
0x45(BCD数值码) --- 45(string)

 

如果表地址为:000021010203(电表上看到的地址串),里面就是12位(字符串来看)
通讯时,使用 0x00, 0x00 , 0x21 ,0x01 , 0x02 , 0x03, 6个字节表示地址,但发送的时候要先发低字节,再发高字节。发送时也是“0x03,0x02,0x01, 0x21,0x00,0x00”

 

控制码:
从电脑到表具:0(主从站方向)+0(设备没问题)+0(有无后续帧)+00001(读)=1=0x1

数据域长度:表示数据域有多长

串口传输方式:所有数据项均先传送低位字节,后传送高位字节

数据域内容,也就是“数据类型+数据项”(比如电表): 1001(电能量)+00(当前)+00(有功)+0001(正向电能)+0000(总点能)


02(数据域长度)

10

90(数据域内容,两个字节) 拼接后的报文,要先发低字节(90) ,再发10. 发送报文要加上"33",最后数据域就是"10 + 33"和"90 + 33"最终就是“ 43     c3”。

02 10 90 == 02   (10 + 33)     (90 + 33) = 02   43    c3

 

返回报文:

68   12   34 56 78 90 12 68 81 06 43 c3 33 44 55 66 cs 16

68(帧起始符)
12 34 56 78 90 12(地址域)
68(帧起始符)
81(控制码,返回有功总电能“10000001”,读取数据)
06(数据域长度)
43 C3(数据域)
33  44  55  66 (数据项,四字节)

数据项要减去“33H”,根据数据类型(附录)点小数点。

33   44   55   66 (数据域数据计算) = (33 - 33) (44 - 33) (55 - 33) (66 - 33) = 00112233 = 1122.33   kWh

 

最后我们来看一个电表实例,取地址为“694561”的电表的“反相有功电能(发电量)”。

实例如下:

一、发送报文

1、电表地址:694561(地址,6位BCD码,BCD码1位是2进制的4位。按16进制表示,没有ABCDEF。不足12位,需要在高位“补0”。)。

2、完善地址:000000694561(12位BCD码)

3、前导符字节:0xFE

4、帧起始符:0x68

5、地址域:0x614569000000(第字节在前,高字节在后。DL645协议,先发低字节再发高字节。)

6、帧起始符:0x68

7、控制码:0x01(读数据1,读后续数据2,其中还包含功能码等。)

8、数据域长度:0x02(2字节)

9、待发送数据类型(数据类型放在数据域中):9(1001,电能量)+0(0000,00当前,00有功)+ 2(0010,反向电能)+0(0000,总电能)

 

更多相关资料及645程序下载,请访问:http://17zhongwen.com/dashujupingtaishujucaiji/chapter.html

你可能感兴趣的:(java)