Linux c modbus 线程,Modbus读写模拟量寄存器详解
讀可讀寫(xiě)模擬量寄存器:
發(fā)送命令(主機(jī)向從機(jī))格式:
[設(shè)備地址] [命令號(hào)03] [起始寄存器地址高8位] [低8位] [讀取的寄存器數(shù)高8位] [低8位] [CRC校驗(yàn)的低8位] [CRC校驗(yàn)的高8位]
例:[11][03][00][6B][00][03][CRC低][CRC高]
ModBus的Ruby實(shí)現(xiàn)-RModBus 0.4.0 發(fā)布? http://www.linuxidc.com/Linux/2010-01/24200.htm
意義如下:
11:設(shè)備地址,例子中的地址是11,溶氧傳感器端默認(rèn)的地址是1,。
03:讀模擬量的命令號(hào)固定為03,這是Modbus協(xié)議規(guī)定的。
00、6B:起始地址高8位(00)、低8位(6B):表示想讀取的模擬量的起始地址,比如例子中的起始地址為107。這個(gè)006B表示一個(gè)完整的地址,注意這里的地址是高8位在前,低8位在后。
00、03:寄存器數(shù)高8位(00)、低8位(03):表示從起始地址開(kāi)始讀多少個(gè)模擬量(返回的每一個(gè)模擬量是用兩個(gè)字節(jié)表示的)。例子中為3個(gè)模擬量。注意,在返回的信息中一個(gè)模擬量需要返回兩個(gè)字節(jié)同時(shí)這里的地址也是高8位在前,低8位在后。
[CRC低][CRC高]:幀尾的CRC-16校驗(yàn),尤其需要注意的一點(diǎn)是校驗(yàn)結(jié)果的低8位在前,高8位在后,這個(gè)順序不同于起始地址以及讀取深度的地址順序。
設(shè)備響應(yīng):[設(shè)備地址] [命令號(hào)03] [返回的字節(jié)個(gè)數(shù)][數(shù)據(jù)1][數(shù)據(jù)2]...[數(shù)據(jù)n][CRC校驗(yàn)的低8位] [CRC校驗(yàn)的高8位]
例:[11][03][06][02][2B][00][00][00][64][CRC低][CRC高]
意義如下:
11:設(shè)備地址(從機(jī)地址)。
03:命令號(hào)。
06:返回的字節(jié)個(gè)數(shù)(不高擴(kuò)兩字節(jié)的校驗(yàn)碼):表示數(shù)據(jù)的字節(jié)個(gè)數(shù),也就是數(shù)據(jù)1,2...n中的n的值。例子中返回了3個(gè)模擬量的數(shù)據(jù),因?yàn)橐粋€(gè)模擬量需要2個(gè)字節(jié)所以共6個(gè)字節(jié)。
數(shù)據(jù)1...n:其中[數(shù)據(jù)1][數(shù)據(jù)2]分別是第1個(gè)模擬量的高8位和低8位,[數(shù)據(jù)3][數(shù)據(jù)4]是第2個(gè)模擬量的高8位和低8位,以此類(lèi)推。例子中返回的值分別是555,0,100。
[CRC低][CRC高]:CRC校驗(yàn)同上。
寫(xiě)單個(gè)模擬量寄存器:
發(fā)送命令(主機(jī)向從機(jī))格式:
[設(shè)備地址] [命令號(hào)06] [需下置的寄存器地址高8位] [低8位] [下置的數(shù)據(jù)高8位] [低8位] [CRC校驗(yàn)的低8位] [CRC校驗(yàn)的高8位]
例:[11][06][00][01][00][03][CRC低][CRC高]
意義如下:
11:設(shè)備地址和上面的相同。
06:寫(xiě)模擬量的命令號(hào)固定為06。
00、01:要被寫(xiě)入的寄存器地址高8位,低8位。
00、03:要被寫(xiě)入的數(shù)據(jù)高8位,低8位。比如例子中就把1號(hào)寄存器的值設(shè)為3。
注意此命令一條只能寫(xiě)入一個(gè)模擬量的狀態(tài)。
[CRC校驗(yàn)的低8位] [CRC校驗(yàn)的高8位]:同上。
設(shè)備響應(yīng):如果成功把計(jì)算機(jī)發(fā)送的命令原樣返回,否則不響應(yīng)。
總結(jié)
以上是生活随笔為你收集整理的Linux c modbus 线程,Modbus读写模拟量寄存器详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux设置esp8266默认网卡,E
- 下一篇: 数学公式编辑器 linux,linux下