4
功能碼命令詳解:
在這些功能碼中較長使用的是1、2、3、4、5、6號功能碼,使用它們即可實現對下位機的數字量和模擬量的讀寫操作。
1、01號命令,讀可讀寫數字量寄存器(線圈狀態):
計算機發送命令:[設備地址] [命令號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校驗:是從開頭一直校驗到此之前。
設備響應:[設備地址] [命令號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、05號命令,寫數字量(線圈狀態):
計算機發送命令:[設備地址] [命令號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>注意此命令一條只能下置一個開關量的狀態。
設備響應:如果成功把計算機發送的命令原樣返回,否則不響應。
3、03號命令,讀可讀寫模擬量寄存器(保持寄存器):
計算機發送命令:[設備地址] [命令號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校驗同上。
4、06號命令,寫單個模擬量寄存器(保持寄存器):
計算機發送命令:[設備地址] [命令號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>注意此命令一條只能下置一個模擬量的狀態。
設備響應:如果成功把計算機發送的命令原樣返回,否則不響應。
5、16號命令,寫多個模擬量寄存器(保持寄存器):
計算機發送命令:[設備地址] [命令號16] [需下置的寄存器地址高8位] [低8位] [數據數量高8位] [數據數量低8位] [下置的數據高8位] [低8位][……][……] [CRC校驗的高8位] [CRC校驗的低8位]
例:[11][16][00][01][00][01][00][05] [CRC高] [CRC低]
意義如下:
<1>設備地址和上面的相同。
<2>命令號:寫模擬量的命令號固定為16。
<3>需下置的寄存器地址高8位,低8位:表明了需要下置的模擬量寄存器的地址。
<4>需下置的數據數量高8位,低8位:表明了需要下置的數據數量,這里為1。
<5>下置的數據高8位,低8位:表明需要下置的模擬量數據。比如例子中就把1號寄存器的值設為5。
設備響應:如果成功把計算機返回的如下命令,否則不響應。
設備響應:[設備地址] [命令號16] [需下置的寄存器地址高8位] [低8位] [數據數量高8位] [數據數量低8位] [CRC校驗的高8位] [CRC校驗的低8位],如上例返回:
[11][16][00][01][00][01] [CRC高] [CRC低]
-
數據采集
+關注
關注
39文章
6176瀏覽量
113790 -
MODBUS
+關注
關注
28文章
1812瀏覽量
77104 -
可編程序控制器
+關注
關注
5文章
66瀏覽量
12503 -
工業通信
+關注
關注
0文章
122瀏覽量
15601
發布評論請先 登錄
相關推薦
評論