(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,電表顯示的就是這個值,所以符合協議。