MODBUS 數據格式相關記錄

串口通信格式:異步

  串口通信能夠分爲同步通信(Synchronous)和異步通信(Asynchronous)。同步通信時有一根時鐘信號,數據格式中沒有起始位和中止位;異步通信中沒有時鐘信號,數據格式中包含起始位和中止位。這次記錄內容爲使用STM32的異步通訊配置學習。學習

  串口異步傳輸一幀數據須要多個位,這些位的描述爲 起始位+數據位+校驗位+中止位。起始位是固定的 1bit ,數據位、校驗位和中止位是可配置的,常見的配置類型如:數據位可配置格式爲 5bit、6bit、7bit、8bit和9bit(PC端沒法配置9bit),STM32好像不能配置5bit和6bit;校驗位1bit,可配置爲無校驗、奇校驗、偶校驗、1校驗(Mark)和0校驗(Space),Mark校驗和Space校驗在STM32中好像不能直接配置;中止位可配置格式爲1bit、1.5bit和2bit,STM32好像都是1bit中止位。重要的提示:日常使用中,校驗位會單獨拿出來配置和介紹,可是若是開啓了校驗功能,校驗位是填充在數據位的MSB位置。意思是若是你開起了校驗位,那麼數據位須要設置爲你所須要傳輸數據的位數加一,不然可能出問題。以幾張時序圖做爲參考(第一次畫,看着彆扭):spa

  一、傳輸無校驗位3d

            

  左圖中起始位佔據1bit,數據位佔據8bit(若是設爲數據位7bit,那數據位只有7個方格,同理至5bit、6bit),中止位佔據1bit,不含校驗位,兩端表示空閒狀態,這種數據格式配置是普通使用最多見的。右圖中起始位佔據1bit,數據位佔據9bit,中止位佔據1bit,不含校驗位,兩端表示空閒狀態;通常咱們都是以字節數據傳輸,這種配置時有9bit可用,MSB這一位一般用做校驗位,並且這個校驗位能夠由用戶隨意指定;對於STM32使用者來講,雖然寄存器配置沒法直接實現Mark校驗和Space校驗,但用戶可以使用該格式手動設置MSB,充當Mark校驗或者Space校驗結果使用,由於真實的校驗結果也是放在數據位的MSB位置。blog

  二、傳輸有校驗位get

            

  左圖配置起始位1bit、數據位8bit、中止位1bit,開啓了校驗功能,校驗結果1bit佔據了數據位的MSB位置,如此當設置爲8bit數據位並且開啓了校驗功能時,用戶可傳輸有效數據只有7bit,MSB會被校驗結果強行佔據。右圖配置起始位1bit、數據位9bit、中止位1bit,開啓校驗功能,校驗結果1bit佔據MSB,用戶可傳輸有效數據爲8bit數據,剛好是經常使用的一個字節數據,因此當用戶打算開啓校驗功能並且要保留當前傳輸數據有效位不變,就要配置數據位加1。對於這個狀況,從STM32H7xx參考手冊裏截圖說明以下:同步

  對於這一點經過程序設置串口爲8bit數據位,開啓奇校驗,使用示波器探測波形進行驗證。使用串口發送0xFF數據時,示波器顯示傳輸數據爲0x7F,由於0xFF通過校驗後會把MSB的1變成0;使用串口發送0x7F數據時,示波器顯示傳輸數據爲0x7F。it

 

碼元學習:class

  百度百科裏面介紹:碼元,承載信息量的基本信號單位。在數字通訊中經常用時間間隔相同的符號來表示一個二進制數字,這樣的時間間隔內的信號稱爲(二進制)碼元。 而這個間隔被稱爲碼元長度。值得注意的是當碼元的離散狀態有大於2個時(如M大於2個) 時,此時碼元爲M進制碼元。百度

  碼元傳輸速率,又稱爲碼元速率或傳碼率。其定義爲每秒鐘傳送碼元的數目,單位爲"波特",又能夠稱爲波特率,經常使用符號"Baud"表示,簡寫爲"B"。一個碼元可能由多個位組成,因此波特率不必定等於比特率。若是一個碼元只須要表示2個級別狀態(0和1),那麼一個碼元就是一個位,此時波特率等於比特率;若是一個碼元須要表示4個級別狀態(0、一、2和3),那麼一個碼元須要兩個位表示(即一個碼元佔據兩個位,對數關係),此時波特率等於比特率的1/2。

 

 

MODBUS 超時時間:

一、兩幀之間超時時間爲3.5字符  二、一幀數據中每一個字符超時時間爲1.5字符

MODBUS 中處理一個字符至關於串口處理一幀。

超時時間根據通訊速率計算:

  串口傳輸數據時,一個碼元只佔據一個位,因此串口的波特率等於比特率。

  bps = bit / s = 位 每 秒!  

  好比串口一幀數據經常使用的通訊格式:起始位(1位) + 數據位(8位) + 校驗位(0位) + 中止位(1位) = 10(位)

  9600bps 的比特率下,串口發送字節數據速度爲 9600/10 = 960 字符/秒;

  每一個字符對應時間爲 1s / 960 ,3.5字符時間爲 3.5 * 1 / 960 = 0.0036458 s = 3.6458 ms

網上資料指明,在通訊速率等於或低於 19200 bps 時,這兩個定時必須嚴格遵照;
對於比特率大於 19200 bps 的情形, 應該使用 2 個定時的固定值 :

  字符間超時時間(t1.5)爲 750µs ,

  幀間的超時時間 (t3.5) 爲 1.750ms 。

相關文章
相關標籤/搜索