Modbus RTU與Modbus TCP的區別
前言
僅供自己學習記錄
1、簡介
- Modbus通訊協議具有多個變種,支援串列埠(主要是RS-485匯流排),乙太網多個版本,其中最著名的是Modbus RTU,Modbus ASCII
和Modbus TCP三種。在工業現場一般都是採用Modbus RTU協議,一般大家說的基於串列埠通訊的Modbus通訊協議都是指Modbus RTU通訊協議。
與Modbus RTU協議相比較,Modbus TCP協議則是在RTU協議上加一個MBAP報文頭,並且由於TCP是基於可靠連線的服務,RTU協議中的
CRC校驗碼就不再需要,所以在Modbus TCP協議中是沒有CRC校驗碼的,所以就常用一句比較通俗的話來說:Modbus TCP協議就是
Modbus RTU協議在前面加上五個0以及一個6,然後去掉兩個CRC校驗碼位元組就OK。雖然這句話說得不是特別準確,但是也基本上把RTU與TCP
之間的區別說得比較清楚了。
- Modbus的功能碼有:
功能碼 | 含義 | 功能碼 | 含義 |
---|---|---|---|
0x01 | 讀線圈 | 0x03 | 讀保持暫存器 |
0x05 | 寫單個線圈 | 0x04 | 讀輸入暫存器 |
0x0F | 寫多個線圈 | 0x06 | 寫單個保持暫存器 |
0x02 | 讀離散量輸入 | 0x10 | 寫多個保持暫存器 |
2、ModbusRTU
- RTU協議中的指令由地址碼(一個位元組),功能碼(一個位元組),起始地址(兩個位元組),資料(N個位元組),校驗碼(兩個位元組)五個部分組成。
資料由資料長度(兩個位元組,表示的是暫存器個數,假定為M)和資料正文(M乘以2個位元組)組成。
發:01 03 01 8E 00 04 25 DE //讀(0x03),從暫存器地址01 8E 開始讀,讀4個暫存器00 04
回:01 03 08 00 01 00 01 00 01 00 01 28 D7 // 08表示資料長度 ,00 01 00 01 00 01 00 01讀到的資料
發:00 10 00 20 00 01 02 00 00 AC A0 // 寫(0x10),從暫存器地址 00 20開始寫,寫一個暫存器 00 01,寫入值 00 00
回:00 10 00 20 00 01 01 D2
3、ModbusTCP
- Modbus TCP協議是在RTU協議前面新增MBAP報文頭,由於TCP是基於可靠連線的服務,RTU協議中的CRC校驗碼就不再需要,所以在Modbus TCP協議中是沒有CRC校驗碼。
MBAP報文頭:
事務處理標識 | 協議標識 | 長度 | 單元識別符號 |
---|---|---|---|
2位元組 | 2位元組 | 2位元組 | 1位元組 |
報頭名稱 | 解釋 |
---|---|
事務處理標識 | 可以理解為報文的序列號,一般每次通訊之後就要加1以區別不同的通訊資料報文 |
協議標識 | 00 00表示ModbusTCP協議 |
長度 | 表示接下來的資料長度,單位為位元組 |
單元識別符號 | 可以理解為裝置地址 |
發:00 00 00 00 00 06 00 03 00 20 00 01
回:00 00 00 00 00 05 00 03 02 00 00
發:00 00 00 00 00 06 00 04 00 30 00 01
回:00 00 00 00 00 05 00 04 02 00 08
發:00 00 00 00 00 09 00 10 00 20 00 01 02 00 00
回:00 00 00 00 00 06 00 10 00 20 00 01
4、總結
- 1、讀指令對比(0x04)
MBAP報文頭 | 地址碼 | 功能碼 | 暫存器地址 | 暫存器數量 | CRC校驗 | |
---|---|---|---|---|---|---|
Modbus RTU | 無 | 01 | 04 | 00 00 | 00 16 | 71 C4 |
Modbus TCP | 00 00 00 00 00 06 01 | 04 | 00 00 | 00 16 | 無 |
- 2、寫指令對比(0x10)
MBAP報文頭 | 地址碼 | 功能碼 | 暫存器地址 | 暫存器數量 | 資料長度 | 正文 | CRC校驗 | |
---|---|---|---|---|---|---|---|---|
Modbus RTU | 無 | 00 | 10 | 00 20 | 00 01 | 02 | 00 00 | AC A0 |
Modbus TCP | 00 00 00 00 00 09 00 | 10 | 00 20 | 00 01 | 02 | 00 00 | 無 |
文章轉載,原地址:https://link.csdn.net/?target=https%3A%2F%2Fwww.cnblogs.com%2Flistxue%2Fp%2F13375936.html