首頁 - 關于我們 - 新聞活動 - 深入理(lǐ)解Modbus協議(yì)的(de)數據模型和(hé)地址模型

深入理(lǐ)解Modbus協議(yì)的(de)數據模型和(hé)地址模型

2020-9-10新聞

image.png

讀取溫濕度傳感器的(de)寄存器地址用(yòng)的(de)是40001,這(zhè)究竟是代表什(shén)麽意思呢(ne)?今天這(zhè)篇文章(zhāng),我們來(lái)談談Modbus協議(yì)的(de)數據模型和(hé)地址模型,這(zhè)樣大(dà)家就能理(lǐ)解這(zhè)個(gè)問題。

1、Modbus協議(yì)的(de)數據模型

數據模型是對(duì)可(kě)訪問數據的(de)一種抽象,Modbus協議(yì)的(de)數據模型定義了(le)四種可(kě)訪問的(de)數據,分(fēn)别是:

  • 離散量輸入(Discrete Input);

  • 線圈(Coils);

  • 輸入寄存器(Input registers);

  • 保持寄存器(Holding registers);

其中,離散量輸入和(hé)線圈隻支持以位(bit)的(de)方式進行訪問,輸入寄存器和(hé)保持寄存器隻支持以字(WORD)的(de)方式進行訪問;離散量輸入和(hé)輸入寄存器隻支持以隻讀的(de)方式進行訪問,而線圈和(hé)保持寄存器既可(kě)以讀也(yě)可(kě)以寫;

數據模型中成員(yuán)的(de)特點如下(xià)面的(de)表格所示:



既然數據模型是一種抽象,在實際使用(yòng)時(shí)必須将其映射到真實的(de)物(wù)理(lǐ)存儲區(qū)才能被訪問。

Modbus協議(yì)允許設備将四種數據分(fēn)别映射到不同的(de)存儲區(qū)塊中,各個(gè)區(qū)塊之間相互獨立,使用(yòng)不同的(de)功能碼可(kě)讀取到不同的(de)數值,如下(xià)圖所示:


圖1:Modbus數據模型映射到不同的(de)存儲區(qū)塊


Modbus協議(yì)也(yě)允許設備将四種數據映射到同一存儲區(qū)塊中,這(zhè)樣通(tōng)過不同的(de)功能碼讀取數據可(kě)能會得(de)到相同的(de)數據(比如:輸入寄存器和(hé)保持寄存器爲同一物(wù)理(lǐ)區(qū)塊),如下(xià)圖所示:


圖2:Modbus數據模型映射到同一區(qū)塊


數據模型中的(de)每一種數據都最多(duō)允許有65536個(gè)元素(編号1~65536),元素的(de)地址編号從0開始,因此地址的(de)範圍爲:0~65535;

需要說明(míng)的(de)是:65536隻是協議(yì)允許的(de)最大(dà)元素範圍,但并不要求全部實現。Modbus協議(yì)允許設備根據自己的(de)實際情況實現部分(fēn)元素,甚至不要求實現模型中全部四種數據;

2、Modbus協議(yì)的(de)地址模型

爲了(le)簡化(huà)數據模型與設備存儲區(qū)的(de)對(duì)應關系,引入了(le)一種地址模型。該模型通(tōng)過編号的(de)方式對(duì)不同類型數據進行區(qū)分(fēn),各數據的(de)地址編号請看下(xià)面的(de)表格:



Modbus地址模型的(de)編号從1開始。

由于每一種數據都最大(dà)支持65536個(gè)元素,因此理(lǐ)論上,

對(duì)于線圈型數據來(lái)說,其地址範圍爲:000001~065536;

類似的(de),

離散量輸入,其地址範圍爲:100001~165536;

輸入寄存器,其地址範圍爲:300001~365536;

保持寄存器,其地址範圍爲:400001~465536;

由于65536是比較大(dà)的(de)數值,實際應用(yòng)一般不需要這(zhè)麽大(dà)的(de)存儲區(qū),因此PLC廠家普遍采用(yòng)的(de)是10000以内的(de)地址範圍,即:

線圈地址範圍:00001~09999;

離散量輸入地址範圍:10001~19999;

輸入寄存器地址範圍:30001~39999;

保持寄存器地址範圍:40001~49999;

有了(le)該地址模型,我們就可(kě)以從Modbus寄存器的(de)地址判斷要訪問的(de)區(qū)塊的(de)類型。比如本文開頭提到到地址40001就是保持存儲器的(de)第一個(gè)值的(de)地址,而10001就是離散量輸入的(de)第一個(gè)值的(de)地址;要注意的(de)是,保持寄存器和(hé)輸入寄存器的(de)每個(gè)值的(de)大(dà)小爲16bits(字),而線圈和(hé)離散量輸入每個(gè)值的(de)大(dà)小爲1bit(位);

各PLC廠家根據PLC的(de)實際情況,将Modbus的(de)地址模型映射到實際的(de)存儲區(qū)。一般來(lái)說,線圈對(duì)應過程輸出映像區(qū)(Q);離散量輸入對(duì)應過程輸入映像區(qū)(I);輸入寄存器對(duì)應模拟量輸入(AI);保持寄存器對(duì)應數據塊或V存儲區(qū)或M存儲區(qū)。以西門子S7-200 SMART爲例,其Modbus地址與存儲器地址的(de)對(duì)應關系如下(xià)表所示:



Modbus地址模型對(duì)于Modbus-RTU/ASCII和(hé)Modbus-TCP協議(yì)都是适用(yòng)的(de)。