Modbus RTU模式的協議字段 Modbus協議RTU模式要求每一幀的起始和結束都以至少3.5個字符為間隔。 每個字符間隔是字符位數/波特率,以1位起始位,8位數據,1位停止位,無奇偶校驗位的10位數據。 以波特率為9600b/s為例,字符間隔為1.04ms,也就是每一幀的開始和結束都伴隨著至少3.5*1.04=3.64ms的時間間隔。 在字節流中以1.5個字符時間作為幀間間隔,以上面的通信速率,則1.5*1.04=1.56ms,即字符流中出現1.56ms的間隔時可能意味著一幀數據結束。 但必須同時滿足其后的一段時間內(2個字符)不會再接收到字符,否則認為結束的該幀為錯誤幀。 由于收到的每個字節都有可能成為一幀數據的最后一個字節,因此,每接收一個字節,關閉上一個已經開啟的3.5個字符時間和1.5個字符時間的定時器,處理完接收到得數據后再次啟動3.5個字符時間和1.5個字符時間的定時器,以檢測該幀數據的結束。 這也就是上面所說的在幀間間隔后的一段時間內(2個字符)不能接收到數據,否則該幀為錯誤幀。1.5個字符時間和3.5個字符時間的定時起點是一致的,這是Modbus協議RTU模式的關鍵之處。 當然這也增加了系統的中斷負荷。在發生1.5個字符時間中斷后,處理其接收到得數據(這里未考慮設備地址、超時、奇偶校驗等錯誤),計算接收到的字符數-2個字節的CRC校驗和,將計算結果與接收到得最后兩個字節(當做發送的CRC校驗)進行比較,從而得知這是否是完整的一幀數據。CRC校驗正確,說明這是一幀完整的數據,CRC校驗錯誤,說明這是一幀錯誤的數據幀,數據幀不完整。
|