用VisualBasic的Communications控件實現(xiàn)串行通信_第1頁
用VisualBasic的Communications控件實現(xiàn)串行通信_第2頁
用VisualBasic的Communications控件實現(xiàn)串行通信_第3頁
用VisualBasic的Communications控件實現(xiàn)串行通信_第4頁
用VisualBasic的Communications控件實現(xiàn)串行通信_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、用VisuaBasic的Communications控件實現(xiàn)串行通信1. 引言VisualBasic(以下簡稱VB)是一般程序設(shè)計人員在Windows環(huán)境下最常用的編程語言。在VB中除了可以調(diào)用API函數(shù),完成串行通信的任務之外,更常用、更簡便的是使用提供VB的Communications控件(以下簡稱Comn控件)來完成各種串行通信任務。2. VB的Comr控件3. 1Comm控件的添加Comm控件并不是VB的基本控件,剛進入VB環(huán)境中時,在控件工具箱上是找不到Comn控件的,要使用它必須另行添加,添加的方法如下:用鼠標右擊VB的控件工具箱,在彈出菜單中選擇部件菜單項,會出現(xiàn)一個部件”對話框

2、,勾選其中的“MicrosoftCommControl6.0選項,在VB的控件工具箱中會出現(xiàn)一個電話機形狀的控件圖標,它就是進行串行通信要使用的Comr控件。4. 2Comm控件概述Comm控件用于進行串行通信,既可以用來提供簡單的串行端口通信功能,也可以用來創(chuàng)建功能完備的、事件驅(qū)動的高級通信工具。Comm空件提供了一系列標準通信命令的使用界面。使用它可以建立與串行端口的連接,通過串行端口連接到其他通信設(shè)備(如MODEM,發(fā)出命令,交換數(shù)據(jù)以及監(jiān)視和響應串行連接中發(fā)生的事件和錯誤。利用它可以進行諸如撥打電話、監(jiān)視串行端口的輸入數(shù)據(jù)乃至創(chuàng)建功能完備的終端程序等功能。5. 3Comm空件的重要屬性

3、DCommPor:t設(shè)置或返回通信端口號,其取值范圍為199,缺省為1。當把這個屬性設(shè)置成1,表示利用COM1端口進行串行通信。在程序運行時也可以讀取該屬性,用來了解串行端口的使用情況。2)Settings:用字符串的形式設(shè)置或返回串行通信的幀格式。例如將Settings設(shè)置為9600,n,8,1,表示采用的串行通信波特率是9600、無奇偶校驗、數(shù)據(jù)位是8位、1位停止位。(3)PortOpen:設(shè)置或打開通信端口的狀態(tài),打開和關(guān)閉端口。在開始進行串行通信前,要把它設(shè)置為True,表示打開通信端口;通信結(jié)束后,要把它設(shè)置成Flase,表示關(guān)閉通信端口。4) Input:從輸入緩沖區(qū)讀取數(shù)據(jù),并刪

4、除輸入緩沖區(qū)中的字符。當串行端口接收到數(shù)據(jù)后,就把它放入輸入緩沖區(qū),在程序中利用Input屬性可以讀取這些數(shù)據(jù)。5) InputLen:設(shè)置或返回接收緩沖區(qū)內(nèi)用Input讀入的個數(shù)。若取0,則INPUT讀取整個緩沖區(qū)的內(nèi)容。6)InputMode:設(shè)置或返回Input屬性取回的數(shù)據(jù)的類型。0:(缺省)數(shù)據(jù)通過Input屬性以文本形式取回;1:數(shù)據(jù)通過Input屬性以二進制形式取回。7)InBufferSize:設(shè)置或返回接收緩沖區(qū)中的字符數(shù)??梢酝ㄟ^設(shè)置該屬性為0來清除接收緩沖區(qū)。8)Output:向發(fā)送緩沖區(qū)傳送一字符串數(shù)據(jù)。9)OutBufferSize:設(shè)置或返回發(fā)送緩沖區(qū)大小,缺省為5

5、12字節(jié)。10) OutBufferCount:返回發(fā)送緩沖區(qū)內(nèi)等待發(fā)送的字符數(shù),可用來清空緩沖區(qū)。lDSthreshold:設(shè)置或返回發(fā)送緩沖區(qū)中允許的最小字符數(shù)。當該屬性是0(缺省)時,數(shù)據(jù)發(fā)送不會產(chǎn)生OnComm事件;當該屬性為1時,每發(fā)送一個字符都會產(chǎn)生OnCom事件。12)Rthreshold:設(shè)置或返回要接收的字符數(shù)。當該屬性為0(缺省),數(shù)據(jù)接收不會產(chǎn)生OnCom事件;當該屬性為1時,每接收一個字符都會產(chǎn)生OnCom事件。13)CommEven:t返回最近的通信事件或錯誤,它通??赡苁窍旅娴囊恍┤≈?。ComEventBreaklOOl;接收到一個中斷信號ComEventFrame

6、l004;幀錯誤ComEventRxover1008;接收緩沖區(qū)溢出ComEventRxParity1009;奇偶校驗錯誤ComEvSendl在傳輸緩沖區(qū)中有比Sthreshold數(shù)少的字符ComEvReceive2;收到Rthreshold個字符。該事件將持續(xù)產(chǎn)生直到用;Input屬性從接收緩沖區(qū)中刪除數(shù)據(jù)ComEvCTS3;CTS線的狀態(tài)發(fā)生變化ComEvDSR4;DSR線的狀態(tài)從1至U0變化ComEvCD5;載波信號發(fā)生變化ComEvEOF7;收到文件結(jié)束(ASCH字符為1AH字符2.4Comm控件的事件Comm控件只有一個事件,即OnCom事件。當發(fā)生接收錯誤、因收至數(shù)據(jù)使得接收緩沖區(qū)

7、的字符數(shù)等于或多于規(guī)定值、因發(fā)送數(shù)據(jù)使得發(fā)送緩沖區(qū)中的字符數(shù)少于規(guī)定數(shù)、從MODE傳遞來的各信號線發(fā)生變化等等,都會產(chǎn)生OnCom事件。所以當發(fā)生OnCom事件后,在其處理程序中,首先要檢查Comn控件的CommEven屬性,然后根據(jù)不同的情況分別進行處理。6. 一個較完備的串行通信程序在這個較完備的程序中,可以允許用戶設(shè)置串行通信端口、波特率、數(shù)據(jù)位的位數(shù)、校驗方式、停止位位數(shù)等串行通信的基本參數(shù)。當用戶進行選擇后單擊確定按鈕,就可以進行串行數(shù)據(jù)的發(fā)送和接收,程序的主界面如圖1所示。圖1較完備的串行通信程序主界面演練這個程序時,需要將串口的TXD和RXD短接,在圖1左邊的文本框中輸入要發(fā)送的

8、字符,單擊發(fā)送按鈕,就會把這個文本框中的內(nèi)容發(fā)送出去;當串口接收到這個串行數(shù)據(jù)后,就會把收到的數(shù)據(jù)顯示在右邊的文本框中。在窗體的Load事件處理程序中放置如下代碼:PrivateSubForm_Load()Optionl.Value=True0ption3.Value=Trueoption6.Value=Truecommand2.Enabled=FalseEndSub在確定按鈕的點擊事件處理程序中放置如下代碼:PrivateSubCommandl_Click()DimfOAsStringfO=Combo1.TextIf0ption3.Value=TrueThenfO=fO+,n如果用戶選擇無校

9、驗,則fO添上,nEndIfIf0ption4.Value=TrueThenfO=fO+,o如果用戶選擇奇校驗,則fO添上,oEndIfIf0ption5.Value=TrueThenfO=fO+,e如果用戶選擇偶校驗,則fO添上,孑EndIf位數(shù)添上用戶選擇的數(shù)據(jù)位fO=fO+,+Combo2.TextfOIf0ption6.Value=TrueThenfO=fO+,1如果用戶選擇1位停止位,則fO添上,1EndIfIfOption?.Value=TrueThenfO=fO+,1.5如果用戶選擇1.5位停止位,則fO添上,1.5EndIfIf0ption8.Value=TrueThenfO=

10、fO+,2如果用戶選擇2位停止位,則fO添上,2EndIfMSComml.Settings=fO把fO送給通信控件的settings屬性If(Optionl.Value=True)And(MSCommlmport=2)ThenMSCommlmPort=1EndIfIf(0ption2.Value=True)And(MSCommlmport=1)ThenMSCommlmPort=2EndIfIfMSComml.PortOpen=FalseThenMSComml.PortOpen=True打開串行口EndIfMSComml.InputLen=1每次從接收緩沖區(qū)讀取一個字符MSComml.RThre

11、shold=1每收到一個字符就引發(fā)“OnComnT事件Command2.Enabled=TrueEndSub在發(fā)送按鈕的點擊事件處理程序中放置如下代碼:PrivateSubCommand2_Click()MSComml.Output=Textl.TextEndSub在窗體的UnLoad事件處理程序中放置如下代碼:PrivateSubForm_Unload(CancelAsInteger)IfMSComml.PortOpen=TrueThenMSComml.PortOpen=False如果關(guān)閉窗體時串行端口是打開的,就把它關(guān)閉EndIfEndSub在Comr控件的OnCom事件處理程序中放置如下

12、代碼:PrivateSubMSCommlOnComm()SelectCaseMSCommlmEventCasecomEvReceiveTextl.Text=MSComml.Input如果是收到規(guī)定的字符數(shù),就在右邊的文本框中顯示出來CasecomEventBreakMsgBox線路中斷,vbExclamation,“error!”如果收到中斷信號,就用對話框顯示線路中斷信息CasecomEventFrame,comEventRxOver,comEventRxParityMsgBox數(shù)據(jù)接收發(fā)生錯誤!,vbExclamation,error!如果收到的數(shù)據(jù)格式錯誤、接收緩沖區(qū)溢出、接收的數(shù)據(jù)奇偶校驗錯,都用對話框顯示數(shù)據(jù)接收發(fā)生錯誤!信息EndSelectEndSub在清除按鈕的點擊事件處理程序中放置如下代碼:PrivateSubCommand3_Clic

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論