Modbus支持的功能碼

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高]

意義如下:

<1>設備地址:在一個485總線上可以掛接多個設備,此處的設備地址表示想和哪一個設備通訊。例子中爲想和17號(十進制的17是十六進制的11)通訊。

<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>注意此命令一條只能下置一個模擬量的狀態。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章