參考一下:
modbus中的timeout超時(shí)時(shí)間,代表這個(gè)命令傳送已經(jīng)結(jié)束了
slave端可以進(jìn)行資料的解析做處理,在modbus ASCII傳送時(shí),因?yàn)槭茿SCII(字元碼)的關(guān)係
可以使用特定的字元做為結(jié)束的標(biāo)記,slave端一直接收資料,直到收到特定字元時(shí),
則代表該次傳送命令已結(jié)束,而在modbus RTU中,因?yàn)闆](méi)有特定的字元可以做標(biāo)示
因?yàn)樵诙M(jìn)制中,並沒(méi)有辦法使用哪個(gè)編碼做為特定字元(有存在衝突的可能),
所以取而代之使用時(shí)間做為結(jié)束的表示,上面所說(shuō)的3.5字節(jié)的時(shí)間,
是modbsu標(biāo)準(zhǔn)的定義,以一個(gè)baud rate 9600bps的通訊環(huán)境來(lái)說(shuō),1個(gè)字節(jié)相當(dāng)於1ms
換句話說(shuō),3.5 * 1 = 3.5ms也就是相當(dāng)於需要4ms時(shí),就可以判斷該命令已結(jié)束
但是在實(shí)際應(yīng)用中,因?yàn)橥ㄓ嵀h(huán)境的因素可能不是著麼理想(存在許多干擾的因素)
通常timeout時(shí)間我都抓在5~10字節(jié)時(shí)間,比較不會(huì)發(fā)生master尚未傳送完命令
但slave已經(jīng)關(guān)閉接收的問(wèn)題。