在各種單片機應用系統的設計中,常常遇到單片機與PC的通信問題,在速度要求不高、傳送距離不遠的場合一般采用RS 232標准串行接口實現,在傳送距離較遠的場合,也有學者研究通過網絡實現PC間的通信。但是,要同時滿足高速度和遠距離PC與單片機通信這是一個迫切需 要解決的問題。隨著信息技術的發展,計算機和網絡越來越普及,對單片機的遠程控制與測量的要求也越來越多。本文在結合現有研究的基礎上,對相關的設計進行 一定的改進和創新,設計一個遠程通信系統,他由3部分構成:遠端PC、本地端PC和單片機系統。通過VB可視化編程,遠端PC利用局域網向本地端PC發出 命令,本地端PC接到命令後,自動與單片機通過打印機接口以EPP1.9協議進行通信(串行接口作為備用通信口),並將接到的單片機數據實時傳送給遠端 PC,以實現高速遠程情況下PC與單片機通信的要求。
1 系統結構與設計
系統構成如圖1所示,遠端PC通過局域網和本地PC通信,在通信中使用Winsock控件和TCP/1P協議;本地端PC通過並行通信接口或串 行通信接口與單片機通信,在並口通信中使用WINIO並口通信驅動程序、EPP協議和LPT打印機接口,在串口通信中使用MsComm控件、RS 232C協議和COM口。在此結構中,本地PC端起到中繼的作用,當本地端PC接收到從遠端PC傳送過來的命令,在選擇通信方式後,與單片機通信,使單片 機向遠端PC傳送數據。
2 遠端PC與本地端PC通信設計
TCP/IP是目前在網絡通信中廣泛采用的一組完整的網絡協議,該協議的核心是TCP,IP和UDP協議。TCP/IP網絡環境下應用程序通過 網絡系統編程界面套接字(Socket)實現與內核的交互。利用Socket通信編程接口編寫程序,其目的是在TCP/IP所組建網絡的不同機器之間利用 客戶/服務器模式建立通信連接,開發人員只要提供一些基本的連接信息,其余由操作系統內核完成。WinSock(Windows Socket)是Windows操作系統下的通用的TCP/IP應用程序的網絡編程接口,通過調用WinSock的接口函數來調用TCP/IP的各種功 能。在VB 6.0中,WinSock控件對Windows Sockets API進行封裝,使用程序員可以不必了解TCP/IP或調用底層WinSock API的具體細節,只要設置好相應屬性,在觸發的事件過程中作好相應處理,就能編寫出網絡應用程序。
遠端PC與本地端PC通信通過VB 6.0調用WinSock控件實現,圖2(a),(b)分別為其控制界面。需說明以下幾點:遠端PC選擇好要連接的本地端PC的IP地址和網絡傳送端口 後,再發起聯機申請;本地端PC網絡傳送端口必須和遠端PC傳送端口一致,串行端口選擇是COM1/COM2,並行端口輸入並口地址(378H);遠端 PC在命令輸入區輸入命令後,發送命令按鈕才有效;回傳數據區存放單片機傳送回來的實時數據並可保存成文本文件,信息區存放網絡工作狀態、遠端PC的命 令,及單片機數據傳送情況。其工作過程如圖2(c)所示。
3 本地端PC與單片機通信設計
3.1 本地端PC與單片機並口通信設計
3.1.1 並行通信接口及協議
在速率要求較高的場合,可以利用PC機上的打印機接口(CENTRONICS標准,DB-25芯針座,TTL電平)實現。並口通信有SPP、EPP和ECP三種工作模式。本文采用EPP協議。
(1)EPP協議
增強型並行接口協議EPP(Enhanced Parallel Port),為PC和外設之間定義了並行雙向通信的標准,該協議通過硬件自動握手,能達到500 kB/S~2 MB/s的通信速率,適合大量數據傳輸的外設進行告訴通信。EPP分為EPP1.7和EPP1.9,二者之間的區別是:EPP1.9需要判斷超時(避免出 現“死循環”)以及nwait信號是否有效,而EPP1.7不需要判斷,傳輸速度更快。EPP協議支持4種操作,包括數據寫出、地址寫出、數據讀取和地址 讀取。
(2) EPP協議的寄存器地址及一些主要的引腳定義,如表1,表2所示。
3.1.2 WINIO並口通信驅動程序
在VB中無法直接使用輸入/輸出指令來完成對端口的訪問,尤其是Windows 2000/XP系統對端口的保護更加嚴格。要對端口進行訪問,一般有2種方法:第一種是通過C/C++等編程軟件開發一些動態鏈接庫(DLL)或 ActiveX控件用於在VB中調用來完成對底層硬件的控制;第二種更為簡便的方法是到互聯網上去尋找一些免費的DLL或ActiveX控件,本系統使用 的是網絡上免費的動態鏈接庫文件WINIO.DLL(適用於Windows 2000/XP),主要實現了對底層並行端口使用的方法。WINIO是一個綠色環保軟件,他不需要向注冊表中添加任何信息,只要把 WINIO.VXD,WINIO.SYS,WINIO.DLL放在應用程序所在的文件夾下就可以。在使用的時候,直接將WINIO.BAS引用到工程中, 就可以實現對端口的控制和訪問。
3.1.3 並口通信設計
如圖3所示,打印機口通過單片機的P1口傳送數據,nWait和nDstorbe通過P2.0和P2.1與單片機連接。並行接口與單片機相連一 般有兩種方式:一種是直接連接,另一種是使用雙向驅動器或鎖存器的總線方式。本系統采用第一種方式,能最大限度發揮EPP速度快的優勢,但單片機易受到不 穩定信號的干擾。EPP模式為雙向傳輸協議,為了簡化設計,只進行采用單片機向PC傳送數據的單向讀傳送,並口采用EPP1.9模式,支持超時和 nwait判斷。
本地端PC通過並口與單片機通信的VB源程序如下:
3.2 本地端PC與單片機串口通信設計
MsComm控件是Microsoft公司提供的簡化Windows下串行通信編程的ActiveX控件,他為應用程序提供通過串行接口收發數 據的簡便方法。該控件具有完善的串口數據的發送和接收功能。通過此控件,PC機可以利用串行口與其他設備實現輕松連接,簡單高效地實現設備之間的通訊。
PC串行接口COM1/COM2信號符合RS 232C電氣標准,而單片機串行接口采用TTL邏輯電平,實現二者之間的異步串行通信需要電平轉換芯片。單片機串行接口有一個全雙工串行接口,經過MAX 232芯片可方便地轉換成RS 232電氣標准。
本系統以串行通信為備用通信方式,本地端PC通過串口與單片機通信的VB源程序如下:
3.3 單片機程序設計
單片機部分可進行並口和串口2種方式的通信,用匯編語言編寫通信子程序。在這裡分別給出2種方式的程序流程圖。如圖4(a),(b)所示。
本系統有如下特色:本地端PC起到中繼作用;這裡使用局域網(如果要使用Internet,必須為本地端PC提供固定的IP地址),當網絡連接中斷 時,可自動重新連接;本地端PC采用並口和串口2種方式與單片機通信。並口采用EPP1.9模式,單片機也可判斷超時;遠端PC可實時讀取單片機中的數 據。
本文利用了VB面向對象和可視化編程的特點,將網絡、並口、串口通信方式相結合實現了遠程PC與單片機系統的通信,並在大功率開關電源控制系統上測試,可完全正常運轉。本系統給出的方法,對其他PC通信場合亦有一定參考價值。