1. 程式人生 > >MODBUS協議整理:功能碼簡述 報文分析

MODBUS協議整理:功能碼簡述 報文分析

1.MODBUS功能碼簡述

    下表列出MODBUS支援的部分功能程式碼:以十進位制表示。

表1.1 MODBUS部分功能碼

程式碼

中文名稱

暫存器PLC地址

位操作/字操作

運算元量

01

讀線圈狀態

00001-09999

位操作

單個或多個

02

讀離散輸入狀態

10001-19999

位操作

單個或多個

03

讀保持暫存器

40001-49999

字操作

單個或多個

04

讀輸入暫存器

30001-39999

字操作

單個或多個

05

寫單個線圈

00001-09999

位操作

單個

06

寫單個保持暫存器

40001-49999

字操作

單個

15

寫多個線圈

00001-09999

位操作

多個

16

寫多個保持暫存器

40001-49999

字操作

多個

1.1功能碼說明

    功能碼可以分為位操作和字操作兩類。位操作的最小單位為BIT,字操作的最小單位為兩個位元組。

        【位操作指令】    讀線圈狀態01H,讀(離散)輸入狀態02H,寫單個線圈06H和寫多個線圈0FH。

        【字操作指令】    讀保持暫存器03H,寫單個暫存器06H,寫多個保持暫存器10H。

1.2暫存器地址分配

表1.2 MODBUS暫存器地址分配

暫存器PLC地址

暫存器協議地址

適用功能

暫存器種類

讀寫狀態

00001-09999

0000H-FFFFH

01H 05H 0FH

線圈狀態

可讀可寫

10001-19999

0000H-FFFFH

02H

離散輸入狀態

可讀

30001-39999

0000H-FFFFH

04H

輸入暫存器

可讀

40001-49999

0000H-FFFFH

03H 06H 0FH

保持暫存器

可讀可寫

1.3暫存器種類說明

表1.3 MODBUS暫存器種類說明

暫存器種類

說明

PLC類比

舉例說明

線圈

狀態

輸出埠。可設定埠的輸出狀態,也可以讀取該位的輸出狀態。可分為兩種不同的執行狀態,例如保持型或邊沿觸發型。

DO

數字量輸出

電磁閥輸出,MOSFET輸出,LED顯示等。

離散

輸入狀態

輸入埠。通過外部設定改變輸入狀態,可讀但不可寫。

DI

數字量輸入

撥碼開關,接近開關等。

保持

暫存器

輸出引數或保持引數,控制器執行時被設定的某些引數。可讀可寫。

AO

模擬量輸出

模擬量輸出設定值,PID執行引數,變數閥輸出大小,感測器報警上限下限。

輸入

暫存器

輸入引數。控制器執行時從外部裝置獲得的引數。可讀但不可寫。

AI

模擬量輸入

模擬量輸入


1.4 PLC地址和協議地址區別

    PLC地址可以理解為協議地址的變種,在觸控式螢幕和PLC程式設計中應用較為廣泛。

1.4.1 暫存器PLC地址

    暫存器PLC地址指存放於控制器中的地址,這些控制器可以是PLC,也可以使觸控式螢幕,或是文字顯示器。PLC地址一般採用10進位制描述,共有5位,其中第一位程式碼暫存器型別。第一位數字和暫存器型別的對應關係如表1所示。PLC地址例如40001、30002等。

1.4.2 暫存器協議地址

    暫存器協議地址指指通訊時使用的暫存器地址,例如PLC地址40001對應定址地址0x0000,40002對應定址地址0x0001,暫存器定址地址一般使用16進位制描述。再如,PLC暫存器地址40003對應協議地址0002,PLC暫存器地址30003對應協議地址0002,雖然兩個PLC暫存器暫存器通訊時使用相同的地址,但是需要使用不同的命令訪問,所以訪問時不存在衝突。

2.報文解析

ModBusTcp與序列鏈路Modbus的資料域是一致的,具體資料域可以參考序列modbus。這裡給出幾個ModbusTcp的鏈路解析說明,輔助新人分析報文。

2.1、資料請求

97 76 00 00 00 06 04 04 00 7D 00 7D

示例

長度

說明

備註

Map報文頭

0x97

1

事務處理識別符號Hi

客戶機發起,伺服器複製,用於事務處理配對

0x96

1

事務處理識別符號Lo

0x0000

2

協議識別符號號

客戶機發起,伺服器複製

Modbus協議 = 0.

0x0006

2

長度

從本位元組下一個到最後

0x04

1

單元識別符號

客戶機發起,伺服器複製

串列埠鏈路或其他總線上遠端終端標識

功能碼

0x04

1

功能碼,讀暫存器

參考標準modbus協議

資料

0x007D

2

起始地址

0x 007D

2

暫存器數量

校驗

2.2、資料請求回覆

97 76 00 00 00 FD 04 04 FA AB 9E 41 18 7A E1 3F 94 7A E1 3F 94 0A 3D 3F 97 51 EC 3F 98 CC CD C0 6C 33 33 C0 E3 CC CD C0 EC EB 85 41 F1 D7 0A 41 E9 47 AE 41 ED EB 85 41 F1 19 9A 43 D0 E6 66 43 C9 4C CD 43 CF EB 85 41 F3 66 66 42 0F CC CD 41 C2 E6 66 44 0A 1E B8 41 FB A3 D7 42 0C CC CD 41 BC C0 00 44 0A B8 52 41 F6 5C 29 42 0F 47 AE 41 D1 C6 66 44 0A 00 00 00 00 C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F 05 16 00 00 04 11 00 00 05 16 00 00 04 11 00 00 05 16 00 00 04 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0A 00 0A 00 0A 00 0A 00 04 00 04 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0F

示例

長度

說明

備註

Map報文頭

0x97

1

事務處理識別符號Hi

客戶機發起,伺服器複製,用於事務處理配對

0x96

1

事務處理識別符號Lo

0x0000

2

協議識別符號號

客戶機發起,伺服器複製

Modbus協議 = 0.

0x00FD

2

長度

從本位元組下一個到最後

0x04

1

單元識別符號

客戶機發起,伺服器複製

串列埠鏈路或其他總線上遠端終端標識

功能碼

0x04

1

功能碼,讀暫存器

參考標準modbus協議

資料

0x FA

1

位元組個數

0x----

資料

校驗

2.3、寫多個暫存器

97 79 00 00 00 09 04 10 00 00 00 01 02 00 01

示例

長度

說明

備註

Map報文頭

0x97

1

事務處理識別符號Hi

客戶機發起,伺服器複製,用於事務處理配對

0x79

1

事務處理識別符號Lo

0x0000

2

協議識別符號號

客戶機發起,伺服器複製

Modbus協議 = 0.

0x0009

2

長度

從本位元組下一個到最後

0x04

1

單元識別符號

客戶機發起,伺服器複製

串列埠鏈路或其他總線上遠端終端標識

功能碼

0x10

1

功能碼,讀暫存器

參考標準modbus協議

資料

0x0000

2

起始地址

0x 0001

2

寫暫存器數量

0x 02

1

寫位元組的個數

00 01

2

目標值

校驗

2.4、寫多個暫存器響應

97 79 00 00 00 06 04 10 00 00 00 01

示例

長度

說明

備註

Map報文頭

0x97

1

事務處理識別符號Hi

客戶機發起,伺服器複製,用於事務處理配對

0x79

1

事務處理識別符號Lo

0x0000

2

協議識別符號號

客戶機發起,伺服器複製

Modbus協議 = 0.

0x0006

2

長度

從本位元組下一個到最後

0x04

1

單元識別符號

客戶機發起,伺服器複製

串列埠鏈路或其他總線上遠端終端標識

功能碼

0x10

1

功能碼,讀暫存器

參考標準modbus協議

資料

0x0000

2

起始地址

0x 0001

2

暫存器個數

校驗