Modbus協議

xioahuhu發表於2024-08-20

一、Modbus協議

  • Modbus協議是一種軟體協議,支援RS232(硬體層協議)、RS485(硬體層協議)、TCP/IP等多種電氣介面。
  • Modbus協議標準開放、無版權要求,訊息幀格式簡單,便於廠商開發和整合。
  • Modbus可以在各種介質上傳輸,報文型別支援ASCII、RTU、TCP三種,使用串列埠傳輸時選擇ASCII(字元)和RTU模式(hex、bin),常用的是RTU模式。

二、Modbus協議格式

1.1 Modbus-RTU協議幀

  • Modbus訊息幀由地址、功能碼、資料和CRC校驗碼組成,最多256個位元組。

  • 從機地址:每個從機都有唯一地址(主機沒有地址),佔用1個位元組,範圍0-255,其中從機有效地址範圍1-247。
  • 功能碼:佔用1個位元組,用於指示資料用途,可查詢從機資料,也可修改從機資料,資料根據功能碼不同而異。
  • 資料:根據功能碼不同對應不同內容。
  • 校驗:CRC校驗用於檢測資料錯誤。

1.2 判斷一幀資料是否結束

  • Modbus協議規定兩幀資料之間要有3.5個字元的空閒間隔(3.5T)。
  • 當串列埠波特率大於19200時,3.5T固定為1750us。
  • 當串列埠波特率小於19200時,假如串列埠設定為:起始位1bit + 資料位8bit + 停止位1bit。

傳輸1個字元所需時間 t = 10 * 1000 / (baudRate) ms。
baudRate = 9600時,t = 10 * 1000 / 9600 = 1.04 ms, 3.5T = 3.64ms。

1.3 功能碼

功能碼包括讀多個暫存器、寫單個暫存器和寫多個暫存器等。暫存器是虛擬的軟體控制項,用於控制感測器、繼電器等。

1.4 異常碼

異常處理包括非法功能碼、非法地址、非法資料值和裝置故障等。

報文示例:

讀多個暫存器:

寫單個暫存器:

相關文章