80C196KB與PC機之間的遠程通訊系統(tǒng)設計
在許多實時監(jiān)測系統(tǒng)中,經常需要接收距離較遠的測控點數(shù)據,如何快速可靠的實現(xiàn)數(shù)據的遠程傳輸是這些監(jiān)測系統(tǒng)必須解決的問題。在監(jiān)測現(xiàn)場,為了降低系統(tǒng)的成本,往往采用單片機系統(tǒng)作為數(shù)據采集和記錄單元;在中央控制中心,常常利用PC機來完成人機會話及與監(jiān)測現(xiàn)場的通信。數(shù)據的遠程傳輸目前經常用調制解調器(Modem)通過電話線來進行。本文將介紹一套實用的主從式遠程通記系統(tǒng)。其下位機由16位單片機80C196KB承提,上位機的管理平臺則基于界面友好、功能強大的Visual Basic 6.0。
1 80C196與PC間的通訊方式
用80C196KB單片機的串行接口和調制解調器以及現(xiàn)有的電話線來實現(xiàn)遠程雙向通訊的系統(tǒng)方框圖如圖1所示。
在利用現(xiàn)有電話線進行數(shù)據傳輸?shù)拇型ㄓ崟r,必須把將要傳送的數(shù)據按先后順序,在公共信道上逐位傳送。
串行通訊對字符編碼、字符格式和傳輸速度都有具體規(guī)定,必須嚴格遵守。
異步串行通訊數(shù)據的傳送格式由四部分組成,即起始位、數(shù)據位、奇偶校驗位和終止位。通訊協(xié)議要求在發(fā)送端每傳送一個字符都必須要有起始位、數(shù)據位、奇偶校驗位和一個終止位的字符串;而在接收端,也要按照起始位、數(shù)據位、奇偶校驗位和一個終止位的字符串進行計數(shù)接收。
2 80C196KB與Modem間的接口
RS-232C的標準規(guī)定,邏輯“0”表示其電位應在+5~+15V之間,邏輯“1”表示其電位應在-5~-15V之間,而80C196KB單片機串口電閏為TTL電平,因此必須要通過電平轉換才能符合串行通訊標準。具體的接口電路如圖2所示。
電路中采用IN-TERSIL公司生產的只需+5V供電的串行收/發(fā)驅動器芯片ICL232來進行電平的轉換和驅動。當終端(196KB)處于操作規(guī)程狀態(tài)并可接收數(shù)據時,為了能將此信息傳送給MODEM,則必須使用管腳4上的數(shù)據終端就緒(DTR)信號;同樣地,為使終端設備(196KB)能夠將數(shù)據傳輸?shù)男畔⑼ㄖ{制解調器,就必須使用管腳7上的請求發(fā)送(RTS)信號。
由圖2可見,單片機DB(9芯)只給調制解調器的RS-232接口(9芯)提供三條信號線,即發(fā)送數(shù)據(TXD)、接收數(shù)據(RXD)和信號地SG。為了使數(shù)據鏈路能正常工作,可將調制解調器RS-232接口的4腳(DTR)和7腳(RTS)置高,以使之長期有效。
表1列出了RS-232的管腳及描述。表中的DTE為數(shù)據終端設備(Data Terminal Equipment)。本文中指下位機80C196KB和上位機PC,而DCE則表示數(shù)據通信設備(Data Communication Equipment)。本文中指調制解調器。
表1 RS-232各引腳描述
3 波特率設置
為了實現(xiàn)與遠方中央控制計算機正確可靠地通訊,雙方波特率必須一致??紤]到所選信道為公用電話網,為兼顧數(shù)據傳輸?shù)母咚傩院涂煽啃裕闹袑⒉ㄌ芈识?600bps。
3.1 下位機部分
80C196KB串行口的波特率取決于16位波特率寄存器的內容。該寄存器應以連續(xù)2個字節(jié)進行裝載,低位字節(jié)優(yōu)先。寄存器的最高位用于選擇波特率發(fā)生器的輸入時鐘源,最高位為1,選用XTAL1(即晶體振蕩器)信號為源信號,否則選用自T2CLK引腳的信號為源信號。
80C196KB 的內部時鐘信號是經2分頻獲得的。若以BAUD-REG表示波特率寄存器的裝載值,那么在同步模式0時,BUAD-REG=XTAL1/(2×波特率)- 1或T2CLK/波特率;而在異步模式1、2和3時,其BAUD-REG=XTAL1/(16×波特率)-1或T2CLK/(8×波特率)。
80C196KB的通信方式設定為異步方式1時,可進行全雙工通訊,其格式為每10位構成一串行幀,其中包括1位起始位,8位數(shù)據位和1位停止位。
在本系統(tǒng)中,80C196KB的晶振為12MHz,因此,為使波特率達到9600,需將波特率寄存器賦值為804EH。
表2列出了采用XTAL1作為時鐘源時,異步模式下一些常用波特率所對應的波特率寄存器值。應注意,表中所列的值是根據上述公式計算所得的值再加上最高位“1”后得到的。
表2 常用波特率對應的波特率寄存器值
3.2 上位機部分
微機數(shù)據采集系統(tǒng)中的一個關鍵問題是要在Windows環(huán)境下編寫相應的通信程序。Windows應用編程接口(API)所提供的有關串行通訊的16個函數(shù)可以實現(xiàn)完整的通訊功能,但其應用較為復雜。而VB中有一個通訊控件MSComm,通過改變其屬性設置和編寫相應的程序,就能在Windows環(huán)境下方便地實現(xiàn)不同用戶的串行通訊要求。
利用下面的語句可以方便地設置傳輸波特率,MSComm1.Settings=“9600,N,8,1”
表明波特率為9600,無奇偶校驗位,8位數(shù)據位,1位停止位。
4 80C196KB和中央控制機的通訊
在本系統(tǒng)中,下位機為主叫端,上位機為應答端,它們通過公用電話網進行數(shù)據傳輸。其數(shù)據鏈路的建立、數(shù)據傳輸及結束通信的全過程如表3所列。
表3 數(shù)據傳輸過程表
調制解調器安裝好后,必須預先設置好調制解調器的初始狀態(tài),然后再開通。否則通訊將不會成功。用戶對Modem初始化狀態(tài)的設置可以保存在非易失性RAM中。
下面對表3所列的傳輸過程進行說明。
(1)在握手初期,兩端的DTE需對Modem進行復位操作。為此,它們先給本端的Modem發(fā)ATZ命令。若Modem能執(zhí)行重設操作,便會返回結果碼OK,若Modem尚未與電話線連接,便返回NO DIALTONE,表示沒有撥號音。
(2)兩端DTE給各自的Modem發(fā)AT&F命令,調入Modem出廠缺省設置。
(3)主叫端DTE(196KB)向應答端Modem發(fā)撥號命令ATDT xxxx(ATDT表示音頻撥號,xxxx為對端的電話號碼)。當對端Modem檢測到振鈴(RING)后,由PC機控制并回送應答呼叫命令ATA。如果話路正常,則在一定的延時后,兩端Modem收到結果碼CONNECT 9600,并使Modem的CD指示燈亮,以表明數(shù)據傳輸鏈路成功建立。
(4)數(shù)據傳輸。
(5)數(shù)據通訊完成后,雙方Modem要拆鏈掛機。“+ + +”命令是由數(shù)據傳輸狀態(tài)轉為命令狀態(tài)的AT指令,它的前后必須有一段時間延時。當Modem狀態(tài)變?yōu)槊顮顟B(tài)時,可以用命令ATH來實現(xiàn)掛機。至此,兩臺Modem間的通訊任務就完成了。此時PC機內已存放了主機傳來的數(shù)據,將這些數(shù)據存入數(shù)據庫后可作進一步的處理。
5 數(shù)據傳輸?shù)牧髁靠刂坪蛡慑e糾錯
當兩端Modem正確可靠地建立起數(shù)據鏈路后就可以進行數(shù)據通訊了。在通過電話系統(tǒng)傳輸數(shù)據時,沒有一種簡單的方法能確保數(shù)據正確完整地到達對方。數(shù)據錯誤的發(fā)生可能有多種原因。由于串行通訊時數(shù)據是逐位發(fā)送的,因此即使極小的噪聲都有可能在多個位上造成嚴重錯誤,當波特率較高時出現(xiàn)錯誤更嚴重。在實際應用,常采用XMODEM協(xié)議對數(shù)據進行打包處理以檢測傳輸過程中出現(xiàn)的錯誤,若檢測到錯誤信息,則要求重傳出現(xiàn)錯誤的數(shù)據信息。理論上講如果每個數(shù)據包都能正確地傳送,那么整個數(shù)據塊也將成功地傳送。XMODEM協(xié)議按照一套特定的準則控制著數(shù)據傳輸?shù)乃屑毠?jié),其中包括如何啟動傳輸、包的大小、包的內容、正負應答以及如何完成傳輸?shù)取?/p>
XMODEM協(xié)議雖然較為成熟和完美,全過于復雜。本系統(tǒng)借鑒XMODEM協(xié)議的設計思想,并針對現(xiàn)場監(jiān)控數(shù)據的特點,設計了一套簡潔的流控和偵錯協(xié)議。從本系統(tǒng)的實際運行情況來看,該協(xié)議可保證數(shù)據的可靠傳輸,并能在話路質量較差時多次重發(fā)出錯的數(shù)據幀直到數(shù)據傳輸正確為止。
圖3為上位機通信子程序的流程圖,它主要利用VB6.0的通訊控件MSComm的ON COMM事件。
本系統(tǒng)在每次通信中,由80C196KB送給PC機的有效數(shù)據幀共4320幀,每幀113字節(jié)。其中有效字節(jié)112個,以3個FFH開頭,最后1個字節(jié)為異或結果,可用于傳輸后的異或校驗。在發(fā)送有效數(shù)據幀之前,下位機先發(fā)一個請求幀(仍為113字節(jié)),其幀結構為112個F0H加一異或結果。上位機收到該幀請求信號后,將回送握手成功信號,并作好接收有效數(shù)據的準備。下位機收到上位機發(fā)回的握手成功信號后,便將有效數(shù)據幀逐幀發(fā)送。
上位機對每幀數(shù)據的均要作異或校驗。如有錯誤的則回送失敗信號,并要求下位機重發(fā);正確的則放入緩沖數(shù)組以備存庫,并回送成功信號。當有效數(shù)據幀發(fā)送完畢后,下位機將發(fā)一個結束幀,其幀結構為112個FCH加一個異或結果。上位機收到該幀結束信號后,發(fā)出AT命令“+ + +ATH”以拆鏈掛機。至此,數(shù)據通信過程結束,之后,上位機將緩沖數(shù)組里數(shù)據存入數(shù)據庫,以便日后進行數(shù)據分析。
6 結束語
利用公用電話網,80C196KB單片機系統(tǒng)可通過Modem與遠方監(jiān)控中心進行通訊。這種系統(tǒng)的軟硬件設計方案簡單可行,運行成本低,數(shù)據傳輸速率較高。本監(jiān)控系統(tǒng)已在現(xiàn)場投入使用,經受了實際考驗。可推廣應用于各類遠程通訊系統(tǒng)。