歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Modbus讀寫模擬量寄存器詳解

Modbus讀寫模擬量寄存器詳解

日期:2017/3/1 9:43:15   编辑:Linux編程

讀可讀寫模擬量寄存器:

發送命令(主機向從機)格式:

[設備地址] [命令號03] [起始寄存器地址高8位] [低8位] [讀取的寄存器數高8位] [低8位] [CRC校驗的低8位] [CRC校驗的高8位]

例:[11][03][00][6B][00][03][CRC低][CRC高]

ModBus的Ruby實現-RModBus 0.4.0 發布 http://www.linuxidc.com/Linux/2010-01/24200.htm

意義如下:

11:設備地址,例子中的地址是11,溶氧傳感器端默認的地址是1,。

03:讀模擬量的命令號固定為03,這是Modbus協議規定的。

00、6B:起始地址高8位(00)、低8位(6B):表示想讀取的模擬量的起始地址,比如例子中的起始地址為107。這個006B表示一個完整的地址,注意這裡的地址是高8位在前,低8位在後。

00、03:寄存器數高8位(00)、低8位(03):表示從起始地址開始讀多少個模擬量(返回的每一個模擬量是用兩個字節表示的)。例子中為3個模擬量。注意,在返回的信息中一個模擬量需要返回兩個字節同時這裡的地址也是高8位在前,低8位在後。

[CRC低][CRC高]:幀尾的CRC-16校驗,尤其需要注意的一點是校驗結果的低8位在前,高8位在後,這個順序不同於起始地址以及讀取深度的地址順序。



設備響應:[設備地址] [命令號03] [返回的字節個數][數據1][數據2]...[數據n][CRC校驗的低8位] [CRC校驗的高8位]

例:[11][03][06][02][2B][00][00][00][64][CRC低][CRC高]

意義如下:

11:設備地址(從機地址)。

03:命令號。

06:返回的字節個數(不高擴兩字節的校驗碼):表示數據的字節個數,也就是數據1,2...n中的n的值。例子中返回了3個模擬量的數據,因為一個模擬量需要2個字節所以共6個字節。

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

[CRC低][CRC高]:CRC校驗同上。



寫單個模擬量寄存器:



發送命令(主機向從機)格式:

[設備地址] [命令號06] [需下置的寄存器地址高8位] [低8位] [下置的數據高8位] [低8位] [CRC校驗的低8位] [CRC校驗的高8位]

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

意義如下:

11:設備地址和上面的相同。

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

00、01:要被寫入的寄存器地址高8位,低8位。

00、03:要被寫入的數據高8位,低8位。比如例子中就把1號寄存器的值設為3。

注意此命令一條只能寫入一個模擬量的狀態。

[CRC校驗的低8位] [CRC校驗的高8位]:同上。

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

Copyright © Linux教程網 All Rights Reserved