西門子S7 200與單片機(jī)Modbus 485 通訊
S7 200與單片機(jī)通過Modbus 485 通訊,知道從站單片機(jī)地址為01 03 01 01 31 88,01 02 01 00 00 02 F8 37,怎么確定Modbus地址
1、
01 03 01 01 31 88 不是MODBUS RTU 03 功能碼的請求幀,最后兩個字節(jié)31 88是CRC 校驗,驗證了一下確實是前面四個字節(jié) 01 03 01 01 的檢驗碼。應(yīng)該還有兩個字節(jié)的數(shù)據(jù)個數(shù)才符合 MDOBUS RTU 03 功能碼的請求幀,是不是貼錯了。就這個解釋如下
01 03 01 01 這四個字節(jié):
第1個字節(jié) 01 是設(shè)備地址
第2個字節(jié) 03 是功能碼,讀保持寄存器
第3、4個字節(jié) 01 01 是保持寄存器地址,先轉(zhuǎn)換成十進(jìn)制,那就是257,再加上1就是 258,然后在最前面加上保持寄存器地址標(biāo)識 4,并湊夠5位數(shù),則是 40258。至于 40258 是200 側(cè)保持區(qū)那一個那還要看200 側(cè)的保持寄存器區(qū)是怎么定義的。
2、
01 02 01 00 00 02 F8 37 經(jīng)驗證是完整的,讀從站的數(shù)字量輸入。
第1個字節(jié) 01 是設(shè)備地址
第2個字節(jié) 02 是功能碼,讀從站數(shù)字量輸入
第3、4個字節(jié) 01 00,就是地址,轉(zhuǎn)換成十進(jìn)制,就是 256,再加上 1,則為 257,再在最前面加上區(qū)域標(biāo)識,則地址為 10257。
257 是不是超出了 200 的過程映像區(qū)的大小?
https://www.ad.siemens.com.cn/productportal/Prods/s7-200-portal/MicroPower2013/Smart%20SMS/019.html
第一個數(shù)據(jù)為站地址,第二個是功能嘛,所以單片機(jī)應(yīng)該站地址是1,使用03功能碼讀單片機(jī)數(shù)據(jù),數(shù)據(jù)開始地址01,PLC中地址40001+1=40002,數(shù)據(jù)長度1,直接調(diào)用MSG指令讀即可。
第二個指令是讀單片機(jī)輸入?yún)^(qū),站地址1,數(shù)據(jù)地址10001+100HEX=10257,數(shù)據(jù)長度2,用MSG指令讀即可。
注意端口波特率設(shè)置,為MODBUS庫指令分配好V區(qū)。