




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、modbus通訊協(xié)議詳細(xì)介紹modbus協(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é)議作為他們之間的通訊標(biāo)準(zhǔn)。有了它,不同廠商生產(chǎn)的控制設(shè)備可以連成工業(yè)網(wǎng)絡(luò),進(jìn)行集中監(jiān)控。 當(dāng)在網(wǎng)絡(luò)上通信時,modbus協(xié)議決定了每個控制器須要知道它們的設(shè)備地址,識別按地址發(fā)來的消息,決定要產(chǎn)生何種行動。如果需要回應(yīng),控制器
2、將生成應(yīng)答并使用modbus協(xié)議發(fā)送給詢問方。 modbus協(xié)議包括ascii、rtu、tcp等,并沒有規(guī)定物理層。此協(xié)議定義了控制器能夠認(rèn)識和使用的消息結(jié)構(gòu),而不管它們是經(jīng)過何種網(wǎng)絡(luò)進(jìn)行通信的。標(biāo)準(zhǔn)的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ù)進(jìn)行校驗,串行協(xié)議中除
3、有奇偶校驗外,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ā)送出去即可。所以在這里我僅
4、介紹一下modbus的ascii和rtu協(xié)議。 下表是ascii協(xié)議和rtu協(xié)議進(jìn)行的比較: 協(xié)議開始標(biāo)記結(jié)束標(biāo)記校驗傳輸效率程序處理ascii:(冒號)cr,lflrc低直觀,簡單,易調(diào)試rtu無無crc高不直觀,稍復(fù)雜通過比較可以看到,ascii協(xié)議和rtu協(xié)議相比擁有開始和結(jié)束標(biāo)記,因此在進(jìn)行程序處理時能更加方便,而且由于傳輸?shù)亩际强梢姷腶scii字符,所以進(jìn)行調(diào)試時就更加的直觀,另外它的lrc校驗也比較容易。但是因為它傳輸?shù)亩际强梢姷腶scii字符,rtu傳輸?shù)臄?shù)據(jù)每一個字節(jié)ascii都要用兩個字節(jié)來傳輸,比如rtu傳輸一個十六進(jìn)制數(shù)0xf9,ascii就需要傳輸f9的ascii碼0x
5、39和0x46兩個字節(jié),這樣它的傳輸?shù)男示捅容^低。所以一般來說,如果所需要傳輸?shù)臄?shù)據(jù)量較小可以考慮使用ascii協(xié)議,如果所需傳輸?shù)臄?shù)據(jù)量比較大,最好能使用rtu協(xié)議。下面對兩種協(xié)議的校驗進(jìn)行一下介紹。1、lrc校驗lrc域是一個包含一個8位二進(jìn)制值的字節(jié)。lrc值由傳輸設(shè)備來計算并放到消息幀中,接收設(shè)備在接收消息的過程中計算lrc,并將它和接收到消息中l(wèi)rc域中的值比較,如果兩值不等,說明有錯誤。lrc校驗比較簡單,它在ascii協(xié)議中使用,檢測了消息域中除開始的冒號及結(jié)束的回車換行號外的內(nèi)容。它僅僅是把每一個需要傳輸?shù)臄?shù)據(jù)按字節(jié)疊加后取反加1即可。下面是它的vc代碼: byte getc
6、heckcode(const char * psendbuf, int nend)/獲得校驗碼 byte bylrc = 0; char pbuf4; int ndata = 0; for(i=1; i<end; i+=2) /i初始為1,避開“開始標(biāo)記”冒號 /每兩個需要發(fā)送的ascii碼轉(zhuǎn)化為一個十六進(jìn)制數(shù) pbuf 0 = psendbuf i;
7、60; pbuf 1 = psendbuf i+1; pbuf 2 = '0' sscanf(pbuf,"%x",& ndata); bylrc += ndata; bylrc = bylrc; &
8、#160; bylrc +; return bylrc; 2、crc校驗 crc域是兩個字節(jié),包含一16位的二進(jìn)制值。它由傳輸設(shè)備計算后加入到消息中。接收設(shè)備重新計算收到消息的crc,并與接收到的crc域中的值比較,如果兩值不同,則有誤。crc是先調(diào)入一值是全“1”的16位寄存器,然后調(diào)用一過程將消息中連續(xù)的8位字節(jié)各當(dāng)前寄存器中的值進(jìn)行處理。僅每個字符中的8bit數(shù)據(jù)對crc有效,起始位和停止位以及奇偶校驗位均無效。crc產(chǎn)生過程中,每個8位字符都單獨和寄存器內(nèi)容相或(or),結(jié)果向最低有效位方向移動,最高有效位以0填充。lsb被提取出來檢測,如果lsb為1,寄存器單獨和預(yù)置的值或一下,如果
9、lsb為0,則不進(jìn)行。整個過程要重復(fù)8次。在最后一位(第8位)完成后,下一個8位字節(jié)又單獨和寄存器的當(dāng)前值相或。最終寄存器中的值,是消息中所有的字節(jié)都執(zhí)行之后的crc值。crc添加到消息中時,低字節(jié)先加入,然后高字節(jié)。下面是它的vc代碼: word getcheckcode(const char * psendbuf, int nend)/獲得校驗碼 word wcrc = word(0xffff); for(int i=0; i<nend; i+)
10、0; wcrc = word(byte(psendbufi); for(int j=0; j<8; j+)
11、160; if(wcrc & 1)
12、160; wcrc >>= 1; wcrc =
13、 0xa001; else
14、60; wcrc >>= 1; &
15、#160; return wcrc;對于一條rtu協(xié)議的命令可以簡單的通過以下的步驟轉(zhuǎn)化為ascii協(xié)議的命令:1、 把命令的crc校驗去掉,并且計算出lrc校驗取代。2、 把生成的命令串的每一個字節(jié)轉(zhuǎn)化成對應(yīng)的兩個字節(jié)的ascii碼,比如0x03轉(zhuǎn)化成0x30,0x33(0的ascii碼和3的ascii碼)。3、 在命令的開頭加上起始標(biāo)記“:”,它的a
16、scii碼為0x3a。4、 在命令的尾部加上結(jié)束標(biāo)記cr,lf(0xd,0xa),此處的cr,lf表示回車和換行的ascii碼。所以以下我們僅介紹rtu協(xié)議即可,對應(yīng)的ascii協(xié)議可以使用以上的步驟來生成。下表是modbus支持的功能碼:功能碼 名稱 作用 01 讀取線圈狀態(tài) 取得一組邏輯線圈的當(dāng)前狀態(tài)(on/off) 02 讀取輸入狀態(tài) 取得一組開關(guān)輸入的當(dāng)前狀態(tài)(on/off) 03 讀取保持寄存器 在一個或多個保持寄存器中取得當(dāng)前的二進(jìn)制值 04 讀取輸入寄存器 在一個或多個輸入寄存器中取得當(dāng)前的二進(jìn)制值 05 強置單線圈 強置一個邏輯線圈的通斷狀態(tài) 06 預(yù)置單寄存器 把
17、具體二進(jìn)值裝入一個保持寄存器 07 讀取異常狀態(tài) 取得8個內(nèi)部線圈的通斷狀態(tài),這8個線圈的地址由控制器決定 08 回送診斷校驗 把診斷校驗報文送從機,以對通信處理進(jìn)行評鑒 09 編程(只用于484) 使主機模擬編程器作用,修改pc從機邏輯 10 控詢(只用于484) 可使主機與一臺正在執(zhí)行長程序任務(wù)從機通信,探詢該從機是否已完成其操作任務(wù),僅在含有功能碼9的報文發(fā)送后,本功能碼才發(fā)送 11 讀取事件計數(shù) 可使主機發(fā)出單詢問,并隨即判定操作是否成功,尤其是該命令或其他應(yīng)答產(chǎn)生通信錯誤時 12 讀取通信事件記錄 可是主機檢索每臺從機的modbus事務(wù)處理通信事件記錄。如果某項事務(wù)處理完成,記錄會給
18、出有關(guān)錯誤 13 編程(184/384 484 584) 可使主機模擬編程器功能修改pc從機邏輯 14 探詢(184/384 484 584) 可使主機與正在執(zhí)行任務(wù)的從機通信,定期控詢該從機是否已完成其程序操作,僅在含有功能13的報文發(fā)送后,本功能碼才得發(fā)送 15 強置多線圈 強置一串連續(xù)邏輯線圈的通斷 16 預(yù)置多寄存器 把具體的二進(jìn)制值裝入一串連續(xù)的保持寄存器 17 報告從機標(biāo)識 可使主機判斷編址從機的類型及該從機運行指示燈的狀態(tài) 18 (884和micro 84) 可使主機模擬編程功能,修改pc狀態(tài)邏輯 19 重置通信鏈路 發(fā)生非可修改錯誤后,是從機復(fù)位于已知狀態(tài),可重置順序字節(jié) 20
19、 讀取通用參數(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、讀可讀寫數(shù)字量寄存器(線圈狀態(tài)):計算機發(fā)送命令:設(shè)備地址 命令號01 起始寄存器地址高8位 低8位 讀取的寄存器數(shù)高8位 低8位 crc校驗的低8位
20、 crc校驗的高8位 例:110100130025crc低crc高 意義如下:<1>設(shè)備地址:在一個485總線上可以掛接多個設(shè)備,此處的設(shè)備地址表示想和哪一個設(shè)備通訊。例子中為想和17號(十進(jìn)制的17是十六進(jìn)制的11)通訊。 <2>命令號01:讀取數(shù)字量的命令號固定為01。<3>起始地址高8位、低8位:表示想讀取的開關(guān)量的起始地址(起始地址為0)。比如例子中的起始地址為19。<4>寄存器數(shù)高8位、低8位:表示從起始地址開始讀多少個開關(guān)量。例子中為37個開關(guān)量。<5>crc校驗:是從開頭一直校驗到此之前。在此協(xié)議的最后再作介紹。此處需要
21、注意,crc校驗在命令中的高低字節(jié)的順序和其他的相反。 設(shè)備響應(yīng):設(shè)備地址 命令號01 返回的字節(jié)個數(shù)數(shù)據(jù)1數(shù)據(jù)2.數(shù)據(jù)ncrc校驗的低8位 crc校驗的高8位 例:110105cd6bb20e1bcrc低crc高 意義如下:<1>設(shè)備地址和命令號和上面的相同。<2>返回的字節(jié)個數(shù):表示數(shù)據(jù)的字節(jié)個數(shù),也就是數(shù)據(jù)1,2.n中的n的值。<3>數(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斷開,2
22、6閉合,27閉合.如果詢問的開關(guān)量不是8的整倍數(shù),那么最后一個字節(jié)的高位部分無意義,置為0。<4>crc校驗同上。 2、讀只可讀數(shù)字量寄存器(輸入狀態(tài)): 和讀取線圈狀態(tài)類似,只是第二個字節(jié)的命令號不再是1而是2。 3、寫數(shù)字量(線圈狀態(tài)): 計算機發(fā)送命令:設(shè)備地址 命令號05 需下置的寄存器地址高8位 低8位 下置的數(shù)據(jù)高8位 低8位 crc校驗的低8位 crc校驗的高8位 例:110500acff00crc低crc高 意義如下:<1>設(shè)備地址和上面的相同。<2>命令號:寫數(shù)字量的命令號固定為05。<3>需下置的寄存器地址高8位,低8位:表明
23、了需要下置的開關(guān)的地址。<4>下置的數(shù)據(jù)高8位,低8位:表明需要下置的開關(guān)量的狀態(tài)。例子中為把該開關(guān)閉合。注意,此處只可以是ff00表示閉合0000表示斷開,其他數(shù)值非法。<5>注意此命令一條只能下置一個開關(guān)量的狀態(tài)。 設(shè)備響應(yīng):如果成功把計算機發(fā)送的命令原樣返回,否則不響應(yīng)。 4、讀可讀寫模擬量寄存器(保持寄存器):計算機發(fā)送命令:設(shè)備地址 命令號03 起始寄存器地址高8位 低8位 讀取的寄存器數(shù)高8位 低8位 crc校驗的低8位 crc校驗的高8位 例:1103006b0003crc低crc高 意義如下:<1>設(shè)備地址和上面的相同。<2>命令號:讀模擬量的命令號固定為03。<3>起始地址高8位、低8位:表示想讀取的模擬
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 礦物在熱交換器材料中的應(yīng)用考核試卷
- 紙制品行業(yè)品牌價值評估方法探討考核試卷
- 外貿(mào)英語函電module8
- 探秘化學(xué)反應(yīng)
- 塑造未來的高二之路
- 外貿(mào)英文函電課件unit9
- 婁底市重點中學(xué)2024-2025學(xué)年高三歷史試題一模歷史試題試卷含解析
- 汕頭大學(xué)《古生物地史學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 內(nèi)蒙古自治區(qū)興安盟烏蘭浩特市第十三中學(xué)2025年初三1月階段性測試數(shù)學(xué)試題文試題含解析
- 江西師大附中2025年高三第二次模擬考試卷歷史試題含解析
- 2025年人工智能訓(xùn)練師(高級)職業(yè)資格認(rèn)定參考試題庫(含答案)
- 機械系統(tǒng)動力學(xué)試題及答案
- 電子商務(wù)大數(shù)據(jù)分析方法試題及答案
- 【廣西】斜拉橋施工組織設(shè)計
- 中華文學(xué)經(jīng)典導(dǎo)讀知到課后答案智慧樹章節(jié)測試答案2025年春牡丹江師范學(xué)院
- 小學(xué)教育學(xué)(第5版)課件 第八章 小學(xué)教育環(huán)境
- 大模型在金融風(fēng)控領(lǐng)域的應(yīng)用與效率優(yōu)化
- 2025年三力反應(yīng)測試題及答案
- 2025(統(tǒng)編版)語文二年級下冊第三單元解析+任務(wù)目標(biāo)+大單元教學(xué)設(shè)計
- 第六講探尋新時期中美正確相處之道-2025年春季學(xué)期形勢與政策課件
- 與合作伙伴的戰(zhàn)略合作洽談紀(jì)要
評論
0/150
提交評論