RS485接口組成的半雙工網絡,一般是兩線制,多采用屏蔽雙絞線傳輸,這種接線方式為總線式拓撲結構在同一總線上最多可以掛接32個結點。我們知道,最初數據是模擬信號輸出簡單過程量,后來儀表接口是RS232接口,這種接口可以實現點對點的通信方式,但這種方式不能實現聯網功能,隨后出現的RS485解決了這個問題。為此本文通過問答的形式詳細介紹RS485接口。
一、什么是RS-485接口?它比RS-232-C接口相比有何特點?
答:由于RS-232-C接口標準出現較早,難免有不足之處,主要有以下四點:
(1)接口的信號電平值較高,易損壞接口電路的芯片,又因為與TTL電平不兼容故需使用電平轉換電路方能與TTL電路連接。
(2)傳輸速率較低,在異步傳輸時,波特率為20Kbps。
(3)接口使用一根信號線和一根信號返回線而構成共地的傳輸形式,這種共地傳輸容易產生共模干擾,所以抗噪聲干擾性弱。
(4)傳輸距離有限,最大傳輸距離標準值為50英尺,實際上也只能用在50米左右。針對RS-232-C的不足,于是就不斷出現了一些新的接口標準,RS-485就是其中之一,它具有以下特點:
1)RS-485的電氣特性:邏輯“1”以兩線間的電壓差為+(2-6)V表示;邏輯“0”以兩線間的電壓差為-(2-6)V表示。接口信號電平比RS-232-C降低了,就不易損壞接口電路的芯片,且該電平與TTL電平兼容,可方便與TTL電路連接。
2)RS-485的數據最高傳輸速率為10Mbps
3)RS-485接口是采用平衡驅動器和差分接收器的組合,抗共模干能力增強,即抗噪聲干擾性好。
4)RS-485接口的最大傳輸距離標準值為4000英尺,實際上可達3000米,另外RS-232-C接口在總線上只允許連接1個收發器,即單站能力。而RS-485接口在總線上是允許連接多達128個收發器。即具有多站能力,這樣用戶可以利用單一的RS-485接口方便地建立起設備網絡。
5)因RS-485接口具有良好的抗噪聲干擾性,長的傳輸距離和多站能力等上述優點就使其成為首選的串行接口。因為RS485接口組成的半雙工網絡,一般只需二根連線,所以RS485接口均采用屏蔽雙絞線傳輸。RS485接口連接器采用DB-9的9芯插頭座,與智能終端RS485接口采用DB-9(孔),與鍵盤連接的鍵盤接口RS485采用DB-9(針)。
二、RS-422與RS-485串行接口標準
1、平衡傳輸
RS-422、RS-485與RS-232不一樣,數據信號采用差分傳輸方式,也稱作平衡傳輸,它使用一對雙絞線,將其中一線定義為A,另一線定義為B
通常情況下,發送驅動器A、B之間的正電平在+2~+6V,是一個邏輯狀態,負電平在-2~6V,是另一個邏輯狀態。另有一個信號地C,在RS-485中還有一“使能”端,而在RS-422中這是可用可不用的。“使能”端是用于控制發送驅動器與傳輸線的切斷與連接。當“使能”端起作用時,發送驅動器處于高阻狀態,稱作“第三態”,即它是有別于邏輯“1”與“0”的第三態。
接收器也作與發送端相對的規定,收、發端通過平衡雙絞線將AA與BB對應相連,當在收端AB之間有大于+200mV的電平時,輸出正邏輯電平,小于-200mV時,輸出負邏輯電平。接收器接收平衡線上的電平范圍通常在200mV至6V之間。
2、RS-422電氣規定
RS-422標準全稱是“平衡電壓數字接口電路的電氣特性”,它定義了接口電路的特性。圖2是典型的RS-422四線接口。實際上還有一根信號地線,共5根線。圖1是其DB9連接器引腳定義。由于接收器采用高輸入阻抗和發送驅動器比RS232更強的驅動能力,故允許在相同傳輸線上連接多個接收節點,最多可接10個節點。即一個主設備(Master),其余為從設備(Salve),從設備之間不能通信,所以RS-422支持點對多的雙向通信。接收器輸入阻抗為4k,故發端最大負載能力是10×4k+100Ω(終接電阻)。RS-422四線接口由于采用單獨的發送和接收通道,因此不必控制數據方向,各裝置之間任何必須的信號交換均可以按軟件方式(XON/XOFF握手)或硬件方式(一對單獨的雙絞線)實現。RS-422的最大傳輸距離為4000英尺(約1219米),最大傳輸速率為10Mb/s。其平衡雙絞線的長度與傳輸速率成反比,在100kb/s速率以下,才可能達到最大傳輸距離。只有在很短的距離下才能獲得最高速率傳輸。一般100米長的雙絞線上所能獲得的最大傳輸速率僅為1Mb/s。
RS-422需要一終接電阻,要求其阻值約等于傳輸電纜的特性阻抗。在矩距離傳輸時可不需終接電阻,即一般在300米以下不需終接電阻。終接電阻接在傳輸電纜的最遠端。
3、RS-485電氣規定
由于RS-485是從RS-422基礎上發展而來的,所以RS-485許多電氣規定與RS-422相仿。如都采用平衡傳輸方式、都需要在傳輸線上接終接電阻等。RS-485可以采用二線與四線方式,二線制可實現真正的多點雙向通信。
而采用四線連接時,與RS-422一樣只能實現點對多的通信,即只能有一個主(Master)設備,其余為從設備,但它比RS-422有改進,無論四線還是二線連接方式總線上可多接到32個設備。
RS-485與RS-422的不同還在于其共模輸出電壓是不同的,RS-485是-7V至+12V之間,而RS-422在-7V至+7V之間,RS-485接收器最小輸入阻抗為12k劍鳵S-422是4k健;舊峽梢運礡S-485滿足所有RS-422的規范,所以RS-485的驅動器可以用在RS-422網絡中應用。
RS-485與RS-422一樣,其最大傳輸距離約為1219米,最大傳輸速率為10Mb/s。平衡雙絞線的長度與傳輸速率成反比,在100kb/s速率以下,才可能使用規定最長的電纜長度。只有在很短的距離下才能獲得最高速率傳輸。一般100米長雙絞線最大傳輸速率僅為1Mb/s。
RS-485需要2個終接電阻,其阻值要求等于傳輸電纜的特性阻抗。在矩距離傳輸時可不需終接電阻,即一般在300米以下不需終接電阻。終接電阻接在傳輸總線的兩端。
三、RS-422與RS-485的網絡安裝注意要點
RS-422可支持10個節點,RS-485支持32個節點,因此多節點構成網絡。網絡拓撲一般采用終端匹配的總線型結構,不支持環形或星形網絡。在構建網絡時,應注意如下幾點:
1、采用一條雙絞線電纜作總線,將各個節點串接起來,從總線到每個節點的引出線長度應盡量短,以便使引出線中的反射信號對總線信號的影響最低。所示為實際應用中常見的一些錯誤連接方式(a,c,e)和正確的連接方式(b,d,f)。a,c,e這三種網絡連接盡管不正確,在短距離、低速率仍可能正常工作,但隨著通信距離的延長或通信速率的提高,其不良影響會越來越嚴重,主要原因是信號在各支路末端反射后與原信號疊加,會造成信號質量下降。
2、應注意總線特性阻抗的連續性,在阻抗不連續點就會發生信號的反射。下列幾種情況易產生這種不連續性:總線的不同區段采用了不同電纜,或某一段總線上有過多收發器緊靠在一起安裝,再者是過長的分支線引出到總線。
總之,應該提供一條單一、連續的信號通道作為總線。
四、RS-422與RS-485傳輸線上匹配的一些說明
對RS-422與RS-485總線網絡一般要使用終接電阻進行匹配。但在短距離與低速率下可以不用考慮終端匹配。那么在什么情況下不用考慮匹配呢?理論上,在每個接收數據信號的中點進行采樣時,只要反射信號在開始采樣時衰減到足夠低就可以不考慮匹配。但這在實際上難以掌握,美國MAXIM公司有篇文章提到一條經驗性的原則可以用來判斷在什么樣的數據速率和電纜長度時需要進行匹配:當信號的轉換時間(上升或下降時間)超過電信號沿總線單向傳輸所需時間的3倍以上時就可以不加匹配。例如具有限斜率特性的RS-485接口MAX483輸出信號的上升或下降時間最小為250ns,典型雙絞線上的信號傳輸速率約為0.2m/ns(24AWGPVC電纜),那么只要數據速率在250kb/s以內、電纜長度不超過16米,采用MAX483作為RS-485接口時就可以不加終端匹配。
一般終端匹配采用終接電阻方法,前文已有提及,RS-422在總線電纜的遠端并接電阻,RS-485則應在總線電纜的開始和末端都需并接終接電阻。終接電阻一般在RS-422網絡中取100Ω,在RS-485網絡中取120Ω。相當于電纜特性阻抗的電阻,因為大多數雙絞線電纜特性阻抗大約在100~120Ω。這種匹配方法簡單有效,但有一個缺點,匹配電阻要消耗較大功率,對于功耗限制比較嚴格的系統不太適合。
另外一種比較省電的匹配方式是RC匹配,利用一只電容C隔斷直流成分可以節省大部分功率。但電容C的取值是個難點,需要在功耗和匹配質量間進行折衷。
還有一種采用二極管的匹配方法,這種方案雖未實現真正的“匹配”,但它利用二極管的鉗位作用能迅速削弱反射信號,達到改善信號質量的目的。節能效果顯著。
五、RS-422與RS-485的接地問題
電子系統接地是很重要的,但常常被忽視。接地處理不當往往會導致電子系統不能穩定工作甚至危及系統安全。RS-422與RS-485傳輸網絡的接地同樣也是很重要的,因為接地系統不合理會影響整個網絡的穩定性,尤其是在工作環境比較惡劣和傳輸距離較遠的情況下,對于接地的要求更為嚴格。否則接口損壞率較高。很多情況下,連接RS-422、RS-485通信鏈路時只是簡單地用一對雙絞線將各個接口的“A”、“B”端連接起來。而忽略了信號地的連接,這種連接方法在許多場合是能正常工作的,但卻埋下了很大的隱患,這有下面二個原因:
1、共模干擾問題:正如前文已述,RS-422與RS-485接口均采用差分方式傳輸信號方式,并不需要相對于某個參照點來檢測信號,系統只需檢測兩線之間的電位差就可以了。但人們往往忽視了收發器有一定的共模電壓范圍,如RS-422共模電壓范圍為-7~+7V,而RS-485收發器共模電壓范圍為-7~+12V,只有滿足上述條件,整個網絡才能正常工作。當網絡線路中共模電壓超出此范圍時就會影響通信的穩定可靠,甚至損壞接口。以圖1為例,當發送驅動器A向接收器B發送數據時,發送驅動器A的輸出共模電壓為VOS,由于兩個系統具有各自獨立的接地系統,存在著地電位差VGPD。那么,接收器輸入端的共模電壓VCM就會達到VCM=VOS+VGPD。RS-422與RS-485標準均規定VOS≤3V,但VGPD可能會有很大幅度(十幾伏甚至數十伏),并可能伴有強干擾信號,致使接收器共模輸入VCM超出正常范圍,并在傳輸線路上產生干擾電流,輕則影響正常通信,重則損壞通信接口電路。
2、(EMI)問題:發送驅動器輸出信號中的共模部分需要一個返回通路,如沒有一個低阻的返回通道(信號地),就會以輻射的形式返回源端,整個總線就會像一個巨大的天線向外輻射電磁波。
由于上述原因,RS-422、RS-485盡管采用差分平衡傳輸方式,但對整個RS-422或RS-485網絡,必須有一條低阻的信號地。一條低阻的信號地將兩個接口的工作地連接起來,使共模干擾電壓VGPD被短路。
這條信號地可以是額外的一條線(非屏蔽雙絞線),或者是屏蔽雙絞線的屏蔽層。這是最通常的接地方法。
值得注意的是,這種做法僅對高阻型共模干擾有效,由于干擾源內阻大,短接后不會形成很大的接地環路電流,對于通信不會有很大影響。當共模干擾源內阻較低時,會在接地線上形成較大的環路電流,影響正常通信。筆者認為,可以采取以下三種措施:
(1)如果干擾源內阻不是非常小,可以在接地線上加限流電阻以限制干擾電流。接地電阻的增加可能會使共模電壓升高,但只要控制在適當的范圍內就不會影響正常通信。
(2)采用浮地技術,隔斷接地環路。這是較常用也是十分有效的一種方法,當共模干擾內阻很小時上述方法已不能奏效,此時可以考慮將引入干擾的節點(例如處于惡劣的工作環境的現場設備)浮置起來(也就是系統的電路地與機殼或大地隔離),這樣就隔斷了接地環路,不會形成很大的環路電流。
(3)采用隔離接口。有些情況下,出于安全或其它方面的考慮,電路地必須與機殼或大地相連,不能懸浮,這時可以采用隔離接口來隔斷接地回路,但是仍然應該有一條地線將隔離側的公共端與其它接口的工作地相連。
六、RS-422與RS-485的網絡失效保護
RS-422與RS-485標準都規定了接收器門限為±200mV。這樣規定能夠提供比較高的噪聲抑制能力,如前文所述,當接收器A電平比B電平高+200mV以上時,輸出為正邏輯,反之,則輸出為負邏輯。但由于第三態的存在,即在主機在發端發完一個信息數據后,將總線置于第三態,即總線空閑時沒有任何信號驅動總線,使AB之間的電壓在-200~+200mV直至趨于0V,這帶來了一個問題:接收器輸出狀態不確定。如果接收機的輸出為0V,網絡中從機將把其解釋為一個新的啟動位,并試圖讀取后續字節,由于永遠不會有停止位,產生一個幀錯誤結果,不再有設備請求總線,網絡陷于癱瘓狀態。除上述所述的總線空閑會造成兩線電壓差低于200mV的情況外,開路或短路時也會出現這種情況。故應采取一定的措施避免接收器處于不確定狀態。
通常是在總線上加偏置,當總線空閑或開路時,利用偏置電阻將總線偏置在一個確定的狀態(差分電壓≥-200mV)。如圖1。將A上拉到地,B下拉到5V,電阻的典型值是1kΩ,具體數值隨電纜的電容變化而變化。
上述方法是比較經典的方法,但它仍然不能解決總線短路時的問題,有些廠家將接收門限移到-200mV/-50mV,可解決這個問題。
七、RS-422與RS-485的瞬態保護
前文提到的信號接地措施,只對低頻率的共模干擾有保護作用,對于頻率很高的瞬態干擾就無能為力了。由于傳輸線對高頻信號而言就是相當于電感,因此對于高頻瞬態干擾,接地線實際等同于開路。這樣的瞬態干擾雖然持續時間短暫,但可能會有成百上千伏的電壓。
實際應用環境下還是存在高頻瞬態干擾的可能。一般在切換大功率感性負載如電機、變壓器、繼電器等或閃電過程中都會產生幅度很高的瞬態干擾,如果不加以適當防護就會損壞RS-422或RS-485通信接口。對于這種瞬態干擾可以采用隔離或旁路的方法加以防護。
1、隔離保護方法。這種方案實際上將瞬態高壓轉移到隔離接口中的電隔離層上,由于隔離層的高絕緣電阻,不會產生損害性的浪涌電流,起到保護接口的作用。通常采用高頻變壓器、光耦等元件實現接口的電氣隔離,已有器件廠商將所有這些元件集成在一片IC中,使用起來非常簡便。這種方案的優點是可以承受高電壓、持續時間較長的瞬態干擾,實現起來也比較容易,缺點是成本較高。
2、旁路保護方法。這種方案利用瞬態抑制元件(如TVS、MOV、氣體放電管等)將危害性的瞬態能量旁路到大地,優點是成本較低,缺點是保護能力有限,只能保護一定能量以內的瞬態干擾,持續時間不能很長,而且需要有一條良好的連接大地的通道,實現起來比較困難。實際應用中是將上述兩種方案結合起來靈活加以運用,如圖1。在這種方法中,隔離接口對大幅度瞬態干擾進行隔離,旁路元件則保護隔離接口不被過高的瞬態電壓擊穿。
八、采用RS485接口時,傳輸電纜的長度如何考慮?
在使用RS485接口時,對于特定的傳輸線經,從發生器到負載其數據信號傳輸所允許的最大電纜長度是數據信號速率的函數,這個長度數據主要是受信號失真及噪聲等影響所限制。最大電纜長度與信號速率的關系曲線是使用24AWG銅芯雙絞電話電纜(線徑為0。51mm),線間旁路電容為52。5PF/M,終端負載電阻為100歐時所得出。當數據信號速率降低到90Kbit/S以下時,假定最大允許的信號損失為6dBV時,則電纜長度被限制在1200M。在實用時是完全可以取得比它大的電纜長度。當使用不同線徑的電纜。則取得的最大電纜長度是不相同的。
九、如何實現RS-485/422多點通訊
RS-485總線上任何時候只能有一發送器發送。半雙工方式,主從只能一個發。全雙工方式,主站總可發送,從站只能有一個發送。
十、RS-485/RS422接口通訊時,在什么條件下需要采用終端匹配?電阻值如何確定?如何配置終端匹配電阻?
在長線信號傳輸時,一般為了避免信號的反射和回波,需要在接收端接入終端匹配電阻。其終端匹配電阻值取決于電纜的阻抗特性,與電纜的長度無關。
RS-485/RS-422一般采用雙絞線(屏蔽或非屏蔽)連接,終端電阻一般介于100至140Ω之間,典型值為120Ω。在實際配置時,在電纜的兩個終端節點上,即最近端和最遠端,各接入一個終端電阻,而處于中間部分的節點則不能接入終端電阻,否則將導致通訊出錯。
十一、RS-485網不知道最遠站點是哪一個,應該如何接匹配電阻呢?
會出現這種情況,是由于用戶組成RS-485網時,沒有遵循站點至總線的連線應盡可能短的原則。如果總線布線遵循這一原則,就不存在不知道哪個站點是最遠的問題。而且要注意,這樣的布線,系統將會工作得不好。
十二、RS-485/RS-422接口為何在停止通信時接收器仍有數據輸出?
由于RS-485/RS-422在發送數據完成后,要求所有的發送使能控制信號關閉且保持接收使能有效,此時,總線驅動器進入高阻狀態且接收器能夠監測總線上是否有新的通信數據。但是由于此時總線處于無源驅動狀態(若總線有終端匹配電阻時,A和B線的差分電平為0,接收器的輸出不確定,且對AB線上的差分信號的變化很敏感;若無終端匹配,則總線處于高阻態,接收器的輸出不確定),容易受到外界的噪聲干擾。當噪聲電壓超過輸入信號門限時(典型值±200mV),接收器將輸出數據,導致對應的UART接收無效的數據,使緊接著的正常通訊出錯;另外一種情況可能發生在打開/關閉發送使能控制的瞬間,使接收器輸出信號,也會導致UART錯誤地接收。
解決方法:
1)在通訊總線上采用同相輸入端上拉(A線)、反相輸入端下拉(B線)的方法對總線進行鉗位,保證接收器輸出為固定的“1”電平;
2)采用內置防故障模式的MAX308x系列的接口產品替換該接口電路;
3)通過軟件方式消除,即在通信數據包內增加2-5個起始同步字節,只有在滿足同步頭后才開始真正的數據通訊。
十三、影響RS-485總線通訊速度和通信可靠性的三個因素
1、在通信電纜中的信號反射
在通信過程中,有兩種信號因導致信號反射:阻抗不連續和阻抗不匹配。阻抗不連續,信號在傳輸線末端突然遇到電纜阻抗很小甚至沒有,信號在這個地方就會引起反射,如圖1所示。這種信號反射的原理,與光從一種媒質進入另一種媒質要引起反射是相似的。消除這種反射的方法,就必須在電纜的末端跨接一個與電纜的特性阻抗同樣大小的終端電阻,使電纜的阻抗連續。由于信號在電纜上的傳輸是雙向的,因此,在通訊電纜的另一端可跨接一個同樣大小的終端電阻從理論上分析,在傳輸電纜的末端只要跨接了與電纜特性阻抗相匹配的終端電阻,就再也不會出現信號反射現象。但是,在實現應用中,由于傳輸電纜的特性阻抗與通訊波特率等應用環境有關,特性阻抗不可能與終端電阻完全相等,因此或多或少的信號反射還會存在。
引起信號反射的另個原因是數據收發器與傳輸電纜之間的阻抗不匹配。這種原因引起的反射,主要表現在通訊線路處在空閑方式時,整個網絡數據混亂。
信號反射對數據傳輸的影響,歸根結底是因為反射信號觸發了接收器輸入端的比較器,使接收器收到了錯誤的信號,導致CRC校驗錯誤或整個數據幀錯誤。
在信號分析,衡量反射信號強度的參數是RAF(RefectionAttenuationFactor反射衰減因子)。它的計算公式如式(1)。
RAF=20lg(Vref/Vinc)(1)
式中:Vref-反射信號的電壓大小;Vinc-在電纜與收發器或終端電阻連接點的入射信號的電壓大小。
具體的測量方法如圖3所示。例如,由實驗測得2.5MHz的入射信號正弦波的峰-峰值為+5V,反射信號的峰-峰值為+0.297V,則該通訊電纜在2.5MHz的通訊速率時,它的反射衰減因子為:RAF=20lg(0.297/2.5)=-24.52dB
要減弱反射信號對通訊線路的影響,通常采用噪聲抑制和加偏置電阻的方法。在實際應用中,對于比較小的反射信號,為簡單方便,經常采用加偏置電阻的方法。在通訊線路中,如何通過加偏置電阻提高通訊可靠性的原理,后面將做詳細介紹。
十四、在通訊電纜中的信號衰減
第二個影響信號傳輸的因素是信號在電纜的傳輸過程中衰減。一條傳輸電纜可以把它看出由分布電容、分布電感和電阻聯合組成的等效電路。
電纜的分布電容C主要是由雙絞線的兩條平行導線產生。導線的電阻在這里對信號的影響很小,可以忽略不計。信號的損失主要是由于電纜的分布電容和分布電感組成的LC低通濾波器。PROFIBUS用的LAN標準型二芯電感(西門子為DP總線選用的標準電纜),在不同波特率時的衰減系數。
十五、在通訊電纜中的純阻負載
影響通訊性能的第三個因素是純阻性負載(也叫直流負載)的大小。這里指的純阻性負載主要由終端電阻、偏置電阻和RS-485收發器三者構成。
在敘述EIARS-485規范時曾提到過RS-485驅動器在帶了32個節點,配置了150Ω終端電阻的情況下,至少能輸出1.5V的差分電壓。一個接收器的輸入電阻為12kΩ,整個網絡的等效電路如圖5所示。按這樣計算,RS-485驅動器的負載能力為:RL=32個輸入電阻并聯||2個終端電阻=((12000/32)×(150/2))/(12000/32)+(150/2))≈51.7Ω
現在比較常用的RS-485驅動器有MAX485、DS3695、MAX1488/1489以及和利時公司使用的SN75176A/D等,其中有的RS-485驅動器負載能力可以達到20Ω。在不考慮其它諸多因素的情況下,按照驅動能力和負載的關系計算,一個驅動器可帶節點的最大數量將遠遠大于32個。
在通訊波特率比較高的時候,在線路上偏置電阻是很有必要的。偏置電阻的連接方法。它的作用是在線路進入空閑狀態后,把總線上沒有數據時(空閑方式)的電平拉離0電平。這樣一來,即使線路中出現了比較小的反射信號或干擾,掛接在總線上的數據接收器也不會由于這些信號的到來而產生誤動作。通過下面后例子了,可以計算出偏置電阻的大小:終端電阻Rt1=Rr2=120Ω;
假設反射信號最大的峰-峰值Vref≤0.3Vp-p,則負半周的電壓Vref≤0.15V;終端的電阻上由反射信號引起的反射電流Iref≤0.15/(120||120)=2.5mA。一般RS-485收發器(包括SN75176)的滯后電壓值(hysteresisvalue)為50mV,即:
(Ibias-Iref)×(Rt1||Rt2)≥50mV
于是可以計算出偏置電阻產生的偏置電流Ibias≥3.33mA
+5V=Ibias(R上拉+R下拉+(Rt1||Rt2))(2)
通過式2可以計算出R上拉=R下拉=720Ω
在實際應用中,RS-485總線加偏置電阻有兩種方法:
(1)把偏置電阻平衡分配給總線上的每一個收發器。這種方法給掛接在RS-485總線上的每一個收發器加了偏置電阻,給每一個收發器都加了一個偏置電壓。
(2)在一段總線上只用一對偏置電阻。這種方法對總線上存在大的反射信號或干擾信號比較有效。值得注意的是偏置電阻的加入,增加了總線的負載。
十六、RS-485總線的負載能力和通訊電纜長度之間的關系
在設計RS-485總線組成的網絡配置(總線長度和帶負載個數)時,應該考慮到三個參數:純阻性負載、信號衰減和噪聲容限。純阻性負載、信號衰減這兩個參數,在前面已經討論過,現在要討論的是噪聲容限(NoiseMargin)。RS-485總線接收器的噪聲容限至少應該大于200mV。前面的論述者是在假設噪聲容限為0的情況下進行的。
在實際應用中,為了提高總線的抗干擾能力,總希望系統的噪聲容限比EIARS-485標準中規定的好一些。從下面的公式能看出總線帶負載的多少和通訊電纜長度之間的關系:Vend=0.8(Vdriver-Vloss-Vnoise-Vbias)(3)
其中:Vend為總線末端的信號電壓,在標準測定時規定為0.2V;Vdriver為驅動器的輸出電壓(與負載數有關。負載數在5~35個之間,Vdriver=2.4V;當負載數小于5,Vdriver=2.5V;當負載數大于35,Vdriver≤2.3V);Vloss為信號在總線中的傳輸過程中的損耗(與通訊電纜的規格和長度有關),由表1提供的標準電纜的衰減系數,根據公式衰減系數b=20lg(Vout/Vin)可以計算出Vloss=Vin-Vout=0.6V(注:通訊波特率為9.6kbps,電纜長度1km,如果特率增加,Vloss會相應增大);Vnoise為噪聲容限,在標準測定時規定為0.1V;Vbias是由偏置電阻提供的偏置電壓(典型值為0.4V)。
式(3)中乘以0.8是為了使通信電纜不進入滿載狀態。從式(3)可以看出,Vdriver的大小和總線上帶負載數的多少成反比,Vloss的大小和總線長度成反比,其他幾個參數只和用的驅動器類型有關。因此,在選定了驅動器的RS-495總線上,在通信波特率一定的情況下,帶負載數的多少,與信號能傳輸的最大距離是直接相關的。具體關系是:
在總線允許的范圍內,帶負載數越多,信號能傳輸的距離就越小;帶負載數據少,信號能傳輸的距離就發越遠。
十七、分布電容對RS-485總線傳輸性能的影響
電纜的分布電容主是由雙絞線的兩條平行導線產生。另外,導線和地之間也存在分布電容,雖然很小,但在分析時也不能忽視。分布電容對總線傳輸性能的影響,主要是因為總線上傳輸的是基波信號,信號的表達方式只有“1”和“0”。在特殊的字節中,例如0x01,信號“0”使得分布電容有足夠的充電時間,而信號“1”到來時,由于分布電容中的電荷,來不及放電,(Vin+)-(Vin-)-還大于200mV,結果使接愛誤認為是“0”,而最終導致CRC校驗錯誤,整個數據幀傳輸錯誤。
由于總線上分布影響,導致數據傳輸錯誤,從而使整個網絡性能降低。解決這個問題有兩種方法:
(1)降低數據傳輸的波特率;
(2)使用分布電容小的電纜,提高傳輸線的質量。
十八、單工、半雙工和全雙工的定義
1、如果在通信過程的任意時刻,信息只能由一方A傳到另一方B,則稱為單工。
2、如果在任意時刻,信息既可由A傳到B,又能由B傳A,但只能由一個方向上的傳輸存在,稱為半雙工傳輸。
3、如果在任意時刻,線路上存在A到B和B到A的雙向信號傳輸,則稱為全雙工。
電話線就是二線全雙工信道。由于采用了回波抵消技術,雙向的傳輸信號不致混淆不清。雙工信道有時也將收、發信道分開,采用分離的線路或頻帶傳輸相反方向的信號,如回線傳輸。
Modbus通訊協議詳解
導語:ModBus網絡是一個工業通信系統,由帶智能終端的可編程序控制器和計算機通過公用線路或局部專用線路連接而成。其系統結構既包括硬件、亦包括軟件。它可應用于各種數據采集和過程監控。
ModBus網絡只有一個主機,所有通信都由他發出。網絡可支持247個之多的遠程從屬控制器,但實際所支持的從機數要由所用通信設備決定。采用這個系統,各PC可以和中心主機交換信息而不影響各PC執行本身的控制任務。
了解Modbus通訊協議是怎么回事,在現場就可以用各種第三方的小軟件做通訊測試了。
Modbus協議包括ASCII、RTU、TCP等,并沒有規定物理層。此協議定義了控制器能夠認識和使用的消息結構,而不管它們是經過何種網絡進行通信的。標準的Modicon控制器使用RS232C實現串行的Modbus。Modbus的ASCII、RTU協議規定了消息、數據的結構、命令和就答的方式,數據通訊采用Maser/Slave方式,Master端發出數據請求消息,Slave端接收到正確消息后就可以發送數據到Master端以響應請求;Master端也可以直接發消息修改Slave端的數據,實現雙向讀寫。
Modbus協議需要對數據進行校驗,串行協議中除有奇偶校驗外,ASCII模式采用LRC校驗,RTU模式采用16位CRC校驗,但TCP模式沒有額外規定校驗,因為TCP協議是一個面向連接的可靠協議。另外,Modbus采用主從方式定時收發數據,在實際使用中如果某Slave站點斷開后(如故障或關機),Master端可以診斷出來,而當故障修復后,網絡又可自動接通。因此,Modbus協議的可靠性較好。
對于Modbus的ASCII、RTU和TCP協議來說,其中TCP和RTU協議非常類似,我們只要把RTU協議的兩個字節的校驗碼去掉,然后在RTU協議的開始加上5個0和一個6并通過TCP/IP網絡協議發送出去即可。
1通訊傳送方式:
通訊傳送分為獨立的信息頭,和發送的編碼數據。以下的通訊傳送方式定義也與ModBusRTU通訊規約相兼容:
初始結構 = ≥4字節的時間
地址碼 = 1 字節
功能碼 = 1 字節
數據區 = N 字節
錯誤校檢 = 16位CRC碼
結束結構 = ≥4字節的時間
地址碼:地址碼為通訊傳送的第一個字節。這個字節表明由用戶設定地址碼的從機將接收由主機發送來的信息。并且每個從機都有具有唯一的地址碼,并且響應回送均以各自的地址碼開始。主機發送的地址碼表明將發送到的從機地址,而從機發送的地址碼表明回送的從機地址。
功能碼:通訊傳送的第二個字節。ModBus通訊規約定義功能號為1到127。本儀表只利用其中的一部分功能碼。作為主機請求發送,通過功能碼告訴從機執行什么動作。作為從機響應,從機發送的功能碼與從主機發送來的功能碼一樣,并表明從機已響應主機進行操作。如果從機發送的功能碼的最高位為1(比如功能碼大與此同時127),則表明從機沒有響應操作或發送出錯。
數據區:數據區是根據不同的功能碼而不同。數據區可以是實際數值、設置點、主機發送給從機或從機發送給主機的地址。
CRC碼:二字節的錯誤檢測碼。
2通訊規約:
當通訊命令發送至儀器時,符合相應地址碼的設備接通訊命令,并除去地址碼,讀取信息,如果沒有出錯,則執行相應的任務;然后把執行結果返送給發送者。返送的信息中包括地址碼、執行動作的功能碼、執行動作后結果的數據以及錯誤校驗碼。如果出錯就不發送任何信息。
1.信息幀結構
地址碼 功能碼 數據區 錯誤校驗碼
8位 8位 N × 8位 16位
地址碼:地址碼是信息幀的第一字節(8位),從0到255。這個字節表明由用戶設置地址的從機將接收由主機發送來的信息。每個從機都必須有唯一的地址碼,并且只有符合地址碼的從機才能響應回送。當從機回送信息時,相當的地址碼表明該信息來自于何處。
功能碼:主機發送的功能碼告訴從機執行什么任務。表1-1列出的功能碼都有具體的含義及操作。
數據區:數據區包含需要從機執行什么動作或由從機采集的返送信息。這些信息可以是數值、參考地址等等。例如,功能碼告訴從機讀取寄存器的值,則數據區必需包含要讀取寄存器的起始地址及讀取長度。對于不同的從機,地址和數據信息都不相同。
錯誤校驗碼:主機或從機可用校驗碼進行判別接收信息是否出錯。有時,由于電子噪聲或其它一些干擾,信息在傳輸過程中會發生細微的變化,錯誤校驗碼保證了主機或從機對在傳送過程中出錯的信息不起作用。這樣增加了系統的安全和效率。錯誤校驗采用CRC-16校驗方法。
注:信息幀的格式都基本相同:地址碼、功能碼、數據區和錯誤校驗碼。
2.錯誤校驗
冗余循環碼(CRC)包含2個字節,即16位二進制。CRC碼由發送設備計算,放置于發送信息的尾部。接收信息的設備再重新計算接收到信息的 CRC碼,比較計算得到的CRC碼是否與接收到的相符,如果兩者不相符,則表明出錯。
3Modbus支持的功能碼:
功能碼 | 名稱 | 作用 |
1 | 讀取線圈狀態 | 取得一組邏輯線圈的當前狀態(ON/OFF) |
2 | 讀取輸入狀態 | 取得一組開關輸入的當前狀態(ON/OFF) |
3 | 讀取保持寄存器 | 在一個或多個保持寄存器中取得當前的二進制值 |
4 | 讀取輸入寄存器 | 在一個或多個輸入寄存器中取得當前的二進制值 |
5 | 強置單線圈 | 強置一個邏輯線圈的通斷狀態 |
6 | 預置單寄存器 | 把具體二進值裝入一個保持寄存器 |
7 | 讀取異常狀態 | 取得8個內部線圈的通斷狀態,這8個線圈的地址由控制器決定 |
8 | 回送診斷校驗 | 把診斷校驗報文送從機,以對通信處理進行評鑒 |
9 | 編程(只用于484) | 使主機模擬編程器作用,修改PC從機邏輯 |
10 | 控詢(只用于484) | 可使主機與一臺正在執行長程序任務從機通信,探詢該從機是否已完成其操作任務,僅在含有功能碼9的報文發送后,本功能碼才發送 |
11 | 讀取事件計數 | 可使主機發出單詢問,并隨即判定操作是否成功,尤其是該命令或其他應答產生通信錯誤時 |
12 | 讀取通信事件記錄 | 可是主機檢索每臺從機的ModBus事務處理通信事件記錄。如果某項事務處理完成,記錄會給出有關錯誤 |
13 | 編程(184/384 484 584) | 可使主機模擬編程器功能修改PC從機邏輯 |
14 | 探詢(184/384 484 584) | 可使主機與正在執行任務的從機通信,定期控詢該從機是否已完成其程序操作,僅在含有功能13的報文發送后,本功能碼才得發送 |
15 | 強置多線圈 | 強置一串連續邏輯線圈的通斷 |
16 | 預置多寄存器 | 把具體的二進制值裝入一串連續的保持寄存器 |
17 | 報告從機標識 | 可使主機判斷編址從機的類型及該從機運行指示燈的狀態 |
18 | (884和MICRO 84) | 可使主機模擬編程功能,修改PC狀態邏輯 |
19 | 重置通信鏈路 | 發生非可修改錯誤后,是從機復位于已知狀態,可重置順序字節 |
20 | 讀取通用參數(584L) | 顯示擴展存儲器文件中的數據信息 |
21 | 寫入通用參數(584L) | 把通用參數寫入擴展存儲文件,或修改之 |
22~64 | 保留作擴展功能備用 | |
65~72 | 保留以備用戶功能所用 | 留作用戶功能的擴展編碼 |
73~119 | 非法功能 | |
120~127 | 保留 | 留作內部作用 |
128~255 | 保留 | 用于異常應答 |
4功能碼命令詳解:
在這些功能碼中較長使用的是1、2、3、4、5、6號功能碼,使用它們即可實現對下位機的數字量和模擬量的讀寫操作。
1、01號命令,讀可讀寫數字量寄存器(線圈狀態):
計算機發送命令:[設備地址] [命令號01] [起始寄存器地址高8位] [低8位] [讀取的寄存器數高8位] [低8位] [CRC校驗的低8位] [CRC校驗的高8位]
例:[11][01][00][13][00][25][CRC低][CRC高]
意義如下:
<1>設備地址:在一個485總線上可以掛接多個設備,此處的設備地址表示想和哪一個設備通訊。例子中為想和17號(十進制的17是十六進制的11)通訊。
<2>命令號01:讀取數字量的命令號固定為01。
<3>起始地址高8位、低8位:表示想讀取的開關量的起始地址(起始地址為0)。比如例子中的起始地址為19。
<4>寄存器數高8位、低8位:表示從起始地址開始讀多少個開關量。例子中為37個開關量。
<5>CRC校驗:是從開頭一直校驗到此之前。
設備響應:[設備地址] [命令號01] [返回的字節個數][數據1][數據2]...[數據n] [CRC校驗的高8位] [CRC校驗的低8位]
例:[11][01][05][CD][6B][B2][0E][1B] [CRC高] [CRC低]
意義如下:
<1>設備地址和命令號和上面的相同。
<2>返回的字節個數:表示數據的字節個數,也就是數據1,2...n中的n的值。
<3>數據1...n:由于每一個數據是一個8位的數,所以每一個數據表示8個開關量的值,每一位為0表示對應的開關斷開,為1表示閉合。比如例子中,表示20號(索引號為19)開關閉合,21號斷開,22閉合,23閉合,24斷開,25斷開,26閉合,27閉合...如果詢問的開關量不是8的整倍數,那么最后一個字節的高位部分無意義,置為0。
<4>CRC校驗同上。
2、05號命令,寫數字量(線圈狀態):
計算機發送命令:[設備地址] [命令號05] [需下置的寄存器地址高8位] [低8位] [下置的數據高8位] [低8位] [CRC校驗的低8位] [CRC校驗的高8位]
例:[11][05][00][AC][FF][00][CRC高][CRC低]
意義如下:
<1>設備地址和上面的相同。
<2>命令號:寫數字量的命令號固定為05。
<3>需下置的寄存器地址高8位,低8位:表明了需要下置的開關的地址。
<4>下置的數據高8位,低8位:表明需要下置的開關量的狀態。例子中為把該開關閉合。注意,此處只可以是[FF][00]表示閉合[00][00]表示斷開,其他數值非法。
<5>注意此命令一條只能下置一個開關量的狀態。
設備響應:如果成功把計算機發送的命令原樣返回,否則不響應。
3、03號命令,讀可讀寫模擬量寄存器(保持寄存器):
計算機發送命令:[設備地址] [命令號03] [起始寄存器地址高8位] [低8位] [讀取的寄存器數高8位] [低8位] [CRC校驗的高8位] [CRC校驗的低8位]
例:[11][03][00][6B][00][03] [CRC高][CRC低]
意義如下:
<1>設備地址和上面的相同。
<2>命令號:讀模擬量的命令號固定為03。
<3>起始地址高8位、低8位:表示想讀取的模擬量的起始地址(起始地址為0)。比如例子中的起始地址為107。
<4>寄存器數高8位、低8位:表示從起始地址開始讀多少個模擬量。例子中為3個模擬量。注意,在返回的信息中一個模擬量需要返回兩個字節。
設備響應:[設備地址] [命令號03] [返回的字節個數][數據1][數據2]...[數據n] [CRC校驗的高8位] [CRC校驗的低8位]
例:[11][03][06][02][2B][00][00][00][64] [CRC高] [CRC低]
意義如下:
<1>設備地址和命令號和上面的相同。
<2>返回的字節個數:表示數據的字節個數,也就是數據1,2...n中的n的值。例子中返回了3個模擬量的數據,因為一個模擬量需要2個字節所以共6個字節。
<3>數據1...n:其中[數據1][數據2]分別是第1個模擬量的高8位和低8位,[數據3][數據4]是第2個模擬量的高8位和低8位,以此類推。例子中返回的值分別是555,0,100。
<4>CRC校驗同上。
4、06號命令,寫單個模擬量寄存器(保持寄存器):
計算機發送命令:[設備地址] [命令號06] [需下置的寄存器地址高8位] [低8位] [下置的數據高8位] [低8位] [CRC校驗的高8位] [CRC校驗的低8位]
例:[11][06][00][01][00][03] [CRC高] [CRC低]
意義如下:
<1>設備地址和上面的相同。
<2>命令號:寫模擬量的命令號固定為06。
<3>需下置的寄存器地址高8位,低8位:表明了需要下置的模擬量寄存器的地址。
<4>下置的數據高8位,低8位:表明需要下置的模擬量數據。比如例子中就把1號寄存器的值設為3。
<5>注意此命令一條只能下置一個模擬量的狀態。
設備響應:如果成功把計算機發送的命令原樣返回,否則不響應。
5、16號命令,寫多個模擬量寄存器(保持寄存器):
計算機發送命令:[設備地址] [命令號16] [需下置的寄存器地址高8位] [低8位] [數據數量高8位] [數據數量低8位] [下置的數據高8位] [低8位][……][……] [CRC校驗的高8位] [CRC校驗的低8位]
例:[11][16][00][01][00][01][00][05] [CRC高] [CRC低]
意義如下:
<1>設備地址和上面的相同。
<2>命令號:寫模擬量的命令號固定為16。
<3>需下置的寄存器地址高8位,低8位:表明了需要下置的模擬量寄存器的地址。
<4>需下置的數據數量高8位,低8位:表明了需要下置的數據數量,這里為1。
<5>下置的數據高8位,低8位:表明需要下置的模擬量數據。比如例子中就把1號寄存器的值設為5。
設備響應:如果成功把計算機返回的如下命令,否則不響應。
設備響應:[設備地址] [命令號16] [需下置的寄存器地址高8位] [低8位] [數據數量高8位] [數據數量低8位] [CRC校驗的高8位] [CRC校驗的低8位],如上例返回:
[11][16][00][01][00][01] [CRC高] [CRC低]
-
接口
+關注
關注
33文章
8575瀏覽量
151015 -
串行接口
+關注
關注
3文章
327瀏覽量
42603 -
RS-485
+關注
關注
11文章
683瀏覽量
84255
原文標題:PLC工程師必讀!詳解RS485
文章出處:【微信號:GKB1508,微信公眾號:工控幫】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論