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