摘 要:根據(jù)對(duì)單片機(jī)系統(tǒng)的遠(yuǎn)程網(wǎng)絡(luò)控制的要求,充分利用VB可視化編程、先進(jìn)的網(wǎng)絡(luò)技術(shù)和并、串行口通信的特點(diǎn),提出一種基于VB 6.0環(huán)境下將WinSock網(wǎng)絡(luò)控件、WINIO并口通信驅(qū)動(dòng)程序以及MsComm串口通信控件相結(jié)合實(shí)現(xiàn)網(wǎng)絡(luò)遠(yuǎn)程PC與單片機(jī)通信的方法,并給出部分原程序。
關(guān)鍵詞:VB 6.0;WinSock;WINIO;MsComm;EPP;單片機(jī)
中圖分類號(hào):TP872;TN915.04文獻(xiàn)標(biāo)識(shí)碼:B
文章編號(hào):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
在各種單片機(jī)應(yīng)用系統(tǒng)的設(shè)計(jì)中,常常遇到單片機(jī)與PC的通信問題,在速度要求不高、傳送距離不遠(yuǎn)的場(chǎng)合一般采用RS 232標(biāo)準(zhǔn)串行接口實(shí)現(xiàn) [1],在傳送距離較遠(yuǎn)的場(chǎng)合,也有學(xué)者研究通過網(wǎng)絡(luò)實(shí)現(xiàn)PC間的通信[2]。但是,要同時(shí)滿足高速度和遠(yuǎn)距離PC與單片機(jī)通信這是一個(gè)迫切需要解決的問題。隨著信息技術(shù)的發(fā)展,計(jì)算機(jī)和網(wǎng)絡(luò)越來越普及,對(duì)單片機(jī)的遠(yuǎn)程控制與測(cè)量的要求也越來越多。本文在結(jié)合現(xiàn)有研究的基礎(chǔ)上,對(duì)相關(guān)的設(shè)計(jì)進(jìn)行一定的改進(jìn)和創(chuàng)新,設(shè)計(jì)一個(gè)遠(yuǎn)程通信系統(tǒng),他由3部分構(gòu)成:遠(yuǎn)端PC、本地端PC和單片機(jī)系統(tǒng)。通過VB可視化編程,遠(yuǎn)端PC利用局域網(wǎng)向本地端PC發(fā)出命令,本地端PC接到命令后,自動(dòng)與單片機(jī)通過打印機(jī)接口以EPP1.9協(xié)議進(jìn)行通信(串行接口作為備用通信口),并將接到的單片機(jī)數(shù)據(jù)實(shí)時(shí)傳送給遠(yuǎn)端PC,以實(shí)現(xiàn)高速遠(yuǎn)程情況下PC與單片機(jī)通信的要求。
1 系統(tǒng)結(jié)構(gòu)與設(shè)計(jì)
系統(tǒng)構(gòu)成如圖1所示,遠(yuǎn)端PC通過局域網(wǎng)和本地PC通信,在通信中使用Winsock控件和TCP/IP協(xié)議;本地端PC通過并行通信接口或串行通信接口與單片機(jī)通信,在并口通信中使用WINIO并口通信驅(qū)動(dòng)程序、EPP協(xié)議和LPT打印機(jī)接口,在串口通信中使用MsComm控件、RS 232C協(xié)議和COM口。在此結(jié)構(gòu)中,本地PC端起到中繼的作用,當(dāng)本地端PC接收到從遠(yuǎn)端PC傳送過來的命令,在選擇通信方式后,與單片機(jī)通信,使單片機(jī)向遠(yuǎn)端PC傳送數(shù)據(jù)。
圖1 系統(tǒng)結(jié)構(gòu)圖
2 遠(yuǎn)端PC與本地端PC通信設(shè)計(jì)
TCP/IP 是目前在網(wǎng)絡(luò)通信中廣泛采用的一組完整的網(wǎng)絡(luò)協(xié)議,該協(xié)議的核心是TCP,IP和UDP協(xié)議。TCP/IP 網(wǎng)絡(luò)環(huán)境下應(yīng)用程序通過網(wǎng)絡(luò)系統(tǒng)編程界面套接字(Socket)實(shí)現(xiàn)與內(nèi)核的交互。利用Socket通信編程接口編寫程序,其目的是在TCP/IP所組建網(wǎng)絡(luò)的不同機(jī)器之間利用客戶/服務(wù)器模式建立通信連接,開發(fā)人員只要提供一些基本的連接信息,其余由操作系統(tǒng)內(nèi)核完成。WinSock (Windows Socket) 是Windows 操作系統(tǒng)下的通用的TCP/IP 應(yīng)用程序的網(wǎng)絡(luò)編程接口,通過調(diào)用WinSock的接口函數(shù)來調(diào)用TCP/IP的各種功能。在VB 6.0 中,WinSock 控件對(duì)Windows Sockets API進(jìn)行封裝,使用程序員可以不必了解TCP/IP或調(diào)用底層WinSock API的具體細(xì)節(jié),只要設(shè)置好相應(yīng)屬性,在觸發(fā)的事件過程中作好相應(yīng)處理,就能編寫出網(wǎng)絡(luò)應(yīng)用程序。
遠(yuǎn)端PC與本地端PC通信通過VB 6.0調(diào)用WinSock控件實(shí)現(xiàn),圖2(a),(b) 分別為其控制界面。需說明以下幾點(diǎn):遠(yuǎn)端PC選擇好要連接的本地端PC的IP地址和網(wǎng)絡(luò)傳送端口后,再發(fā)起聯(lián)機(jī)申請(qǐng);本地端PC網(wǎng)絡(luò)傳送端口必須和遠(yuǎn)端PC傳送端口一致,串行端口選擇是COM1/COM2,并行端口輸入并口地址(378H);遠(yuǎn)端PC在命令輸入?yún)^(qū)輸入命令后,發(fā)送命令按鈕才有效;回傳數(shù)據(jù)區(qū)存放單片機(jī)傳送回來的實(shí)時(shí)數(shù)據(jù)并可保存成文本文件,信息區(qū)存放網(wǎng)絡(luò)工作狀態(tài)、遠(yuǎn)端PC的命令,及單片機(jī)數(shù)據(jù)傳送情況。其工作過程如圖2(c)所示。
圖2 PC控制界面及通信過程
3 本地端PC與單片機(jī)通信設(shè)計(jì)
3.1 本地端PC與單片機(jī)并口通信設(shè)計(jì)
3.1.1 并行通信接口及協(xié)議
在速率要求較高的場(chǎng)合,可以利用PC機(jī)上的打印機(jī)接口(CENTRONICS標(biāo)準(zhǔn),DB25芯針座,TTL電平)實(shí)現(xiàn)。并口通信有SPP、EPP和ECP三種工作模式。本文采用EPP協(xié)議。
(1) EPP協(xié)議[3]
增強(qiáng)型并行接口協(xié)議EPP(Enhanced Parallel Port),為PC和外設(shè)之間定義了并行雙向通信的標(biāo)準(zhǔn),該協(xié)議通過硬件自動(dòng)握手,能達(dá)到500 kB/S~2 MB/s的通信速率,適合大量數(shù)據(jù)傳輸?shù)耐庠O(shè)進(jìn)行告訴通信。EPP分為EPP1.7和EPP1.9,二者之間的區(qū)別是:EPP1.9需要判斷超時(shí)(避免出現(xiàn)“死循環(huán)”)以及nwait信號(hào)是否有效,而EPP1.7不需要判斷,傳輸速度更快。EPP協(xié)議支持4種操作,包括數(shù)據(jù)寫出、地址寫出、數(shù)據(jù)讀取和地址讀取。
(2)EPP協(xié)議的寄存器地址及一些主要的引腳定義[4],如表1,表2所示。
表1 EPP協(xié)議引腳定義
3.1.2 WINIO并口通信驅(qū)動(dòng)程序
在VB中無法直接使用輸入/輸出指令來完成對(duì)端口的訪問,尤其是Windows 2000/XP系統(tǒng)對(duì)端口的保護(hù)更加嚴(yán)格。要對(duì)端口進(jìn)行訪問,一般有2種方法:第一種是通過C/C++等編程軟件開發(fā)一些動(dòng)態(tài)鏈接庫(DLL)或ActiveX 控件用于在VB 中調(diào)用來完成對(duì)底層硬件的控制;第二種更為簡(jiǎn)便的方法是到互聯(lián)網(wǎng)上去尋找一些免費(fèi)的DLL 或ActiveX 控件,本系統(tǒng)使用的是網(wǎng)絡(luò)上免費(fèi)的動(dòng)態(tài)鏈接庫文件WINIO.DLL[5](適用于Windows 2000/XP),主要實(shí)現(xiàn)了對(duì)底層并行端口使用的方法。WINIO是一個(gè)綠色環(huán)保軟件,他不需要向注冊(cè)表中添加任何信息,只要把WINIO.VXD,WINIO.SYS,WINIO.DLL放在應(yīng)用程序所在的文件夾下就可以。在使用的時(shí)候,直接將WINIO.BAS引用到工程中,就可以實(shí)現(xiàn)對(duì)端口的控制和訪問。
3.1.3 并口通信設(shè)計(jì)
如圖3所示,打印機(jī)口通過單片機(jī)的P1口傳送數(shù)據(jù),nWait和nDstorbe通過P2.0和P2.1與單片機(jī)連接。并行接口與單片機(jī)相連一般有兩種方式:一種是直接連接,另一種是使用雙向驅(qū)動(dòng)器或鎖存器的總線方式[6]。本系統(tǒng)采用第一種方式,能最大限度發(fā)揮EPP速度快的優(yōu)勢(shì),但單片機(jī)易受到不穩(wěn)定信號(hào)的干擾。EPP模式為雙向傳輸協(xié)議,為了簡(jiǎn)化設(shè)計(jì),只進(jìn)行采用單片機(jī)向PC傳送數(shù)據(jù)的單向讀傳送,并口采用EPP1.9模式,支持超時(shí)和nwait判斷。
本地端PC通過并口與單片機(jī)通信的VB源程序如下:
If optlpt.Value = True Then′判斷是否選擇并口通信
Result1 = SetPortVal(Val(\"H\" + \"37A\"),Val(\"H\" + \"24\"),1)′初始化,選擇讀模式
rdsta: Result2 = GetPortVal(Val(\"H\" + \"379\"),PortVal1,1) ′讀狀態(tài)端口
buf1 = HexMYM(PortVal1 And HFF)
If buf1 = \"FE\" Then′nwait有效
rddata:Result1 = GetPortVal(Val(\"H\" + \"37C\"),PortVal2,1) ′讀數(shù)
buf2 = HexMYM(PortVal2 And HFF)
Winsock2.SendData buf2′數(shù)據(jù)送給遠(yuǎn)端PC
ElseIf buf1 = \"EF\" Then′超時(shí)
txtreceive.Text =\"并口通信傳輸超時(shí)\" vbCr
Winsock2.SendData \"并口通信傳輸超時(shí)\"
Result1 = SetPortVal(Val(\"H\" + \"379\"),Val(\"H\" + \"FF\"),1) ′去掉超時(shí)位
Call ShutdownWinIo
End If
End If
3.2 本地端PC與單片機(jī)串口通信設(shè)計(jì)
MsComm 控件是Microsoft公司提供的簡(jiǎn)化Windows下串行通信編程的ActiveX控件,他為應(yīng)用程序提供通過串行接口收發(fā)數(shù)據(jù)的簡(jiǎn)便方法。該控件具有完善的串口數(shù)據(jù)的發(fā)送和接收功能。通過此控件,PC機(jī)可以利用串行口與其他設(shè)備實(shí)現(xiàn)輕松連接,簡(jiǎn)單高效地實(shí)現(xiàn)設(shè)備之間的通訊。
圖3 并口通信硬件連接圖
PC串行接口COM1/COM2信號(hào)符合RS 232C電氣標(biāo)準(zhǔn),而單片機(jī)串行接口采用TTL邏輯電平,實(shí)現(xiàn)二者之間的異步串行通信需要電平轉(zhuǎn)換芯片。單片機(jī)串行接口有一個(gè)全雙工串行接口,經(jīng)過MAX 232芯片可方便地轉(zhuǎn)換成RS 232電氣標(biāo)準(zhǔn)[7]。
本系統(tǒng)以串行通信為備用通信方式,本地端PC通過串口與單片機(jī)通信的VB源程序如下:
If optcom.Value = True Then′判斷是否選擇串口通信
buf1 = \"\"
MSComm1.Output = \"?\" ′發(fā)送?
buf1 = MSComm1.Input
timedelay 50
buf1 = buf1 MSComm1.Input′從串口讀取數(shù)據(jù)
Winsock2.SendData buf1 \"串口數(shù)據(jù)傳送完畢\"
txtreceive.Text = \"串口數(shù)據(jù)傳送完畢\"
End If
3.3 單片機(jī)程序設(shè)計(jì)
單片機(jī)部分可進(jìn)行并口和串口2種方式的通信,用匯編語言編寫通信子程序。在這里分別給出2種方式的程序流程圖。如圖4(a),(b)所示。
圖4 程序流程圖
本系統(tǒng)有如下特色:本地端PC起到中繼作用;這里使用局域網(wǎng)(如果要使用Internet,必須為本地端PC提供固定的IP地址),當(dāng)網(wǎng)絡(luò)連接中斷時(shí),可自動(dòng)重新連接;本地端PC采用并口和串口2種方式與單片機(jī)通信。并口采用EPP1.9模式,單片機(jī)也可判斷超時(shí);遠(yuǎn)端PC可實(shí)時(shí)讀取單片機(jī)中的數(shù)據(jù)。
本文利用了VB面向?qū)ο蠛涂梢暬幊痰奶攸c(diǎn),將網(wǎng)絡(luò)、并口、串口通信方式相結(jié)合實(shí)現(xiàn)了遠(yuǎn)程PC與單片機(jī)系統(tǒng)的通信,并在大功率開關(guān)電源控制系統(tǒng)上測(cè)試,可完全正常運(yùn)轉(zhuǎn)。本系統(tǒng)給出的方法,對(duì)其他PC通信場(chǎng)合亦有一定參考價(jià)值。
參 考 文 獻(xiàn)
[1]范逸之,陳立元.Visual Basic與RS 232串行通信控制[M].北京:清華大學(xué)出版社,2002.
[2]陸繼翔,余隋懷.基于WinSock 控件實(shí)現(xiàn)局域網(wǎng)上的點(diǎn)到點(diǎn)通信[J].彈箭與制導(dǎo)學(xué)報(bào),2006,26(1):150156.
[3]汪洋.利用EPP接口協(xié)議實(shí)現(xiàn)高速數(shù)據(jù)通信[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2001(6):2122.
[4]徐曉東,劉江虹.并口EPP模式下的雙機(jī)高速互連[J].內(nèi)蒙古大學(xué)學(xué)報(bào):自然科學(xué)版,2003,34(5):560563.
[5]網(wǎng)頁http://www.daqchina.net/daqchina/download/winio.htm資料.
[6]周永基.PC并口EPP通信外圍電路設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2003,26(10):2934.
[7]朱立忠 ,馮丹.PC機(jī)與 MCS51單片機(jī)串行通信接口電路的設(shè)計(jì)[J].沈陽工業(yè)學(xué)院學(xué)報(bào),2003,22(2):2224.
作者簡(jiǎn)介 張光南 男,1981年出生,陜西寶雞人,碩士研究生。研究方向?yàn)橛?jì)算機(jī)測(cè)控技術(shù)。
馬勝前 男,1954年出生,甘肅天水人,教授,碩士生導(dǎo)師。研究方向?yàn)橛?jì)算機(jī)測(cè)控技術(shù)、信號(hào)處理。
注:本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文