




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、闡述VB串口編程技術要領摘要:串口通信因為其簡單,靈活易用,在許多領域有著廣闊的應用前景。本文在深入了解串口通訊技術的基礎上,結合自身的工程實踐經驗,闡述了VB串口編程的技術要點。并結合一個通訊實例,分析通訊的具體實現(xiàn),給相關領域的研究人員提供值得參考的信息。 關鍵詞:串口;RS232;API;Pcomm;Mscomm;通信程序 現(xiàn)在通訊方式越來越多,速度越來越快,但串行通訊由于自身價格低、協(xié)議透明、硬件投資少、軟件編程簡單等諸多優(yōu)點在遠程數(shù)據(jù)采集、監(jiān)視、通信及控制領域里一直占據(jù)著極其重要的地位。它不僅沒有因為時代的進步而被淘汰,反而在規(guī)格上越來越完善、應用越來越廣,長久不衰。 一、串口通信的
2、通信機理 PC串行通信是指直接對串行端口的UART(PC機的通用異步收發(fā)器,也叫異步通信適配器,是PC機用于異步通信的接口)進行編程實現(xiàn)的通信。PC機每個UART中的INS8250中有10個可編程的單字節(jié)寄存器,可用于控制、監(jiān)視操作串行端口,COM1的寄存器地址3F8H-3FEH,COM2的寄存器地址為2F8H-2FEH。10個寄存器由7個地址訪問,其中5個寄存器的訪問條件是先設置3FBH線路控制寄存器的最高位為“1”,該位也稱為DLAB狀態(tài)位。 一般說來,PC機都有一個或多個串行端口,它們依次為Com1、Com2。這些串口提供了外部設備與PC進行數(shù)據(jù)傳輸和通信的通道,在CPU和外設之間充當了
3、解釋器的角色。當字符數(shù)據(jù)從CPU發(fā)送給外設時,這些字符數(shù)據(jù)將被轉換成串行比特流數(shù)據(jù);而當接受數(shù)據(jù)時,從外界進來的比特流數(shù)據(jù)被轉換成字符數(shù)據(jù)傳遞給CPU進行處理。在操作系統(tǒng)方面,Windows用通信驅動程序(COMM.DRV)調用API函數(shù)發(fā)送和接受數(shù)據(jù)。當用通信控件或聲明調用API函數(shù)時,它們由COMM.DRV解釋并傳遞給設備驅動程序。 作為一個VB程序員,要編寫串口通信程序,只需知道通信控件提供給Windows通信API函數(shù)的接口即可,換言之,只需設定和監(jiān)視通信控件的屬性和時間即可。 二、串行通訊接口RS-232 前一章節(jié)討論了串口通訊的通信機理,但為了實現(xiàn)具體的數(shù)據(jù)采集、監(jiān)視、通信功能,必
4、須了解具體的串口形式。目前使用最廣泛的串行接口有兩種:RS-232和RS-485。本文著重討論RS-232,RS-485不作介紹。 RS-232C標準的全稱是EIA-RS-232C標準,其中EIA代表美國電子工業(yè)協(xié)會,RS代表推薦標準,232是標識號,C代表RS232的最新一次修改(1969年),在這之前,有RS232A、RS232B協(xié)議。它規(guī)定連接電纜和機械、電氣特性、信號功能及傳送過程。EIA-RS-232C定義了按位串行傳輸?shù)臄?shù)據(jù)終端設備(DTE)和數(shù)據(jù)通訊設備(DCE)之間的接口信息。RS-232C是從DTE或計算機串行接口角度來定義引腳信號的。 目前RS-232是PC機與通信工業(yè)中應
5、用最廣泛的一種串行接口。RS232被定義為一種在低速率串行通訊中增加通訊距離的單端標準。RS232采取不平衡傳輸方式,即所謂的單端通訊。 DB9(9針串口)的接線方式如下:1腳,數(shù)據(jù)載波檢測DCD;2腳,接收數(shù)據(jù)RXD;3腳,發(fā)送數(shù)據(jù)TXD;4腳,數(shù)據(jù)終端準備DTR;5腳,信號地GND;6腳,數(shù)據(jù)設備就緒DSR;7腳,請求發(fā)送RTS;8腳,清除發(fā)送CTS;9腳,振鈴指示DELL。 DB25(25陣串口),常用的針腳也有9個,且和DB9可以一一對應,具體接線方式為:8腳,數(shù)據(jù)載波檢測DCD;3腳,接收數(shù)據(jù)RXD;2腳,發(fā)送數(shù)據(jù)TXD;20腳,數(shù)據(jù)終端準備DTR;7腳,信號地GND;6腳,數(shù)據(jù)設備
6、就緒DSR;4腳,請求發(fā)送RTS;5腳,清除發(fā)送CTS;22腳,振鈴指示DELL。 一般來說,對于要求不太高的場合,使用接收數(shù)據(jù)RXD,發(fā)送數(shù)據(jù)TXD,信號地GND三個腳即可實現(xiàn)數(shù)據(jù)傳輸。如果要求有硬件流控制,則必須使用DTR、DSR、RTS和CTS這四個腳。 值得注意的是RS-232C是用正負電壓來表示邏輯狀態(tài),與TTL以高電平表示邏輯狀態(tài)的規(guī)定不同。因此,為了能夠與計算機接口或終端的TTL器件連接,必須在RS-232C與TTL電路之間進行電平和邏輯關系的變換。目前較為廣泛地使用集成電路轉換器件,如MC1489、SN75150芯片可完成TTL電平到EIA電平的轉換,而MC1489、SN751
7、54可實現(xiàn)EIA電平到TTL電平的轉換。 三、三種讀取串口數(shù)據(jù)的方式 目前通用的串口通訊的軟件實現(xiàn)方式有3種,本文都進行詳細的介紹,它們各有自身的優(yōu)缺點,讀者在編程時可根據(jù)具體的情況選擇合適的方式。 3.1利用Mscomm控件 VB提供的這個通信控件“隱藏”了大部分串口通信的底層運行過程,程序員只需編寫少量的代碼就可以完成軟件的開發(fā)過程。在通信數(shù)據(jù)量不大,通信要求不是很高的情況下建議采取此方式。 利用Mscomm控件實現(xiàn)通信最需要掌握的就是它的幾個主要屬性,下面選取其中重要的進行介紹,其余的可以參考相關資料。 (1)Settings屬性:以字符串的形式設置并返回波特率、奇偶校驗位、數(shù)據(jù)位、停止
8、位。這個屬性很重要,針對不同的終端設備需要根據(jù)設備的具體情況進行調整(比如日本的設備不同于美國的設備,通常會采用奇校驗)。 (2)InputMode屬性:設置接收數(shù)據(jù)的類型,0為文本格式,1為二進制格式。 (3)Input屬性:讀取并刪除接收緩沖區(qū)中的數(shù)據(jù)流。 (4)Output屬性:向發(fā)送緩沖區(qū)傳送一數(shù)據(jù)流。 (5)Rthreshold屬性:該屬性為一閥值,它確定當接收緩沖區(qū)內的字節(jié)個數(shù)達到或超過該值后就產生代碼為ComEvReceive的OnComm事件。 (6)Handshaking屬性:設置和返回握手協(xié)議,即計算機內部CPU與串口之間的通訊協(xié)議,保證在緩沖區(qū)過載時數(shù)據(jù)不會丟失。這個屬性
9、在保證數(shù)據(jù)傳輸?shù)恼_性方面有很大的作用,共有四個選項,分別表示:無流控制;軟件流控制;硬件流控制;軟硬件流控制。采用硬件流控時,要求串口之間和電纜支持硬件握手,在自己制作串口通信線時,有關硬件握手的線RTS、CTS、DSR、DTR要連接正確。 在正確設置這些屬性的基礎上,剩下的就是打開串口,通過串口發(fā)送及接受數(shù)據(jù)了。本文后續(xù)章節(jié)利用一個實例詳細講解了這些屬性的設置及具體代碼。 3.2直接調用Win32API通信函數(shù) 直接調用WindowsAPI函數(shù),可以清楚地理解串口通信的機制,根據(jù)需要靈活地配置串口的各種參數(shù)和屬性,而且直接調用低層API函數(shù),通信效率比較高,但付出的代價就是程序較復雜,編程
10、周期長,適合于大型通信程序及通訊質量要求較高的場合。 在32位的Windows系統(tǒng)中,串口通信是作為文件處理的,串口操作一般為打開、關閉、讀取、寫入等操作,相應的WindowsAPI函數(shù)如下: (1)CreateFile()函數(shù):實現(xiàn)串口的初始化并打開串口,返回串口句柄資源以供后續(xù)進程調用。 (2)CloseFile()函數(shù):關閉串口,串口是非共享資源,應用程序以獨占方式使用,通信結束應立即關閉。 (3)ReadFile()函數(shù):從串口輸入緩沖區(qū)讀取數(shù)據(jù)流。 (4)WriteFile()函數(shù):向串口輸出緩沖區(qū)發(fā)送數(shù)據(jù)。 (5)GetCommState()函數(shù):獲取串口的當前配置。 (6)Set
11、CommState()函數(shù):重新分配串口資源的各個參數(shù)。 由于WindowsAPI函數(shù)大部分是用C或C+編寫,所以在VisualBasic6.0中調用WindowsAPI函數(shù)之前必須先在模塊級代碼上用Declare語句對所調用的函數(shù)和用到的數(shù)據(jù)結構進行聲明,具體的函數(shù)聲明及數(shù)據(jù)結構請參考朱友芹編新編WindowsAPI參考大全。 3.3調用第三方函數(shù)庫(如Pcomm函數(shù)庫) DLL(DynamicLinkLibrary)動態(tài)鏈接庫是一種可以被VB語言調用的程序模塊。DLL中包含的可執(zhí)行代碼不能單獨執(zhí)行,而應由Windows應用程序調用執(zhí)行。一般數(shù)據(jù)采集卡的供應商都會提供該采集卡的DLL庫函數(shù),
12、使用這些DLL庫函數(shù),可以做到程序代碼共享,減少程序的編寫工作量。用戶不需要知道這些代碼的實現(xiàn)細節(jié),只需要了解調用函數(shù)的參數(shù)和函數(shù)處理后的返回值。 Pcomm函數(shù)庫是由臺灣Moxa公司為開發(fā)串口通信程序提供的一套函數(shù)庫。通過對WindowsAPI函數(shù)的進一步封裝,提供50多個串口操作函數(shù)。覆蓋了Windows操作系統(tǒng)下幾乎所有異步通信的問題,可以簡潔的開發(fā)多線程通訊程序。采用該庫,通信的可靠性與使用MSComm32控件比較有了明顯提高,而相對直接使用Win32API函數(shù)編程則降低了程序開發(fā)難度,縮短了程序開發(fā)周期。 這種方式上述直接調用WindowsAPI函數(shù)有相似之處,但也有明顯的差異。AP
13、I函數(shù)常采取的方法是在串口監(jiān)視線程中設置串口通信事件掩碼及重疊機制,允許程序在后臺等待串口通信事件。通過WaitCommEvent檢測特定的串行通信事件。而在Pcomm中,可以采用中斷處理的方式,為各種事件指定相應的中斷處理函數(shù),如接收到一定數(shù)目的字符,接收到結束字符,接收到中止信號以及發(fā)送緩沖區(qū)為空等;同時還可以采用線程控制的方式,直接采用庫中的sio_read()和sio_write()函數(shù)讀寫串口。 Pcomm.DLL中的函數(shù)按功能分為6項:端口設置、數(shù)據(jù)發(fā)送與接收、串口狀態(tài)檢測、事件服務、文件傳輸、雜項。Pcomm.DLL中主要的函數(shù)介紹如下。 sio_open:打開端口;sio_cl
14、ose:關閉端口。 sio_ioctl:設置端口參數(shù),如波特率等。 sio_read:從端口接收數(shù)據(jù);sio_write向端口發(fā)送數(shù)據(jù)。 sio_iqueue:得到接收緩沖區(qū)中的數(shù)據(jù)長度。 sio_oqueue:得到發(fā)送緩沖區(qū)中的數(shù)據(jù)長度。 Pcomm在串口通信中的功能十分強大,但基于篇幅的考慮,在此不便贅述,讀者可參考相關書籍或Pcomm自帶的幫助文檔。 四、串口通訊的錯誤及處理 由于外界干擾或電壓波動等原因,串口通訊可能會出現(xiàn)錯誤,如接受緩沖區(qū)溢出,奇偶校驗錯誤等。為了處理這些錯誤,在Mscomm控件中就提供了一個OnComm事件,它可以捕獲通信時發(fā)生的串口事件和錯誤信息,自動轉入事件處理
15、程序。在OnComm事件中,CommEvent屬性是OnComm事件的指示,下面簡單介紹幾個重要的CommEvent屬性值。 ComEventBreak:表示收到一個中斷信號; ComEventFrame:表示硬件檢測到一個數(shù)據(jù)幀錯誤; ComEvenRxover:表示接收緩沖區(qū)溢出; ComEventTxFull:表示輸出緩沖區(qū)已滿; ComEvReceive:表示接手到了Rthreshold個字符; ComEvEOF:表示接受到了EOF字符(ASCII字符26)。 編程時用SelectCase語句,根據(jù)不同的CommEvent屬性值,去執(zhí)行不同的處理程序。 除了以上所述的通訊錯誤外,在串口
16、通信時,如果數(shù)據(jù)傳輸突然中斷,對串口的讀寫操作可能會進入無限期的等待狀態(tài),為避免這種情況發(fā)生,必須設置串口讀寫操作的等待時間,等待超時后,串口的讀寫操作將被主動放棄,這樣即使數(shù)據(jù)傳輸突然中斷程序也不會被掛起或阻塞。可以根據(jù)具體要求規(guī)定串口讀寫操作的最長時間值,即串口讀寫必須在這段時間內完成,否則提示串口操作失敗。 五、串口通訊實例 本實例是一個采集設備電流及功率的通訊程序,采集儀為橫河WT230數(shù)字功率計,因為要采集的數(shù)據(jù)量不大,且工程結構簡單,故采用Mscomm控件的形式進行串口讀寫操作。 具體實現(xiàn)步驟如下: (1)在窗體Form上添加兩個重要的控件:Timer1和Mscomm1; (2)在
17、程序的Form_Load事件過程中添加如下代碼: mPort=1使用COM1端口 MSComm1.Setting=“9600,o,8,1”設置通信口參數(shù),注意是奇校驗,具體的校驗方式要視具體的儀器而定 MSComm1.InputMode=comInputModeBinary設置接收模式為二進制形式,注意一般對于數(shù)據(jù)采集這類設備通信,都應該設置為二進制形式 MSComm1.PortOpen=True參數(shù)設置好后打開端口 MSComm1.HandShaking=2-comRTS設置為硬件流控制,可以有效避免數(shù)據(jù)丟失的情況發(fā)生 (3)程序開始后在一定情況設置Timer1.Enabled屬性值為Tru
18、e激活Timer1_Time事件,可以在固定的時間間隔下執(zhí)行Timer1_Timer過程中的代碼程序,完成數(shù)據(jù)采集。在Timer1_Timer過程中添加如下代碼: MSComm1.Output=“COMMUNICATE:WAIT1”+Chr(13)+Chr(10) MSComm1.Output=“MEASURE:NORMAL:VALUE?”+Chr(13)+Chr(10) 上述語句是將讀取指令發(fā)送到串口輸出緩沖區(qū)(注意每個命令字符串后都要加上回車和換行符Chr(13)+Chr(10),再由系統(tǒng)將其自動發(fā)送給通過RS232通信線與計算機端口連接的WT230數(shù)字功率計,功率計在接收到命令字符串后,
19、經過自身的單片機處理,就自動地把它測到的電壓、電流、功率數(shù)據(jù)以固定的格式和字符形式通過RS232通信線傳回至計算機,計算機程序從輸入緩沖區(qū)讀取這些字符數(shù)據(jù)并利用VB字符處理函數(shù)(如Val,InStr)進行處理就得到了所要的數(shù)據(jù),下面是具體的程序代碼。 Dimbytinput()asbyte注意要將bytinput定義為不定長數(shù)組 DimstrtemAsString DimiasInteger bytinput=MSComm1.Input將輸入緩沖區(qū)數(shù)據(jù)讀入給字節(jié)型數(shù)組bytinput Fori=0ToUBound(bytinput) strtem=strtem+Chr(bytinput(i)字節(jié)數(shù)組中的ASCII碼值轉換成
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廠房施工合同范本
- 合作合租協(xié)議合同范本
- 卷閘門安裝安全合同范本
- 光伏安裝勞務居間合同范本
- 2024-2025學年黑龍江省鶴崗市蘿北縣高一上冊9月月考數(shù)學檢測試題(含解析)
- 語文科德育滲透工作總結
- 卡車債權轉讓合同范例
- 下班意外合同范例
- 勞務裝修工合同范例
- 儲備人才崗位合同范例
- 《田野調查方法》課件
- 火電工程達標投產考核標準(2024版)
- 2024年云南省中考物理真題含解析
- 《信號工程施工》課件全套 穆中華 項目1-3 信號圖紙識讀、施工技能訓練、信號聯(lián)鎖試驗
- 全新網(wǎng)絡安全教案:應對2024年網(wǎng)絡威脅
- 江蘇省蘇州市2023-2024學年八年級上學期期末語文試題及答案
- 2024年新疆區(qū)公務員錄用考試《行測》真題及解析
- 音樂課《詠鵝》教案7篇
- 【2×600MW火電廠電氣部分設計(論文)16000字】
- 醫(yī)學教程 常見動物咬蟄傷應急救護課件
- 中學校園廣播聽力系統(tǒng)管理制度
評論
0/150
提交評論