一、Modbus通信協議概述
Modbus是一種串行通信協議,是Modicon公司(現在的施耐德電氣 Schneider Electric)於1979年為使用可編程邏輯控制器(PLC)通信而發表。Modbus已經成為工業領域通信協議的標准,是工業電子設備之間非常常見的通信方式。
二、Modbus寄存器地址
1、Modbus寄存器類型
Modbus中,寄存器可以分為兩大類,分別為位變量(Coils)和整形變量(Registers)。每一種寄存器類型,根據讀寫方式的不同,又可分為兩種只讀(R)和讀寫(R/W)。


2、Modbus寄存器地址

三、Modbus功能碼

四、Modbus協議詳解
0x01(讀線圈)
請求:從機地址 功能碼 寄存器起始地址H 寄存器起始地址L 讀取數量H 讀取數量L CRCH CRCL
響應:從機地址 功能碼 字節數量 讀取數據 CRCH CRCL (一個地址的數據為1位,數據可能有多個字節)
eg1:從從機0x01中,讀取線圈寄存器起始地址為0x0001的寄存器數據,讀1位
請求:

應答:

eg2:從從機0x01中,讀取線圈寄存器起始地址為0x0000的寄存器數據,讀4位
請求:

應答:

0x02(讀離散量輸入)
請求:從機地址 功能碼 寄存器起始地址H 寄存器起始地址L 讀取數量H 讀取數量L CRCH CRCL
響應:從機地址 功能碼 字節數量 讀取數據 CRCH CRCL (一個地址的數據為1位,數據可能有多個字節)
eg:從從機0x01中,讀取離散量輸入寄存器起始地址為0x0000的寄存器數據,讀4位
請求:

應答:
0x03(讀保持寄存器)
請求:從機地址 功能碼 寄存器起始地址H 寄存器起始地址L 讀取數量H 讀取數量L CRCH CRCL
響應:從機地址 功能碼 字節數量 讀取數據 CRCH CRCL (一個地址的數據為2個字節,數據可能有多個字節)
eg1:從從機0x01中,讀取保持寄存器起始地址為0x03E8的寄存器數據,讀1個
請求:

應答:

eg2:從從機0x01中,讀取保持寄存器起始地址為0x03E8的寄存器數據,讀3個
請求:

應答:

0x04(讀輸入寄存器)
請求:從機地址 功能碼 寄存器起始地址H 寄存器起始地址L 讀取數量H 讀取數量L CRCH CRCL
響應:從機地址 功能碼 字節數量 讀取數據 CRCH CRCL (一個地址的數據為2個字節,數據可能有多個字節)
eg:從從機0x01中,讀取輸入寄存器起始地址為0x03E8的寄存器數據,讀1個
請求:

應答:

0x05(寫單個線圈)
請求:從機地址 功能碼 寄存器地址H 寄存器地址L 輸出值H 輸出值L CRCH CRCL
響應:從機地址 功能碼 寄存器地址H 寄存器地址L 輸出值H 輸出值L CRCH CRCL
eg:向從機0x01里,寫入線圈寄存器起始地址為0x0000的數據0xFF00(打開,另關閉是0x0000)
請求:

應答:

0x06(寫單個保持寄存器)
請求:從機地址 功能碼 寄存器地址H 寄存器地址L 輸出值H 輸出值L CRCH CRCL
響應:從機地址 功能碼 寄存器地址H 寄存器地址L 輸出值H 輸出值L CRCH CRCL
eg:向從機0x01里,寫入保持寄存器地址為0x03EA的數據0x0002
請求:

應答:

0x0F(寫多個線圈)
請求:從機地址 功能碼 寄存器起始地址H 寄存器起始地址L 寫入寄存器數量H 寫入寄存器數量L 字節數量 輸出值 CRCH CRCL
響應:從機地址 功能碼 寄存器起始地址H 寄存器起始地址L 寫入寄存器數量H 寫入寄存器數量L CRCH CRCL
eg:向從機0x01里,寫入線圈寄存器起始地址為0x0000的數據0xFF00(打開,另關閉是0x0000),寫入4位
請求:

應答:

0x10(寫多個保持寄存器)
請求:從機地址 功能碼 寄存器起始地址H 寄存器起始地址L 寫入寄存器數量H 寫入寄存器數量L 字節數量 輸出值 CRCH CRCL
響應:從機地址 功能碼 寄存器起始地址H 寄存器起始地址L 寫入寄存器數量H 寫入寄存器數量L CRCH CRCL
eg:向從機0x01里,寫入保持寄存器起始地址為0x03EA的數據0x00030000,寫入了2個寄存器數據
請求:

應答:

參考資料:modbus通訊協議詳解
