問答中心
Answer Center
首頁
產(chǎn)品
解決方案
關(guān)于我們
服務(wù)支持
聯(lián)系我們
Answer Center
下載中心
視頻中心
常見問題
售后服務(wù)
時(shí)間:2022-11-16 13:41:51
點(diǎn)擊:5440
關(guān)鍵詞:modbus,寄存器
在使用Modbus協(xié)議的時(shí)候,經(jīng)常會(huì)遇到諸如40001、30001,10001之類的地址,這些數(shù)字代表什么含義呢?這其實(shí)是Modbus協(xié)議的數(shù)據(jù)模型和地址模型。
Modbus協(xié)議的數(shù)據(jù)模型
數(shù)據(jù)模型是對(duì)從站設(shè)備可訪問的數(shù)據(jù)進(jìn)行抽象,Modbus協(xié)議的數(shù)據(jù)模型定義了四種可訪問的數(shù)據(jù):
數(shù)據(jù)區(qū)塊 |
數(shù)據(jù)類型 |
訪問類型 |
線圈(Coils) |
布爾 |
讀/寫 |
離散量輸入 |
布爾 |
只讀 |
輸入寄存器 (Input registers) |
無符號(hào)2字節(jié)整型 |
只讀 |
保持寄存器 (Holding registers) |
無符號(hào)2字節(jié)整型 |
讀/寫 |
其中,離散量輸入和線圈數(shù)據(jù)類型是布爾量,因此只支持以位(bit)的方式進(jìn)行訪問,輸入寄存器和保持寄存器數(shù)據(jù)類型是無符號(hào)2字節(jié)整型,因此支持以字的方式進(jìn)行訪問。當(dāng)主設(shè)備訪問從設(shè)備的這些數(shù)據(jù)模型時(shí),離散量輸入和輸入寄存器只支持以只讀的方式進(jìn)行訪問,而線圈和保持寄存器既可以讀也可以寫。
地址前綴編號(hào) |
編號(hào)范圍 (1~65536) |
編號(hào)范圍 (1~9999) |
數(shù)據(jù) 區(qū)塊 |
數(shù)據(jù) 類型 |
訪問 類型 |
0 |
000001~ 065536 |
00001~ 09999 |
線圈 (Coils) |
布爾 |
讀/寫 |
1 |
100001~ 165536 |
10001~ 19999 |
離散量輸入 (Discrete Input) |
布爾 |
只讀 |
3 |
300001~ 365536 |
30001~ 39999 |
輸入寄存器(Input registers) |
無符號(hào)2字節(jié)整型 |
只讀 |
4 |
400001~ 465536 |
40001~ 49999 |
保持寄存器(Holding registers) |
無符號(hào)2字節(jié)整型 |
讀/寫 |
數(shù)據(jù)模型中的每一種數(shù)據(jù)區(qū)塊都最多允許有65536(2^16)個(gè)元素,Modbus定義了每個(gè)數(shù)據(jù)元素的地址,范圍從0到65,535。但是每個(gè)數(shù)據(jù)元素的編號(hào)從1開始,范圍從1到65,536。
需要說明的是:65536只是協(xié)議允許的最大元素范圍,并不要求全部實(shí)現(xiàn)。Modbus協(xié)議允許設(shè)備根據(jù)自己的實(shí)際情況實(shí)現(xiàn)部分元素,甚至不要求實(shí)現(xiàn)模型中全部四種數(shù)據(jù)模型。譬如設(shè)備可能會(huì)選擇不執(zhí)行線圈、離散輸入或輸入寄存器,而只使用保持寄存器150至175和200至225。這是完全可以接受的,并且通過異常來處理無效的訪問。
Modbus協(xié)議的地址模型
雖然規(guī)范將不同的數(shù)據(jù)類型定義為存在不同的區(qū)塊中,并為每種類型分配一個(gè)本地地址范圍,但這并不一定會(huì)轉(zhuǎn)化為用于記錄或理解給定設(shè)備的Modbus可訪問內(nèi)存的直觀編址方案。
為了簡化數(shù)據(jù)模型與設(shè)備存儲(chǔ)區(qū)的對(duì)應(yīng)關(guān)系,又引入了地址模型的概念,通過編號(hào)的方式對(duì)不同類型數(shù)據(jù)進(jìn)行區(qū)分,也就是通過特定的編號(hào)作為前綴加到所討論的數(shù)據(jù)地址中。如表中所示,通過0,1,3,4分別表示線圈,離散量輸入,輸入寄存器,和保持寄存器。
因此理論上,
線圈地址范圍:000001~065536
離散量輸入地址范圍:100001~165536
輸入寄存器地址范圍:300001~365536
保持寄存器地址范圍:400001~465536
由于65536是比較大的數(shù)值,實(shí)際應(yīng)用一般不需要這么大的存儲(chǔ)區(qū),因此設(shè)備廠家普遍采用的是10000以內(nèi)的地址范圍,即:
線圈地址范圍:00001~09999
離散量輸入地址范圍:10001~19999
輸入寄存器地址范圍:30001~39999
保持寄存器地址范圍:40001~49999
有了該地址模型,我們就可以從Modbus寄存器的地址判斷要訪問的區(qū)塊的類型。譬如常見到的寄存器地址40001/400001,最前面的4表明它是一個(gè)保持寄存器,后面的0001或者00001都是指第一個(gè)保持存儲(chǔ)器,并且它的地址是0。寄存器30004表明它是輸入寄存器,地址是3。寄存器10008表明它是離散量輸入,地址是7。
要注意的是,保持寄存器和輸入寄存器中的數(shù)值是2個(gè)字節(jié),而線圈和離散量輸入中數(shù)值大小僅為1bit (位)。
免責(zé)聲明:本網(wǎng)站部分文章、圖片等信息來源于網(wǎng)絡(luò),版權(quán)歸原作者平臺(tái)所有,僅用于學(xué)術(shù)分享,如不慎侵犯了你的權(quán)益,請(qǐng)聯(lián)系我們,我們將做刪除處理!