上位機(jī)實(shí)戰(zhàn)應(yīng)用之Modbus通信_(tái)第1頁(yè)
上位機(jī)實(shí)戰(zhàn)應(yīng)用之Modbus通信_(tái)第2頁(yè)
上位機(jī)實(shí)戰(zhàn)應(yīng)用之Modbus通信_(tái)第3頁(yè)
上位機(jī)實(shí)戰(zhàn)應(yīng)用之Modbus通信_(tái)第4頁(yè)
上位機(jī)實(shí)戰(zhàn)應(yīng)用之Modbus通信_(tái)第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Modbus協(xié)議能夠成為工業(yè)領(lǐng)域應(yīng)用最廣泛的協(xié)議,它必須具備以下幾個(gè)特點(diǎn):1、免費(fèi):這個(gè)是最大的前提,任何產(chǎn)品都是一樣,只有通過(guò)免費(fèi)才能獲取到前期最大的使用量。2、簡(jiǎn)單:Modbus協(xié)議幀格式簡(jiǎn)單緊湊,用戶(hù)容易理解,廠商容易集成。3、接口:Modbus協(xié)議只是一種規(guī)約,屬于應(yīng)用層的協(xié)議,因此不僅可以應(yīng)用在串口(485/232/422),也可以在以太網(wǎng)、光纖、藍(lán)牙、無(wú)線(xiàn)上傳輸。存儲(chǔ)區(qū)分類(lèi)

我一般介紹Modbus協(xié)議的時(shí)候,喜歡站在Modbus規(guī)約制定者的角度,結(jié)合一些事物來(lái)對(duì)比說(shuō)明,這樣對(duì)很多人來(lái)說(shuō),可能會(huì)更加容易理解。假設(shè)沒(méi)有Modbus協(xié)議,我們想要制定一個(gè)協(xié)議,我們首先要明確,協(xié)議的目的是為了數(shù)據(jù)傳輸,因此,為了更好地存儲(chǔ)不同的數(shù)據(jù)類(lèi)型,我們會(huì)將布爾和非布爾的數(shù)據(jù)分開(kāi)存儲(chǔ),因此,就有了線(xiàn)圈和寄存器的概念。線(xiàn)圈和寄存器,這個(gè)經(jīng)常被很多人詬病,認(rèn)為不應(yīng)該這么翻譯,感覺(jué)不容易理解。從電氣角度來(lái)看,在電氣控制回路中,一般都是靠接觸器或中間繼電器來(lái)實(shí)現(xiàn)控制,接觸器或中繼最終靠的是線(xiàn)圈的得電和失電來(lái)控制觸點(diǎn)閉合和斷開(kāi),因此用線(xiàn)圈表示布爾量;而寄存器在計(jì)算機(jī)中,就是用來(lái)存儲(chǔ)數(shù)據(jù)的,因此非布爾的數(shù)據(jù)放在寄存器里。這個(gè)可以跟PLC的存儲(chǔ)區(qū)來(lái)進(jìn)行對(duì)比,西門(mén)子的I/Q/M都是線(xiàn)圈,V/T/C/DB都是寄存器,三菱的X/Y都是線(xiàn)圈,D/W/H都是寄存器,歐姆龍的CIO是線(xiàn)圈,D/W/H是寄存器。以西門(mén)子為例,雖然I和Q都表示線(xiàn)圈,但是他們的分工是不同的,I表示輸入,Q表示輸出,輸入意味著該存儲(chǔ)區(qū)里的值必須由外部設(shè)備接入,是只讀的,輸出表示輸出結(jié)果給外部設(shè)備,是可讀可寫(xiě)的。因此,Modbus的線(xiàn)圈和寄存器應(yīng)該也按照只讀、讀寫(xiě)來(lái)進(jìn)一步細(xì)分,因此這就形成了Modbus的存儲(chǔ)區(qū),如下表所示:序號(hào)讀寫(xiě)存儲(chǔ)類(lèi)型存儲(chǔ)區(qū)名稱(chēng)1只讀線(xiàn)圈輸入線(xiàn)圈2讀寫(xiě)線(xiàn)圈輸出線(xiàn)圈3只讀寄存器輸入寄存器4讀寫(xiě)寄存器保持寄存器存儲(chǔ)區(qū)代號(hào)

然而,上面表格里的存儲(chǔ)區(qū)名稱(chēng)是一個(gè)全稱(chēng),開(kāi)發(fā)和使用中使用全稱(chēng)會(huì)比較麻煩,因此需要給他們?nèi)€(gè)別名,就像西門(mén)子的I/Q/M一樣,這些都是西門(mén)子給存儲(chǔ)區(qū)取的一個(gè)代號(hào),所以Modbus也要給這些存儲(chǔ)區(qū)取一個(gè)代號(hào),干脆直接用數(shù)字吧,于是,就有了下面的規(guī)定:存儲(chǔ)區(qū)名稱(chēng)存儲(chǔ)區(qū)代號(hào)輸入線(xiàn)圈1區(qū)輸出線(xiàn)圈0區(qū)輸入寄存器3區(qū)保持寄存器4區(qū)這個(gè)其實(shí)就跟我們的姓名和小名一樣,姓名是正式場(chǎng)合使用,日常場(chǎng)合,我們一般可以使用小名。存儲(chǔ)區(qū)范圍

無(wú)論是什么存儲(chǔ)區(qū),都會(huì)有一個(gè)范圍的限制,就像西門(mén)子的M區(qū)可能最大到8192,三菱的X區(qū)最大到2048,Modbus的每個(gè)存儲(chǔ)區(qū)也應(yīng)該規(guī)定一個(gè)范圍,不能無(wú)限制使用。Modbus是這么規(guī)定的,每個(gè)存儲(chǔ)區(qū)的最大范圍是65536,這個(gè)范圍是很大的。我們?cè)僖匀獾腦區(qū)為例,如果最大范圍是2048,那么意味著我們只能訪問(wèn)X0-X2047這些地址,我們這里說(shuō)的X0、X2047,就是我們常說(shuō)的PLC地址,那么這個(gè)地址是怎么組成的呢?它是由存儲(chǔ)區(qū)編號(hào)加上一個(gè)地址索引組成,我們把這樣的PLC地址,理解為絕對(duì)地址,后面的地址索引,理解為相對(duì)地址。所謂絕對(duì)地址,就是我們僅僅通過(guò)一個(gè)地址名稱(chēng),就能知道是什么存儲(chǔ)區(qū)的第幾個(gè)數(shù)據(jù),而這個(gè)第幾個(gè),就是我們說(shuō)的相對(duì)地址,因此絕對(duì)地址是唯一的,相對(duì)地址,每個(gè)存儲(chǔ)區(qū)都有。那么對(duì)于Modbus來(lái)說(shuō),我們的絕對(duì)地址和相對(duì)地址是怎么樣的呢?我們?nèi)匀蛔駨墓剑航^對(duì)地址=區(qū)號(hào)+相對(duì)地址。但是也會(huì)有一些不一樣的地方,以保持型寄存器為例,第一個(gè)絕對(duì)地址是400001,這個(gè)地方不是400000,這個(gè)是由Modbus規(guī)約決定的,其它存儲(chǔ)區(qū)也是類(lèi)似的。

因此,Modbus存儲(chǔ)區(qū)范圍如下圖所示:正如上文所說(shuō),65536這個(gè)范圍是很大的,但在實(shí)際使用中,我們一般用不了這么多地址,一般情況下,10000以?xún)?nèi)就已經(jīng)足夠我們使用了,因此,為了方便起見(jiàn),我們有一種短的地址模型,如下圖所示:功能碼

功能碼這個(gè)概念,我們可以這么去理解,先回到我們的初衷,協(xié)議的目的是為了數(shù)據(jù)傳輸,也就是為了讀取數(shù)據(jù)和寫(xiě)入數(shù)據(jù),我們已經(jīng)確定好4個(gè)存儲(chǔ)區(qū),存儲(chǔ)不同的數(shù)據(jù)類(lèi)型,那么接下來(lái)我們就要對(duì)這些存儲(chǔ)區(qū)進(jìn)行讀寫(xiě),那么可能會(huì)產(chǎn)生很多種不同的行為,比如讀取輸入線(xiàn)圈存儲(chǔ)區(qū)、讀取輸出線(xiàn)圈存儲(chǔ)區(qū),這就是兩種不同的行為,同樣的,如果用讀取輸入線(xiàn)圈存儲(chǔ)區(qū)、讀取輸出線(xiàn)圈存儲(chǔ)區(qū),會(huì)比較麻煩,那么我們干脆給每種形成指定一個(gè)代號(hào),那么這種代號(hào)就是功能碼。我們?cè)賮?lái)探討一下,究竟有多少種不同的行為呢?讀取和寫(xiě)入是2種行為,存儲(chǔ)區(qū)有4個(gè),但是我們知道輸入線(xiàn)圈和輸入寄存器是只讀的,因此不能進(jìn)行寫(xiě)入,除去這2種的話(huà),應(yīng)該會(huì)產(chǎn)生6種不同的行為,如下圖所示:行為序號(hào)具體行為1讀取輸入線(xiàn)圈2讀取輸出線(xiàn)圈3讀取輸入寄存器4讀取保持寄存器5寫(xiě)入輸出線(xiàn)圈6寫(xiě)入保持寄存器然而,Modbus規(guī)約將寫(xiě)入輸出線(xiàn)圈和寫(xiě)入保持寄存器這2種行為,又進(jìn)一步做了細(xì)分,包括寫(xiě)入單個(gè)和寫(xiě)入多個(gè),因此原來(lái)的6種行為就變成了8種行為,同時(shí)給每種行為設(shè)置一個(gè)代號(hào),就形成了下圖所示的功能碼列表:功能碼功能說(shuō)明0x01讀取輸出線(xiàn)圈0x02讀取輸入線(xiàn)圈0x03讀取保持寄存器0x04讀取輸入寄存器0x05寫(xiě)入單個(gè)線(xiàn)圈0x06寫(xiě)入單個(gè)寄存器0x0F寫(xiě)入多個(gè)線(xiàn)圈0x10寫(xiě)入多個(gè)寄存器Modbus規(guī)約中的功能碼其實(shí)不止這8個(gè),還有一些功能碼是用于診斷或異常碼,但是一般很少使用,這8種功能碼是最主要的核心功能碼。協(xié)議分類(lèi)

Modbus嚴(yán)格來(lái)說(shuō),是一個(gè)標(biāo)準(zhǔn)化的規(guī)約,而不是一個(gè)具體協(xié)議。我們常說(shuō)的設(shè)備A和設(shè)備B之間通過(guò)Modbus協(xié)議來(lái)通信,這句話(huà)其實(shí)是不嚴(yán)謹(jǐn)?shù)?。Modbus規(guī)約上有三種不同的協(xié)議報(bào)文幀,分別是ModbusRtu、ModbusAscii、ModbusTcp。一般來(lái)說(shuō),ModbusRtu和ModbusAscii是運(yùn)行在串口上的協(xié)議,ModbusTcp是運(yùn)行在以太網(wǎng)上的協(xié)議,但是這并非絕對(duì)的,我們也可以將ModbusRtu、ModbusAscii運(yùn)行在以太網(wǎng)或光纖上使用,同樣的,在串口網(wǎng)絡(luò)里,我們也可以使用ModbusTcp的協(xié)議,因?yàn)閰f(xié)議只是一種規(guī)范,并不限制通信介質(zhì)。報(bào)文格式前面我們說(shuō)了Modbus有三種不同的協(xié)議,分別是ModbusRtu、ModbusAscii、ModbusTcp,那么這三種協(xié)議的報(bào)文格式也是不同的,下面分別對(duì)這三種協(xié)議的報(bào)文格式進(jìn)行說(shuō)明:ModbusRtu的報(bào)文格式如下:第一部分:從站地址,占1個(gè)字節(jié)第二部分:功能碼,占1個(gè)字節(jié)第三部分:數(shù)據(jù)部分,占N個(gè)字節(jié)第四部分:校驗(yàn)部分,CRC校驗(yàn),占2個(gè)字節(jié)2.

ModbusAscii的報(bào)文格式如下:第一部分:開(kāi)始字符(:)第二部分:從站地址,占2個(gè)字節(jié)第三部分:功能碼,占2個(gè)字節(jié)第四部分:數(shù)據(jù)部分,占N個(gè)字節(jié)第五部分:校驗(yàn)部分,LRC校驗(yàn),占2個(gè)字節(jié)第六部分:結(jié)束字符(CRLF)3.

ModbusTcp的報(bào)文格式如下:第一部分:事務(wù)處理標(biāo)識(shí)符,占2個(gè)字節(jié)第二部分:協(xié)議標(biāo)識(shí)符,占2個(gè)字節(jié)第三部分:長(zhǎng)度,占2個(gè)字節(jié)第四部分:?jiǎn)卧獦?biāo)識(shí)符,占1個(gè)字節(jié)第五部分:功能碼,占1個(gè)字節(jié)第六部分:數(shù)據(jù)部分,占N個(gè)字節(jié)調(diào)試軟件Modbus學(xué)習(xí)成本很低,因?yàn)閰f(xié)議是公開(kāi)免費(fèi)的,我們可以直接獲取到《Modbus中文協(xié)議文檔》。同時(shí),也有很多調(diào)試軟件可以進(jìn)行仿真調(diào)試,因此我們可以在不購(gòu)買(mǎi)任何硬件的情況下,就把Modbus協(xié)議學(xué)好。Modbus調(diào)試軟件可以通過(guò)本公眾號(hào)后臺(tái)回復(fù)201直接獲取。Modbus學(xué)習(xí)必須要配合相關(guān)的調(diào)試軟件,可以達(dá)到事半功倍的效果,Modbus學(xué)習(xí)必備的三大神器分別是ModbusPoll、ModbusSlave及VSPD,ModbusPoll軟件主要用于仿真Modbus主站或Modbus客戶(hù)端,ModbusSlave軟

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論