資源描述:
《vb串口通訊方式解釋》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、目前,VisualBasic(簡稱VB)已成為WINDOWS系統(tǒng)開發(fā)的主要語言,以其高效、簡單易學(xué)及功能強(qiáng)大的特點(diǎn)越來越為廣大程序設(shè)計人員及用戶所青睞。VB支持面向?qū)ο蟮某绦蛟O(shè)計,具有結(jié)構(gòu)化的事件驅(qū)動編程模式并可以使用無限擴(kuò)增的控件。在VB應(yīng)用程序中可以方便地調(diào)用WINDOWSAPI函數(shù),使得編程效率提高,應(yīng)用功能增強(qiáng)。利用VB提供的這些功能,我們可以有三種方法完成串口通信。一種是用VB提供的具有強(qiáng)大功能的通信控件;另一種方法是調(diào)用WINDOWSAPI函數(shù),使用WINDOWS提供的通信函數(shù)編寫移植性強(qiáng)的應(yīng)用程序;第三是利用文件的輸入/輸
2、出完成,該方法簡便易行,但有一定的局限性。一、利用通信控件(MSCOMM)完成串口通信VB提供了通信控件MSCOMM,文件名為MSCOMM.VBX。該控件可設(shè)置串行通信的數(shù)據(jù)發(fā)送和接收,對串口狀態(tài)及串行通信的信息格式和協(xié)議進(jìn)行設(shè)置。在通信過程中可以觸發(fā)OnComm事件,在該事件過程進(jìn)行數(shù)據(jù)檢驗(yàn)處理及檢錯,還可以通過編程訪問CommEvent屬性來了解通信的情況,進(jìn)行收發(fā)數(shù)據(jù)的處理。每個通信控件對應(yīng)一個串口,如果要訪問多個通信口,則要設(shè)計多個通信控件。1.通信控件的事件及基本屬性(1)事件OnComm:通信控件只提供了一個事件,該事件的觸
3、發(fā)可以對串口的通信事件及錯誤進(jìn)行處理。通過對CommEvent屬性的判斷可知當(dāng)前的通信錯誤和事件,分別對每個Com2mEvent值進(jìn)行編程就完成了對各個錯誤和事件的處理。如:CommEvent=MSCOMM—EV—SEND表示發(fā)送事件。這些信息可從VB提供的常量文件CONSTANT.TXT中查出。(2)屬性CommPort:設(shè)置通信控件與哪個串口相連接,設(shè)置并返回通信口號。Setting:設(shè)置通信的信息格式,為字符型。順序?yàn)?波特率、校驗(yàn)、數(shù)據(jù)位、停止位。PortOpen:布爾型、開關(guān)通信口。InputLen:從接收緩沖區(qū)讀取字符個數(shù)。
4、Input,Output:讀取接收緩沖區(qū)或?qū)懭氚l(fā)送緩沖區(qū)字符以上五種屬性對串口完成基本的設(shè)置和操作,下面的三種屬性是描述如何利用VB提供的事件驅(qū)動機(jī)制來實(shí)現(xiàn)通信。CommEvent:返回通信過程中產(chǎn)生的錯誤信息及事件,了解通信狀況。SThreshold:設(shè)置并返回不觸發(fā)OnComm事件時發(fā)送緩沖區(qū)被允許的最少字符數(shù)。當(dāng)緩沖區(qū)的字符少于設(shè)置的值時,則觸發(fā)OnComm事件,并把CommEvent設(shè)為MSCOMMM—EV—SEND。當(dāng)SThreshold=0則禁止發(fā)送觸發(fā)OnComm事件,當(dāng)SThreshold=1則發(fā)送緩沖區(qū)為空時就觸發(fā)On
5、Comm事件。利用這一屬性,就可完成發(fā)送數(shù)據(jù)后的一系列操作。如:對剛發(fā)送的數(shù)據(jù)進(jìn)行處理,當(dāng)串口是和MODEM通信時,發(fā)送完數(shù)據(jù)后可進(jìn)行拆除線路聯(lián)接、掛機(jī)等操作。RThreshold:設(shè)置并返回不觸發(fā)OnComm事件時接收緩沖區(qū)被允許的最多字符數(shù)。當(dāng)緩沖區(qū)的字符多于設(shè)置的值時,則觸發(fā)OnComm事件,并把CommEvent設(shè)為MSCOMM—EV—RECEIVE,當(dāng)RThreshold=0則禁止接收觸發(fā)OnComm事件,當(dāng)RThreshold=1則接收緩沖區(qū)有一個或更多字符時就觸發(fā)OnComm事件。利用這一屬性,就可完成對串口接收數(shù)據(jù)的處理
6、。2.利用通信控件的實(shí)例SubForm1—load()?form1.show?′設(shè)置COM1?comm1.commport=1?comm1.Setting="9600,o,8,1"′波特率:9600奇校驗(yàn),8位數(shù)據(jù),1位停止位?comm1.Inputlen=0′讀取接收緩沖區(qū)的所有字符?comm1.OutBufferSize=512′設(shè)置發(fā)送緩沖區(qū)為512字節(jié)?comm1.InBufferSize=512′設(shè)置接收緩沖區(qū)為512字節(jié)?comm1.SThreshold=0′禁止發(fā)送事件?comm1.RThreshold=1′每一個字符到接
7、收緩沖區(qū)都觸發(fā)接收事件?′設(shè)置COM2?comm2.commport=2?comm2.Setting="2400,e,8,1"?′波特率:2400偶驗(yàn),8位數(shù)據(jù),1位停止位?comm2.Inputlen=0′讀取接收緩沖區(qū)的所有字符?comm2.OutBufferSize=512′設(shè)置發(fā)送緩沖區(qū)為512字節(jié)?comm2.InBufferSize=512′設(shè)置接收緩沖區(qū)為512字節(jié)?comm2.SThreshold=1′發(fā)送緩沖區(qū)空觸發(fā)發(fā)送事件?comm2.RThreshold=0′禁止接收事件?′打開COM1,COM2?comm1.Po
8、rtopen=True?comm2.Portopen=True?Timer1.interval=5000EndSubSubComm1—OnComm()?DimInbuffasstring?Dimiasint