在介紹Modbus RTU數(shù)據(jù)幀格式之前,首先讓我們先了解一下Modbus的通訊模式。
Modbus通訊模式
Modbus協(xié)議是典型的主-從通訊結(jié)構(gòu),鏈路中只能有一臺主設(shè)備,可以有多臺從設(shè)備。主設(shè)備向從設(shè)備發(fā)送請求指令,從設(shè)備對該指令進行響應(yīng)。從設(shè)備不能主動向主設(shè)備發(fā)送指令,并且從設(shè)備之間也不能進行通信。
Modbus協(xié)議通過這些請求、響應(yīng)指令,實現(xiàn)了主設(shè)備對從設(shè)備中數(shù)字量或模擬量數(shù)據(jù)的訪問和控制。通常,主設(shè)備是人機界面、監(jiān)控或數(shù)據(jù)采集系統(tǒng),從設(shè)備是傳感器、可編程自動化控制器、智能儀器儀表等。
Modbus數(shù)據(jù)幀格式
知道了Modbus是典型的主-從式通訊方式后,我們再來看Modbus RTU數(shù)據(jù)幀格式。Modbus RTU數(shù)據(jù)幀由四部分組成,設(shè)備地址,功能碼,數(shù)據(jù)和校驗。
設(shè)備地址占1個字節(jié),范圍是0~255之間。0是廣播地址,1~247是從站設(shè)備地址,248~255保留不用。
功能碼占1個字節(jié),由協(xié)議明確規(guī)定,表中列出了一些常用的功能碼。譬如03功能碼是讀保持寄存器,16功能碼是寫多個寄存器。
數(shù)據(jù)部分0~252字節(jié),其長度和內(nèi)容由功能碼決定。功能碼不同,數(shù)據(jù)部分的定義不盡相同。
校驗2個字節(jié),由發(fā)送設(shè)備計算,將校驗碼之前的數(shù)據(jù)按照CRC16算法進行計算,生成2個字節(jié)的數(shù)據(jù),放置于發(fā)送信息的尾部。接受信息的設(shè)備再重新計算接收到的信息的CRC碼,比較計算得到的CRC碼是否與接收到的相符,如果不相符,則表明數(shù)據(jù)在傳輸過程中出錯。通過數(shù)據(jù)校驗增加了系統(tǒng)的安全與效率。
常用功能碼數(shù)據(jù)幀格式
1) 功能碼-0x04(讀輸入寄存器)
舉例:讀取2號站,30008~30009 2個輸入寄存器的數(shù)值。
Modbus RTU主站設(shè)備請求幀格式:
2號站設(shè)備響應(yīng)幀格式:
2) 功能碼-0x10(寫多個寄存器)
舉例:向2號站,40002~40003 2個保持寄存器分別寫入0x000A,0x0102數(shù)值
Modbus RTU主站設(shè)備請求幀格式:
2號站設(shè)備響應(yīng)幀格式:
3) 功能碼-0x02(讀離散量輸入)
舉例:讀取2號站,10197~10218 22個離散量的狀態(tài)。
Modbus RTU主站設(shè)備請求幀格式:
2號站設(shè)備響應(yīng)幀格式:
數(shù)據(jù)傳輸模式
通過前面的介紹,可以看到Modbus RTU協(xié)議數(shù)據(jù)幀是沒有起始符和結(jié)束符,所以兩個數(shù)據(jù)幀之間需要靠時間間隔來區(qū)分。協(xié)議中規(guī)定信息幀發(fā)送至少要有3.5個字符時間的停頓間隔。即在一個數(shù)據(jù)幀的最后一個字符傳輸完成之后,需要至少3.5個字符時間的停頓標定數(shù)據(jù)幀的結(jié)束,一個新的數(shù)據(jù)幀可在此停頓之后開始。如果一個新消息在小于3.5個字符時間內(nèi)接著前個消息開始,接受的設(shè)備將認為它是前一數(shù)據(jù)幀的延續(xù),這將導(dǎo)致CRC校驗出錯。同時整個數(shù)據(jù)幀必須作為一連續(xù)的流傳輸。如果在幀完成之前有超過1.5字符時間的停頓時間,接受設(shè)備將刷新不完整的數(shù)據(jù)幀從而認為存在丟包現(xiàn)象。
那么一個字符是什么呢,他由1個bit起始位,8bit數(shù)據(jù)位,1個bit奇偶校驗位,1個bit停止位組成,在發(fā)送時從起始位開始。
謝謝您看到這里
您距離成為工業(yè)通信大神更近了一步~