資源描述:
《Modbus通訊協(xié)議RTU,ASCII,TCP詳細介紹.doc》由會員上傳分享,免費在線閱讀,更多相關內容在應用文檔-天天文庫。
1、Modbus通訊協(xié)議RTUASCIITCP詳細介紹Modbus協(xié)議最初由Modicon公司開發(fā)出來,在1979年末該公司成為施耐德自動化(SchneiderAutomation)部門的一部分,現(xiàn)在Modbus已經是工業(yè)領域全球最流行的協(xié)議。此協(xié)議支持傳統(tǒng)的RS-232、RS-422、RS-485和以太網設備。許多工業(yè)設備,包括PLC,DCS,智能儀表等都在使用Modbus協(xié)議作為他們之間的通訊標準。有了它,不同廠商生產的控制設備可以連成工業(yè)網絡,進行集中監(jiān)控。當在網絡上通信時,Modbus協(xié)議決定了每個控制器須要知道它們的設備地址,識別按地址發(fā)來的
2、消息,決定要產生何種行動。如果需要回應,控制器將生成應答并使用Modbus協(xié)議發(fā)送給詢問方。?Modbus協(xié)議包括ASCII、RTU、TCP等,并沒有規(guī)定物理層。此協(xié)議定義了控制器能夠認識和使用的消息結構,而不管它們是經過何種網絡進行通信的。標準的Modicon控制器使用RS232C實現(xiàn)串行的Modbus。Modbus的ASCII、RTU協(xié)議規(guī)定了消息、數(shù)據的結構、命令和就答的方式,數(shù)據通訊采用Maser/Slave方式,Master端發(fā)出數(shù)據請求消息,Slave端接收到正確消息后就可以發(fā)送數(shù)據到Master端以響應請求;Master端也可以直接發(fā)
3、消息修改Slave端的數(shù)據,實現(xiàn)雙向讀寫。?Modbus協(xié)議需要對數(shù)據進行校驗,串行協(xié)議中除有奇偶校驗外,ASCII模式采用LRC校驗,RTU模式采用16位CRC校驗,但TCP模式沒有額外規(guī)定校驗,因為TCP協(xié)議是一個面向連接的可靠協(xié)議。另外,Modbus采用主從方式定時收發(fā)數(shù)據,在實際使用中如果某Slave站點斷開后(如故障或關機),Master端可以診斷出來,而當故障修復后,網絡又可自動接通。因此,Modbus協(xié)議的可靠性較好。?下面我來簡單的給大家介紹一下,對于Modbus的ASCII、RTU和TCP協(xié)議來說,其中TCP和RTU協(xié)議非常類似,
4、我們只要把RTU協(xié)議的兩個字節(jié)的校驗碼去掉,然后在RTU協(xié)議的開始加上5個0和一個6并通過TCP/IP網絡協(xié)議發(fā)送出去即可。所以在這里我僅介紹一下Modbus的ASCII和RTU協(xié)議。?下表是ASCII協(xié)議和RTU協(xié)議進行的比較:協(xié)議?????????????????開始標記???????結束標記?????校驗??????傳輸效率???程序處理ASCII模式???????:(冒號)???????CR,LF??????????LRC?????低?????????????????直觀,簡單,易調試RTU???????????????????無?????
5、???????????????無???????????????CRC?????高?????????????????不直觀,稍復雜通過比較可以看到,ASCII協(xié)議和RTU協(xié)議相比擁有開始和結束標記,因此在進行程序處理時能更加方便,而且由于傳輸?shù)亩际强梢姷腁SCII字符,所以進行調試時就更加的直觀,另外它的LRC校驗也比較容易。但是因為它傳輸?shù)亩际强梢姷腁SCII字符,RTU傳輸?shù)臄?shù)據每一個字節(jié)ASCII都要用兩個字節(jié)來傳輸,比如RTU傳輸一個十六進制數(shù)0xF9,ASCII就需要傳輸’F’’9’的ASCII碼0x39和0x46兩個字節(jié),這樣它的傳輸?shù)男?/p>
6、率就比較低。所以一般來說,如果所需要傳輸?shù)臄?shù)據量較小可以考慮使用ASCII協(xié)議,如果所需傳輸?shù)臄?shù)據量比較大,最好能使用RTU協(xié)議。下面對兩種協(xié)議的校驗進行一下介紹。1、LRC校驗LRC域是一個包含一個8位二進制值的字節(jié)。LRC值由傳輸設備來計算并放到消息幀中,接收設備在接收消息的過程中計算LRC,并將它和接收到消息中LRC域中的值比較,如果兩值不等,說明有錯誤。LRC校驗比較簡單,它在ASCII協(xié)議中使用,檢測了消息域中除開始的冒號及結束的回車換行號外的內容。它僅僅是把每一個需要傳輸?shù)臄?shù)據按字節(jié)疊加后取反加1即可。下面是它的VC代碼:CCODE??
7、:ModBus中LRC校驗BYTEGetCheckCode(constchar*pSendBuf,intnEnd)//獲得校驗碼{BYTEbyLrc=0;charpBuf[4];intnData=0;for(i=1;i