Visual Basic 6.0(以下簡稱VB) 是一種功能強大、簡單易學的程式設計語言。它不但保留了原先Basic語言的全部功能,而且還增加了物件導向程式設計功能。它不僅可以方便快捷地編制適用於資料處理、多媒體等方面的程式,而且利用ActiveX控制項MSComm還能十分方便地開發出使用電腦串口的電腦通信程式。本文結合電腦通信的兩個例子,詳細介紹如何在VB中使用MSComm控制項。
處理方式
MSComm控制項提供了兩種處理通信的方式:一種為事件驅動方式,該方式相當於一般程式設計中的中斷方式。當串口發生事件或錯誤時,MSComm控制項會產生OnComm事件,使用者程式可以捕獲該事件進行相應處理。本文的兩個例子均採用該方式。另一種為查詢方式,在使用者程式中設計定時或不定時查詢MSComm控制項的某些屬性是否發生變化,從而確定相應處理。在程式閒置時間較多時可以採用該方式。
常用屬性和方法
利用MSComm控制項實現電腦通信的關鍵是理解並正確設置MSComm控制項眾多屬性和方法。以下是MSComm控制項的常用屬性和方法:
●Commport:設置或返回串口號。
●Settings:以字串的形式設置或返回串口通信參數。
●Portopen:設置或返回串口狀態。
●InputMode:設置或返回接收資料的類型。
●Inputlen:設置或返回一次從接收緩衝區中讀取位元組數。
●InBufferSize:設置或返回接收緩衝區的大小,缺省值為1024位元組。
●InBufferCount:設置或返回接收緩衝區中等待電腦接收的字元數。
●Input:從接收緩衝區中讀取資料並清空該緩衝區,該屬性設計時無效,運行時唯讀。
●OutBufferSize:設置或返回發送緩衝區的大小,缺省值為512位元組。
●OutBufferCount:設置或返回發送緩衝區中等待電腦發送的字元數。
●Output:向發送緩衝區發送資料,該屬性設計時無效,運行時唯讀。
●Rthreshold:該屬性為一閥值。當接收緩衝區中字元數達到該值時,MSComm控制項設置Commevent屬性為ComEvReceive,並產生OnComm事件。用戶可在OnComm事件處理常式中進行相應處理。若Rthreshold屬性設置為0,則不產生OnComm事件。例如使用者希望接收緩衝區中達到一個字元就接收一個字元,可將Rthreshold設置為1。這樣接收緩衝區中接收到一個字元,就產生一次OnComm事件。
●Sthreshold:該屬性亦為一閥值。當發送緩衝區中字元數小於該值時,MSComm控制項設置Commevent屬性為ComEvSend,並產生OnComm事件。若Sthreshold屬性設置為0,則不產生OnComm事件。要特別注意的是僅當發送緩衝區中字元數小於該值的瞬間才產生OnComm事件,其後就不再產生OnComm事件。例如Sthreshold設置為3,僅當發送緩衝區中字元數從3降為2時,MSComm控制項設置Commevent屬性為ComEvSend,同時產生OnComm事件,如發送緩衝區中字元始終為2,則不會再產生OnComm事件。這就避免了發送緩衝區中資料未發送完就反復發生OnComm事件。
●CommEvent:這是一個非常重要的屬性。該屬性設計時無效,運行時唯讀。一旦串口發生通信事件或產生錯誤,依據產生的事件和錯誤,MSComm控制項為CommEvent屬性賦不同的代碼,同時產生OnComm事件。使用者程式就可在OnComm事件處理常式中針對不同的代碼,進行相應的處理。CommEvent屬性的代碼、常數及含義參見表1及表2。
表1 CommEvent通信事件代碼 常數 含義
1 ComEvReceive 接受到Rthreshold個字元。該事件將持續產生,直到用Input屬性從接受緩衝區中讀取並刪除字元。
2 ComEvSend 發送緩衝區中資料少於Sthreshold個,說明串口已經發送了一些資料,程式可以用Output屬性繼續發送資料。
3 ComEvCTS Clear To Send信號線狀態發生變化。
4 ComEvDSR Data Set Ready信號線狀態從1變到0。
5 ComEvCD Carrier Detect信號線狀態發生變化。
6 ComEvRing 檢測到振鈴信號。
7 ComEvEOF 接受到檔結束符。
表2 CommEvent通信錯誤代碼 常數 含義
1001 ComEvntBreak 接受到一個中斷信號。
1002 ComEvntCTSTO Clear To Send信號超時。
1003 ComEvntDSRTO Data Set Ready信號超時。
1004 ComEvntFrame 幀錯誤。
1006 ComEvntOverrun 串口超速。
1007 ComEvntCDTO 載波檢測超時。
1008 ComEvntRxOver 接受緩衝區溢位,緩衝區中已沒有空間。
1009 ComEvntRxParity 同位錯。
1010 ComEvntTxFull 發送緩衝區溢位,緩衝區中已沒有空間。
1011 ComEvntDCB 檢索串口的設備控制塊時發生錯誤。
實例1:電腦撥號
在一些實際應用中經常需要使用電腦撥號。下面這個例子利用MSComm控制項操作Modem進行撥號,實現串口通信。
實現步驟:
1.建表單
●添加一個MSComm控制項,用來建立與串口的連接;
●添加一個Text控制項,Name屬性為Txttel,用來輸入電話號碼;
●添加3個CommandButton控制項,Name屬性分別為DialButton、CancellButton、QuitButton,分別用來實現撥號、中止撥號、中止程式;
●添加一個Label控制項,用來顯示所有與撥號有關的資訊。表單見圖1。
2.設置MSComm控制項屬性
●InBufferSize=1024;
●Inputlen=0;
●InputMode=0;
●Rthreshold=2;
●RTSEnable=True;
●Settings="9600,N,8,1";
●Sthreshold=0。
因為每一台電腦的串口使用狀態都不會一樣。為使程式具有通用性,在表單的Load方法中首先進行串口測試,找到第一個可用串口後再進行設置。
3.程式功能
程式根據輸入的電話號碼進行撥號,Modem正常撥號後,提示用戶摘機,準備通話。
|
0 留言