作者簡介:孟慶波(1973—),男,河南孟津人,講師,碩士,研究方向:電力電子技術及變頻調速(E-mail:13838027936@139.com);索娜(1973—),女,河南鄭州人,副教授,碩士,研究方向:電氣化鐵道技術。
摘要:根據通信協議的分層結構,對物理層、數據鏈路層和應用層進行設計。實現了下位機(主控制器、分支控制器和表決器)的通信協議和上位機(計算機)的通信協議。該協議適用于計算機和單片機點對點通信的情況。本文所提出的通信協議的設計思想和思路方法對于相關設計和應用具有一定的參考意義和借鑒價值。
關鍵詞:通信協議;單片機;計算機;電子投票表決系統
中圖分類號:TP368文獻標識碼:A
1引言
大型電子投票表決系統支持大型會議(如300-500人)的電子表決功能,采集和統計大量重要的短時表決數據必須準確穩定,實時性好,能夠實現大規模、中距離、高速率、低成本的多機通信。目前,對大型電子投票表決系統的研究和應用成為智能會議系統的重點和難點,而系統通信的可靠性在很大程度上依賴于是否有一個好的通信協議。本文重點研究大型電子投票表決系統的通信協議。
2通信協議設計
在集散控制系統中,上位機與下位機之間如何進行數據傳輸,怎么提高通信的效率和可靠性,以及對通信過程中的故障處理,幀格式的約定,都需要一套詳盡的通信協議。
通常,一個集散控制系統由一個主控計算機(上位機)和一系列單片機(下位機)構成,它們之間再通過一定的物理媒介連接在一起,以完成必要的通信功能。對于一個特定的測控系統而言,所要測控的對象和所采取的測控算法是個有個性的東西;而上位機和下位機之間的通信可以看作是一系列命令流和數據流的流動,所采用的通信協議是用來保證傳輸過程的可靠和高效,是具有共性的,能夠也應該有一個統一的設計標準[1]。
2.1通信協議的分層結構
通信協議的設計通常采用分層的機構,如ISO的OSI參考模型[2]。基于RS485串行接口的電氣標準屬于七層OSI模型物理層的協議標準,如圖1所示。
物理層是利用物理媒介實現物理連接的功能描述和執行連接的規程,提供用于建立、保持和斷開物理連接的機械的、電氣的、功能的和過程的條件;數據鏈路層用于建立、維持和拆除鏈路連接,實現無差錯傳輸的功能;應用層針對不同的應用,利用鏈路層提供的服務,完成不同通信節點之間的通信。
2.2通信協議的分層設計
1)物理層協議設計
上位機(計算機)和下位機(單片機)都掛在通信總線上,物理層的通信協議由RS485標準和多單片機通信方式共同實現。物理層要完成發送及接收字節流的任務,但對傳輸過程的可靠性不做出保證,而由高層協議來保證。物理層為鏈路層提供接口(以子程序的形式來描述),包括Send子程序(功能為發送一個字節)及Receive子程序(功能為接收一個字節)。
2)數據鏈路層協議設計
鏈路層可以引入幀長度域、冗余字節和CRC校驗等方法進行差錯處理[3]。鏈路層向上層(應用層)提供的接口為SendFrame(功能是發送一幀)和ReceiveFrame(功能是接收一幀),其中利用了下層(物理層)提供的接口。
3)應用層協議設計
應用層是協議的最高層,它的設計對于不同的應用可以有所不同,但是也存在很多通用性的原則。應用層也個有一定的差錯檢查能力:首先,它引入了冗余類型字節;其次,數據域字節也可以采用CRC校驗等方法進行校驗[3]。
2.3通信協議的機制規范
基于本協議的通信可以有兩種機制。一種是面向握手的,即每發出一幀,總是要等待確認幀,否則將認為是通信出錯。這是一種可靠的通信方式,適合傳輸系統命令和一些非常重要的系統參數。另一種是無握手的,即發送方假設接收方總是接收正確,從而無須等待確認幀就不停地發送,適合大量前端采集數據的發送。在計算機與單片機實現編程通信之前,兩者之間需要規定握手協議,以保證數據收發的正確性[4]。在本系統中,單片機與單片機之間采用同樣格式的通信協議。在上位機呼叫下位機地址之后,就可利用本協議的規范來設計具體的通信流程。
另外,設計一套完整的通信協議還要求結構簡單、功能完備、高效可靠,同時要求具有通用性、兼容性與可擴充性,并且盡量標準化。
3通信協議實現
電子投票表決系統從本質上來講,可認為是一個分布式的數據采集與集散控制系統。在集散控制系統中,普遍采用RS-485總線作為底層通信接口[5]。
大型電子投票表決系統以RS485半雙工通信協議為基礎,由計算機、主控制器、分支控制器和表決器構成一個多級分層的總線型網絡結構。下位機(包含主控制器、分支控制器和表決器)采用AT89CXX系列單片機實現,構成了一個符合RS-485通信規范的主從分布、三級驅動、串行連接的多機網絡[6]。
軟件系統設計主要包括基于Windows操作系統的計算機(上位機)統計管理軟件設計和采用單片機技術的主控制器、分支控制器和表決器(下位機)的通信程序編寫。系統采用異步串行通信、主從呼叫響應的通信方式,完成下位機通信、上位機通信和上下位機間的通信等功能。主控制器、分支控制器和表決器基于RS-485通信協議,采用查詢和地址數據回送的方式實現相互通信和統計功能。最后由主控制器對數據進行收集、統計和處理,并回送計算機。
通信協議的實現主要包括下位機通信協議、上位機通信協議、上下位機間的通信過程等幾個部分。
3.1下位機通信協議
3.1.1主控制器通信協議
主控制器核心芯片89C52對應的主控制器的通信協議。
主控制器至PC機通信協議:
1) 一般約定:
(1)采用RS-485(也可采用RS-232,需轉換)標準串行接口,完成主控制器至PC機通信。
(2)波特率為:9600 bit/s。
(3)1位起始位,8位數據,1位停止位,無校驗。
2) 幀數據結構:
起始碼(固定為ASCII碼“BJ”)
命令碼
數據
校驗碼
3) 命令碼定義:
表1命令碼定義表
命令名稱
命令碼(ASCII碼)
1.表決器測試(注冊)開始
“C”
2.表決器測試(注冊)結束
“E”
3.表決開始
“B”
4.計票數據(表決動態數據)
“P”
5.表決結束(含計票結果)
“X”
3.1.2分支控制器通信協議
電子投票表決系統的分支控制器核心芯片89C51對應的分支控制器的通信協議。
通信協議約定:對于11.059M晶振,波特率設定為 14400,倍速為28800,單字節傳輸時間為 347us,延時為1ms。
3.1.3表決器通信協議
電子投票表決系統的表決器核心芯片89C2051對應的表決器的通信協議。
通信協議約定:對于11.0592M晶振,波特率設定為 9600,延時為10ms。接受和發送數據為定長8字節。表決時改為按鍵短時保持。
3.2上位機通信協議
Visual Basic提供三種通信編程方式。一是使用MSComm控件;二是使用Windows API;另外一個就是使用Inp和Out直接對端口讀寫方式[7]。本論文利用MSComm控件實現計算機與主控制器的通信。
在上位機開始表決子程序的通信協議中,包含以下過程:
1)設置打開通信端口1(COM1),并設置通信參數為19200波特,不校驗,8個數據位,一個停止位。
2)發送單片機命令:
為了使主機能夠對整個檢測過程進行實時控制,須要在發送命令以后設定等待的時間,也可以通過條件判斷下一步是發達還是接收命令。對發送的命令,可能是文本方式或二進制代碼。發送命令過程是一個帶參過程,這樣可使發送命令簡便易行。
3)接收數據:
接收數據是一個被動的過程,可以通過函數來實現,由定時器開啟。在接收過程中,多數用特征字符,如“OK”、“#”等。這些需要在通信協議中約定。
4)Timer控件控制:
通過Timer控件來控制通信中的發送命令和接收數據過程,在通信程序中設置兩個Timer控件分別控制發送單片機命令和接收單片機數據。
5)自動接收、監視總線狀態和通信錯誤的處理:
自動接收、監視總線狀態和通信錯誤的處理可以通過OnComm事件實現。通過控件中的OnComm事件可以捕捉和處理錯誤。當CommEvent屬性值發生改變時,表明有通信錯誤,就會產生OnComm事件。這樣可以監視通信線路狀態,得到單片機和主機及單片機和單片機之間的通信進程。
綜合以上分析,我們可知:利用Visual Basic的串行通信控件實現了計算機與多單片機之間的通信。同時,采用定時器控件控制收發過程,在必要的地方自動接收,使定時控制和通信過程完美地結合起來,大大加快了進程,克服了往多“握手”協議造成的通信速度緩慢的缺點。
3.3上下位機間的通信過程
計算機(上位機)與多單片機(下位機)之間的串行通信采用RS-485總線標準,半雙工傳輸方式。
1) 通信均有上位機發起,下位機不主動申請通信。
2) 當處于輪詢狀態時,上位機依據下位機地址,定時向下位機發送呼叫指令。此時,每臺下位機都中斷接受并判斷,地址不相符的下位機中斷返回,執行其他下位機任務;反之則把本機地址及其狀態作為應答信號發送給上位機。上位機接收到應答信號后,可以作進一步的處理。
4結論
大型電子投票表決系統的軟件設計主要集中在通信協議的設計。通信協議是保證通信暢通的關鍵,在一定程度上也影響著網絡通信的可靠性。本論文設計了一種以單片機為主控機的基于幀的通信協議,本通信協議適用于計算機和單片機點對點通信的情況。
需要注意的是,數據通信只是整個系統的一部分內容,要占用盡量少的時間,以求達到整個系統的高效率。在通信數據量一定的情況下,采用較高的波特率雖然比較好,但高的波特率必定要降低傳輸距離,在實際應用中必須仔細衡量。為了能使具體的命令、數據在網絡上正確地傳輸,在數據鏈路層必須提供一定的網絡協議,保證在物理層的比特流出現錯誤時能夠進行檢測和校正。為保證數據傳輸質量,對每個字節進行校驗的同時,應盡量減少特征字和校驗字。
本文所提出的通信協議的設計思想和思路方法對于相關設計和應用具有一定的參考意義和借鑒價值。
參考文獻
[1]唐竟新,董彥伶,李慶祥.計算機控制管理的投票系統[J].清華大學學報:自然科學版, 1997,37(1):98-101.
[2]唐竟新,許歡.第二代計算機控制和管理的投票系統[J].計算機工程應用,2002, 13(5):203-205.
[3]孟德紅.循環冗余校驗碼的軟件實現[J].礦業研究與開發,2000,24(2):40-41.
[4]李朝青.PC機及單片機數據通信技術(第一版) [M].北京:北京航空航天大學出版社,2000.
[5]沈紅星.一種基于RS485總線的網絡協議及其實現方法[J].單片機與嵌入式系統應用,2003,16(6):13-15.
[6]余永權.ATMEL 89系列單片機應用技術[M].北京:北京航空航天大學出版社, 2002.
[7]詹國華.VB6.0環境下直接利用MSComm控件實現分布式下位機群控制[J].計算機工程,2001,7(5):164-166.