MODBUS通訊協(xié)議簡介_第1頁
MODBUS通訊協(xié)議簡介_第2頁
MODBUS通訊協(xié)議簡介_第3頁
MODBUS通訊協(xié)議簡介_第4頁
MODBUS通訊協(xié)議簡介_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、.MODBUS通訊協(xié)議簡介MODBUS通訊協(xié)議簡介MODBUS通訊協(xié)議簡介工業(yè)控制已從單機控制走向集中監(jiān)控、集散控制,如今已進入網(wǎng)絡(luò)時代,工業(yè)控制器連網(wǎng)也為網(wǎng)絡(luò)管理提供了方便。Modbus就是工業(yè)控制器的網(wǎng)絡(luò)協(xié)議中的一種。一、概述Modbus協(xié)議是應(yīng)用于電子控制器上的一種通用語言。通過此協(xié)議,控制器互相之間、控制器經(jīng)由網(wǎng)絡(luò)例如以太網(wǎng)和其它設(shè)備之間可以通信。它已經(jīng)成為一通用工業(yè)標準。有了它,不同廠商消費的控制設(shè)備可以連成工業(yè)網(wǎng)絡(luò),進展集中監(jiān)控。此協(xié)議定義了一個控制器能認識使用的消息構(gòu)造,而不管它們是經(jīng)過何種網(wǎng)絡(luò)進展通信的。它描繪了一控制器懇求訪問其它設(shè)備的過程,假如回應(yīng)來自其它設(shè)備的懇求,以及怎

2、樣偵測錯誤并記錄。它制定了消息域格局和內(nèi)容的公共格式。當在一Modbus網(wǎng)絡(luò)上通信時,此協(xié)議決定了每個控制器需要知道它們的設(shè)備地址,識別按地址發(fā)來的消息,決定要產(chǎn)生何種行動。假如需要回應(yīng),控制器將生成反響信息并用Modbus協(xié)議發(fā)出。在其它網(wǎng)絡(luò)上,包含了Modbus協(xié)議的消息轉(zhuǎn)換為在此網(wǎng)絡(luò)上使用的幀或包構(gòu)造。這種轉(zhuǎn)換也擴展了根據(jù)詳細的網(wǎng)絡(luò)解決節(jié)地址、路由途徑及錯誤檢測的方法。1、在Modbus網(wǎng)絡(luò)上轉(zhuǎn)輸標準的Modbus口是使用一RS-232C兼容串行接口,它定義了連接口的針腳、電纜、信號位、傳輸波特率、奇偶校驗??刂破髂苤苯踊蚪?jīng)由Modem組網(wǎng)。控制器通信使用主-從技術(shù),即僅一設(shè)備主設(shè)備能初

3、始化傳輸查詢。其它設(shè)備從設(shè)備根據(jù)主設(shè)備查詢提供的數(shù)據(jù)作出相應(yīng)反響。典型的主設(shè)備:主機和可編程儀表。典型的從設(shè)備:可編程控制器。主設(shè)備可單獨和從設(shè)備通信,也能以播送方式和所有從設(shè)備通信。假如單獨通信,從設(shè)備返回一消息作為回應(yīng),假如是以播送方式查詢的,那么不作任何回應(yīng)。Modbus協(xié)議建立了主設(shè)備查詢的格式:設(shè)備或播送地址、功能代碼、所有要發(fā)送的數(shù)據(jù)、一錯誤檢測域。從設(shè)備回應(yīng)消息也由Modbus協(xié)議構(gòu)成,包括確認要行動的域、任何要返回的數(shù)據(jù)、和一錯誤檢測域。假如在消息接收過程中發(fā)生一錯誤,或從設(shè)備不能執(zhí)行其命令,從設(shè)備將建立一錯誤消息并把它作為回應(yīng)發(fā)送出去。2、在其它類型網(wǎng)絡(luò)上轉(zhuǎn)輸在其它網(wǎng)絡(luò)上,控

4、制器使用對等技術(shù)通信,故任何控制都能初始和其它控制器的通信。這樣在單獨的通信過程中,控制器既可作為主設(shè)備也可作為從設(shè)備。提供的多個內(nèi)部通道可允許同時發(fā)生的傳輸進程。在消息位,Modbus協(xié)議仍提供了主-從原那么,盡管網(wǎng)絡(luò)通信方法是對等。假如一控制器發(fā)送一消息,它只是作為主設(shè)備,并期望從從設(shè)備得到回應(yīng)。同樣,當控制器接收到一消息,它將建立一從設(shè)備回應(yīng)格式并返回給發(fā)送的控制器。Modbus是Modicon公司為其PLC與主機之間的通訊而創(chuàng)造的串行通訊協(xié)議。其物理層采用RS232、485等異步串行標準。由于其開放性而被大量的PLC及RTU廠家采用。Modbus通訊方式采用主從方式的查詢-相應(yīng)機制,只

5、有主站發(fā)出查詢時,從站才能給出響應(yīng),從站不能主動發(fā)送數(shù)據(jù)。主站可以向某一個從站發(fā)出查詢,也可以向所有從站播送信息。從站只響應(yīng)單獨發(fā)給它的查詢,而不響應(yīng)播送消息。Modbus的串行口的通訊參數(shù)如波特率、奇偶校驗可由用戶選擇。二、MODBUS協(xié)議傳送方式MODBUS通訊協(xié)議有兩種傳送方式:RTU方式和ASCII方式,兩種方式如下所示:工程RTU方式ASCII方式字節(jié)長度8 BITS 7BITS奇偶校驗1 BIT OR 0BIT 1BIT OR 0BIT字節(jié)中止1 BIT OR 2BITS 1BIT OR 2BITS開場標記不要:冒號完畢標記不要CR,LF數(shù)據(jù)間隔24 BIT 1S出錯檢驗方式CRC

6、-16 LRC控制器能設(shè)置為兩種傳輸形式ASCII或RTU中的任何一種在標準的Modbus網(wǎng)絡(luò)通信。用戶選擇想要的形式,包括串口通信參數(shù)波特率、校驗方式等,在配置每個控制器的時候,在一個Modbus網(wǎng)絡(luò)上的所有設(shè)備都必須選擇一樣的傳輸形式和串口參數(shù)。三、Modbus消息幀兩種傳輸形式中ASCII或RTU,傳輸設(shè)備以將Modbus消息轉(zhuǎn)為有起點和終點的幀,這就允許接收的設(shè)備在消息起始處開場工作,讀地址分配信息,判斷哪一個設(shè)備被選中播送方式那么傳給所有設(shè)備,判知何時信息已完成。部分的消息也能偵測到并且錯誤能設(shè)置為返回結(jié)果。1、ASCII幀使用ASCII形式,消息以冒號:字符ASCII碼3AH開場,

7、以回車換行符完畢ASCII碼0DH,0AH。其它域可以使用的傳輸字符是十六進制的0.9,A.F。網(wǎng)絡(luò)上的設(shè)備不斷偵測:字符,當有一個冒號接收到時,每個設(shè)備都解碼下個域地址域來判斷是否發(fā)給自己的。消息中字符間發(fā)送的時間間隔最長不能超過1秒,否那么接收的設(shè)備將認為傳輸錯誤。2、RTU幀使用RTU形式,消息發(fā)送至少要以3.5個字符時間的停頓間隔開場。在網(wǎng)絡(luò)波特率下多樣的字符時間,這是最容易實現(xiàn)的如以下圖的T1-T2-T3-T4所示。傳輸?shù)牡谝粋€域是設(shè)備地址??梢允褂玫膫鬏斪址鞘M制的0.9,A.F。網(wǎng)絡(luò)設(shè)備不斷偵測網(wǎng)絡(luò)總線,包括停頓間隔時間內(nèi)。當?shù)谝粋€域地址域接收到,每個設(shè)備都進展解碼以判斷是否

8、發(fā)往自己的。在最后一個傳輸字符之后,一個至少3.5個字符時間的停頓標定了消息的完畢。一個新的消息可在此停頓后開場。整個消息幀必須作為一連續(xù)的流轉(zhuǎn)輸。假如在幀完成之前有超過1.5個字符時間的停頓時間,接收設(shè)備將刷新不完好的消息并假定下一字節(jié)是一個新消息的地址域。同樣地,假如一個新消息在小于3.5個字符時間內(nèi)接著前個消息開場,接收的設(shè)備將認為它是前一消息的延續(xù)。這將導致一個錯誤,因為在最后的CRC域的值不可能是正確的。3、地址域消息幀的地址域包含兩個字符ASCII或8BitRTU。可能的從設(shè)備地址是0.247十進制。單個設(shè)備的地址范圍是1.247。主設(shè)備通過將要聯(lián)絡(luò)的從設(shè)備的地址放入消息中的地址域

9、來選通從設(shè)備。當從設(shè)備發(fā)送回應(yīng)消息時,它把自己的地址放入回應(yīng)的地址域中,以便主設(shè)備知道是哪一個設(shè)備作出回應(yīng)。地址0是用作播送地址,以使所有的從設(shè)備都能認識。當Modbus協(xié)議用于更高水準的網(wǎng)絡(luò),播送可能不允許或以其它方式代替。4、如何處理功能域消息幀中的功能代碼域包含了兩個字符ASCII或8BitsRTU??赡艿拇a范圍是十進制的1.255。當然,有些代碼是適用于所有控制器,有此是應(yīng)用于某種控制器,還有些保存以備后用。當消息從主設(shè)備發(fā)往從設(shè)備時,功能代碼域?qū)⒏嬷畯脑O(shè)備需要執(zhí)行哪些行為。例如去讀取輸入的開關(guān)狀態(tài),讀一組存放器的數(shù)據(jù)內(nèi)容,讀從設(shè)備的診斷狀態(tài),允許調(diào)入、記錄、校驗在從設(shè)備中的程序等。

10、當從設(shè)備回應(yīng)時,它使用功能代碼域來指示是正?;貞?yīng)無誤還是有某種錯誤發(fā)生稱作異議回應(yīng)。對正常回應(yīng),從設(shè)備僅回應(yīng)相應(yīng)的功能代碼。對異議回應(yīng),從設(shè)備返回一等同于正常代碼的代碼,但最重要的位置為邏輯1。例如:一從主設(shè)備發(fā)往從設(shè)備的消息要求讀一組保持存放器,將產(chǎn)生如下功能代碼:0 00 00 01 1十六進制03H對正?;貞?yīng),從設(shè)備僅回應(yīng)同樣的功能代碼。對異議回應(yīng),它返回:1 00 00 01 1十六進制83H除功能代碼因異議錯誤作了修改外,從設(shè)備將一獨特的代碼放到回應(yīng)消息的數(shù)據(jù)域中,這能告訴主設(shè)備發(fā)生了什么錯誤。主設(shè)備應(yīng)用程序得到異議的回應(yīng)后,典型的處理過程是重發(fā)消息,或者診斷發(fā)給從設(shè)備的消息并報告給

11、操作員。5、數(shù)據(jù)域數(shù)據(jù)域是由兩個十六進制數(shù)集合構(gòu)成的,范圍00.FF。根據(jù)網(wǎng)絡(luò)傳輸形式,這可以是由一對ASCII字符組成或由一RTU字符組成。從主設(shè)備發(fā)給從設(shè)備消息的數(shù)據(jù)域包含附加的信息:從設(shè)備必須用于進展執(zhí)行由功能代碼所定義的所為。這包括了象不連續(xù)的存放器地址,要處理項的數(shù)目,域中實際數(shù)據(jù)字節(jié)數(shù)。例如,假如主設(shè)備需要從設(shè)備讀取一組保持存放器功能代碼03,數(shù)據(jù)域指定了起始存放器以及要讀的存放器數(shù)量。假如主設(shè)備寫一組從設(shè)備的存放器功能代碼10十六進制,數(shù)據(jù)域那么指明了要寫的起始存放器以及要寫的存放器數(shù)量,數(shù)據(jù)域的數(shù)據(jù)字節(jié)數(shù),要寫入存放器的數(shù)據(jù)。假如沒有錯誤發(fā)生,從從設(shè)備返回的數(shù)據(jù)域包含懇求的數(shù)據(jù)

12、。假如有錯誤發(fā)生,此域包含一異議代碼,主設(shè)備應(yīng)用程序可以用來判斷采取下一步行動。在某種消息中數(shù)據(jù)域可以是不存在的0長度。例如,主設(shè)備要求從設(shè)備回應(yīng)通信事件記錄功能代碼0B十六進制,從設(shè)備不需任何附加的信息。6、錯誤檢測域標準的Modbus網(wǎng)絡(luò)有兩種錯誤檢測方法。錯誤檢測域的內(nèi)容視所選的檢測方法而定。ASCII中選用ASCII形式作字符幀,錯誤檢測域包含兩個ASCII字符。這是使用LRC縱向冗長檢測方法對消息內(nèi)容計算得出的,不包括開場的冒號符及回車換行符。LRC字符附加在回車換行符前面。RTU中選用RTU形式作字符幀,錯誤檢測域包含一16Bits值用兩個8位的字符來實現(xiàn)。錯誤檢測域的內(nèi)容是通過對

13、消息內(nèi)容進展循環(huán)冗長檢測方法得出的。CRC域附加在消息的最后,添加時先是低字節(jié)然后是高字節(jié)。故CRC的高位字節(jié)是發(fā)送消息的最后一個字節(jié)。7、字符的連續(xù)傳輸當消息在標準的Modbus系列網(wǎng)絡(luò)傳輸時,每個字符或字節(jié)以如下方式發(fā)送從左到右:最低有效位.最高有效位四、錯誤檢測方法標準的Modbus串行網(wǎng)絡(luò)采用兩種錯誤檢測方法。奇偶校驗對每個字符都可用,幀檢測LRC或CRC應(yīng)用于整個消息。它們都是在消息發(fā)送前由主設(shè)備產(chǎn)生的,從設(shè)備在接收過程中檢測每個字符和整個消息幀。用戶要給主設(shè)備配置一預(yù)先定義的超時時間間隔,這個時間間隔要足夠長,以使任何從設(shè)備都能作為正常反響。假如從設(shè)備測到一傳輸錯誤,消息將不會接收

14、,也不會向主設(shè)備作出回應(yīng)。這樣超時事件將觸發(fā)主設(shè)備來處理錯誤。發(fā)往不存在的從設(shè)備的地址也會產(chǎn)生超時。1、奇偶校驗用戶可以配置控制器是奇或偶校驗,或無校驗。這將決定了每個字符中的奇偶校驗位是如何設(shè)置的。假如指定了奇或偶校驗,1的位數(shù)將算到每個字符的位數(shù)中ASCII形式7個數(shù)據(jù)位,RTU中8個數(shù)據(jù)位。例如RTU字符幀中包含以下8個數(shù)據(jù)位:1 10 00 10 1整個1的數(shù)目是4個。假如便用了偶校驗,幀的奇偶校驗位將是0,便得整個1的個數(shù)仍是4個。假如便用了奇校驗,幀的奇偶校驗位將是1,便得整個1的個數(shù)是5個。假如沒有指定奇偶校驗位,傳輸時就沒有校驗位,也不進展校驗檢測。代替一附加的停頓位填充至要傳

15、輸?shù)淖址麕小?、LRC檢測使用ASCII形式,消息包括了一基于LRC方法的錯誤檢測域。LRC域檢測了消息域中除開場的冒號及完畢的回車換行號外的內(nèi)容。LRC域是一個包含一個8位二進制值的字節(jié)。LRC值由傳輸設(shè)備來計算并放到消息幀中,接收設(shè)備在接收消息的過程中計算LRC,并將它和接收到消息中LRC域中的值比較,假如兩值不等,說明有錯誤。LRC方法是將消息中的8Bit的字節(jié)連續(xù)累加,丟棄了進位。LRC簡單函數(shù)如下:static unsigned char LRCauchMsg,usDataLenunsigned char*auchMsg;/*要進展計算的消息*/unsigned short usD

16、ataLen;/*LRC要處理的字節(jié)的數(shù)量*/unsigned char uchLRC=0;/*LRC字節(jié)初始化*/whileusDataLen-/*傳送消息*/uchLRC+=*auchMsg+;/*累加*/returnunsigned char-char_uchLRC;3、CRC檢測使用RTU形式,消息包括了一基于CRC方法的錯誤檢測域。CRC域檢測了整個消息的內(nèi)容。CRC域是兩個字節(jié),包含一16位的二進制值。它由傳輸設(shè)備計算后參加到消息中。接收設(shè)備重新計算收到消息的CRC,并與接收到的CRC域中的值比較,假如兩值不同,那么有誤。CRC是先調(diào)入一值是全1的16位存放器,然后調(diào)用一過程將消息

17、中連續(xù)的8位字節(jié)各當前存放器中的值進展處理。僅每個字符中的8Bit數(shù)據(jù)對CRC有效,起始位和停頓位以及奇偶校驗位均無效。CRC產(chǎn)生過程中,每個8位字符都單獨和存放器內(nèi)容相或OR,結(jié)果向最低有效位方向挪動,最高有效位以0填充。LSB被提取出來檢測,假如LSB為1,存放器單獨和預(yù)置的值或一下,假如LSB為0,那么不進展。整個過程要重復8次。在最后一位第8位完成后,下一個8位字節(jié)又單獨和存放器的當前值相或。最終存放器中的值,是消息中所有的字節(jié)都執(zhí)行之后的CRC值。CRC添加到消息中時,低字節(jié)先參加,然后高字節(jié)。ModBus網(wǎng)絡(luò)是一個工業(yè)通信系統(tǒng),由帶智能終端的可編程序控制器和計算機通過公用線路或部分

18、專用線路連接而成。其系統(tǒng)構(gòu)造既包括硬件、亦包括軟件。它可應(yīng)用于各種數(shù)據(jù)采集和過程監(jiān)控。ModBus網(wǎng)絡(luò)只有一個主機,所有通信都由他發(fā)出。網(wǎng)絡(luò)可支持247個之多的遠程附屬控制器,但實際所支持的從機數(shù)要由所用通信設(shè)備決定。采用這個系統(tǒng),各PC可以和中心主機交換信息而不影響各PC執(zhí)行本身的控制任務(wù)。1ModBus的傳輸方式在ModBus系統(tǒng)中有2種傳輸形式可選擇。這2種傳輸形式與從機PC通信的才能是同等的。選擇時應(yīng)視所用ModBus主機而定,每個ModBus系統(tǒng)只能使用一種形式,不允許2種形式混用。一種形式是ASCII美國信息交換碼,另一種形式是RTU遠程終端設(shè)備。ASCII可打印字符便于故障檢測,

19、而且對于用高級語言如Fortan編程的主計算機及主PC很適宜。RTU那么適用于機器語言編程的計算機和PC主機。用RTU形式傳輸?shù)臄?shù)據(jù)是8位二進制字符。如欲轉(zhuǎn)換為ASCII形式,那么每個RTU字符首先應(yīng)分為高位和低位兩部分,這兩部分各含4位,然后轉(zhuǎn)換成十六進制等量值。用以構(gòu)成報文的ASCII字符都是十六進制字符。ASCII形式使用的字符雖是RTU形式的兩倍,但ASCII數(shù)據(jù)的譯瑪和處理更為容易一些,此外,用RTU形式時報文字符必須以連續(xù)數(shù)據(jù)流的形式傳送,用ASCII形式,字符之間可產(chǎn)生長達1s的間隔,以適應(yīng)速度較快的機器。2ModBus的數(shù)據(jù)校驗方式CRC-16循環(huán)冗余錯誤校驗CRC-16錯誤校

20、驗程序如下:報文此處只涉及數(shù)據(jù)位,不指起始位、停頓位和任選的奇偶校驗位被看作是一個連續(xù)的二進制,其最高有效位MSB首選發(fā)送。報文先與X16相乘左移16位,然后看X16+X15+X2+1除,X16+X15+X2+1可以表示為二進制數(shù)11000000000000101。整數(shù)商位忽略不記,16位余數(shù)參加該報文MSB先發(fā)送,成為2個CRC校驗字節(jié)。余數(shù)中的1全部初始化,以免所有的零成為一條報文被接收。經(jīng)上述處理而含有CRC字節(jié)的報文,假設(shè)無錯誤,到接收設(shè)備后再被同一多項式X16+X15+X2+1除,會得到一個零余數(shù)接收設(shè)備核驗這個CRC字節(jié),并將其與被傳送的CRC比較。全部運算以2為模無進位。習慣于成

21、串發(fā)送數(shù)據(jù)的設(shè)備會首選送出字符的最右位LSB-最低有效位。而在生成CRC情況下,發(fā)送首位應(yīng)是被除數(shù)的最高有效位MSB。由于在運算中不用進位,為便于操作起見,計算CRC時設(shè)MSB在最右位。生成多項式的位序也必須反過來,以保持一致。多項式的MSB略去不記,因其只對商有影響而不影響余數(shù)。生成CRC-16校驗字節(jié)的步驟如下:裝如一個16位存放器,所有數(shù)位均為1。該16位存放器的高位字節(jié)與開場8位字節(jié)進展異或運算。運算結(jié)果放入這個16位存放器。把這個16存放器向右移一位。假設(shè)向右標記位移出的數(shù)位是1,那么生成多項式1010000000000001和這個存放器進展異或運算;假設(shè)向右移出的數(shù)位是0,那么返回

22、。重復和,直至移出8位。另外8位與該十六位存放器進展異或運算。重復,直至該報文所有字節(jié)均與16位存放器進展異或運算,并移位8次。這個16位存放器的內(nèi)容即2字節(jié)CRC錯誤校驗,被加到報文的最高有效位。另外,在某些非ModBus通信協(xié)議中也經(jīng)常使用CRC16作為校驗手段,而且產(chǎn)生了一些CRC16的變種,他們是使用CRC16多項式X16+X15+X2+1,單首次裝入的16位存放器為0000;使用CRC16的反序X16+X14+X1+1,首次裝入存放器值為0000或FFFFH。LRC縱向冗余錯誤校驗LRC錯誤校驗用于ASCII形式。這個錯誤校驗是一個8位二進制數(shù),可作為2個ASCII十六進制字節(jié)傳送。

23、把十六進制字符轉(zhuǎn)換成二進制,加上無循環(huán)進位的二進制字符和二進制補碼結(jié)果生成LRC錯誤校驗參見圖。這個LRC在接收設(shè)備進展核驗,并與被傳送的LRC進展比較,冒號:、回車符號CR、換行字符LF和置入的其他任何非ASCII十六進制字符在運算時忽略不計。Modbus通訊協(xié)議圖片:圖片:圖片:Modbus協(xié)議最初由Modicon公司開發(fā)出來,在1979年末該公司成為施耐德自動化Schneider Automation部門的一部分,如今Modbus已經(jīng)是工業(yè)領(lǐng)域全球最流行的協(xié)議。此協(xié)議支持傳統(tǒng)的RS-232、RS-422、RS-485和以太網(wǎng)設(shè)備。許多工業(yè)設(shè)備,包括PLC,DCS,智能儀表等都在使用Mod

24、bus協(xié)議作為他們之間的通訊標準。有了它,不同廠商消費的控制設(shè)備可以連成工業(yè)網(wǎng)絡(luò),進展集中監(jiān)控。當在網(wǎng)絡(luò)上通信時,Modbus協(xié)議決定了每個控制器需要知道它們的設(shè)備地址,識別按地址發(fā)來的消息,決定要產(chǎn)生何種行動。假如需要回應(yīng),控制器將生成應(yīng)答并使用Modbus協(xié)議發(fā)送給詢問方。Modbus協(xié)議包括ASCII、RTU、TCP等,并沒有規(guī)定物理層。此協(xié)議定義了控制器可以認識和使用的消息構(gòu)造,而不管它們是經(jīng)過何種網(wǎng)絡(luò)進展通信的。標準的Modicon控制器使用RS232C實現(xiàn)串行的Modbus。Modbus的ASCII、RTU協(xié)議規(guī)定了消息、數(shù)據(jù)的構(gòu)造、命令和就答的方式,數(shù)據(jù)通訊采用Maser/Sla

25、ve方式,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端可以診斷出來,而當故障修復后,網(wǎng)絡(luò)又可自動接通。因此,Modbus協(xié)議的可靠性較好。下面我來簡單的給大家介紹一下,對

26、于Modbus的ASCII、RTU和TCP協(xié)議來說,其中TCP和RTU協(xié)議非常類似,我們只要把RTU協(xié)議的兩個字節(jié)的校驗碼去掉,然后在RTU協(xié)議的開場加上5個0和一個6并通過TCP/IP網(wǎng)絡(luò)協(xié)議發(fā)送出去即可。所以在這里我僅介紹一下Modbus的ASCII和RTU協(xié)議。下表是ASCII協(xié)議和RTU協(xié)議進展的比較:通過比較可以看到,ASCII協(xié)議和RTU協(xié)議相比擁有開場和完畢標記,因此在進展程序處理時能更加方便,而且由于傳輸?shù)亩际强梢姷腁SCII字符,所以進展調(diào)試時就更加的直觀,另外它的LRC校驗也比較容易。但是因為它傳輸?shù)亩际强梢姷腁SCII字符,RTU傳輸?shù)臄?shù)據(jù)每一個字節(jié)ASCII都要用兩個字

27、節(jié)來傳輸,比方RTU傳輸一個十六進制數(shù)0xF9,ASCII就需要傳輸F9的ASCII碼0x39和0x46兩個字節(jié),這樣它的傳輸?shù)男示捅容^低。所以一般來說,假如所需要傳輸?shù)臄?shù)據(jù)量較小可以考慮使用ASCII協(xié)議,假如所需傳輸?shù)臄?shù)據(jù)量比較大,最好能使用RTU協(xié)議。下面對兩種協(xié)議的校驗進展一下介紹。1、LRC校驗LRC域是一個包含一個8位二進制值的字節(jié)。LRC值由傳輸設(shè)備來計算并放到消息幀中,接收設(shè)備在接收消息的過程中計算LRC,并將它和接收到消息中LRC域中的值比較,假如兩值不等,說明有錯誤。LRC校驗比較簡單,它在ASCII協(xié)議中使用,檢測了消息域中除開場的冒號及完畢的回車換行號外的內(nèi)容。它僅僅

28、是把每一個需要傳輸?shù)臄?shù)據(jù)按字節(jié)疊加后取反加1即可。下面是它的VC代碼:BYTE GetCheckCodeconst char*pSendBuf,int nEnd/獲得校驗碼BYTE byLrc=0;char pBuf4;int nData=0;fori=1;i end;i+=2/i初始為1,避開開場標記冒號/每兩個需要發(fā)送的ASCII碼轉(zhuǎn)化為一個十六進制數(shù)pBuf0=pSendBuf;pBuf1=pSendBuf;pBuf2=message;sscanfpBuf,%x,&nData;byLrc+=nData;byLrc=byLrc;byLrc+;return byLrc;2、CRC校驗CRC域

29、是兩個字節(jié),包含一16位的二進制值。它由傳輸設(shè)備計算后參加到消息中。接收設(shè)備重新計算收到消息的CRC,并與接收到的CRC域中的值比較,假如兩值不同,那么有誤。CRC是先調(diào)入一值是全1的16位存放器,然后調(diào)用一過程將消息中連續(xù)的8位字節(jié)各當前存放器中的值進展處理。僅每個字符中的8Bit數(shù)據(jù)對CRC有效,起始位和停頓位以及奇偶校驗位均無效。CRC產(chǎn)生過程中,每個8位字符都單獨和存放器內(nèi)容相或OR,結(jié)果向最低有效位方向挪動,最高有效位以0填充。LSB被提取出來檢測,假如LSB為1,存放器單獨和預(yù)置的值或一下,假如LSB為0,那么不進展。整個過程要重復8次。在最后一位第8位完成后,下一個8位字節(jié)又單獨

30、和存放器的當前值相或。最終存放器中的值,是消息中所有的字節(jié)都執(zhí)行之后的CRC值。CRC添加到消息中時,低字節(jié)先參加,然后高字節(jié)。下面是它的VC代碼:WORD GetCheckCodeconst char*pSendBuf,int nEnd/獲得校驗碼WORD wCrc=WORD0xFFFF;forint i=0;i nEnd;i+wCrc=WORDBYTEpSendBuf;forint j=0;j 8;j+ifwCrc&1wCrc=1;wCrc=0xA001;elsewCrc=1;return wCrc;對于一條RTU協(xié)議的命令可以簡單的通過以下的步驟轉(zhuǎn)化為ASCII協(xié)議的命令:1、把命令的C

31、RC校驗去掉,并且計算出LRC校驗取代。2、把生成的命令串的每一個字節(jié)轉(zhuǎn)化成對應(yīng)的兩個字節(jié)的ASCII碼,比方0x03轉(zhuǎn)化成0x30,0x330的ASCII碼和3的ASCII碼。3、在命令的開頭加上起始標記:,它的ASCII碼為0x3A。4、在命令的尾部加上完畢標記CR,LF0xD,0xA,此處的CR,LF表示回車和換行的ASCII碼。所以以下我們僅介紹RTU協(xié)議即可,對應(yīng)的ASCII協(xié)議可以使用以上的步驟來生成。下表是Modbus支持的功能碼:在這些功能碼中較長使用的是1、2、3、4、5、6號功能碼,使用它們即可實現(xiàn)對下位機的數(shù)字量和模擬量的讀寫操作。1、讀可讀寫數(shù)字量存放器線圈狀態(tài):計算機

32、發(fā)送命令:設(shè)備地址命令號01起始存放器地址高8位低8位讀取的存放器數(shù)高8位低8位CRC校驗的低8位CRC校驗的高8位例:110100130025CRC低CRC高意義如下:1設(shè)備地址:在一個485總線上可以掛接多個設(shè)備,此處的設(shè)備地址表示想和哪一個設(shè)備通訊。例子中為想和17號十進制的17是十六進制的11通訊。2命令號01:讀取數(shù)字量的命令號固定為01。3起始地址高8位、低8位:表示想讀取的開關(guān)量的起始地址起始地址為0。比方例子中的起始地址為19。4存放器數(shù)高8位、低8位:表示從起始地址開場讀多少個開關(guān)量。例子中為37個開關(guān)量。5 CRC校驗:是從開頭一直校驗到此之前。在此協(xié)議的最后再作介紹。此處

33、需要注意,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斷開,26閉合,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

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論