cp341做modbus RTU主站,讀上來(lái)的數(shù)據(jù)在DB塊中存放的問(wèn)題
劉玉蓉
發(fā)布于2014-11-03 17:17
305
0
標(biāo)簽:
用cp341做主站,讀儀表的數(shù)據(jù),讀上來(lái)后存放在DB塊中。儀表數(shù)據(jù)是按照Byte讀的,假設(shè)從0001地址開(kāi)始讀,讀2個(gè)byte,存放到DB中后,打開(kāi)看是這樣的:
地址 名稱 類型 初始值 實(shí)際值
0.0 Receive_data[1] BYTE B#16#0 B#16#0
1.0 Receive_data[2] BYTE B#16#0 B#16#62
2.0 Receive_data[3] BYTE B#16#0 B#16#0
3.0 Receive_data[4] BYTE B#16#0 B#16#20
從DB塊來(lái)看,好像讀上來(lái)的每個(gè)byte前面都加上了一個(gè)空的byte,難道是自動(dòng)把byte轉(zhuǎn)成了word型?
佳答案
在MODBUS RTU組態(tài)輸出寄存器數(shù)據(jù)區(qū)時(shí),數(shù)據(jù)的傳送以字為單位,對(duì)應(yīng)西門(mén)子控制器數(shù)據(jù)塊區(qū),如用戶地址區(qū)為30001 – 30008,對(duì)應(yīng)西門(mén)子控制器數(shù)據(jù)區(qū)為DB1.DBW0 – DB1.DBW14, 數(shù)據(jù)塊號(hào)可以修改。由于數(shù)據(jù)塊DB的數(shù)據(jù)類型定義為字節(jié)BYTE,在傳送到數(shù)據(jù)塊時(shí),將某個(gè)值(以字為單位)傳送到不同長(zhǎng)度的數(shù)據(jù)類型(字節(jié)BYTE)時(shí),會(huì)根據(jù)需要將高位字節(jié)以零填充,所以在讀上來(lái)的每個(gè)BYTE前面都加上一個(gè)空的BYTE。