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