下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、VB串行通信目前,Visual Basic (VB)已成為WINDOWS系統(tǒng)開(kāi)發(fā)的主要語(yǔ)言,越來(lái)越多的程序員和用戶使用效率、易于學(xué)習(xí)和功能強(qiáng)大的功能。VB支持面向?qū)ο蟮木幊蹋哂薪Y(jié)構(gòu)化的基于事件的編程模式,并且可以使用無(wú)限放大的控件。在VB應(yīng)用程序中可以輕松調(diào)用WINDOWS API函數(shù)以提高編程效率并提高功能。使用VB提供的這些功能完成串行通信的方法有三種:一種是使用VB提供強(qiáng)大的通信控制。另一種方法是調(diào)用WINDOWS API函數(shù),使用WINDOWS提供的通信函數(shù)構(gòu)建高度可移植的應(yīng)用程序。第三是利用文件的輸入/輸出完成,這種方法簡(jiǎn)單,而且有局限性。首先,使用通信控制(MSCOMM)完成串行
2、通信VB提供通信控制MSCOMM,文件名為MSCOMM .VBX。此控件設(shè)置串行通信的發(fā)送和接收數(shù)據(jù),并設(shè)置串行端口狀態(tài)和串行通信的信息格式和協(xié)議。觸發(fā)執(zhí)行數(shù)據(jù)檢查處理和錯(cuò)誤檢查的OnComm事件,并以編程方式訪問(wèn)CommEvent屬性以了解通信情況和發(fā)送和接收數(shù)據(jù)。每個(gè)通信控件對(duì)應(yīng)于一個(gè)串行端口,如果訪問(wèn)多個(gè)通信端口,則設(shè)計(jì)多個(gè)通信控件。1、通信控制事件和基本屬性(1)事件OnComm:通信控制僅提供處理串行端口上的通信事件和錯(cuò)誤的單個(gè)事件。編程每個(gè)CommEvent值以確定當(dāng)前通信錯(cuò)誤和事件,從而處理單個(gè)錯(cuò)誤和事件。例如:comm event=ms comm-EV-SEND-SEND表示事
3、件傳輸。此信息是VB提供的常量文件CONSTANT .可以在TXT中確認(rèn)。(2)屬性CommPort:設(shè)置通信控件要連接的串行端口,設(shè)置并返回通信標(biāo)語(yǔ)。Setting:設(shè)定文字格式中通訊的資訊格式。順序包括波特率、驗(yàn)證、數(shù)據(jù)位和停止位。PortOpen:布爾值,交換機(jī)通信端口。InputLen:從接收緩沖區(qū)讀取字符數(shù)。Input,Output:讀取接收緩沖區(qū)或?qū)懭氚l(fā)送緩沖區(qū)字符。上述五個(gè)屬性完成串行端口的默認(rèn)設(shè)置和操作,以下三個(gè)屬性說(shuō)明如何使用VB提供的事件驅(qū)動(dòng)機(jī)制實(shí)現(xiàn)通信。CommEvent:返回通信期間發(fā)生的錯(cuò)誤消息和事件,以確定通信狀態(tài)。SThreshold:設(shè)置并返回未觸發(fā)OnComm
4、事件時(shí)發(fā)送緩沖區(qū)允許的最小字符數(shù)。如果緩沖區(qū)中的字符小于設(shè)置的值,則觸發(fā)OnComm事件,并將CommEvent設(shè)置為mscommm-ev-send。SThreshold=0表示不發(fā)送OnComm事件,SThreshold=1表示傳輸緩沖區(qū)為空將觸發(fā)OnComm事件。此屬性使您可以在發(fā)送數(shù)據(jù)后完成一系列任務(wù)。例如:您可以處理剛發(fā)送的數(shù)據(jù),并在串行端口與調(diào)制解調(diào)器通信時(shí)發(fā)送數(shù)據(jù),然后刪除線路連接、斷開(kāi)等。RThreshold:設(shè)置并返回未觸發(fā)OnComm事件時(shí)接收緩沖區(qū)允許的最大字符數(shù)。如果緩沖區(qū)中的字符數(shù)大于設(shè)置的值,則觸發(fā)OnComm事件;如果CommEvent設(shè)置為MSComm-ev-re
5、ceive,RThreshold=0,則不接收觸發(fā)器OnComm事件;如果RThreshold=1,則接收緩沖區(qū)中至少有一個(gè)字符,則觸發(fā)on comm事件。使用此屬性可以完成串行端口偵聽(tīng)數(shù)據(jù)的處理。2、使用通信控制示例Subform1-load()Form1 .showCOM1設(shè)定Comm1 .commport=1Comm1 .Setting= 9600,o,8,1 波特率3360000奇偶校驗(yàn),8位數(shù)據(jù),1位停止位Comm1 .Inputlen=0 讀取接收緩沖區(qū)中的所有字符Comm1 .OutBufferSize=512 將發(fā)送緩沖區(qū)設(shè)置為512字節(jié)Comm1 .InBufferSize=
6、512 將接收緩沖區(qū)設(shè)置為512字節(jié)Comm1 .SThreshold=0 禁止發(fā)送事件Comm1 .直到RThreshold=1 偵聽(tīng)緩沖區(qū),每個(gè)字符都會(huì)觸發(fā)偵聽(tīng)事件COM2設(shè)定Cmport=2Comm2。Setting=2400,e,8,1 波特率3360124偶,8位數(shù)據(jù),1位停止位Comm2。Inputlen=0 讀取接收緩沖區(qū)中的所有字符Comm2。OutBufferSize=512 將發(fā)送緩沖區(qū)設(shè)置為512字節(jié)Comm2。InBufferSize=512 將接收緩沖區(qū)設(shè)置為512字節(jié)Comm2。SThreshold=1 發(fā)送緩沖區(qū)null觸發(fā)發(fā)送事件Comm2。RT
7、hreshold=0 禁止接收事件打開(kāi)COM1,COM2Comm1 .Portopen=TrueComm2。Portopen=TrueTimer1 .interval=5000End Subsub com m1-on comm()Dim Inbuff as stringDim I as integer,n as integer,t as integer選擇事例Comm1。CommEvenCase MSComm-ev-receiveInbuff=Comm1。InputN=len (Inbuff)For I=1 to nT=Asc (Mid (Inbuff,I,1) or HFF打印f下一步IEn
8、d SelectEnd Subsub comm 2-on comm()選擇事例Comm2。CommEventCase MSComm-ev-send打印時(shí)間End SelectEnd SubSubtimer1-timer()Comm2。output=Second (Now)End sub第二,調(diào)用API函數(shù)以實(shí)現(xiàn)通信如上所述,了解VB控件的機(jī)制后,可以輕松地對(duì)串行端口執(zhí)行操作,但可以進(jìn)行移植性不好。但是,VB可以輕松調(diào)用API函數(shù)進(jìn)行通信。1、調(diào)用VB APIVB使用動(dòng)態(tài)鏈接庫(kù)DLL(動(dòng)態(tài)鏈接庫(kù))的功能大大擴(kuò)展了其功能。WINDOWS本身提供了API函數(shù),包括三個(gè)動(dòng)態(tài)鏈接庫(kù)(KERNEL庫(kù)、GD
9、I庫(kù)和USER庫(kù)),VB用戶可以直接調(diào)用它們。調(diào)用之前,必須在VB中聲明。此聲明可以是模塊級(jí)或表單級(jí),聲明為模塊級(jí)時(shí),其范圍為所有FORM和MODULE聲明為表單級(jí)時(shí),其聲明所在的FORM。VB調(diào)用DLL格式:Declare Sub過(guò)程名Lib庫(kù)名“aliAs”別名“byval參數(shù)As類型”Declare Function函數(shù)名Lib庫(kù)名別名byval參數(shù)As類型) As類型在聲明中,DECLARE表示聲明的DLL中的函數(shù),并且如果聲明是沒(méi)有返回值的過(guò)程,則使用SUB關(guān)鍵字并調(diào)用該函數(shù)如果有返回值,則必須使用FUNCTION關(guān)鍵字將其聲明為函數(shù),并在聲明語(yǔ)句后使用AS指示函數(shù)返回值的類型。LI
10、B關(guān)鍵字表示當(dāng)前聲明的過(guò)程或函數(shù)是由庫(kù)名稱指定的庫(kù)函數(shù),而不是VB本身。庫(kù)名稱是通信函數(shù)在USER庫(kù)中的相應(yīng)動(dòng)態(tài)鏈接庫(kù)的名稱。ByVal關(guān)鍵字將原始參數(shù)數(shù)據(jù)類型映射到VB類型。適用于WINDOWS的HELP文件WINSDK。HLP包含聯(lián)機(jī)函數(shù),完整的WINDOWS API函數(shù)信息,可用于查看數(shù)據(jù)結(jié)結(jié)構(gòu)和錯(cuò)誤消息。2、API提供的通信函數(shù)為了方便說(shuō)明,請(qǐng)將與通信相關(guān)的函數(shù)和相關(guān)數(shù)據(jù)結(jié)構(gòu)作為COMM.BAS放在全局模塊中(請(qǐng)參閱API編程函數(shù))是)。以下是這些函數(shù)的基本介紹。(1) opencomm (ipom name as string,wInQueue As Inte-ger,wOutQue
11、ue As Integer)以IP comname:“COMn”格式描述的設(shè)備名稱,n是設(shè)備編號(hào);WInQueue,wOutQueue:描述發(fā)送和接收緩沖區(qū)的大小(以字節(jié)為單位)。此函數(shù)調(diào)用成功返回打開(kāi)的設(shè)備編號(hào)。否則,返回表示錯(cuò)誤消息代碼的負(fù)數(shù)。(2) setcommstate (dcb到dcb IP)IpDCB: DCB結(jié)構(gòu)是DCB結(jié)構(gòu)容納設(shè)備所需的通信設(shè)置,如COMM.BAS中所示。其中dcb的ID成員必須標(biāo)識(shí)相應(yīng)的DCB設(shè)備。函數(shù)調(diào)用成功返回0;否則,返回值小于零。(3)ReadComm(nCid As Integer、IpBuf As String、nSize As Integer)
12、WriteComm(nCid As Integer,IpBuf As String,nSize As In-teger)用于讀取和寫入通信設(shè)備的函數(shù)。nCid:要讀取和寫入的通信設(shè)備編號(hào)說(shuō)明IpBuf:讀寫緩沖區(qū)nSize:要讀取和寫入的字節(jié)數(shù)。如果讀取和寫入成功,則返回讀取和寫入的字節(jié)數(shù),否則為小于0的值,絕對(duì)值為讀取和寫入的字節(jié)數(shù)。(4)Closecomm(nCid As Integer)此函數(shù)關(guān)閉nCid指定的通信設(shè)備,關(guān)閉分配給設(shè)備的傳輸以接收緩沖內(nèi)存,并且調(diào)用成功返回0。否則,返回值小于零。(5) buildcb (IP def as string,IpDCB As DCB)LpDe
13、f:指定MS-DOS中具有MODE命令使用的參數(shù)格式的字符串的設(shè)備控制信息。IpDCB: DCB數(shù)據(jù)結(jié)構(gòu)。此函數(shù)將IpDef字符串轉(zhuǎn)換為串行設(shè)備控制塊(DCB)代碼。(6) getcarmerror (ncid as integer,IpStat As COMSTAT)此函數(shù)確定nCid指定的設(shè)備的最新錯(cuò)誤值和當(dāng)前狀態(tài)。IpStat: COMM.BAS中定義的COMSTAT結(jié)構(gòu)。返回值是COMM.BAS中具有CE-的常量的組合。使用API函數(shù)編程示例本示例是將從鍵盤輸入的字符發(fā)送到COM端口的模擬發(fā)射器。向表單中添加COMMAND1按鈕以關(guān)閉通信端口。Type DCBId As String
14、3 1BaudRate As IntegerByteSize As String 3 1Parity As String 3 1StopBits As String 3 1RlsTimeout As IntegerCtsTimeout As IntegerDsrTimeout As IntegerBits1 As String 3 1Bits2 As String 3 1XonChar As String 3 1XoffChar As String 3 1XonLim As IntegerXoffLim As IntegerPeChar As String 3 1EofChar As Stri
15、ng 3 1EvtChar As String 3 1TxDelay As IntegerEnd TypeType COMSTATBits As String 3 1CbInQue As IntegerCbOutQue As IntegerEnd Type請(qǐng)參見(jiàn)Declare function open commlib“用戶”String,ByVal wInQueue As Integer,ByVal woutqueue As Integer)As IntegerDeclare function setcommstate lib“用戶”(dcb IP到dcb)As IntegerDeclare
16、 function readcomm lib和user-(ByVal ncid As Integer,ByVal IpBuf As String,ByVal nSize As Integer) As IntegerDeclare function writeomm lib和user-(ByVal ncid As Integer,ByVal IpBuf As String,ByVal nSize As Integer) As IntegerDeclare function closecommlib“用戶”as integer (byval ncid as integer)Declare function buildcb lib和用戶String,IpDCB As DCB) As IntegerDeclare function getcolummerlib和用戶Integer,I
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030東歐家電行業(yè)市場(chǎng)供需態(tài)勢(shì)演變與投資風(fēng)險(xiǎn)評(píng)估規(guī)劃分析文件
- 2025-2030東南稀土行業(yè)市場(chǎng)競(jìng)爭(zhēng)現(xiàn)狀分析及投資評(píng)估報(bào)告
- 2025-2030東南家電生產(chǎn)領(lǐng)域供需態(tài)勢(shì)演化及商業(yè)規(guī)劃分析
- 2025-2030東京鐘表儀制造業(yè)市場(chǎng)供需現(xiàn)狀評(píng)估及精密儀器研發(fā)投資
- 2025-2030東京出版行業(yè)市場(chǎng)現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 2026年叉車任考試題庫(kù)及參考答案
- 2026年叉車人員培訓(xùn)考試題庫(kù)及完整答案一套
- 2026年化工企業(yè)化工原料智能化工智能化工安全智能化工技術(shù)發(fā)展報(bào)告
- 全國(guó)碳排放管理師考試備考試題帶答案
- 2026年內(nèi)科醫(yī)院抗生素濫用應(yīng)急演練方案
- 安徽離任村干部管理辦法
- 2025年四川省宜賓市中考招生考試數(shù)學(xué)真題試卷(真題+答案)
- 人大預(yù)算監(jiān)督培訓(xùn)課件
- 公安交警隊(duì)和車輛管理所標(biāo)識(shí)制作及設(shè)置規(guī)范
- 高中數(shù)學(xué)北師大版講義(必修二)第02講1.2任意角3種常見(jiàn)考法歸類(學(xué)生版+解析)
- 醫(yī)療器械網(wǎng)絡(luò)銷售質(zhì)量管理規(guī)范宣貫培訓(xùn)課件2025年
- 2024法院書(shū)記員招聘筆試必考題含答案
- 地溝清理合同協(xié)議
- 2025年湖南省郴州市中考模擬英語(yǔ)試題(含答案含聽(tīng)力原文無(wú)音頻)
- 無(wú)損檢測(cè)考試題及答案
- 河南省2025屆高三下學(xué)期2月質(zhì)量檢測(cè)語(yǔ)文試卷(含答案)
評(píng)論
0/150
提交評(píng)論