轉自:https://blog.csdn.net/lushoumin/article/details/80842455
Modbus功能碼一覽
Modbus網絡是一個工業通信系統,由帶智能終端的可編程序控制器和計算機通過公用線路或局部專用線路連接而成。其系統結構既包括硬件、亦包括軟件。它可應用於各種數據採集和過程監控。下表1是ModBus的功能碼定義。
表1 ModBus功能碼
功能碼 |
名稱 |
作用 |
01 |
讀取線圈狀態 |
取得一組邏輯線圈的當前狀態(ON/OFF) |
02 |
讀取輸入狀態 |
取得一組開關輸入的當前狀態(ON/OFF) |
03 |
讀取保持寄存器 |
在一個或多個保持寄存器中取得當前的二進制值 |
04 |
讀取輸入寄存器 |
在一個或多個輸入寄存器中取得當前的二進制值 |
05 |
強置單線圈 |
強置一個邏輯線圈的通斷狀態 |
06 |
預置單寄存器 |
把具體二進值裝入一個保持寄存器 |
07 |
讀取異常狀態 |
取得8個內部線圈的通斷狀態,這8個線圈的地址由控制器決定,用戶邏輯可以將這些線圈定義,以說明從機狀態,短報文適宜於迅速讀取狀態 |
08 |
回送診斷校驗 |
把診斷校驗報文送從機,以對通信處理進行評鑑 |
09 |
編程(只用於484) |
使主機模擬編程器作用,修改PC從機邏輯 |
10 |
控詢(只用於484) |
可使主機與一臺正在執行長程序任務從機通信,探詢該從機是否已完成其操作任務,僅在含有功能碼9的報文發送後,本功能碼才發送 |
11 |
讀取事件計數 |
可使主機發出單詢問,並隨即判定操作是否成功,尤其是該命令或其他應答產生通信錯誤時 |
12 |
讀取通信事件記錄 |
可是主機檢索每臺從機的ModBus事務處理通信事件記錄。如果某項事務處理完成,記錄會給出有關錯誤 |
13 |
編程(184/384 484 584) |
可使主機模擬編程器功能修改PC從機邏輯 |
14 |
探詢(184/384 484 584) |
可使主機與正在執行任務的從機通信,定期控詢該從機是否已完成其程序操作,僅在含有功能13的報文發送後,本功能碼才得發送 |
15 |
強置多線圈 |
強置一串連續邏輯線圈的通斷 |
16 |
預置多寄存器 |
把具體的二進制值裝入一串連續的保持寄存器 |
17 |
報告從機標識 |
可使主機判斷編址從機的類型及該從機運行指示燈的狀態 |
18 |
(884和MICRO 84) |
可使主機模擬編程功能,修改PC狀態邏輯 |
19 |
重置通信鏈路 |
發生非可修改錯誤後,是從機復位於已知狀態,可重置順序字節 |
20 |
讀取通用參數(584L) |
顯示擴展存儲器文件中的數據信息 |
21 |
寫入通用參數(584L) |
把通用參數寫入擴展存儲文件,或修改之 |
22~64 |
保留作擴展功能備用 |
|
65~72 |
保留以備用戶功能所用 |
留作用戶功能的擴展編碼 |
73~119 |
非法功能 |
|
120~127 |
保留 |
留作內部作用 |
128~255 |
保留 |
用於異常應答 |
常用功能碼詳解
01H-讀線圈狀態
1)描述:讀從機線圈寄存器,位操作,可讀單個或者多個;
2)發送指令:
假設從機地址位0x01,寄存器開始地址0x0023,寄存器結束抵制0x0038,總共讀取21個線圈。協議圖如下:
3)響應:
返回數據的每一位對應線圈狀態,1-ON,0-OFF,如下圖;
上表中data1表示0x0023-0x002a的線圈狀態,data1的最低位代表最低地址的線圈狀態,可以理解爲小端模式;
data2表示地址0x002b-0x0033的線圈狀態,如下表:
data3表示地址0x0034-0x0038的線圈狀態,不夠8位,字節高位填充爲0,如下表:
02H-讀離散輸入狀態
1):讀離散輸入寄存器,位操作,可讀單個或多個,協議類似功能碼0X01協議,此處省;
03H-讀保持寄存器
1)描述:讀保持寄存器,字節指令操作,可讀單個或者多個;
2)發送指令:
從機地址0x01,保持寄存器起始地址0x0032,讀2個保持寄存器
3)響應:
數據存儲順序
04H-讀輸入寄存器
1)描述:讀輸入寄存器,字節指令操作,可讀單個或者多個;
2)發送指令:同03H;
3)響應:同03H;
05H-寫單個線圈
1)描述:寫單個線圈,位操作,只能寫一個,寫0xff00表示設置線圈狀態爲ON,寫0x0000表示設置線圈狀態爲OFF
2)發送指令:
設置0x0032線圈爲ON;
3)響應:
同發送指令;
06H-寫單個保持寄存器
1)描述:寫單個保持寄存器,字節指令操作,只能寫一個;
2)發送指令:
寫0x0032保持寄存器爲0x1232;
3)響應:同發送指令;
0FH-寫多個線圈
1)描述:寫多個線圈寄存器。若數據區的某位值爲“1”表示被請求的相應線圈狀態爲ON,若某位值爲“0”,則爲狀態爲OFF。
2)發送指令:
線圈地址爲0x04a5,寫12個線圈,
上圖中DATA1爲0x0c,表示:
DATA2爲0x02,不夠8位,字節高位填充0:
3)響應:
10H-寫多個保持寄存器
1)描述:寫多個保持寄存器,字節指令操作,可寫多個;
2)發送指令:
保持寄存器起始地址爲0x0034,寫2個寄存器4個字節的數據;
3)響應: