1. 數據類型與存儲區分類
Modbus協議將數據分為四類存儲區,通過存儲區代號區分:
-
輸出線圈(0x):可讀寫,對應二進制開關量(如繼電器狀態),地址范圍
000001-065536
(絕對地址)。 -
輸入線圈(1x):只讀,用于讀取外部設備狀態(如傳感器開關),地址范圍
100001-165536
。 -
輸入寄存器(3x):只讀,存儲16位數據(如溫度值),地址范圍
300001-365536
。 -
輸出寄存器(4x):可讀寫,用于控制設備參數(如設定頻率),地址范圍
400001-465536
。
每個存儲區最多支持65536個元素(線圈或寄存器),通過偏移量定位具體地址。
2. 地址模型
Modbus有兩種地址表示方式:
-
PLC地址模型:直接使用存儲區代號+偏移量,如
D100
表示D區第100個字,M10
表示M區第10個位。 -
Modbus地址模型:采用六位絕對地址,由存儲區代號+(偏移量+1)組成。
-
例如:
-
4區第1個寄存器 →?
400001
(絕對地址),對應偏移量0。 -
4區第100個寄存器 →?
400100
(絕對地址),對應偏移量99。
-
為何協議報文中使用相對地址?
協議報文中僅包含偏移量(從0開始),結合功能碼即可確定存儲區。若用絕對地址(如400001),可能因功能碼沖突導致歧義。
3. 長地址 vs 短地址模型
-
長地址模型:六位數地址,覆蓋全范圍(如
400001-465536
),適用于PLC等復雜系統。 -
短地址模型:五位數地址,范圍縮小(如輸出線圈
00001-09999
),常見于儀表、變頻器等簡單設備,便于配置。
示例轉換:
PLC的D100
對應Modbus長地址400100
(4區偏移量99),而短地址可能直接表示為40099
。
4. 協議分類
Modbus協議根據傳輸方式和介質分為多種類型:
-
串口通信(RS232/485/422):
-
Modbus RTU:二進制編碼,高效,使用CRC校驗。
-
Modbus ASCII:文本編碼,可讀性強,效率較低,使用LRC校驗。
-
-
以太網通信:
-
Modbus TCP:基于TCP/IP,無校驗,適用于工業以太網。
-
Modbus RTU/ASCII Over TCP/UDP:將串口協議封裝在TCP/UDP包中,兼容舊設備。
-
5. 功能碼說明
功能碼是操作指令的代號,定義了對存儲區的讀寫行為:
-
讀取操作:
-
01
:讀取輸出線圈(如繼電器狀態)。 -
02
:讀取輸入線圈(如傳感器開關)。 -
03
:讀取輸出寄存器(如讀取PLC參數)。 -
04
:讀取輸入寄存器(如采集溫度值)。
-
-
寫入操作:
-
05
:寫入單個線圈(如控制繼電器通斷)。 -
0F
:寫入多個線圈。 -
06
:寫入單個寄存器(如修改頻率設定)。 -
10
:寫入多個寄存器
-
6. 關鍵總結
-
存儲區與地址:通過功能碼+偏移量定位數據,長地址兼容全范圍,短地址簡化配置。
-
協議選擇:RTU適合高效串口通信,TCP用于以太網,ASCII便于調試。
-
功能碼核心作用:明確操作類型(讀/寫)和目標存儲區,是協議交互的核心指令。
示例應用:
若要讀取變頻器的運行頻率(存儲在輸出寄存器4x,地址400010),使用功能碼03
,發送偏移量9(因絕對地址400010對應偏移量9)。設備返回該寄存器的16位數據值。