MSComm 控件為應(yīng)用程序提供了串口通信功能,該應(yīng)用程序允許通過(guò)串口發(fā)送和接收數(shù)據(jù)。 語(yǔ)法 MSComm 說(shuō)明 MSComm控件提供了兩種處理通信的方法: · 事件驅(qū)動(dòng)通信,是一種功能很強(qiáng)的處理串口活動(dòng)的方法。在大多數(shù)情況下,用戶需要獲知事件發(fā)生的時(shí)間, 例如,在CD(Carrier Detect)線或RTS(Request To Send)線上有字符到達(dá)或發(fā)生了改變等。在這種情況下 ,使用MSComm 控件的OnComm 事件捕獲和處理這些通信事件。OnComm也可以捕獲和處理通信中的錯(cuò)誤。要獲取 所有事件和通信錯(cuò)誤的完整清單,請(qǐng)參閱CommEvent屬性。 · 用戶也可以在每個(gè)重要的程序功能之后檢查CommEvent 屬性的值來(lái)檢測(cè)事件和通信錯(cuò)誤。這對(duì)小的自含程序 可能比較常用。例如,如果編寫一個(gè)簡(jiǎn)單的電話撥號(hào)程序,那么在接收了每個(gè)字符后都產(chǎn)生一個(gè)事件并沒(méi)有 意義,因?yàn)槟阒淮蛩銖恼{(diào)制解調(diào)器中接收OK響應(yīng)信息。 使用的每個(gè)MSComm 控件都與一個(gè)串口對(duì)應(yīng)。如果在應(yīng)用程序中需要訪問(wèn)多個(gè)串口,必須使用多個(gè)MSComm 控件 ??梢栽赪indows 控制面板中修改串口地址的中斷地址。 雖然MSComm控件有許多很重要的屬性,但應(yīng)先熟悉下面幾個(gè)屬性: 屬性描述 CommPort 設(shè)置或返回通信端口號(hào) Settings 以字符串的形式設(shè)置或返回波特率、奇偶校驗(yàn)、數(shù)據(jù)位和停止位 PortOpen 設(shè)置或返回通信端口的狀態(tài)。也可以打開和關(guān)閉端口 Input 返回和刪除接收緩沖區(qū)中的字符 Output 將字符串寫入發(fā)送緩沖區(qū) 示例 下面的例子演示了使用調(diào)制解調(diào)器進(jìn)行基本的通信。 Private Sub Form_Load () Buffer to hold input string Dim Instring As String Use COM1. MSComm1.CommPort = 1 9600 baud no parity 8 data and 1 stop bit. MSComm1.Settings = "9600N81" Tell the control to read entire buffer when Input is used. MSComm1.InputLen = 0 Open the port. MSComm1.PortOpen = True Send the attention command to the modem. MSComm1.Output = "ATVtQ0"& + Chr$(13) Ensure that the modem responds with “OK” Wait for data to come back to the serial port. Do DoEvents Buffer$ = Buffer$ MSComm1.Input Loop Until InStr (Buffer$ “OK” & vbCRLF) Read the "OK" response data in the serial port. Close the serial port. MSComm1.PortOpen = False End Sub 注意:MSComm 控件可以使用查詢或事件驅(qū)動(dòng)的方法從串口接收數(shù)據(jù)。本例使用了查詢的方法。對(duì)于事件驅(qū)動(dòng)方 法的例子,請(qǐng)參閱OnComm 事件的幫助。 Break屬性 設(shè)置或清除斷開信號(hào)狀態(tài)。在設(shè)計(jì)時(shí)該屬性不可用。 語(yǔ)法 object.Break [=value] Break屬性的語(yǔ)法有如下幾個(gè)部分: 部分描述 object 對(duì)象表達(dá)式,其值是“應(yīng)用于”列表中的一個(gè)對(duì)象 value 一個(gè)布爾表達(dá)式,指明是否設(shè)置斷開信號(hào)狀態(tài),如“設(shè)置”中所示 設(shè)置 vlaue 值的設(shè)置如下: 設(shè)置描述 True 設(shè)置斷開信號(hào)狀態(tài) False 清除斷開信號(hào)狀態(tài) 說(shuō)明 當(dāng)設(shè)置為True 時(shí),Break 屬性就發(fā)送一個(gè)斷開信號(hào)。斷開信號(hào)將停止字符發(fā)送,將發(fā)送線置為斷開狀態(tài),直到 將Break屬性置為False。 通常,為短時(shí)間區(qū)以及只有當(dāng)用于通信的設(shè)備需要設(shè)置斷開狀態(tài)時(shí)才設(shè)置斷開狀態(tài)。 數(shù)據(jù)類型 Boolean。 示例 下面的例子演示了如何發(fā)送十分之一秒的斷開信號(hào)。 Set the Break condition. MSComm1.Break = True Set duration to 1/10 second. Duration! = Timer + .1 Wait for the duration to pass. Do Until Timer Duration! Dummy = DoEvents() Loop Clear the Break condition. MSComm1.Break = False CDHolding屬性 通過(guò)檢查CD 線的狀態(tài)來(lái)查詢是否有載波。CD(Carrier Detect,載波檢測(cè))是調(diào)制解調(diào)器發(fā)送給連接計(jì)算機(jī)的 指示調(diào)制解調(diào)器在線的信號(hào)。該屬性在設(shè)計(jì)時(shí)不可用,在運(yùn)行時(shí)是只讀的。 語(yǔ)法 object.CDHolding CDHolding屬性的語(yǔ)法有如下幾個(gè)部分: 部分描述 object 對(duì)象表達(dá)式,其值是“應(yīng)用于”列表中的一個(gè)對(duì)象 設(shè)置 CDHolding屬性的設(shè)置如下: 設(shè)置描述 True CD線高 False CD線低 說(shuō)明 當(dāng)CD線高(CDHolding = True)并超時(shí),MSComm控件就將CommEvent屬性設(shè)置為commEventCDTO(Carrier Detect Timeout Error),并產(chǎn)生一個(gè)OnComm事件。CD也稱為RLSD(Receive Line Singal Detect,接收線信 號(hào)檢測(cè))。 注意:尤其要注意的是,在主機(jī)應(yīng)用程序比如電子公告板中要偵測(cè)載波信號(hào)的丟失問(wèn)題,因?yàn)楹艚姓唠S時(shí)都有 可能掛起。 數(shù)據(jù)類型: Boolean。 CommEvent 屬性 返回最近的通信事件或錯(cuò)誤。該屬性在設(shè)計(jì)時(shí)不可用,在運(yùn)行時(shí)是只讀的。 語(yǔ)法 object.CommEvent CommEvent屬性的語(yǔ)法有如下幾個(gè)部分: 部分描述 object 對(duì)象表達(dá)式,其值是“應(yīng)用于”列表中的一個(gè)對(duì)象 說(shuō)明 盡管通信事件或錯(cuò)誤都產(chǎn)生OnComm 事件,但CommEvent 屬性中包含了事件或錯(cuò)誤的代碼。要確定導(dǎo)致OnComm 事件的實(shí)際錯(cuò)誤或事件,必須引用CommEvent屬性。 CommEvent 屬性為通信事件或錯(cuò)誤返回下列值之一。在該控件的對(duì)象庫(kù)中也可以找到這些常量。 通信錯(cuò)誤包含了下面的設(shè)置: 常量值描述 ComEventBreak 1001 收到了斷開信號(hào) ComEventCTST O 1002 Clear To Send Timeout。在發(fā)送字符時(shí),在系統(tǒng)指定的事件內(nèi),CTS(Clear To Send)線是低電平 ComEventDSRT O 1003 Data Set Ready Timeout。在發(fā)送字符時(shí),在系統(tǒng)指定的事件內(nèi),DSR(Data Set Ready)線是低電平 ComEventFrame 1004 數(shù)據(jù)幀錯(cuò)誤。硬件檢測(cè)到一個(gè)數(shù)據(jù)幀錯(cuò)誤 ComEventOverru n 1006 端口溢出。硬件中的字符尚未讀,下一個(gè)字符又到達(dá), 并且丟失 ComEventCDTO 1007 Carrier Detect Time。在發(fā)送字符時(shí),在系統(tǒng)指定的事件內(nèi),CD(Carrier Detect)線是 低電平。CD也稱為RLSD(Receive Line Singal Detect,接收線信號(hào)檢測(cè)) ComEventRxOve r 1008 接收緩沖區(qū)溢出。在接收緩沖區(qū)中沒(méi)有空間 ComEventRxPari ty 1009 奇偶校驗(yàn)錯(cuò)。硬件檢測(cè)到奇偶校驗(yàn)錯(cuò)誤 續(xù)表 ComEventTxFull 1010 發(fā)送緩沖區(qū)滿。在對(duì)發(fā)送字符排隊(duì)時(shí),發(fā)送緩沖區(qū)滿ComEventDCB 1011 檢取端口DCB( Device Control Blick)時(shí)發(fā)生了沒(méi)有預(yù)料到的錯(cuò)誤 通信事件包含了下面的設(shè)置: 常量值描述 ComEvSend 1 發(fā)送緩沖區(qū)中的字符數(shù)比Sthreshold值低 ComEvRecei ve 2 接收到了Rthreshold 個(gè)字符。持續(xù)產(chǎn)生該事件,直到使用了Input屬性刪除了接收緩沖區(qū)中的數(shù)據(jù) ComEvCTS 3 CTS(Clear To Send)線改變 ComEvDSR 4 DSR(Data Set Ready)線改變。當(dāng)DSR 從1 到0 改變時(shí),該事件發(fā)生 ComEvCD 5 CD(Carrier Detect)線改變 ComEvRing 6 檢測(cè)到響鈴信號(hào)。一些URAT(Universal Asynchronous Reciver-Transmitters通用異步收發(fā)器)不支持該事件 ComEvEOF 7 收到了EOF字符(ASCII字符26) 數(shù)據(jù)類型 Integer。 CommID屬性 返回標(biāo)識(shí)通信設(shè)備的句柄。該屬性在設(shè)計(jì)時(shí)不可用,在運(yùn)行時(shí)是只讀的。 語(yǔ)法 object.CommID CommID屬性的語(yǔ)法有如下幾個(gè)部分: 部分描述 object 對(duì)象表達(dá)式,其值是“應(yīng)用于”列表中的一個(gè)對(duì)象 說(shuō)明 該值與Windows API 函數(shù)CreateFile 返回值是一樣的。在Windows API 中調(diào)用任何通信例程都使用該值。 數(shù)據(jù)類型 Long CommPort屬性 返回或設(shè)置通信端口號(hào)。 語(yǔ)法 object.CommPort [=value] CommPort屬性的語(yǔ)法有如下幾個(gè)部分: 部分描述 object 對(duì)象表達(dá)式,其值是“應(yīng)用于”列表中的一個(gè)對(duì)象 value 指定端口號(hào)的整數(shù) 說(shuō)明 在設(shè)計(jì)時(shí),可以將value 置為1 到16 之間的整數(shù)(缺省為1)。然而,當(dāng)試圖使用PortOpen 屬性打開一個(gè)不存 在的端口號(hào)時(shí),MSComm 控件就產(chǎn)生68 錯(cuò)誤(Device unavilable)。 警告:必須在打開端口前設(shè)置CommPort屬性。 數(shù)據(jù)類型 Integer。 CTSHolding屬性 檢查CTS(Clear To Send)線的狀態(tài),確定是否可以發(fā)送數(shù)據(jù)。通常,調(diào)制解調(diào)器給連接的計(jì)算機(jī)發(fā)送CTS 信 號(hào),指明正在處理發(fā)送過(guò)程。該屬性在設(shè)計(jì)時(shí)不可用,在運(yùn)行時(shí)是只讀的。 語(yǔ)法 object.CTSHolding CTSHolding屬性的語(yǔ)法有如下幾個(gè)部分: 部分描述 object 對(duì)象表達(dá)式,其值是“應(yīng)用于”列表中的一個(gè)對(duì)象 CTSHolding屬性的設(shè)置如下表所示: 設(shè)置描述 True CTS(Clear To Send)線高 False CTS(Clear To Send)線低 說(shuō)明 當(dāng)CTS線低(CTSHolding = False)并超時(shí),MSComm控件就設(shè)置CommEvent 屬性為comEventCTSTO(Clear To Send Timout)并激活OnComm事件。 在RTS/CTS( Request To Send / Clear To Send)硬件握手中使用CTS線。如果需要確定CTS線的狀態(tài),可以使用 CTSHolding屬性手動(dòng)查詢。 要獲取更多信息或握手協(xié)議,請(qǐng)參閱Handshaking屬性。 數(shù)據(jù)類型 Boolean DSRHolding屬性 確定DSR(Data Set Ready)線的狀態(tài)。通常,調(diào)制解調(diào)器給連接的計(jì)算機(jī)發(fā)送CTS信號(hào),指明準(zhǔn)備就緒。該屬 性在設(shè)計(jì)時(shí)不可用,在運(yùn)行時(shí)是只讀的。 語(yǔ)法 object.DSRHolding object置換元表示一個(gè)對(duì)象表達(dá)式,其值為“應(yīng)用于”列表中的一個(gè)對(duì)象。 DSRHolding屬性返回如下值: 值描述 True DSR(DataSetReady)線高 False DSR(DataSetReady)線低 說(shuō)明 當(dāng)DSR線高(DSRHolding = False)并超時(shí),MSComm控件設(shè)置CommEvent 屬性為comEventDTSTO(Data Set Ready Timeout)并激活OnComm事件。 在為DTE(Data Terminal Equipment)計(jì)算機(jī)編寫DSR/DTR(Data Set Ready / Data Terminal Equipment ) |