Modbus Rtu 通信協(xié)議(3,16號(hào)命令)_第1頁(yè)
Modbus Rtu 通信協(xié)議(3,16號(hào)命令)_第2頁(yè)
Modbus Rtu 通信協(xié)議(3,16號(hào)命令)_第3頁(yè)
Modbus Rtu 通信協(xié)議(3,16號(hào)命令)_第4頁(yè)
Modbus Rtu 通信協(xié)議(3,16號(hào)命令)_第5頁(yè)
已閱讀5頁(yè),還剩7頁(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)介

1、ModbusModbus RtuRtu 通信協(xié)議通信協(xié)議(3,16(3,16 號(hào)命令號(hào)命令) ) 1 1、 讀取保持寄存器(單個(gè)和多個(gè),以字為最小單位)讀取保持寄存器(單個(gè)和多個(gè),以字為最小單位)發(fā)送命令幀:設(shè)備地址功能碼地址 H地址 L數(shù)據(jù)量 H數(shù)據(jù)量 LCRC HCRC LAddr03 HHoldStartDataNumCRC高位CRC低位幀 長(zhǎng) 度:8 個(gè)字節(jié)設(shè)備地址:1247功 能 碼:3H數(shù)據(jù)地址:065535 具體范圍與相關(guān)設(shè)備有關(guān) 數(shù) 量:165535 具體范圍與相關(guān)設(shè)備有關(guān)校 驗(yàn) 碼:CRC16 校驗(yàn) 返回命令幀:設(shè)備地址功能碼數(shù)據(jù)量數(shù)據(jù) 1數(shù)據(jù) NCRC HCRC LAddr

2、13 H返回?cái)?shù)據(jù)的字節(jié)數(shù) NData (1N)CRC高位CRC低位幀 長(zhǎng) 度:5N 個(gè)字節(jié)設(shè)備地址:1247功 能 碼:3H數(shù) 據(jù) 量:實(shí)際的讀取數(shù)據(jù)數(shù)量 數(shù) 據(jù):返回?cái)?shù)據(jù)的意義aHoldStartn= DataNum1VW a (VB a)VWa(VB a+1)VW a+n(VB a+n)VWa+n(VB a+n+1)Data(1)Data(2)Data(N-1)Data(N)校 驗(yàn) 碼:CRC16 校驗(yàn) 命令有誤:1) 沒(méi)有任何返回2) 返回異議幀設(shè)備地址功能碼錯(cuò)誤信息CRC HCRC LAddr183 H一個(gè)字節(jié)的錯(cuò)誤信息CRC高位CRC低位 2 2、 設(shè)置保持寄存器(多個(gè),以字為最小單

3、位)設(shè)置保持寄存器(多個(gè),以字為最小單位)發(fā)送命令幀: 設(shè)備地址功能碼地址 H地址 L數(shù)據(jù)量 H數(shù)據(jù)量L數(shù)據(jù)字節(jié)數(shù)具體數(shù)據(jù)CRC HCRC LAddr010 HHoldStartDataNumbytN1bytNCRC高位CRC低位幀 長(zhǎng) 度:9bytN 個(gè)字節(jié)設(shè)備地址:1247功 能 碼:10H數(shù)據(jù)地址:065535 具體范圍與相關(guān)設(shè)備有關(guān) 數(shù) 量:1122 具體范圍與相關(guān)設(shè)備有關(guān)字 節(jié) 數(shù):設(shè)置的字節(jié)個(gè)數(shù) bytN= DataNum2數(shù) 據(jù):具體的字節(jié)數(shù)據(jù)校 驗(yàn) 碼:CRC16 校驗(yàn) 返回命令幀:設(shè)備地址功能碼地址 H地址 L數(shù)據(jù)量 H數(shù)據(jù)量 LCRC HCRC LAddr110 HHold

4、StartDataNumCRC高位CRC低位幀 長(zhǎng) 度:8 個(gè)字節(jié)設(shè)備地址:1247功 能 碼:10H數(shù)據(jù)地址:065535 具體范圍與相關(guān)設(shè)備有關(guān) 數(shù) 量:1122 具體范圍與相關(guān)設(shè)備有關(guān)校 驗(yàn) 碼:CRC16 校驗(yàn) 命令有誤:1) 沒(méi)有任何返回2) 返回異議幀地址功能碼錯(cuò)誤信息CRC HCRC LAddr190 H一個(gè)字節(jié)的錯(cuò)誤信息CRC高位CRC低位 八、一點(diǎn)總結(jié)八、一點(diǎn)總結(jié)編寫(xiě)通信相關(guān)的程序,其實(shí)協(xié)議和開(kāi)發(fā)語(yǔ)言并不重要,重要的是對(duì)通信雙方的通信設(shè)備的特點(diǎn),性能要有充分了解,這樣才能開(kāi)發(fā)出可靠,高效的通信程序摘要摘要 Modbus 協(xié)議由于其具有開(kāi)放性、透明性、成本低、易于開(kāi)發(fā)等特點(diǎn),已

5、成為當(dāng)今工業(yè)領(lǐng)域通信協(xié)議的首選。本文介紹了一種基于 Modbus 通信協(xié)議的 eView 觸摸屏與常用的51 單片機(jī)的通信方法。該方法通過(guò) C51 編程實(shí)現(xiàn) Modbus 通信,在 51 系列單片機(jī)上具有通用性,有一定的借鑒作用。關(guān)鍵詞關(guān)鍵詞 觸摸屏單片機(jī) Modbus 協(xié)議工業(yè)控制中經(jīng)常需要觀察系統(tǒng)的運(yùn)行狀態(tài)或者修改運(yùn)行參數(shù)。觸摸屏能夠直觀、生動(dòng)地顯示運(yùn)行參數(shù)和運(yùn)行狀態(tài),而且通過(guò)觸摸屏畫(huà)面可以直接修改系統(tǒng)運(yùn)行參數(shù),人機(jī)交互性好。單片機(jī)廣泛應(yīng)用于工控領(lǐng)域中,與觸摸屏配合,可組成良好的人機(jī)交互環(huán)境。觸摸屏與單片機(jī)通信,需要根據(jù)觸摸屏采用的通信協(xié)議為單片機(jī)編寫(xiě)相應(yīng)的通信程序。Modbus 協(xié)議是美

6、國(guó) Modicon 公司推出的,一種有效支持控制器之間以及控制器經(jīng)由網(wǎng)絡(luò)(如以太網(wǎng))與其他設(shè)備之間進(jìn)行通信的協(xié)議。本文以 STC89C51 單片機(jī)和人機(jī)電子的 eView觸摸屏為例,介紹其通信程序的開(kāi)發(fā)過(guò)程。1 1 系統(tǒng)結(jié)構(gòu)系統(tǒng)結(jié)構(gòu)實(shí)現(xiàn)觸摸屏與單片機(jī)的通信,主要是解決通信協(xié)議的問(wèn)題。本文使用開(kāi)放的 Modbus通信協(xié)議,以觸摸屏作主站,單片機(jī)作從站。eView 觸摸屏本身支持 Modbus 通信協(xié)議,如果單片機(jī)也支持 Modbus 協(xié)議,就可以進(jìn)行通信了。eview 觸摸屏支持 RS-232 和 RS-485 兩種通信接口。在工業(yè)控制領(lǐng)域,由于 RS-485 具有可靠性高、傳輸距離遠(yuǎn)、抗干擾能

7、力強(qiáng)等優(yōu)點(diǎn),所以在本系統(tǒng)中觸摸屏與單片機(jī)通信采用 RS-485 連接,傳輸速率設(shè)置為 9600 kbps。RS-485 信號(hào)傳輸是一種半雙工的傳輸方式,單片機(jī)通過(guò)一個(gè) RS-232/RS-485 無(wú)源轉(zhuǎn)換器把 232 信號(hào)轉(zhuǎn)換成 485 信號(hào),連接到 eView 觸摸屏上。圖 l 為該系統(tǒng)的原理圖。 單片機(jī)控制系統(tǒng)采用 STC89C51 系列單片機(jī),其內(nèi)部集成 MAX810/STC810 專(zhuān)用復(fù)位電路(原有外部復(fù)位可繼續(xù)保留,與 Intel 8051 引腳兼容),具有抗干擾能力強(qiáng)、加密性強(qiáng)、高抗靜電(ESD)、超低功耗等特點(diǎn),而且價(jià)格低廉。在本系統(tǒng)中,觸摸屏是上位機(jī),單片機(jī)是下位機(jī)。2 2 M

8、odbusModbus 協(xié)議協(xié)議2.1 Modbus 協(xié)議簡(jiǎn)介Modbus 協(xié)議是應(yīng)用于電子控制器上的一種通用語(yǔ)言。通過(guò)此協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡(luò)(如以太網(wǎng))與其他設(shè)備之間可以通信。它已經(jīng)成為一種通用工業(yè)標(biāo)準(zhǔn)。不同廠商生產(chǎn)的控制設(shè)備可以通過(guò)它連成工業(yè)網(wǎng)絡(luò),集中監(jiān)控。Modbus 協(xié)議定義了一個(gè)控制器能認(rèn)識(shí)使用的消息結(jié)構(gòu),而不管它們是經(jīng)過(guò)何種網(wǎng)絡(luò)進(jìn)行通信的。它描述了一控制器請(qǐng)求訪問(wèn)其他設(shè)備的過(guò)程.如何回應(yīng)來(lái)自其他設(shè)備的請(qǐng)求,以及怎樣偵測(cè)錯(cuò)誤并記錄;制定了消息域格局和內(nèi)容的公共格式。當(dāng)在某一 Modbus 網(wǎng)絡(luò)上通信時(shí),此協(xié)議決定了每個(gè)控制器需要知道它們的設(shè)備地址,識(shí)別按地址發(fā)來(lái)的消息

9、,以及決定要產(chǎn)生何種行動(dòng)。如果需要回應(yīng),則控制器將生成反饋信息并用 Modbus 協(xié)議發(fā)出。在其他網(wǎng)絡(luò)上,包含了 M0dhus 協(xié)議的消息轉(zhuǎn)換為在此網(wǎng)絡(luò)上使用的幀或包結(jié)構(gòu)。2.2 Modbus RTU 通信數(shù)據(jù)傳輸模式當(dāng)控制器設(shè)備基于 Modbus 協(xié)議以 RTU 模式通信時(shí),消息中的每個(gè)字節(jié)包含 2 個(gè) 4 位的十六進(jìn)制字符。這種方式的主要優(yōu)點(diǎn)是:在同樣的波特率下,可比 ASCII 方式傳送更多的數(shù)據(jù)。編碼采用 8 位二進(jìn)制,十六進(jìn)制數(shù) 09 和 AF;消息中每個(gè) 8 位域都是由 2 個(gè)十六進(jìn)制字符組成。組織結(jié)構(gòu)如下: 2.3 Modbus RTU 消息幀結(jié)構(gòu)Modbus RTU 消息幀結(jié)構(gòu)

10、如下: (1)地址碼地址碼為通信傳送的第一個(gè)字節(jié)。這個(gè)寧節(jié)表明,由用戶(hù)設(shè)定地址碼的從機(jī)將接收由主機(jī)發(fā)送來(lái)的信息。每個(gè)從機(jī)都有具有唯一的地址碼,只有符合地址碼的從機(jī)才能響應(yīng)回送,且響應(yīng)回送均以各自的地址碼開(kāi)始。主機(jī)發(fā)送的地址碼則表明將發(fā)送到的從機(jī)地址,而從機(jī)發(fā)送的地址碼表明回送的從機(jī)地址。地址 0 用作廣播地址,以使所有的從設(shè)備都能認(rèn)識(shí)。(2)功能代碼功能代碼為通信傳送的第二個(gè)字節(jié)。Modbus 通信規(guī)約定義可能的代碼范圍是十進(jìn)制的1255。當(dāng)然,有些代碼適用于所有控制器,有些僅適用于某種控制器,還有些保留以備后用。主機(jī)發(fā)送請(qǐng)求,通過(guò)功能碼告訴從機(jī)執(zhí)行什么動(dòng)作;從機(jī)響應(yīng)請(qǐng)求,從機(jī)發(fā)送的功能碼與從

11、主機(jī)發(fā)送來(lái)的功能碼一樣,表明從機(jī)已響應(yīng)主機(jī)進(jìn)行操作。如果從機(jī)發(fā)送的功能碼的最高位為 1,則表明從機(jī)沒(méi)有響應(yīng)操作或發(fā)送出錯(cuò),主設(shè)備應(yīng)用程序得到異議的回應(yīng)后,典型的處理是重發(fā)消息。表 l 列出了常用 Modbus 支持的部分功能碼。 以讀取線圈狀態(tài)為例說(shuō)明。主站發(fā)送命令:設(shè)備地址命令號(hào) 01起始寄存器地址高 8 位低 8 位讀取的寄存器數(shù)高 8 位低 8 位CRC 校驗(yàn)的低 8 位高 8 位。從站響應(yīng):設(shè)備地址命令號(hào) 01返回的字節(jié)個(gè)數(shù)數(shù)據(jù) 1數(shù)據(jù) 2數(shù)據(jù) nCRC 校驗(yàn)的低8 位高 8 位。(3)數(shù)據(jù)區(qū)數(shù)據(jù)區(qū)根據(jù)功能碼的不同而不同。數(shù)據(jù)區(qū)包含需要從機(jī)執(zhí)行什么動(dòng)作,或由從機(jī)采集的返送信息。這些信息

12、可以是實(shí)際數(shù)值、設(shè)置點(diǎn)、主機(jī)發(fā)送給從機(jī)或從機(jī)發(fā)送給主機(jī)的地址等。例如,功能碼告訴從機(jī)讀取寄存器的值,則數(shù)據(jù)區(qū)必須包含要讀取寄存器的起始地址及讀取長(zhǎng)度。對(duì)于不同的從機(jī),地址和數(shù)據(jù)信息都不相同。(4)錯(cuò)誤校驗(yàn)碼主機(jī)或從機(jī)可用校驗(yàn)碼判別接收信息是否出錯(cuò)。錯(cuò)誤檢測(cè)域包含一個(gè) 16 位的值(用 2個(gè) 8 位的字符來(lái)實(shí)現(xiàn))。錯(cuò)誤檢測(cè)域的內(nèi)容是通過(guò)對(duì)消息內(nèi)容進(jìn)行“循環(huán)冗余檢測(cè)”得出的。CRC 域附加在消息的最后,添加時(shí)先是低字節(jié)然后是高字節(jié),故 CRC 的高位字節(jié)是發(fā)送消息的最后一個(gè)寧節(jié)。錯(cuò)誤校驗(yàn)采用 CRC-16 校驗(yàn)方法。3 3 軟件編程軟件編程下面是采用 C5l 編寫(xiě)的軟件,主要包括 CRC 校驗(yàn)和終

13、端接收及波特率設(shè)置等。由于篇幅有限,其他程序略。 4 4 總總 結(jié)結(jié)由于 Modhus 協(xié)議具有開(kāi)放性和透明性等特點(diǎn),而 51 系列單片機(jī)技術(shù)成熟、開(kāi)發(fā)成本低,二者的結(jié)合將繼續(xù)成為各類(lèi)通信系統(tǒng)設(shè)計(jì)的首選。本設(shè)計(jì)方法已經(jīng)應(yīng)用于觸摸屏與單片機(jī)通信設(shè)計(jì),并取得了較好效果。這種方法對(duì)于編制類(lèi)似的通信軟件有一定的借鑒作用,部分程序可以直接移植。錯(cuò)誤檢測(cè)與修正(Error Check & Correct) 在數(shù)字?jǐn)?shù)據(jù)通信中,由發(fā)送器發(fā)送的數(shù)據(jù)信號(hào)禎(Frame)在經(jīng)由網(wǎng)絡(luò)傳到接收器后,由于多種原因可能導(dǎo)致錯(cuò)誤位(bit errors)的出現(xiàn),因此必須由接收器采取一定的措施探測(cè)出所有的錯(cuò)誤位,并進(jìn)而

14、采取一定的措施予以修正。 一、錯(cuò)誤檢測(cè)的基本原理(Principle of Error Check) 發(fā)送器向所發(fā)送的數(shù)據(jù)信號(hào)禎添加錯(cuò)誤檢驗(yàn)碼(Check Bits),并取該錯(cuò)誤檢測(cè)碼作為該被傳輸數(shù)據(jù)信號(hào)的函數(shù);接收器根據(jù)該函數(shù)的定義進(jìn)行同樣的計(jì)算,然后將兩個(gè)結(jié)果進(jìn)行比較:如果結(jié)果相同,則認(rèn)為無(wú)錯(cuò)誤位;否則認(rèn)為該數(shù)據(jù)禎存在有錯(cuò)誤位。 一般說(shuō)來(lái),錯(cuò)誤檢測(cè)可能出現(xiàn)三種結(jié)果: 在所傳輸?shù)臄?shù)據(jù)禎中未探測(cè)到,也不存在錯(cuò)誤位; 所傳輸?shù)臄?shù)據(jù)禎中有一個(gè)或多個(gè)被探測(cè)到的錯(cuò)誤位,但不存在未探測(cè)到的錯(cuò)誤位; 被傳輸?shù)臄?shù)據(jù)禎中有一個(gè)或多個(gè)沒(méi)有被探測(cè)到的錯(cuò)誤位。 顯然我們希望盡可能好地選擇該檢測(cè)函數(shù),使檢測(cè)結(jié)果可靠,

15、即:所有的錯(cuò)誤最好都能被檢測(cè)出來(lái);如檢測(cè)出現(xiàn)無(wú)錯(cuò)結(jié)果,則應(yīng)不再存在任何未被檢測(cè)出來(lái)的錯(cuò)誤。 實(shí)際采用的錯(cuò)誤檢測(cè)方法主要有兩類(lèi):奇偶校驗(yàn)(Parity)和 CRC 循環(huán)冗余校驗(yàn)(Cyclic Redundancy Check)。 二、奇偶校驗(yàn)(Parity) 1.單向奇偶校驗(yàn) 單向奇偶校驗(yàn)(Row Parity)由于一次只采用單個(gè)校驗(yàn)位,因此又稱(chēng)為單個(gè)位奇偶校驗(yàn)(Single Bit Parity)。發(fā)送器在數(shù)據(jù)禎每個(gè)字符的信號(hào)位后添一個(gè)奇偶校驗(yàn)位,接收器對(duì)該奇偶校驗(yàn)位進(jìn)行檢查。典型的例子是面向 ASCII 碼的數(shù)據(jù)信號(hào)禎的傳輸,由于ASCII 碼是七位碼,因此用第八個(gè)位碼作為奇偶校驗(yàn)位。 單向

16、奇偶校驗(yàn)又分為奇校驗(yàn)(Odd Parity)和偶校驗(yàn)(Even Parity),發(fā)送器通過(guò)校驗(yàn)位對(duì)所傳輸信號(hào)值的校驗(yàn)方法如下:奇校驗(yàn)保證所傳輸每個(gè)字符的 8 個(gè)位中 1 的總數(shù)為奇數(shù);偶校驗(yàn)則保證每個(gè)字符的 8 個(gè)位中 1 的總數(shù)為偶數(shù)。 顯然,如果被傳輸字符的 7 個(gè)信號(hào)位中同時(shí)有奇數(shù)個(gè)(例如 1、3、5、7)位出現(xiàn)錯(cuò)誤,均可以被檢測(cè)出來(lái);但如果同時(shí)有偶數(shù)個(gè)(例如 2、4、6)位出現(xiàn)錯(cuò)誤,單向奇偶校驗(yàn)是檢查不出來(lái)的。 一般在同步傳輸方式中常采用奇校驗(yàn),而在異步傳輸方式中常采用偶校驗(yàn)。 2.雙向奇偶校驗(yàn) 為了提高奇偶校驗(yàn)的檢錯(cuò)能力,可采用雙向奇偶校驗(yàn)(Row and Column Parity

17、),也又稱(chēng)為雙向冗余校驗(yàn)(Vertical and Longitudinal Redundancy Checks)。 圖 1.4 給出了由 5 個(gè) ASCII 碼字符數(shù)據(jù)信號(hào)及其雙向偶校驗(yàn)位組成的典型傳輸矩陣(其中:前五行各字符的偶校驗(yàn)位組成的校驗(yàn)位列(最右邊一列),最下面一行由各列信號(hào)位的偶校驗(yàn)位組成),該矩陣右下角的校驗(yàn)位則可按行或按列取校驗(yàn)位。 傳輸方向 校驗(yàn)位列 1 0 1 1 0 1 1 1 1 1 0 1 0 1 1 1 0 0 1 1 1 0 1 0 1 0 0 0 1 0 1 1 0 1 0 1 1 1 1 1 1 0 0 0 1 1 1 0 校驗(yàn)位行 圖 1.4 典型雙向偶校

18、驗(yàn)傳輸矩陣 顯然,如果被傳輸?shù)淖址盘?hào)矩陣中同時(shí)在偶數(shù)個(gè)行中的偶數(shù)個(gè)相同的列中出現(xiàn)錯(cuò)誤,雙向奇偶校驗(yàn)也是檢查不出來(lái)的。 三、CRC 循環(huán)冗余校驗(yàn)(Cyclic Redundancy Check) 1.CRC 循環(huán)冗余校驗(yàn)的基本原理 發(fā)送器和接收器約定選擇同一個(gè)由 n+1 個(gè)位組成的二進(jìn)制位列 P 作為校驗(yàn)列,發(fā)送器在數(shù)據(jù)禎的 K 個(gè)位信號(hào)后添加 n 個(gè)位(n= 0) crc = crc (int)*ptr+ 8; for (i = 0; i 8; +i) if (crc & 0 x8000) crc = crc 1 0 x1021; else crc = crc = 0) crc = crc (int)*

溫馨提示

  • 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)論