使用Top Server為Wonderware揭開Modbus寄存器尋址的神秘面紗
從1979年開始,Modbus已經(jīng)作為一種“開放式”協(xié)議使用,多年來(lái)各行各業(yè)對(duì)Modbus有許多不同的解釋。對(duì)于那些不同的Modbus解釋,有很多關(guān)于訪問(wèn)數(shù)據(jù)的不同術(shù)語(yǔ)的困惑。在這篇文章中,我將逐步介紹Modbus尋址的基礎(chǔ)知識(shí),包括偏移如何發(fā)揮作用,以及它們?nèi)绾斡绊懺赥OP Server for Wonderware應(yīng)用程序中使用的地址。
由于在世界各地幾乎有同樣多的不同設(shè)備制造商在同時(shí)實(shí)現(xiàn)Modbus協(xié)議,因此設(shè)備文檔有時(shí)不清楚該為特定數(shù)據(jù)請(qǐng)求什么數(shù)字地址。所以,本文的目的是為Modbus尋址如何工作提供一個(gè)解釋,以便更容易理解如何使用TOP Server訪問(wèn)Modbus設(shè)備中的數(shù)據(jù)。
Modbus地址的類型
當(dāng)我們討論Modbus協(xié)議以及如何處理特定的數(shù)據(jù)位置時(shí),通常有四種不同類型的Modbus地址:
1.保持寄存器 - 具有讀/寫訪問(wèn)權(quán)限的16位地址(4xxxxx)
2.內(nèi)部寄存器 - 具有只讀訪問(wèn)權(quán)限的16位地址(3xxxxx)
3.輸入線圈 - 具有只讀訪問(wèn)權(quán)限的1位(布爾)地址(1xxxxx)
4.輸出線圈 - 具有讀/寫訪問(wèn)權(quán)限的1位(布爾)地址(0xxxxx)
由于某些設(shè)備文檔沒(méi)有提供對(duì)地址類型(如4xxxxx或保持寄存器)引用的Modbus地址的詳細(xì)列表,因此考慮根據(jù)特定地址包含的數(shù)據(jù)類型以及是否可以讀取和寫入或者僅能讀取來(lái)讀取Modbus地址是有意義的。
由于它們所代表的數(shù)據(jù)類型,您還可能會(huì)看到離散或數(shù)字地址的模擬或線圈寄存器。
偏移尋址:4001和40001和400001之間有區(qū)別嗎?
正如我之前提到的,Modbus協(xié)議已經(jīng)存在了幾十年,可以說(shuō)是世界上最廣泛使用的設(shè)備通信協(xié)議。話雖如此,隨著Modbus協(xié)議的誕生,當(dāng)內(nèi)存大小不做出改變時(shí),與目前可用的大量?jī)?nèi)存相比,70年代后期設(shè)備上的內(nèi)存總量很小。
在考慮TOP Server Modbus Suite是否與設(shè)備兼容時(shí),最常見的問(wèn)題之一是TOP Server是否支持特定的地址范圍。TOP Server支持的列出的地址范圍如下:
- 保持寄存器-400001- 465536
- 內(nèi)部寄存器-300001- 365536
- 輸入線圈 - 100001-165536
- 輸出線圈 - 000001- 065536
對(duì)于許多設(shè)備,支持的地址范圍遠(yuǎn)小于此。例如,通過(guò)保持寄存器,在這樣的設(shè)備中,4001的地址作為起始地址無(wú)法接近400001。那么,鑒于這些數(shù)據(jù),TOP Server如何聲稱對(duì)Modbus設(shè)備有如此廣泛的支持?
事實(shí)上,TOP Server Modbus Suite支持4001,40001甚至400001。TOP Server支持所有Modbus地址,因?yàn)镸odbus使用一種稱為偏移尋址的尋址。為了說(shuō)明偏移地址的工作原理,請(qǐng)注意一下在上圖中,我們是怎么將起始編號(hào)與地址的其余部分分開的。
圖中的地址“4001”,有兩條我們感興趣的信息:
1.起始編號(hào)“4”表示應(yīng)該從設(shè)備請(qǐng)求什么類型的地址。(保持寄存器 = 4)
2.數(shù)字“001”表示應(yīng)該從設(shè)備請(qǐng)求哪個(gè)地址偏移。(偏移 = 1)
根據(jù)這些知識(shí),我們將相同的原理應(yīng)用于TOP Server支持的起始保持寄存器地址“400001”。
1.我們的起始編號(hào)是“4”,這意味著我們要有保持寄存器。
2.移除“4”后的剩余數(shù)字是“00001”,其在數(shù)值上與“001”相同,并且表示相同的偏移量“1”。
請(qǐng)一定注意,許多Modbus設(shè)備可能不支持TOP Server支持的所有數(shù)據(jù)偏移。為了避免在輸入此類設(shè)備的地址時(shí)出現(xiàn)錯(cuò)誤,TOP Server Modbus驅(qū)動(dòng)程序會(huì)根據(jù)在地址字段中輸入的內(nèi)容“填充”地址(添加一個(gè)或多個(gè)數(shù)字)。 因此,TOP Server會(huì)自動(dòng)在中間考慮“額外”的零,并根據(jù)需要填充地址。
對(duì)于所有不同的Modbus地址類型(內(nèi)部寄存器 = 3,輸入線圈 = 1,輸出線圈 = 0),同樣的原則也適用。原因是Modbus在發(fā)出請(qǐng)求后發(fā)送到Modbus設(shè)備時(shí)不包含“400001”或“4001”。而只有地址偏移量作為命令的一部分和指定讀取或?qū)懭氩僮鞯拇a以及Modbus地址類型(保持寄存器等)一起發(fā)送。
您需要什么類型的Modbus地址?
確定在TOP Server中使用哪個(gè)地址的最簡(jiǎn)單方法是確定您在設(shè)備中訪問(wèn)的是哪種地址:
1.您的文檔指定特定的數(shù)據(jù)片段是模擬的(非布爾/二進(jìn)制/離散 - 例如2,500或2.5689或58,535等),您具有對(duì)此數(shù)據(jù)的讀寫權(quán)限:
- 您需要訪問(wèn)保持寄存器。
- 您可以在文檔指定的任何地址偏移的開頭添加“4”。
2.您的文檔指定一段數(shù)據(jù)是模擬的,您只能讀取此數(shù)據(jù):
- 您需要訪問(wèn)內(nèi)部寄存器。
- 您可以在文檔指定的任何地址偏移的開頭添加“3”。
3.您的文檔指定了布爾/二進(jìn)制/離散值(如 開/關(guān),真/假或0/1),您只具有對(duì)此地址的只讀訪問(wèn)權(quán)限:
- 您需要訪問(wèn)輸入線圈。
- 您可以在文檔指定的任何地址偏移的開頭添加“1”。
4.您的文檔指定了布爾/二進(jìn)制/離散值,您具有對(duì)此地址的讀寫權(quán)限:
- 您需要訪問(wèn)輸出線圈
- 您可以在文檔指定的任何地址偏移的開頭添加“0”。
準(zhǔn)備開始從您自己的Modbus設(shè)備訪問(wèn)數(shù)據(jù)了嗎?