ModBusRTU通訊詳解1.doc_第1頁
ModBusRTU通訊詳解1.doc_第2頁
ModBusRTU通訊詳解1.doc_第3頁
ModBusRTU通訊詳解1.doc_第4頁
ModBusRTU通訊詳解1.doc_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

ModBusRTU通訊協(xié)議Modbus協(xié)議最初由Modicon公司開發(fā)出來,在1979年末該公司成為施耐德自動化(Schneider Automation)部門的一部分,現(xiàn)在Modbus已經(jīng)是工業(yè)領(lǐng)域全球最流行的協(xié)議。此協(xié)議支持傳統(tǒng)的RS-232、RS-422、RS-485和以太網(wǎng)設(shè)備。許多工業(yè)設(shè)備,包括PLC,DCS,智能儀表等都在使用Modbus協(xié)議作為他們之間的通訊標準。有了它,不同廠商生產(chǎn)的控制設(shè)備可以連成工業(yè)網(wǎng)絡(luò),進行集中監(jiān)控。 當(dāng)在網(wǎng)絡(luò)上通信時,Modbus協(xié)議決定了每個控制器須要知道它們的設(shè)備地址,識別按地址發(fā)來的消息,決定要產(chǎn)生何種行動。如果需要回應(yīng),控制器將生成應(yīng)答并使用Modbus協(xié)議發(fā)送給詢問方。 Modbus協(xié)議包括ASCII、RTU、TCP等,并沒有規(guī)定物理層。此協(xié)議定義了控制器能夠認識和使用的消息結(jié)構(gòu),而不管它們是經(jīng)過何種網(wǎng)絡(luò)進行通信的。標準的Modicon控制器使用RS232C實現(xiàn)串行的Modbus。Modbus的ASCII、RTU協(xié)議規(guī)定了消息、數(shù)據(jù)的結(jié)構(gòu)、命令和就答的方式,數(shù)據(jù)通訊采用Maser/Slave方式,Master端發(fā)出數(shù)據(jù)請求消息,Slave端接收到正確消息后就可以發(fā)送數(shù)據(jù)到Master端以響應(yīng)請求;Master端也可以直接發(fā)消息修改Slave端的數(shù)據(jù),實現(xiàn)雙向讀寫。 Modbus協(xié)議需要對數(shù)據(jù)進行校驗,串行協(xié)議中除有奇偶校驗外,ASCII模式采用LRC校驗,RTU模式采用16位CRC校驗,但TCP模式?jīng)]有額外規(guī)定校驗,因為TCP協(xié)議是一個面向連接的可靠協(xié)議。另外,Modbus采用主從方式定時收發(fā)數(shù)據(jù),在實際使用中如果某Slave站點斷開后(如故障或關(guān)機),Master端可以診斷出來,而當(dāng)故障修復(fù)后,網(wǎng)絡(luò)又可自動接通。因此,Modbus協(xié)議的可靠性較好。 對于Modbus的ASCII、RTU和TCP協(xié)議來說,其中TCP和RTU協(xié)議非常類似,我們只要把RTU協(xié)議的兩個字節(jié)的校驗碼去掉,然后在RTU協(xié)議的開始加上5個0和一個6并通過TCP/IP網(wǎng)絡(luò)協(xié)議發(fā)送出去即可。(一)、通訊傳送方式: 通訊傳送分為獨立的信息頭,和發(fā)送的編碼數(shù)據(jù)。以下的通訊傳送方式定義也與ModBusRTU通訊規(guī)約相兼容: 初始結(jié)構(gòu) = 4字節(jié)的時間 地址碼 = 1 字節(jié)功能碼 = 1 字節(jié)數(shù)據(jù)區(qū) = N 字節(jié)錯誤校檢 = 16位CRC碼 結(jié)束結(jié)構(gòu) = 4字節(jié)的時間地址碼:地址碼為通訊傳送的第一個字節(jié)。這個字節(jié)表明由用戶設(shè)定地址碼的從機將接收由主機發(fā)送來的信息。并且每個從機都有具有唯一的地址碼,并且響應(yīng)回送均以各自的地址碼開始。主機發(fā)送的地址碼表明將發(fā)送到的從機地址,而從機發(fā)送的地址碼表明回送的從機地址。功能碼:通訊傳送的第二個字節(jié)。ModBus通訊規(guī)約定義功能號為1到127。本儀表只利用其中的一部分功能碼。作為主機請求發(fā)送,通過功能碼告訴從機執(zhí)行什么動作。作為從機響應(yīng),從機發(fā)送的功能碼與從主機發(fā)送來的功能碼一樣,并表明從機已響應(yīng)主機進行操作。如果從機發(fā)送的功能碼的最高位為(比如功能碼大與此同時127),則表明從機沒有響應(yīng)操作或發(fā)送出錯。數(shù)據(jù)區(qū):數(shù)據(jù)區(qū)是根據(jù)不同的功能碼而不同。數(shù)據(jù)區(qū)可以是實際數(shù)值、設(shè)置點、主機發(fā)送給從機或從機發(fā)送給主機的地址。 CRC碼:二字節(jié)的錯誤檢測碼。(二)、通訊規(guī)約: 當(dāng)通訊命令發(fā)送至儀器時,符合相應(yīng)地址碼的設(shè)備接通訊命令,并除去地址碼,讀取信息,如果沒有出錯,則執(zhí)行相應(yīng)的任務(wù);然后把執(zhí)行結(jié)果返送給發(fā)送者。返送的信息中包括地址碼、執(zhí)行動作的功能碼、執(zhí)行動作后結(jié)果的數(shù)據(jù)以及錯誤校驗碼。如果出錯就不發(fā)送任何信息。1信息幀結(jié)構(gòu)地址碼功能碼數(shù)據(jù)區(qū)錯誤校驗碼8位8位N 8位16位地址碼:地址碼是信息幀的第一字節(jié)(8位),從0到255。這個字節(jié)表明由用戶設(shè)置地址的從機將接收由主機發(fā)送來的信息。每個從機都必須有唯一的地址碼,并且只有符合地址碼的從機才能響應(yīng)回送。當(dāng)從機回送信息時,相當(dāng)?shù)牡刂反a表明該信息來自于何處。 功能碼:主機發(fā)送的功能碼告訴從機執(zhí)行什么任務(wù)。表1-1列出的功能碼都有具體的含義及操作。 數(shù)據(jù)區(qū):數(shù)據(jù)區(qū)包含需要從機執(zhí)行什么動作或由從機采集的返送信息。這些信息可以是數(shù)值、參考地址等等。例如,功能碼告訴從機讀取寄存器的值,則數(shù)據(jù)區(qū)必需包含要讀取寄存器的起始地址及讀取長度。對于不同的從機,地址和數(shù)據(jù)信息都不相同。錯誤校驗碼:主機或從機可用校驗碼進行判別接收信息是否出錯。有時,由于電子噪聲或其它一些干擾,信息在傳輸過程中會發(fā)生細微的變化,錯誤校驗碼保證了主機或從機對在傳送過程中出錯的信息不起作用。這樣增加了系統(tǒng)的安全和效率。錯誤校驗采用CRC-16校驗方法。注:信息幀的格式都基本相同:地址碼、功能碼、數(shù)據(jù)區(qū)和錯誤校驗碼。2錯誤校驗 冗余循環(huán)碼(CRC)包含2個字節(jié),即16位二進制。CRC碼由發(fā)送設(shè)備計算,放置于發(fā)送信息的尾部。接收信息的設(shè)備再重新計算接收到信息的 CRC碼,比較計算得到的CRC碼是否與接收到的相符,如果兩者不相符,則表明出錯。(三)、Modbus支持的功能碼:功能碼 名稱 作用 01 讀取線圈狀態(tài) 取得一組邏輯線圈的當(dāng)前狀態(tài)(ON/OFF)02 讀取輸入狀態(tài) 取得一組開關(guān)輸入的當(dāng)前狀態(tài)(ON/OFF)03 讀取保持寄存器 在一個或多個保持寄存器中取得當(dāng)前的二進制值04 讀取輸入寄存器 在一個或多個輸入寄存器中取得當(dāng)前的二進制值05 強置單線圈 強置一個邏輯線圈的通斷狀態(tài)06 預(yù)置單寄存器 把具體二進值裝入一個保持寄存器07 讀取異常狀態(tài) 取得8個內(nèi)部線圈的通斷狀態(tài),這8個線圈的地址由控制器決定08 回送診斷校驗 把診斷校驗報文送從機,以對通信處理進行評鑒 09 編程(只用于484) 使主機模擬編程器作用,修改PC從機邏輯 10 控詢(只用于484) 可使主機與一臺正在執(zhí)行長程序任務(wù)從機通信,探詢該從機是否已完成其操作任務(wù),僅在含有功能碼9的報文發(fā)送后,本功能碼才發(fā)送 11 讀取事件計數(shù) 可使主機發(fā)出單詢問,并隨即判定操作是否成功,尤其是該命令或其他應(yīng)答產(chǎn)生通信錯誤時 12 讀取通信事件記錄 可是主機檢索每臺從機的ModBus事務(wù)處理通信事件記錄。如果某項事務(wù)處理完成,記錄會給出有關(guān)錯誤 13 編程(184/384 484 584) 可使主機模擬編程器功能修改PC從機邏輯 14 探詢(184/384 484 584) 可使主機與正在執(zhí)行任務(wù)的從機通信,定期控詢該從機是否已完成其程序操作,僅在含有功能13的報文發(fā)送后,本功能碼才得發(fā)送 15 強置多線圈 強置一串連續(xù)邏輯線圈的通斷 16 預(yù)置多寄存器 把具體的二進制值裝入一串連續(xù)的保持寄存器 17 報告從機標識 可使主機判斷編址從機的類型及該從機運行指示燈的狀態(tài) 18 (884和MICRO 84) 可使主機模擬編程功能,修改PC狀態(tài)邏輯 19 重置通信鏈路 發(fā)生非可修改錯誤后,是從機復(fù)位于已知狀態(tài),可重置順序字節(jié) 20 讀取通用參數(shù)(584L) 顯示擴展存儲器文件中的數(shù)據(jù)信息 21 寫入通用參數(shù)(584L) 把通用參數(shù)寫入擴展存儲文件,或修改之 2264 保留作擴展功能備用 6572 保留以備用戶功能所用 留作用戶功能的擴展編碼 73119 非法功能 120127 保留 留作內(nèi)部作用 128255 保留 用于異常應(yīng)答 (三)、功能碼命令詳解:在這些功能碼中較長使用的是1、2、3、4、5、6號功能碼,使用它們即可實現(xiàn)對下位機的數(shù)字量和模擬量的讀寫操作。 1、01號命令,讀可讀寫數(shù)字量寄存器(線圈狀態(tài)):計算機發(fā)送命令:設(shè)備地址 命令號01 起始寄存器地址高8位 低8位 讀取的寄存器數(shù)高8位 低8位 CRC校驗的低8位 CRC校驗的高8位 例:110100130025CRC低CRC高 意義如下:設(shè)備地址:在一個485總線上可以掛接多個設(shè)備,此處的設(shè)備地址表示想和哪一個設(shè)備通訊。例子中為想和17號(十進制的17是十六進制的11)通訊。 命令號01:讀取數(shù)字量的命令號固定為01。起始地址高8位、低8位:表示想讀取的開關(guān)量的起始地址(起始地址為0)。比如例子中的起始地址為19。寄存器數(shù)高8位、低8位:表示從起始地址開始讀多少個開關(guān)量。例子中為37個開關(guān)量。CRC校驗:是從開頭一直校驗到此之前。設(shè)備響應(yīng):設(shè)備地址 命令號01 返回的字節(jié)個數(shù)數(shù)據(jù)1數(shù)據(jù)2.數(shù)據(jù)n CRC校驗的高8位 CRC校驗的低8位 例:110105CD6BB20E1B CRC高 CRC低 意義如下:設(shè)備地址和命令號和上面的相同。返回的字節(jié)個數(shù):表示數(shù)據(jù)的字節(jié)個數(shù),也就是數(shù)據(jù)1,2.n中的n的值。數(shù)據(jù)1.n:由于每一個數(shù)據(jù)是一個8位的數(shù),所以每一個數(shù)據(jù)表示8個開關(guān)量的值,每一位為0表示對應(yīng)的開關(guān)斷開,為1表示閉合。比如例子中,表示20號(索引號為19)開關(guān)閉合,21號斷開,22閉合,23閉合,24斷開,25斷開,26閉合,27閉合.如果詢問的開關(guān)量不是8的整倍數(shù),那么最后一個字節(jié)的高位部分無意義,置為0。CRC校驗同上。 2、05號命令,寫數(shù)字量(線圈狀態(tài)): 計算機發(fā)送命令:設(shè)備地址 命令號05 需下置的寄存器地址高8位 低8位 下置的數(shù)據(jù)高8位 低8位 CRC校驗的低8位 CRC校驗的高8位 例:110500ACFF00CRC高CRC低 意義如下:設(shè)備地址和上面的相同。命令號:寫數(shù)字量的命令號固定為05。需下置的寄存器地址高8位,低8位:表明了需要下置的開關(guān)的地址。下置的數(shù)據(jù)高8位,低8位:表明需要下置的開關(guān)量的狀態(tài)。例子中為把該開關(guān)閉合。注意,此處只可以是FF00表示閉合0000表示斷開,其他數(shù)值非法。注意此命令一條只能下置一個開關(guān)量的狀態(tài)。 設(shè)備響應(yīng):如果成功把計算機發(fā)送的命令原樣返回,否則不響應(yīng)。 3、03號命令,讀可讀寫模擬量寄存器(保持寄存器):計算機發(fā)送命令:設(shè)備地址 命令號03 起始寄存器地址高8位 低8位 讀取的寄存器數(shù)高8位 低8位 CRC校驗的高8位 CRC校驗的低8位例:1103006B0003 CRC高CRC低 意義如下:設(shè)備地址和上面的相同。命令號:讀模擬量的命令號固定為03。起始地址高8位、低8位:表示想讀取的模擬量的起始地址(起始地址為0)。比如例子中的起始地址為107。寄存器數(shù)高8位、低8位:表示從起始地址開始讀多少個模擬量。例子中為3個模擬量。注意,在返回的信息中一個模擬量需要返回兩個字節(jié)。 設(shè)備響應(yīng):設(shè)備地址 命令號03 返回的字節(jié)個數(shù)數(shù)據(jù)1數(shù)據(jù)2.數(shù)據(jù)n CRC校驗的高8位 CRC校驗的低8位 例:110306022B00000064 CRC高 CRC低 意義如下:設(shè)備地址和命令號和上面的相同。返回的字節(jié)個數(shù):表示數(shù)據(jù)的字節(jié)個數(shù),也就是數(shù)據(jù)1,2.n中的n的值。例子中返回了3個模擬量的數(shù)據(jù),因為一個模擬量需要2個字節(jié)所以共6個字節(jié)。數(shù)據(jù)1.n:其中數(shù)據(jù)1數(shù)據(jù)2分別是第1個模擬量的高8位和低8位,數(shù)據(jù)3數(shù)據(jù)4是第2個模擬量的高8位和低8位,以此類推。例子中返回的值分別是555,0,100。CRC校驗同上。 4、06號命令,寫單個模擬量寄存器(保持寄存器): 計算機發(fā)送命令:設(shè)備地址 命令號06 需下置的寄存器地址高8位 低8位 下置的數(shù)據(jù)高8位 低8位 CRC校驗的高8位 CRC校驗的低8位 例:110600010003 CRC高 CRC低 意義如下:設(shè)備地址和上面的相同。命令號:寫模擬量的命令號固定為06。需下置的寄存器地址高8位,低8位:表明了需要下置的模擬量寄存器的地址。下置的數(shù)據(jù)高8位,低8位:表明需要下置的模擬量數(shù)據(jù)。比如例子中就把1號寄存器的值設(shè)為3。注意此命令一條只能下置一個模擬量的狀態(tài)。 設(shè)備響應(yīng):如果成功把計算機發(fā)送的命令原樣返回,否則不響應(yīng)。5、16號命令,寫多個模擬量寄存器(保持寄存器): 計算機發(fā)送命令:設(shè)備地址 命令號16 需下置的寄存器地址高8位 低8位 數(shù)據(jù)數(shù)量高8位 數(shù)據(jù)數(shù)量低8位 下置的數(shù)據(jù)高8位 低8位 CRC校驗的高8位 CRC校驗的低8位 例:1116000100010005 CRC高 CRC低 意義如下:設(shè)備地址和上

溫馨提示

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

最新文檔

評論

0/150

提交評論