Modbus支援的功能碼

2021-06-30 16:55:05 字數 4190 閱讀 5368

modbus支援的功能碼:

下表是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

保留用於異常應答

在這些功能碼中較長使用的是1、2、3、4、5、6號功能碼,使用它們即可實現對下位機的數字量和模擬量的讀寫操作。

1、讀可讀寫數字量暫存器(線圈狀態):

計算機傳送命令:[裝置位址] [命令號01] [起始暫存器位址高8位] [低8位] [讀取的暫存器數高8位] [低8位] [crc校驗的低8位] [crc校驗的高8位]

例:[11][01][00][13][00][25][crc低][crc高]

意義如下:

<2>命令號01:讀取數字量的命令號固定為01。

<3>起始位址高8位、低8位:表示想讀取的開關量的起始位址(起始位址為0)。比如例子中的起始位址為19。

<4>暫存器數高8位、低8位:表示從起始位址開始讀多少個開關量。例子中為37個開關量。

<5>crc校驗:是從開頭一直校驗到此之前。在此協議的最後再作介紹。此處需要注意,crc校驗在命令中的高低位元組的順序和其他的相反。

裝置響應:[裝置位址] [命令號01] [返回的位元組個數][資料1][資料2]...[資料n][crc校驗的低8位] [crc校驗的高8位]

例:[11][01][05][cd][6b][b2][0e][1b][crc低][crc高]

意義如下:

<1>裝置位址和命令號和上面的相同。

<2>返回的位元組個數:表示資料的位元組個數,也就是資料1,2...n中的n的值。

<3>資料1...n:由於每乙個資料是乙個8位的數,所以每乙個資料表示8個開關量的值,每一位為0表示對應的開關斷開,為1表示閉合。比如例子中,表示20號(索引號為19)開關閉合,21號斷開,22閉合,23閉合,24斷開,25斷開,26閉合,27閉合...如果詢問的開關量不是8的整倍數,那麼最後乙個位元組的高位部分無意義,置為0。

<4>crc校驗同上。

2、讀只可讀數字量暫存器(輸入狀態):

和讀取線圈狀態類似,只是第二個位元組的命令號不再是1而是2。

3、寫數字量(線圈狀態):

計算機傳送命令:[裝置位址] [命令號05] [需下置的暫存器位址高8位] [低8位] [下置的資料高8位] [低8位] [crc校驗的低8位] [crc校驗的高8位]

例:[11][05][00][ac][ff][00][crc低][crc高]

意義如下:

<1>裝置位址和上面的相同。

<2>命令號:寫數字量的命令號固定為05。

<3>需下置的暫存器位址高8位,低8位:表明了需要下置的開關的位址。

<4>下置的資料高8位,低8位:表明需要下置的開關量的狀態。例子中為把該開關閉合。注意,此處只可以是[ff][00]表示閉合[00][00]表示斷開,其他數值非法。

<5>注意此命令一條只能下置乙個開關量的狀態。

裝置響應:如果成功把計算機傳送的命令原樣返回,否則不響應。

4、讀可讀寫模擬量暫存器(保持暫存器):

計算機傳送命令:[裝置位址] [命令號03] [起始暫存器位址高8位] [低8位] [讀取的暫存器數高8位] [低8位] [crc校驗的低8位] [crc校驗的高8位]

例:[11][03][00][6b][00][03][crc低][crc高]

意義如下:

<1>裝置位址和上面的相同。

<2>命令號:讀模擬量的命令號固定為03。

<3>起始位址高8位、低8位:表示想讀取的模擬量的起始位址(起始位址為0)。比如例子中的起始位址為107。

<4>暫存器數高8位、低8位:表示從起始位址開始讀多少個模擬量。例子中為3個模擬量。注意,在返回的資訊中乙個模擬量需要返回兩個位元組。

裝置響應:[裝置位址] [命令號03] [返回的位元組個數][資料1][資料2]...[資料n][crc校驗的低8位] [crc校驗的高8位]

例:[11][03][06][02][2b][00][00][00][64][crc低][crc高]

意義如下:

<1>裝置位址和命令號和上面的相同。

<2>返回的位元組個數:表示資料的位元組個數,也就是資料1,2...n中的n的值。例子中返回了3個模擬量的資料,因為乙個模擬量需要2個位元組所以共6個位元組。

<3>資料1...n:其中[資料1][資料2]分別是第1個模擬量的高8位和低8位,[資料3][資料4]是第2個模擬量的高8位和低8位,以此類推。例子中返回的值分別是555,0,100。

<4>crc校驗同上。

5、讀只可讀模擬量暫存器(輸入暫存器):

和讀取儲存暫存器類似,只是第二個位元組的命令號不再是2而是4。

6、寫單個模擬量暫存器(保持暫存器):

計算機傳送命令:[裝置位址] [命令號06] [需下置的暫存器位址高8位] [低8位] [下置的資料高8位] [低8位] [crc校驗的低8位] [crc校驗的高8位]

例:[11][06][00][01][00][03][crc低][crc高]

意義如下:

<1>裝置位址和上面的相同。

<2>命令號:寫模擬量的命令號固定為06。

<3>需下置的暫存器位址高8位,低8位:表明了需要下置的模擬量暫存器的位址。

<4>下置的資料高8位,低8位:表明需要下置的模擬量資料。比如例子中就把1號暫存器的值設為3。

<5>注意此命令一條只能下置乙個模擬量的狀態。

裝置響應:如果成功把計算機傳送的命令原樣返回,否則不響應。

ModBus功能碼速記

一 0x01 0x04 這四個功能碼都是 讀 操作,可分兩組記憶,0x01和0x02是一組 bool型別 0x03和0x04是一組 暫存器型別 兩組屬性差不多如下 1.都是單數是讀取可讀可寫的資料 coil或者holding 雙數只能讀取唯讀資料 input 2.請求的幀格式類似 功能碼佔乙個位元組...

顯控屏modbus功能碼

modbus位址型別與功能碼對應關係 當觸控螢幕作為乙個modbusserver主站時,是要對所連線的modbusrtu從站進行讀寫控制。weinview的觸控螢幕支援01 05和16號功能碼。每個裝置位址型別所使用的功能碼如下 對modbusrtu裝置進行讀寫,觸控螢幕上的元件中使用什麼樣的位址型...

Modbus功能碼名詞解釋

功能碼 功能碼在modbus協議用於表示資訊幀的功能 輸入暫存器和保持暫存器 04功能碼的作用就是讀輸入暫存器,而03功能碼的作用則是讀保持暫存器,很多人在看到這兩個功能碼的時候總是希望找到這兩個功能碼的區別,保持暫存器和輸入暫存器到底是什麼區別,modbus協議最開始是用來解決plc的通訊協議問題...