資源描述:
《VB串口通訊控件MSComm詳解》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、VB串口通訊控件MSComm詳解MSComm控件通過串行端口傳輸和接收數(shù)據(jù),為應(yīng)用程序提供串行通訊功能。MSComm控件在串口編程時(shí)非常方便,程序員不必去花時(shí)間去了解較為復(fù)雜的API函數(shù),而且在VC、VB、Delphi等語言中均可使用。MicrosoftCommunicationsControl(以下簡稱MSComm)是Microsoft公司提供的簡化Windows下串行通信編程的ActiveX控件,它為應(yīng)用程序提供了通過串行接口收發(fā)數(shù)據(jù)的簡便方法。具體的來說,它提供了兩種處理通信問題的方法:一是事件驅(qū)動(Event-driven)方法,一是查詢法。1.MSComm控件兩種處理通訊的方式MSC
2、omm控件提供下列兩種處理通訊的方式:事件驅(qū)動方式和查詢方式。1.1事件驅(qū)動方式事件驅(qū)動通訊是處理串行端口交互作用的一種非常有效的方法。在許多情況下,在事件發(fā)生時(shí)需要得到通知,例如,在串口接收緩沖區(qū)中有字符,或者CarrierDetect(CD)或RequestToSend(RTS)線上一個(gè)字符到達(dá)或一個(gè)變化發(fā)生時(shí)。在這些情況下,可以利用MSComm控件的OnComm事件捕獲并處理這些通訊事件。OnComm事件還可以檢查和處理通訊錯(cuò)誤。所有通訊事件和通訊錯(cuò)誤的列表,參閱CommEvent屬性。在編程過程中,就可以在OnComm事件處理函數(shù)中加入自己的處理代碼。這種方法的優(yōu)點(diǎn)是程序響應(yīng)及時(shí),可靠
3、性高。每個(gè)MSComm控件對應(yīng)著一個(gè)串行端口。如果應(yīng)用程序需要訪問多個(gè)串行端口,必須使用多個(gè)MSComm控件。1.2查詢方式查詢方式實(shí)質(zhì)上還是事件驅(qū)動,但在有些情況下,這種方式顯得更為便捷。在程序的每個(gè)關(guān)鍵功能之后,可以通過檢查CommEvent屬性的值來查詢事件和錯(cuò)誤。如果應(yīng)用程序較小,并且是自保持的,這種方法可能是更可取的。例如,如果寫一個(gè)簡單的電話撥號程序,則沒有必要對每接收一個(gè)字符都產(chǎn)生事件,因?yàn)槲ㄒ坏却邮盏淖址钦{(diào)制解調(diào)器的“確定”響應(yīng)。2.MSComm控件的常用屬性MSComm控件有很多重要的屬性,但首先必須熟悉幾個(gè)屬性。CommPort設(shè)置并返回通訊端口號。Settings以字
4、符串的形式設(shè)置并返回波特率、奇偶校驗(yàn)、數(shù)據(jù)位、停止位。PortOpen設(shè)置并返回通訊端口的狀態(tài)。也可以打開和關(guān)閉端口。Input從接收緩沖區(qū)返回和刪除字符。Output向傳輸緩沖區(qū)寫一個(gè)字符串。下面分別描述:CommPort屬性設(shè)置并返回通訊端口號。語法object.CommPort[value](value一整型值,說明端口號。)說明在設(shè)計(jì)時(shí),value可以設(shè)置成從1到16的任何數(shù)(缺省值為1)。但是如果用PortOpen屬性打開一個(gè)并不存在的端口時(shí),MSComm控件會產(chǎn)生錯(cuò)誤68(設(shè)備無效)。注意:必須在打開端口之前設(shè)置CommPort屬性。RThreshold屬性:在MSComm控件設(shè)置
5、CommEvent屬性為comEvReceive并產(chǎn)生OnComm之前,設(shè)置并返回的要接收的字符數(shù)。語法object.Rthreshold[=value](value整型表達(dá)式,說明在產(chǎn)生OnComm事件之前要接收的字符數(shù)。)說明當(dāng)接收字符后,若Rthreshold屬性設(shè)置為0(缺省值)則不產(chǎn)生OnComm事件。例如,設(shè)置Rthreshold為1,接收緩沖區(qū)收到每一個(gè)字符都會使MSComm控件產(chǎn)生OnComm事件。CTSHolding屬性:確定是否可通過查詢ClearToSend(CTS)線的狀態(tài)發(fā)送數(shù)據(jù)。ClearToSend是調(diào)制解調(diào)器發(fā)送到相聯(lián)計(jì)算機(jī)的信號,指示傳輸可以進(jìn)行。該屬性在設(shè)計(jì)
6、時(shí)無效,在運(yùn)行時(shí)為只讀。語法:object.CTSHolding(Boolean)Mscomm控件的CTSHolding屬性設(shè)置值:TrueClearToSend線為高電平。FalseClearToSend線為低電平。說明:如果ClearToSend線為低電平(CTSHolding=False)并且超時(shí)時(shí),MSComm控件設(shè)置CommEvent屬性為comEventCTSTO(ClearToSendTimeout)并產(chǎn)生OnComm事件。ClearToSend線用于RTS/CTS(RequestToSend/ClearToSend)硬件握手。如果需要確定ClearToSend線的狀態(tài),CTSH
7、olding屬性給出一種手工查詢的方法。詳細(xì)信息有關(guān)握手協(xié)議,請參閱Handshaking屬性。SThreshold屬性:MSComm控件設(shè)置CommEvent屬性為comEvSend并產(chǎn)生OnComm事件之前,設(shè)置并返回傳輸緩沖區(qū)中允許的最小字符數(shù)。語法object.SThreshold[=value]value整形表達(dá)式,代表在OnComm事件產(chǎn)生之前在傳輸緩沖區(qū)中的最小字符數(shù)。說明:若設(shè)置S