摘 要:根據對單片機系統的遠程網絡控制的要求,充分利用VB可視化編程、先進的網絡技術和并、串行口通信的特點,提出一種基于VB 6.0環境下將WinSock網絡控件、WINIO并口通信驅動程序以及MsComm串口通信控件相結合實現網絡遠程PC與單片機通信的方法,并給出部分原程序。
關鍵詞:VB 6.0;WinSock;WINIO;MsComm;EPP;單片機
中圖分類號:TP872;TN915.04文獻標識碼:B
文章編號:1004-373X(2008)08-150-03
Realization of Longdistance Network PC′s Communication with Single Chip Computer by VB 6.0
ZHANG Guangnan1,2,MA Shengqian1
(1.College of Physics and Electronic Engineering,Northwest Normal University,Lanzhou,730070,China;
2.Arts and Science of Baoji University,Baoji,721007,China)
Abstract:According to the requirements of longdistance network control of single chip microcomputer,fully using the unique features of VB visual programming,the advanced network technology,parallel and serial communication,by integrated with Winsock network controls,WINIO parallel communication drivers and MsComm serial communication controls in the VB 6.0 software environment.This paper designs a system which can implement longdistance network PC′s communication with single chip computer.
Keywords:VB 6.0;WinSock;WINIO;MsComm;EPP;single chip microcomputer
在各種單片機應用系統的設計中,常常遇到單片機與PC的通信問題,在速度要求不高、傳送距離不遠的場合一般采用RS 232標準串行接口實現 [1],在傳送距離較遠的場合,也有學者研究通過網絡實現PC間的通信[2]。但是,要同時滿足高速度和遠距離PC與單片機通信這是一個迫切需要解決的問題。隨著信息技術的發展,計算機和網絡越來越普及,對單片機的遠程控制與測量的要求也越來越多。本文在結合現有研究的基礎上,對相關的設計進行一定的改進和創新,設計一個遠程通信系統,他由3部分構成:遠端PC、本地端PC和單片機系統。通過VB可視化編程,遠端PC利用局域網向本地端PC發出命令,本地端PC接到命令后,自動與單片機通過打印機接口以EPP1.9協議進行通信(串行接口作為備用通信口),并將接到的單片機數據實時傳送給遠端PC,以實現高速遠程情況下PC與單片機通信的要求。
1 系統結構與設計
系統構成如圖1所示,遠端PC通過局域網和本地PC通信,在通信中使用Winsock控件和TCP/IP協議;本地端PC通過并行通信接口或串行通信接口與單片機通信,在并口通信中使用WINIO并口通信驅動程序、EPP協議和LPT打印機接口,在串口通信中使用MsComm控件、RS 232C協議和COM口。在此結構中,本地PC端起到中繼的作用,當本地端PC接收到從遠端PC傳送過來的命令,在選擇通信方式后,與單片機通信,使單片機向遠端PC傳送數據。
圖1 系統結構圖
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)所示。
圖2 PC控制界面及通信過程
3 本地端PC與單片機通信設計
3.1 本地端PC與單片機并口通信設計
3.1.1 并行通信接口及協議
在速率要求較高的場合,可以利用PC機上的打印機接口(CENTRONICS標準,DB25芯針座,TTL電平)實現。并口通信有SPP、EPP和ECP三種工作模式。本文采用EPP協議。
(1) EPP協議[3]
增強型并行接口協議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協議的寄存器地址及一些主要的引腳定義[4],如表1,表2所示。
表1 EPP協議引腳定義
3.1.2 WINIO并口通信驅動程序
在VB中無法直接使用輸入/輸出指令來完成對端口的訪問,尤其是Windows 2000/XP系統對端口的保護更加嚴格。要對端口進行訪問,一般有2種方法:第一種是通過C/C++等編程軟件開發一些動態鏈接庫(DLL)或ActiveX 控件用于在VB 中調用來完成對底層硬件的控制;第二種更為簡便的方法是到互聯網上去尋找一些免費的DLL 或ActiveX 控件,本系統使用的是網絡上免費的動態鏈接庫文件WINIO.DLL[5](適用于Windows 2000/XP),主要實現了對底層并行端口使用的方法。WINIO是一個綠色環保軟件,他不需要向注冊表中添加任何信息,只要把WINIO.VXD,WINIO.SYS,WINIO.DLL放在應用程序所在的文件夾下就可以。在使用的時候,直接將WINIO.BAS引用到工程中,就可以實現對端口的控制和訪問。
3.1.3 并口通信設計
如圖3所示,打印機口通過單片機的P1口傳送數據,nWait和nDstorbe通過P2.0和P2.1與單片機連接。并行接口與單片機相連一般有兩種方式:一種是直接連接,另一種是使用雙向驅動器或鎖存器的總線方式[6]。本系統采用第一種方式,能最大限度發揮EPP速度快的優勢,但單片機易受到不穩定信號的干擾。EPP模式為雙向傳輸協議,為了簡化設計,只進行采用單片機向PC傳送數據的單向讀傳送,并口采用EPP1.9模式,支持超時和nwait判斷。
本地端PC通過并口與單片機通信的VB源程序如下:
If optlpt.Value = True Then′判斷是否選擇并口通信
Result1 = SetPortVal(Val(\"H\" + \"37A\"),Val(\"H\" + \"24\"),1)′初始化,選擇讀模式
rdsta: Result2 = GetPortVal(Val(\"H\" + \"379\"),PortVal1,1) ′讀狀態端口
buf1 = HexMYM(PortVal1 And HFF)
If buf1 = \"FE\" Then′nwait有效
rddata:Result1 = GetPortVal(Val(\"H\" + \"37C\"),PortVal2,1) ′讀數
buf2 = HexMYM(PortVal2 And HFF)
Winsock2.SendData buf2′數據送給遠端PC
ElseIf buf1 = \"EF\" Then′超時
txtreceive.Text =\"并口通信傳輸超時\" vbCr
Winsock2.SendData \"并口通信傳輸超時\"
Result1 = SetPortVal(Val(\"H\" + \"379\"),Val(\"H\" + \"FF\"),1) ′去掉超時位
Call ShutdownWinIo
End If
End If
3.2 本地端PC與單片機串口通信設計
MsComm 控件是Microsoft公司提供的簡化Windows下串行通信編程的ActiveX控件,他為應用程序提供通過串行接口收發數據的簡便方法。該控件具有完善的串口數據的發送和接收功能。通過此控件,PC機可以利用串行口與其他設備實現輕松連接,簡單高效地實現設備之間的通訊。
圖3 并口通信硬件連接圖
PC串行接口COM1/COM2信號符合RS 232C電氣標準,而單片機串行接口采用TTL邏輯電平,實現二者之間的異步串行通信需要電平轉換芯片。單片機串行接口有一個全雙工串行接口,經過MAX 232芯片可方便地轉換成RS 232電氣標準[7]。
本系統以串行通信為備用通信方式,本地端PC通過串口與單片機通信的VB源程序如下:
If optcom.Value = True Then′判斷是否選擇串口通信
buf1 = \"\"
MSComm1.Output = \"?\" ′發送?
buf1 = MSComm1.Input
timedelay 50
buf1 = buf1 MSComm1.Input′從串口讀取數據
Winsock2.SendData buf1 \"串口數據傳送完畢\"
txtreceive.Text = \"串口數據傳送完畢\"
End If
3.3 單片機程序設計
單片機部分可進行并口和串口2種方式的通信,用匯編語言編寫通信子程序。在這里分別給出2種方式的程序流程圖。如圖4(a),(b)所示。
圖4 程序流程圖
本系統有如下特色:本地端PC起到中繼作用;這里使用局域網(如果要使用Internet,必須為本地端PC提供固定的IP地址),當網絡連接中斷時,可自動重新連接;本地端PC采用并口和串口2種方式與單片機通信。并口采用EPP1.9模式,單片機也可判斷超時;遠端PC可實時讀取單片機中的數據。
本文利用了VB面向對象和可視化編程的特點,將網絡、并口、串口通信方式相結合實現了遠程PC與單片機系統的通信,并在大功率開關電源控制系統上測試,可完全正常運轉。本系統給出的方法,對其他PC通信場合亦有一定參考價值。
參 考 文 獻
[1]范逸之,陳立元.Visual Basic與RS 232串行通信控制[M].北京:清華大學出版社,2002.
[2]陸繼翔,余隋懷.基于WinSock 控件實現局域網上的點到點通信[J].彈箭與制導學報,2006,26(1):150156.
[3]汪洋.利用EPP接口協議實現高速數據通信[J].單片機與嵌入式系統應用,2001(6):2122.
[4]徐曉東,劉江虹.并口EPP模式下的雙機高速互連[J].內蒙古大學學報:自然科學版,2003,34(5):560563.
[5]網頁http://www.daqchina.net/daqchina/download/winio.htm資料.
[6]周永基.PC并口EPP通信外圍電路設計[J].現代電子技術,2003,26(10):2934.
[7]朱立忠 ,馮丹.PC機與 MCS51單片機串行通信接口電路的設計[J].沈陽工業學院學報,2003,22(2):2224.
作者簡介 張光南 男,1981年出生,陜西寶雞人,碩士研究生。研究方向為計算機測控技術。
馬勝前 男,1954年出生,甘肅天水人,教授,碩士生導師。研究方向為計算機測控技術、信號處理。
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文