日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ModbusTCP协议

發布時間:2023/12/14 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ModbusTCP协议 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Modbus由MODICON公司于1979年開發,是一種工業現場總線協議標準。1996年施耐德公司推出基于以太網TCP/IP的Modbus協議:ModbusTCP。

Modbus協議是一項應用層報文傳輸協議,包括ASCII、RTU、TCP三種報文類型。

標準的Modbus協議物理層接口有RS232、RS422、RS485和以太網接口,采用master/slave方式通信。

ModbusTCP的數據幀可分為兩部分:MBAP+PDU。

報文頭MBAP

MBAP為報文頭,長度為7字節,組成如下:

事務處理標識

協議標識

長度

單元標識符

2字節

2字節

2字節

1字節

內容

解釋

事務處理標識

可以理解為報文的序列號,一般每次通信之后就要加1以區別不同的通信數據報文。

協議標識符

00 00表示ModbusTCP協議。

長度

表示接下來的數據長度,單位為字節。

單元標識符

可以理解為設備地址。

幀結構PDU

PDU由功能碼+數據組成。功能碼為1字節,數據長度不定,由具體功能決定。

功能碼

Modbus的操作對象有四種:線圈、離散輸入、保持寄存器、輸入寄存器。

對象

含義

線圈

PLC的輸出位,開關量,在Modbus中可讀可寫

離散量

PLC的輸入位,開關量,在Modbus中只讀

輸入寄存器

PLC中只能從模擬量輸入端改變的寄存器,在Modbus中只讀

保持寄存器

PLC中用于輸出模擬量信號的寄存器,在Modbus中可讀可寫

根據對象的不同,Modbus的功能碼有:

功能碼

含義

0x01

讀線圈

0x05

寫單個線圈

0x0F

寫多個線圈

0x02

讀離散量輸入

0x04

讀輸入寄存器

0x03

讀保持寄存器

0x06

寫單個保持寄存器

0x10

寫多個保持寄存器

說明更詳細的表

代碼

中文名稱

英文名

位操作/字操作

操作數量

01

讀線圈狀態

READ COIL STATUS

位操作

單個或多個

02

讀離散輸入狀態

READ INPUT STATUS

位操作

單個或多個

03

讀保持寄存器

READ HOLDING REGISTER

字操作

單個或多個

04

讀輸入寄存器

READ INPUT REGISTER

字操作

單個或多個

05

寫線圈狀態

WRITE SINGLE COIL

位操作

單個

06

寫單個保持寄存器

WRITE SINGLE REGISTER

字操作

單個

15

寫多個線圈

WRITE MULTIPLE COIL

位操作

多個

16

寫多個保持寄存器

WRITE MULTIPLE REGISTER

字操作

多個

PDU詳細結構

0x01:讀線圈

在從站中讀1~2000個連續線圈狀態,ON=1,OFF=0

  • 請求:MBAP 功能碼 起始地址H 起始地址L 數量H 數量L(共12字節)

  • 響應:MBAP 功能碼 數據長度 數據(一個地址的數據為1位)

  • 如:在從站0x01中,讀取開始地址為0x0002的線圈數據,讀0x0008位

    00 01 00 00 00 06 01 01 00 02 00 08

  • 回:數據長度為0x01個字節,數據為0x01,第一個線圈為ON,其余為OFF

    00 01 00 00 00 04 01 01 01 01

0x05:寫單個線圈

將從站中的一個輸出寫成ON或OFF,0xFF00請求輸出為ON,0x000請求輸出為OFF

  • 請求:MBAP 功能碼 輸出地址H 輸出地址L 輸出值H 輸出值L(共12字節)

  • 響應:MBAP 功能碼 輸出地址H 輸出地址L 輸出值H 輸出值L(共12字節)

  • 如:將地址為0x0003的線圈設為ON

    00 01 00 00 00 06 01 05 00 03 FF 00

  • 回:寫入成功

    00 01 00 00 00 06 01 05 00 03 FF 00

0x0F:寫多個線圈

將一個從站中的一個線圈序列的每個線圈都強制為ON或OFF,數據域中置1的位請求相應輸出位ON,置0的位請求響應輸出為OFF

  • 請求:MBAP 功能碼 起始地址H 起始地址L 輸出數量H 輸出數量L 字節長度 輸出值H 輸出值L

  • 響應:MBAP 功能碼 起始地址H 起始地址L 輸出數量H 輸出數量L

0x02:讀離散量輸入

從一個從站中讀1~2000個連續的離散量輸入狀態

  • 請求:MBAP 功能碼 起始地址H 起始地址L 數量H 數量L(共12字節)

  • 響應:MBAP 功能碼 數據長度 數據(長度:9+ceil(數量/8))

  • 如:從地址0x0000開始讀0x0012個離散量輸入

    00 01 00 00 00 06 01 02 00 00 00 12

  • 回:數據長度為0x03個字節,數據為0x01 04 00,表示第一個離散量輸入和第11個離散量輸入為ON,其余為OFF

    00 01 00 00 00 06 01 02 03 01 04 00

0x04:讀輸入寄存器

從一個遠程設備中讀1~2000個連續輸入寄存器

  • 請求:MBAP 功能碼 起始地址H 起始地址L 寄存器數量H 寄存器數量L(共12字節)

  • 響應:MBAP 功能碼 數據長度 寄存器數據(長度:9+寄存器數量×2)

  • 如:讀起始地址為0x0002,數量為0x0005的寄存器數據

    00 01 00 00 00 06 01 04 00 02 00 05

  • 回:數據長度為0x0A,第一個寄存器的數據為0x0c,其余為0x00

    00 01 00 00 00 0D 01 04 0A 00 0C 00 00 00 00 00 00 00 00

0x03:讀保持寄存器

從遠程設備中讀保持寄存器連續塊的內容

  • 請求:MBAP 功能碼 起始地址H 起始地址L 寄存器數量H 寄存器數量L(共12字節)

  • 響應:MBAP 功能碼 數據長度 寄存器數據(長度:9+寄存器數量×2)

  • 如:起始地址是0x0000,寄存器數量是 0x0003

    00 01 00 00 00 06 01 03 00 00 00 03

  • 回:數據長度為0x06,第一個寄存器的數據為0x21,其余為0x00

    00 01 00 00 00 09 01 03 06 00 21 00 00 00 00

0x06:寫單個保持寄存器

在一個遠程設備中寫一個保持寄存器

  • 請求:MBAP 功能碼 寄存器地址H 寄存器地址L 寄存器值H 寄存器值L(共12字節)

  • 響應:MBAP 功能碼 寄存器地址H 寄存器地址L 寄存器值H 寄存器值L(共12字節)

  • 如:向地址是0x0000的寄存器寫入數據0x000A

    00 01 00 00 00 06 01 06 00 00 00 0A

  • 回:寫入成功

    00 01 00 00 00 06 01 06 00 00 00 0A

0x10:寫多個保持寄存器

在一個遠程設備中寫連續寄存器塊(1~123個寄存器)

  • 請求:MBAP 功能碼 起始地址H 起始地址L 寄存器數量H 寄存器數量L 字節長度 寄存器值(13+寄存器數量×2)

  • 響應:MBAP 功能碼 起始地址H 起始地址L 寄存器數量H 寄存器數量L(共12字節)

  • 如:向起始地址為0x0000,數量為0x0001的寄存器寫入數據,數據長度為0x02,數據為0x000F

    00 01 00 00 00 09 01 10 00 00 00 01 02 00 0F

  • 回:寫入成功

    00 01 00 00 00 06 01 10 00 00 00 01

總結

以上是生活随笔為你收集整理的ModbusTCP协议的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。