
什么是Modbus功能碼?
簡(jiǎn)單來(lái)說(shuō),功能碼是Modbus協(xié)議的核心指令集,用來(lái)告訴從站設(shè)備(Slave)具體執(zhí)行什么操作。它們通常由一字節(jié)(8位)表示,范圍為0x01(1)到0x7F(127),其中常用的功能碼集中在0x01到0x10之間。功能碼分類清晰,既適用于讀(Read)操作,也支持寫(xiě)(Write)操作。
為了讓這部分更直觀,我們先來(lái)看下面的功能碼表:

0x01到0x04:數(shù)據(jù)讀取功能碼
這四個(gè)功能碼主要用于讀取不同類型的數(shù)據(jù),適用于從設(shè)備中獲取傳感器狀態(tài)、寄存器數(shù)據(jù)等。
◆0x01-讀線圈狀態(tài)
描述:讀取數(shù)字量輸出(DO)接點(diǎn)的狀態(tài),即線圈的通電和斷電狀態(tài)。線圈是二進(jìn)制值開(kāi)關(guān)型數(shù)據(jù)(例如繼電器狀態(tài):開(kāi)/關(guān))。主設(shè)備發(fā)送查詢幀,指定要讀取的線圈地址范圍,從站返回對(duì)應(yīng)狀態(tài)數(shù)組。
案例場(chǎng)景: 若你需要查看PLC控制中的特定燈泡是否點(diǎn)亮,就可使用這個(gè)功能碼讀取燈的線圈狀態(tài)。
◆0x02-離散輸入
描述:讀取數(shù)字量輸入(DI)接點(diǎn)的狀態(tài)(與功能碼0x01類似,但讀取的是DI接點(diǎn))。與線圈類似,但“離散輸入”是只讀的狀態(tài)數(shù)據(jù),常用于讀取傳感器的開(kāi)關(guān)信號(hào)。
◆0x03-讀保持寄存器
描述:這是Modbus中最常用的功能碼之一,用于讀取存儲(chǔ)在保持寄存器里的模擬量(例如溫度值、電表讀數(shù))。支持16位無(wú)符號(hào)整數(shù)。
案例場(chǎng)景: 你可以用此功能碼讀取現(xiàn)場(chǎng)溫度傳感器的實(shí)時(shí)溫度數(shù)據(jù)。
◆0x04-讀輸入寄存器
與0x03相似,但用于只讀寄存器(例如設(shè)備自帶的計(jì)量數(shù)據(jù)或傳感器固定參數(shù))。
0x05到0x10:數(shù)據(jù)寫(xiě)入功能碼
與讀取功能碼對(duì)應(yīng),這部分功能碼用于向從設(shè)備發(fā)送指令,進(jìn)行數(shù)據(jù)寫(xiě)入或修改。
◆0x05-寫(xiě)單個(gè)線圈
這個(gè)功能碼允許主設(shè)備改變某個(gè)線圈的狀態(tài)(開(kāi)/關(guān))。常見(jiàn)于控制場(chǎng)景,比如啟動(dòng)一個(gè)電機(jī)或關(guān)掉一個(gè)燈。
◆0x06-寫(xiě)單個(gè)寄存器
用來(lái)修改特定寄存器的值。例如將一個(gè)控制閥開(kāi)度設(shè)為50%。
◆0x0F-寫(xiě)多個(gè)線圈
支持對(duì)多個(gè)連續(xù)線圈一次性進(jìn)行改寫(xiě),可通過(guò)減少幀通信次數(shù)提升效率。
案例場(chǎng)景: 批量控制多個(gè)電機(jī)同時(shí)啟動(dòng)或停止。
◆0x10-寫(xiě)多個(gè)寄存器
這是寫(xiě)操作中最高效的功能碼之一,支持一次性向多個(gè)寄存器寫(xiě)入數(shù)據(jù)。適用于復(fù)雜場(chǎng)景,例如配置設(shè)備的多個(gè)工作參數(shù)。
Modbus功能碼的應(yīng)用案例
假設(shè)需要采集一個(gè)設(shè)備中溫度傳感器和壓力變送器數(shù)據(jù),并同時(shí)控制若干個(gè)伺服電機(jī)的運(yùn)行:
1、可以用0x03讀取溫控模塊的加熱溫度,用0x04讀取壓力變送器數(shù)據(jù)。
2、再通過(guò)0x05控制電機(jī)線圈的啟動(dòng),用0x10一次性配置多個(gè)寄存器的速度及運(yùn)行參數(shù)。
通過(guò)合理選擇Modbus功能碼,可以大幅提升設(shè)備的通信效率和控制性能。
Modbus功能碼選擇的注意事項(xiàng)
1、兼容性檢查:某些設(shè)備并不支持完整的功能碼,需要查閱設(shè)備手冊(cè)。
2、通信效率:用批量操作(如0x0F和0x10)替代單一操作(如0x05和0x06)可以減少通信次數(shù),提升運(yùn)行速度。
3、錯(cuò)誤處理:當(dāng)設(shè)備無(wú)法執(zhí)行功能碼指令時(shí),將返回異常代碼,需要在程序中妥善處理以防止中斷。
從0x01到0x10的Modbus功能碼幾乎涵蓋了讀寫(xiě)操作的所有基礎(chǔ)場(chǎng)景。對(duì)每個(gè)Modbus功能碼及其適用場(chǎng)景的熟練掌握,是高效構(gòu)建工業(yè)通信系統(tǒng)的基礎(chǔ)。它不僅提高了設(shè)備間的交互效率,還能讓故障排查和診斷更加快捷。
