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