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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

标准Modbus通讯协议格式

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

Modbus協議是請求/應答通信協議,其中功能碼主要用于表述該數據報文執行的功能,當服務器對客戶機進行響應時,它使用功能碼域來指示正常響應(無差錯)或者異常響應(即出現某種差錯)。


功能碼說明

Modbus協議處理的所有數據按照存儲數據的類型可分為位寄存器(1bit)和16位寄存器(16bit)。因此功能碼可分為位操作和字操作兩類。位操作的最小單位是bit,字操作的最小單位是兩個字節。

寄存器功能碼說明

寄存器種類說明

Modbus RTU報文幀格式 

地址碼(1字節) + 功能碼(1字節)+ 數據區(0~252字節) + 錯誤校驗碼(2字節)
  • 1
  • 1
  • 地址碼
    地址碼為通信的第一字節,每個從站都有一個唯一的地址碼,只有符合主站發送的地址碼的從站才能響應回送。地址0為廣播地址,所有的從站都能識別,但不做響應,從站的地址范圍為(1~247)。
  • 數據區
    數據區根據功能碼的不同而不同。下面會結合功能碼介紹。
  • 校驗碼
    主站或從站通過校驗碼判別報文在通訊過程中是否出錯。RTU報文使用CRC檢測,ASCII報文使用LRC檢測。
  • 功能碼

  • <1>功能碼01(0x01) 讀線圈狀態

    發送:

    從站地址功能碼起始地址線圈數量CRC
    1字節(1~147)1字節(0x1)2字節(0x0000~0xFFFF)2字節(1~2000)2字節

    接收:

    從站地址功能碼字節數線圈狀態CRC
    1字節(1~147)1字節(0x1)1字節(N)N字節2字節

    N=讀取線圈個數/8,如果余數不為0則N=N+1。

    例子:
    發送: 01 01 00 00 00 19 FD C0 (讀取25個線圈的狀態)
    接收: 01 01 04 0F 03 80 01 A8 C5


    <2>功能碼02(0x02) 讀取輸入狀態
    發送:

    從站地址功能碼起始地址輸入點數量CRC
    1字節(1~147)1字節(0x2)2字節(0x0000~0xFFFF)2字節(1~2000)2字節

    接收:

    從站地址功能碼字節數輸入點狀態CRC
    1字節(1~147)1字節(0x2)1字節(N)N字節2字節

    N=讀取線圈個數/8,如果余數不為0則N=N+1。

    例子:
    發送: 01 02 00 00 00 19 B9 C0 (讀取25個輸入線圈的狀態)
    接收: 01 02 04 00 00


    <3>功能碼03(0x03) 讀保持寄存器

    發送:

    從站地址功能碼起始地址寄存器數量CRC
    1字節(1~147)1字節(0x3)2字節(0x0000~0xFFFF)2字節( 1~125)2字節

    接收:

    從站地址功能碼字節數寄存器值CRC
    1字節(1~147)1字節(0x3)1字節(N)2*N字節2字節

    N=寄存器的數量,03碼每個寄存器是16位的。

    不難看出03碼的發送接收規律,主站發送為固定格式的8字節長度數據,從站返回長度隨主站讀取個數的不同而不同。
    這里舉個例子:主站向從站地址為01的設備,請求從設備地址 00 00 處讀取3個寄存器的值。從站接受到請后,返回主站讀取到的3個寄存器的值,每個寄存器由2個字節組成。

    發送:01 03 00 00 00 03 05 CB
    接收:01 03 06 01 2C 01 2C 01 2C 71 1A


    <4>功能碼05(0x05) 寫單一線圈
    發送:

    從站地址功能碼線圈地址寫入值CRC
    1字節(1~147)1字節(0x5)2字節(0x0000~0xFFFF)2字節2字節

    線圈寫入值只能為0x0000或0xFF00

    接收:

    從站地址功能碼線圈地址寫入值CRC
    1字節(1~147)1字節(0x5)2字節(0x0000~0xFFFF)2字節2字節

    05碼的發送和接收相同。

    發送:01 05 00 00 FF 00 8C 3A (寫單個線圈的值,把地址為0的線圈置1)
    接收:01 05 00 00 FF 00 8C 3A


    <5>功能碼06(0x06) 寫單一寄存器
    發送:

    從站地址功能碼寄存器地址寫入值CRC
    1字節(1~147)1字節(0x6)2字節(0x0000~0xFFFF)2字節( 0x0000~0xFFFF)2字節

    接收:

    從站地址功能碼寄存器地址寫入值CRC
    1字節(1~147)1字節(0x6)2字節(0x0000~0xFFFF)2字節( 0x0000~0xFFFF)2字節

    06碼的發送和接收相同。

    發送: 01 06 00 00 00 0A 09 CD (往地址為0的寄存器寫入10)
    接收: 01 06 00 00 00 0A 09 CD


    <6>功能碼15(0x0F) 寫多線圈
    發送:

    從站地址功能碼起始地址寫入線圈個數寫入字節數寫入值CRC
    1字節(1~147)1字節(0xF)2字節(0x0000~0xFFFF)2字節( 0x0001~0x07B0)1字節(N)N字節2字節

    N=讀取線圈個數/8,如果余數不為0則N=N+1。

    接收:

    從站地址功能碼起始地址寫入線圈個數CRC
    1字節(1~147)1字節(0xF)2字節(0x0000~0xFFFF)2字節( 0x0001~0x07B0)2字節

    發送: 01 0F 00 00 00 0A 02 01 01 25 68
    返回: 01 0F 00 00 00 0A D5 CC


    <7>功能碼16(0x10) 寫多寄存器
    發送:

    從站地址功能碼起始地址寫入寄存器個數寫入字節數寫入值CRC
    1字節(1~147)1字節(0x10)2字節(0x0000~0xFFFF)2字節( 0x0001~0x07B0)1字節(N)2*N字節2字節

    接收:

    從站地址功能碼起始地址寫入寄存器個數CRC
    1字節(1~147)1字節(0x10)2字節(0x0000~0xFFFF)2字節( 0x0001~0x07B0)2字節

    發送:01 10 00 00 00 02 04 00 01 00 02 23 AE
    接收:01 10 00 00 00 02 41 C8


    總結

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

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