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