1. 程式人生 > 其它 >Modbus RTU與Modbus TCP的區別

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