一、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 異常碼
異常處理包括非法功能碼、非法地址、非法資料值和裝置故障等。
報文示例:
讀多個暫存器:
寫單個暫存器: