找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2956|回復(fù): 0
收起左側(cè)

ModbusRTU模式和結(jié)束符

[復(fù)制鏈接]
ID:104126 發(fā)表于 2016-1-23 03:04 | 顯示全部樓層 |閱讀模式
                        
Modbus RTU模式的協(xié)議字段
起始位
設(shè)備地址
功能碼
數(shù)據(jù)
CRC校驗
結(jié)束符
至少3.5個字符
8bit
8bit
N*8bit
16bit
至少3.5個字符
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ù)幀不完整。


回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表