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