http://www.eepw.com.cn/article/201612/332843.htm 1 概述 在工業控制系統中,集散控制是目前最常用的測量控制方式。通常,一個集散控制系統由一個主控計算機(上位機)和一系列基於MCU的前端智能儀器(下位機)構成,它們之間再通過一定的物理媒介連接在一起,以完成必要的通信功能。對於一個特定的測控系統而言,所要測控的對象和所採取的測控算法是個有個性的東西;而上位機和下位機之間的通信可以看作是一系列命令流和數據流的流動,所採用的通信協議是用來保證傳輸過程的可靠和高效,是具有共性的,能夠也應該有一個統一的設計標準。 在集散控制系統中,普遍採用RS-485總線作為底層通信接口。它具有穩定可靠、編程簡單、組網快速、價格低廉的優點,但在協議設計實現方面並沒有一個統一的規範,導致不同的控制系統常常採用不同的通信協議。因此,有必要結合我們的工作實踐,設計一種有通用性的高效可靠的協議,從而簡化基於RS-485的分布式測試系統通信部分的設計,既能夠保證通信的穩定可靠,又能夠把精力集中到測控系統算法的設計上。
圖1中,物理層是利用物理媒介實現物理連接的功能描述和執行連接的規程,提供用於建立、保持和斷開物理連接的機械的、電氣的、功能的和過程的條件;數據鏈路層用於建立、維持和拆除鏈路連接,實現無差錯傳輸的功能;應用層針對不同的應用,利用鏈路層提供的服務,完成不同通信節點之間的通信。
下面結合每一層討論這種自定義協議的具體設計,重點介紹如何實現可靠高效的通信,如何處理通信中錯誤,如何編程實現。
2 協議的設計
2.1 物理層協議設計
RS-485通信網絡是一種總線式的結構,如圖2所示。上位機(以PC為例)和下位機(以基於MCS-51的智能儀器為例)都掛在通信總線上,物理層的通信協議由RS-485標準和MCS-51的多機通信方式共同方式。
2.1.1 EIA RS-485標準
RS-485是工業界使用最為廣泛的雙向、平衡傳輸標準接口,支持多點連接,允許創建多達32個節點的網絡;具有傳輸距離遠(最大傳輸距離1200m),傳輸速率快(1200 m時為100kb/s),抗幹擾能力強,布線簡單等優點。
2.1.2 MCS-51串口的多機通信方式
MCS-51具有多機通信功能。當串口以方式2(或方式3)接收時,若SM2(多機控制位)為1,這時只接收第9位為1的串行數據(把第9位為1的串行字節稱為地址,把第9位為9的串行字節稱為數據);當SM2=0時,不論第9位為何值都接收。
這種功能使得基於MCS-51的智能儀器能夠方便地通過RS-485接口晶片組成網絡。
2.1.3 物理層的功能
物理層要完成發送及接收字節流的任務,但對傳輸過程的可靠性不做出保證,而由高層協議來保證。物理層為鏈路層提供接口(以子程序的形式來描述),包括Send子程序(功能為發送一個字節)及Receive子程序(功能為接收一個字節)。
發送程序比較簡單,接收程序的流程如圖3所示(以MCS-51為例)。採用循環查詢RI標誌位的方式,可以在規定的時間內(即在規定的循環次數內)實現一個字節的接收。規定時間的長短由循環次數決定。如果在規定的時間內未收到,則視為通信失敗。
2.2 數據鏈路層協議設計
數據鏈路層的基本通信單位是帖,幀結構如圖4所示。
*冗餘幀長度域是可選的,它是幀長度域的重複,可以用來檢查在傳輸過程中幀長度域是否存在傳輸錯誤。
*幀體域用來封裝來自上層(應用層)的數據報,長度是1~255B,鏈路層對這一部分不做處理,由應用層處理。
鏈路層可以採用如下方法進行差錯處理。首先,幀長度域的引入可以方便程序的設計,同時也能夠起到一定的檢查錯誤的功能,可以發現傳輸過程中丟失字節的錯誤,並且丟棄緩衝區接收錯誤的字節。首次,可以採用冗餘字節的方法,對關鍵字節(幀長度)發送兩次,只有接收到的兩個幀長度字節一致時才認為接收到的是正確的。此外,對發送的每個字節可以採用CRC校驗等方法進行校驗。
鏈路層向上層(應用層)提供的接口(以子程序的形式來描述)為SendFrame(功能是發送一幀)和ReceiveFrame(功能是接收一幀),程序流程如圖5所示,其中利用了下層(物理層)提供的接口。
2.3 應用層協議設計
應用層是協議的最高層,它的設計對於不同的應用可以有所不同,但是也存在很多通用性的原則。應用層數據報的格式如圖6所示。
*類型域用來指定數據報的類型,一共可以表示256種類型,其中,0用來表示數據;其它256種用來表示命令。
*冗餘類型域是可選的,它的作用是檢查類型域在傳輸過程中是否存在錯誤。
*數據域是通信中傳輸的採集數據、系統參數等。
數據報可以分成兩類:命令型數據報(類型域不為0)和數據型數據報(類型域為0)。具體的命令可以根據具體的應用來設計,由具體程序負責解釋。
應用層也個有一定的差錯檢查能力:首先,它引入了冗餘類型字節;其次,數據域字節也可以採用CRC校驗等方法進行校驗。
3 協議的具體實現及應用
在設計基於RS-485的分布式測控系統時,在上位機呼叫下位機地址之後就可利用本協議的規範來設計具體的通信流程。
基於本協議的通信可以有兩種機制。一種是面向握手的,即每發出一幀,總是要等待確認幀,否則將認為是通信出錯。這是一種可靠的通信方式,適合傳輸系統命令和一些非常重要的系統參數。另一種是無握手的,即發送方假設接收方總是接收正確,從而無須等待確認幀就不停地發送,適合大量前端採集數據的發送。這種機制的優點是發送過程簡單、快速,缺點是不能保證傳輸過程的可靠性。
另外,接收方倘若在規定的時間內不能接收到數據,則可以發送復位幀,同時接收方的程序回到通信程序的開始,並清空緩衝區的數據;而發送方的收到復位幀後也回到通信程序的開始,並清空緩衝區中的數據。然後,雙方重新同步。
因為傳輸數據數量比較大,所以通信過程採用了無握手方式,以簡化程序設計,提高通信速度。通信雙方在接收時使用了復位幀,以保證在失去同步後及時恢復。幀格式如圖8所示(沒使用冗餘字節)。
實驗證明,本協議具有編程簡單、通信可靠、易於擴展的優點,能夠有效地推廣到基於RS-485的分布式測控系統中。