<samp id="xtjmm"><rp id="xtjmm"></rp></samp><track id="xtjmm"></track>
<pre id="xtjmm"></pre>
<pre id="xtjmm"><strong id="xtjmm"><xmp id="xtjmm"></xmp></strong></pre>
<table id="xtjmm"><strike id="xtjmm"></strike></table>

<pre id="xtjmm"></pre>
<tr id="xtjmm"><strong id="xtjmm"><menu id="xtjmm"></menu></strong></tr>
    1. 深入解析MODBUS協議(下)

      發表時間:2022-05-19 文章出處:北京北成新控伺服技術有限公司人氣:-

      (上接4月29號文章)



      功能碼命令詳解

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







      01

      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校驗同上。






      02

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

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






      03

      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校驗同上。 






      04

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

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






      05

      16號命令,寫多個模擬量寄存器(保持寄存器)

      計算機發送命令:[設備地址] [命令號16] [需下置的寄存器地址高8位] [低8位] [數據數量高8位] [數據數量低8位] [下置的數據高8位] [低8位][……][……] [CRC校驗的高8位] [CRC校驗的低8位] 



      640.jpg

      例:[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低]






      (完)


      上一篇 返回列表 最后一篇
      我要評論:  
      *內 容:
      驗證碼: 點擊刷新換一張
       

      共有-條評論

      正在加載...
      亚洲精品制服丝袜四区,国产在线精品无码不卡手机免费,亚洲精品国产品国语原创,久热中文字幕在线精品观