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