1. 程式人生 > >Modbus 通訊協議資料幀之間的時間停頓間隔 “3.5字元”定義

Modbus 通訊協議資料幀之間的時間停頓間隔 “3.5字元”定義

版權宣告:本文為博主原創文章,轉載請註明出處 http://blog.csdn.net/lusirking,所有文章同步在公眾號“Qt開發社群”釋出 https://blog.csdn.net/lusirking/article/details/53212195


Modbus 通訊時規定主機發送完一組命令必須間隔3.5個字元再發送下一組新命令,這個3.5字元主要用來告訴其他裝置這次命令(資料)已結束,而這個3.5字元的時間間隔採用以下方式計算:

1個字元包括1位起始位、8位資料位(一般情況)、1位校驗位(或者沒有)、1位停止位(一般情況下)
這樣說起來一般情況下1個字元就包括11位
那麼3.5個字元就是3.5*11=38.5位

還有比如沒有校驗位的
1個字元包括1位起始位、8位資料位(一般情況)、1位停止位(一般情況下)

這樣說起來一般情況下1個字元就包括10位
那麼3.5個字元就是3.5*10=35位

波特率含義是每秒傳輸的二進位制位的個數
比如9600bps,意思就是說每1秒(也就是1000毫秒)傳輸9600個位,
反過來說傳輸9600個二進位制位需要1000毫秒
那麼傳輸38.5個二進位制位需要的時間就是:
38.5/9.6=4.0104167毫秒
MODBUS RTU要求一幀資料起始和結束至少有大於等於3.5個字元的時間
在波特率為9600的情況下,只要大於4.0104167毫秒即可!

一般,為了簡單起見,可以將傳輸45Bit的時間四捨五入後的整型值作為兩個資料幀之間的時間間隔,並以此來判斷報文接收的完整性。
--------------------- 
作者:lusirking 
來源:CSDN 
原文:https://blog.csdn.net/lusirking/article/details/53212195 
版權宣告:本文為博主原創文章,轉載請附上博文連結!

總結:

1  串列埠傳送一幀資料時,兩個位元組的間隔時間是必須小於3.5個字元 時間 否則就算兩個位元組不處於同一幀資料中。

2  波特率:傳送二進位制資料位的速率,習慣上用 baud 表示,即我們傳送一位二進位制資料的持續時間=1/baud。波特率不同 ,那麼 3.5個字元的時間也不同。

3 rs485串列埠配不一樣就會導致一個位元組的bit位數不一樣就會導致3.5個字元時間不一樣。

4 總線上的接收資料長度與3.5個字元時間無關。不管你一幀資料有多長 但是位元組之間的傳送時間一定要滿足小於等於3.5個字元即可