基于vb的pc機雙串口通信技術(shù)研究的畢業(yè)設(shè)計_第1頁
已閱讀1頁,還剩35頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  1 緒論</b></p><p><b>  1.1 引言</b></p><p>  隨著互聯(lián)網(wǎng)的不斷發(fā)展,計算機間的相互通信已非常普遍,只要通過計算機的串行口就可以實現(xiàn)。串行通訊技術(shù)具有簡單且易實現(xiàn)的特性,許多設(shè)備和計算機都可以通過串口對外設(shè)進行控制、檢測。串口通訊日益成為計算機和外設(shè)進行通訊、獲取由外設(shè)采集到的

2、監(jiān)測數(shù)據(jù)的一個非常重要的手段[1]。而對于串口通信的編程軟件,微軟公司的Visual Basic 6.0(簡稱VB6.0)以其友好的開發(fā)界面、簡單易用、實用性強等優(yōu)點已在國內(nèi)外得到廣泛應(yīng)用。</p><p>  利用Visual Basic 開發(fā)串口通信程序既可以使用 MSComm 控件又可以調(diào)用Windows API函數(shù)[2]。不過,只要 MSComm 控件可以被選用,它幾乎總是推薦的選擇,因為 MSComm

3、控件的功能使用起來更加簡單。</p><p>  1.2 Visual Basic串口通信技術(shù)的研究背景與前景</p><p>  計算機一般提供了2個25針或者9針的RS-232標(biāo)準(zhǔn)串行口,簡稱COM1和COM2。我們還可以通過插通信卡來獲得額外的RS-232標(biāo)準(zhǔn)串行口[3]。利用這些串口可以與其他數(shù)字設(shè)備進行一般的數(shù)據(jù)通信,計算機串行接口主要應(yīng)用于遠(yuǎn)程通信和低速輸出設(shè)備。由于串行數(shù)據(jù)

4、通信傳輸線條數(shù)最少。而且有許多較便宜的專用芯片來實現(xiàn)它,發(fā)送和接受器也簡單。因而對數(shù)據(jù)傳輸速度不高的計算機和數(shù)字設(shè)備間的進程通信,多采用串行通信實現(xiàn)[4]。</p><p>  在MicrosoftWindows下開發(fā)串行通信使用串口通信組件如ActiveX控件MSComm.該方法比較簡單,對于Visual Basic,這就是最常用的方法。我們以MSComm控件作為底層接口,在此基礎(chǔ)上建立一個簡單的串行通信協(xié)議S

5、PCP,并由此實現(xiàn)了實時通信和文件傳輸功能。</p><p>  隨著計算機的迅速普及和計算機控制技術(shù)的發(fā)展,計算機被廣泛應(yīng)用于自動化控制領(lǐng)域之中。完成一個控制過程一般都要利用集散式計算機控制系統(tǒng)。在這種控制系統(tǒng)中,下位機主要完成對現(xiàn)場數(shù)據(jù)采集和對設(shè)備一級的監(jiān)控,上位機則要完成對整個系統(tǒng)的采集、分析、處理和控制以及數(shù)據(jù)、圖形顯示、打印、人機對話等工作[5]。上位機與下位機大多是通過PC機的RS-232串行接口實現(xiàn)

6、通信。隨著Windows系統(tǒng)的普及,使得數(shù)據(jù)采集及工業(yè)控制軟件也上升到了Windows環(huán)境下。這就給程序員提出了如何編寫面向Windows的串行通信程序問題。Visual Basic 6.0(以下簡稱VB)是一個Windows下簡單易學(xué)、高效的可視化軟件開發(fā)平臺,VB不但提供了良好的界面設(shè)計能力,而且在串口通信方面也有很強的功能。它提供的Microsoft Communication control(簡稱MSComm)通信控件,“隱藏”

7、了大部分串口通信的低層運行過程和許多繁瑣的過程,它使用戶能夠方便地訪問Windows下串口通信驅(qū)動程序的大多數(shù)特性。所以整個串行通信程序的開發(fā)過程變得十分簡單易行,程序員不需要處理繁瑣的細(xì)節(jié),利用該通信控件,只</p><p>  通信就是兩個設(shè)備之間的數(shù)據(jù)交換,是通過電信號來實現(xiàn)的。計算機工具箱和窗體上的MSComm控件是Microsoft公司提供的主要用于串行通信編程的ActiveX控件。VB6.0中的MSC

8、omm控件實際上是這些Windows API函數(shù)的有機集成,它以屬性和事件的形式提供了對Windows通信驅(qū)動程序的API接口,封裝了API函數(shù)的低層操作,為應(yīng)用程序提供了通過串行接口收發(fā)數(shù)據(jù)的簡便方法[8]。因此,編程人員只需在程序中設(shè)置和監(jiān)視MSComm控件的屬性和事件即可完成對串口的編程。MSComm控件不在最常用的控件工具箱中出現(xiàn),故編程的第一步應(yīng)添加到工具欄上以方便編程。具體的做法如下:單擊VB6.0菜單欄中的“工程”菜單,并

9、選擇“部件”命令,則彈出對話框。在部件對話框中選擇Microsoft Comm Control 6.0,在所需要控件前面的復(fù)選框上單擊,使復(fù)選框中出現(xiàn)“√”符號,說明已經(jīng)選中此控件。單擊“確定”,則響應(yīng)控件就加載進內(nèi)存,此時工具箱應(yīng)出現(xiàn)一個電話圖表,這就是MSComm圖標(biāo)。MSComm控件通過串行端口傳輸和接收數(shù)據(jù),為應(yīng)用程序提供串行通信功能。</p><p>  在計算機測控系統(tǒng)中,主控機一般采用PC或者IPC

10、,通過串口與測控模塊相連,測控模塊在連接相應(yīng)的傳感器和執(zhí)行器,如此形成一個簡單的雙層結(jié)構(gòu)的計算機測控系統(tǒng)。這種結(jié)構(gòu)主要用于單獨的中小型企業(yè)或者部門,如果屬于綜合型企業(yè)或者部門,如電力系統(tǒng)監(jiān)控,高速公路監(jiān)控和收費系統(tǒng),則可以此為基礎(chǔ)結(jié)構(gòu)進行擴充,用集線器將眾多雙層監(jiān)控系統(tǒng)連接起來,再用交換機將若干集線器連接起來,統(tǒng)一接上路由器,從而與INTERNET互聯(lián),如此即可形成一個龐大的計算機測控網(wǎng)絡(luò)。</p><p>&l

11、t;b>  2 串口通信</b></p><p>  串口是計算機上一種非常通用設(shè)備通信的協(xié)議。大多數(shù)計算機包含兩個基于RS232的串口。串口同時也是儀器儀表設(shè)備通用的通信協(xié)議;很多GPIB兼容的設(shè)備也帶有RS-232口。同時,串口通信協(xié)議也可以用于獲取遠(yuǎn)程采集設(shè)備的數(shù)據(jù)。</p><p>  串口通信的概念非常簡單,串口按位(bit)發(fā)送和接收字節(jié)。盡管比按字節(jié)(byt

12、e)的并行通信慢,但是串口可以在使用一根線發(fā)送數(shù)據(jù)的同時用另一根線接收數(shù)據(jù)。它很簡單并且能夠?qū)崿F(xiàn)遠(yuǎn)距離通信[10]。比如IEEE488定義并行通行狀態(tài)時,規(guī)定設(shè)備線總常不得超過20米,并且任意兩個設(shè)備間的長度不得超過2米;而對于串口而言,長度可達1200米。</p><p>  典型地,串口用于ASCII碼字符的傳輸。通信使用3根線完成:(1)地線,(2)發(fā)送,(3)接收。由于串口通信是異步的,端口能夠在一根線上

13、發(fā)送數(shù)據(jù)同時在另一根線上接收數(shù)據(jù)。其他線用于握手,但是不是必須的。串口通信最重要的參數(shù)是波特率、數(shù)據(jù)位、停止位和奇偶校驗。對于兩個進行通行的端口,這些參數(shù)必須匹配。</p><p>  2.1 串口通信的基本概念</p><p>  2.1.1 并行通信與串行通信</p><p>  終端與其它設(shè)備(如其他終端、計算機和外部設(shè)備)通過數(shù)據(jù)傳輸進行通信。數(shù)據(jù)傳輸可以

14、通過兩種方式進行,即并行通信和串行通信。</p><p><b>  1. 并行通信</b></p><p>  在計算機和終端之間的數(shù)據(jù)傳輸通常是靠電纜或信道上的電流或電壓變化實現(xiàn)的。如果一組數(shù)據(jù)的各數(shù)據(jù)位在多條線上同時被傳送,這種傳輸被稱為并行通信。</p><p>  并行數(shù)據(jù)傳送的特點是:各數(shù)據(jù)位同時傳送,傳送速度快、效率高,多用在實時

15、、快速的場合。</p><p>  并行數(shù)據(jù)傳送只適用于近距離的通信,通常小于30m。</p><p><b>  2. 串行通信</b></p><p>  串行通信是指通信的發(fā)送方和接收方之間的數(shù)據(jù)信息的傳輸是在單根數(shù)據(jù)線上,以每次一個二進制的0、1為最小單位逐位進行傳輸。</p><p>  串行數(shù)據(jù)傳送的特點是:

16、數(shù)據(jù)傳送按位順序進行,最少只需要一根傳輸線即可完成,節(jié)省傳輸線。與并行通信相比,串行通信還有較為顯著的特點,傳送距離長,可以從幾米到幾千米。在長距離內(nèi)串行數(shù)據(jù)傳送速率會比并行數(shù)據(jù)傳送速率快,串行通信的通信時鐘頻率容易提高,串行通信的抗干擾能力十分強,其信號間的互相干擾完全可以忽略。但是串行通信傳送速度比并行通信慢得多,并行通信時間為T,則串行時間為NT。</p><p>  2.1.2 串行通信工作模式</

17、p><p>  通過單線傳輸信息是串行數(shù)據(jù)通信的基礎(chǔ)。數(shù)據(jù)通常是兩個站(點對點)之間進行傳送,按照數(shù)據(jù)流的方向可分成3種傳送模式:單工、半雙工、全雙工。</p><p><b>  1. 單工形式</b></p><p>  單工形式的數(shù)據(jù)傳送是單向的。通信雙方中,一方固定為發(fā)送端,另一方則固定為接收端。信息只能沿一個方向傳送,使用一根傳輸線。單工

18、形式一般用在只向一個方向傳送數(shù)據(jù)的場合。</p><p><b>  2. 半雙工形式</b></p><p>  半雙工通信使用同一根傳輸線,即可發(fā)送數(shù)據(jù)又可接收數(shù)據(jù),但不能同時發(fā)送和接收。在任何時刻只能由其中的一方發(fā)送數(shù)據(jù)。另一方接收數(shù)據(jù)。因此半雙工形式既可以使用一條數(shù)據(jù)線,也可以使用兩條數(shù)據(jù)線,</p><p><b>  3.

19、 全雙工形式</b></p><p>  全雙工數(shù)據(jù)通信分別由兩根可以在不同的站點同時發(fā)送和接收的傳輸線進行傳送,通信雙方都能在同一時刻進行發(fā)送和接收操作。在全雙工方式中,每一端都有發(fā)送器和接收器,有兩條傳送線,可在交互式應(yīng)用和遠(yuǎn)程監(jiān)控系統(tǒng)中應(yīng)用,信息傳輸速率較高。</p><p>  在全雙工方式中,每一端都有發(fā)送器和接收器,有兩條傳輸線,可在交互式應(yīng)用和遠(yuǎn)程監(jiān)控系統(tǒng)中使用,

20、信息傳輸效率較高。</p><p>  2.1.3 異步傳輸與同步傳輸</p><p>  串行傳輸中,數(shù)據(jù)是一位一位按照到達的順序依次傳輸?shù)模课粩?shù)據(jù)位的發(fā)送和接收都需要時鐘來控制[12]。發(fā)送端通過發(fā)送時鐘確定數(shù)據(jù)為的開始和結(jié)束,接收端需要在適當(dāng)?shù)臅r間間隔對數(shù)據(jù)流進行采樣來正確的識別數(shù)據(jù)。接收端和發(fā)送端必須保持步調(diào)一致,否則數(shù)據(jù)傳輸就會出現(xiàn)差錯。為了解決以上問題,串行傳輸可采用以下兩

21、種方法:異步傳輸和同步傳輸[13]。</p><p><b>  1. 異步傳輸</b></p><p>  異步傳輸方式中,字符是數(shù)據(jù)傳輸單位。在通信的數(shù)據(jù)流中,字符間異步,字符內(nèi)部各位間同步。異步通信方式的“異步”主要體現(xiàn)在字符與字符之間通信沒有嚴(yán)格的定時要求。異步傳送中,字符可以是連續(xù)地、一個個地發(fā)送,也可以是不連續(xù)地,隨機地進行單獨發(fā)送。分為連續(xù)的串行數(shù)據(jù)發(fā)送

22、與斷續(xù)的串行數(shù)據(jù)傳送。</p><p><b>  2. 同步傳輸</b></p><p>  在同步傳輸方式中,比特塊以穩(wěn)定的比特流的形式傳輸,數(shù)據(jù)被封裝成更大的傳輸單位,稱為幀。每個幀中含有多個字符代碼,而且字符代碼與字符代碼之間沒有間隙以及起始位和停止位。與異步傳輸相比,數(shù)據(jù)傳輸單位的加長容易引起時鐘漂移。為了保證接收端能夠正常地區(qū)分?jǐn)?shù)據(jù)流中的每個數(shù)據(jù)位,收發(fā)雙

23、方必須通過某種方法建立起同步的時鐘??梢栽诎l(fā)送器和接收器之間提供一條獨立的時鐘線路,在線路的一端(發(fā)送器或者接收器)定期地在每個比特時間中向線路發(fā)送一個短脈沖信號,另一端則將這些有規(guī)律的脈沖作為時鐘。這種技術(shù)在短距離傳輸時表現(xiàn)良好,但在長距離傳輸中,定時脈沖可能會和信息信號一樣受到破壞,從而出現(xiàn)定時誤差。另一種方法是通過采用嵌有時鐘信息的數(shù)據(jù)編碼位向接收端提供同步信息。</p><p>  2.1.4 握手信號&

24、lt;/p><p>  握手信號實際上是控制信號,用來控制數(shù)據(jù)的傳送。通過握手信號,發(fā)送方可以通知接收方是否有數(shù)據(jù)要發(fā)送。接收方通過握手信號統(tǒng)治發(fā)送方是否已經(jīng)準(zhǔn)備好了接收信號。握手信號遵循某種協(xié)議。</p><p>  當(dāng)發(fā)送方和接收方處理數(shù)據(jù)的速度不一樣時,可能會造成數(shù)據(jù)丟失。</p><p><b>  1. 硬件握手</b></p>

25、;<p>  在硬件握手中,發(fā)送方通過將某一個導(dǎo)線拉到高電平或者低電平,來表示發(fā)送方可以發(fā)送數(shù)據(jù)。接收方已經(jīng)準(zhǔn)備好接收數(shù)據(jù)之后,也把某一個導(dǎo)線拉到高電平或者是低電平,來通知發(fā)送方,發(fā)送方一直在檢測這個信號。接收方可以再任何時候把這個信號變?yōu)闊o效,甚至是在接受一個數(shù)據(jù)塊過程中。當(dāng)發(fā)送方檢測到這個信號變?yōu)闊o效之后,就必須停止本次發(fā)送,知道這個信號變?yōu)橛行А?lt;/p><p><b>  2. 軟

26、件握手</b></p><p>  在軟件握手中,以數(shù)據(jù)線上的數(shù)據(jù)信號來代替實際的硬件電路。這種方法用在直接連接或者通過調(diào)制解調(diào)器連接的兩臺計算機之間進行雙向通信的場合。</p><p>  對于軟件握手現(xiàn)在已經(jīng)建立了一些標(biāo)準(zhǔn)協(xié)議,其中最常用的是通信協(xié)議。通信協(xié)議是指通信雙方的一種約定,約定包括對數(shù)據(jù)格式、同步方式、傳送速度、傳送步驟、檢糾錯方式以及控制字符定義等問題做出統(tǒng)一規(guī)

27、定。</p><p>  3. 硬件和軟件結(jié)合的握手方法</p><p>  如果使用個人計算機或終端通過調(diào)制解調(diào)器和主計算機進行通信,那么調(diào)制解調(diào)器使用硬件握手方法和個人計算機聯(lián)系,主計算機和調(diào)制解調(diào)器之間也使用硬件握手方法,主計算機和個人計算機之間將使用軟件握手方法進行聯(lián)系。因此,個人計算機必須要編程,僅當(dāng)調(diào)制解調(diào)器的DSR(有時可能使用CD)線電位變高和軟件停止信號沒有收到時,軟件才

28、送出一個通知信號。</p><p>  一些計算機自動檢測硬件握手信號,這些計算機等待硬件握手信號變高以后送出一個字符,所以程序只需要處理軟件握手信號。</p><p>  2.1.5 通信參數(shù)</p><p>  串行端口的通信方式是將字節(jié)拆分成一個接著一個的位再傳送出去。接到此電位信號的一方再將此一個一個的位組合成原來的字節(jié),如此形成一個字節(jié)的完整傳送。<

29、/p><p>  在傳輸進行的過程中,雙方明確傳送信息的具體方式,否則雙方就沒有一套共同的譯碼方式,從而無法了解雙方所傳過來的信息的意義。因此雙方為了進行通信,必須遵守一定的通信規(guī)則,這個共同的規(guī)則就是通信端口的初始化。</p><p>  通信端口的初始化必須對以下幾項參數(shù)進行設(shè)置。</p><p>  1. 數(shù)據(jù)的傳輸速度</p><p> 

30、 串行通信的傳輸受到通信雙方配備性能及通信線路的特性所左右,收、發(fā)雙方必須按照同樣的速率進行串行通信,即收、發(fā)雙方采用同樣的數(shù)據(jù)傳輸率。數(shù)據(jù)傳輸率指的是串行通信中每一秒所傳送的數(shù)據(jù)位數(shù),單位是bit/s。經(jīng)??梢钥吹絻x器或Modem的規(guī)格書上都寫著19200bit/s、38400bit/s……,所指的就是數(shù)據(jù)傳輸率。</p><p>  2. 數(shù)據(jù)的傳送單位</p><p>  一般串行通

31、信端口所傳送的數(shù)據(jù)是字符型,若用來傳輸文件,則會使用二進制的數(shù)據(jù)類型。當(dāng)使用字符型時,工業(yè)界使用到的有ASCⅡ字符碼及JIS字符碼;ASCⅡ使用了8位形成一個字符,而JIS碼則以7位形成一個字符。不同的情形下(依據(jù)使用的協(xié)議),會使用到不同的傳輸單位。使用多少位合成一個字節(jié)必須先行確定。</p><p><b>  3. 奇偶校驗位</b></p><p>  在串口

32、通信中一種簡單的檢錯方式。有四種檢錯方式:偶、奇、高和低。當(dāng)然沒有校驗位也是可以的。對于偶和奇校驗的情況,串口會設(shè)置校驗位(數(shù)據(jù)位后面的一位),用一個值確保傳輸?shù)臄?shù)據(jù)有偶個或者奇?zhèn)€邏輯高位。例如,如果數(shù)據(jù)是011,那么對于偶校驗,校驗位為0,保證邏輯高的位數(shù)是偶數(shù)個。如果是奇校驗,校驗位位1,這樣就有3個邏輯高位。高位和低位不真正的檢查數(shù)據(jù),簡單置位邏輯高或者邏輯低校驗。這樣使得接收設(shè)備能夠知道一個位的狀態(tài),有機會判斷是否有噪聲干擾了通

33、信或者是否傳輸和接收數(shù)據(jù)是否不同步。</p><p><b>  4. 停止位</b></p><p>  用于表示單個包的最后一位。典型的值為1,1.5和2位。由于數(shù)據(jù)是在傳輸線上定時的,并且每一個設(shè)備有其自己的時鐘,很可能在通信中兩臺設(shè)備間出現(xiàn)了小小的不同步。因此停止位不僅僅是表示傳輸?shù)慕Y(jié)束,并且提供計算機校正時鐘同步的機會。適用于停止位的位數(shù)越多,不同時鐘同步的

34、容忍程度越大,但是數(shù)據(jù)傳輸率同時也越慢。</p><p>  2.2 RS-232串口通信標(biāo)準(zhǔn)</p><p>  RS-232-C是美國電子工業(yè)協(xié)會EIA(Electronic Industry Association)制定的一種串行物理接口標(biāo)準(zhǔn)。RS是英文“推薦標(biāo)準(zhǔn)”的縮寫,232為標(biāo)識號,C表示修改次數(shù)。RS-232-C總線標(biāo)準(zhǔn)設(shè)有25條信號線,包括一個主通道和一個輔助通道。如信號電

35、平、信號線功能、電氣特性、機械特性等都做了明確規(guī)定。</p><p>  2.2.1 電氣特性</p><p>  首先,RS-232-C標(biāo)準(zhǔn)最初是遠(yuǎn)程通信連接數(shù)據(jù)終端設(shè)備DTE(Data Terminal Equipment)與數(shù)據(jù)通信設(shè)備DCE(Data Communication Equipment)而制定的。因此這個標(biāo)準(zhǔn)的制定,并未考慮計算機系統(tǒng)的應(yīng)用要求。但目前它又廣泛地被借來用

36、于計算機(更準(zhǔn)確的說,是計算機接口)與終端或外設(shè)之間的近端連接標(biāo)準(zhǔn)。顯然,這個標(biāo)準(zhǔn)的有些規(guī)定及和計算機系統(tǒng)是不一致的,甚至是相矛盾的。有了對這種背景的了解,我們對RS-232C標(biāo)準(zhǔn)與計算機不兼容的地方就不難理解了。</p><p>  其次,RS-232C標(biāo)準(zhǔn)中所提到的“發(fā)送”和“接收”,都是站在DTE立場上,而不是站在DCE的立場來定義的。由于在計算機系統(tǒng)中,往往是CPU和I/O設(shè)備之間傳送信息,兩者都是DTE

37、,因此雙方都能發(fā)送和接收。</p><p>  RS-232C對電器特性、邏輯電平和各種信號線功能都作了規(guī)定。 </p><p>  在TXD和RXD上:邏輯1(MARK)=-3V~-15V/ 邏輯0(SPACE)=+3~+15V</p><p>  在RTS、CTS、DSR、DTR和DCD等控制線上: </p><p>  信號有效(接通,

38、ON狀態(tài),正電壓)=+3V~+15V </p><p>  信號無效(斷開,OFF狀態(tài),負(fù)電壓)=-3V~-15V </p><p>  以上規(guī)定說明了RS-323C標(biāo)準(zhǔn)對邏輯電平的定義。對于數(shù)據(jù)(信息碼):邏輯“1”(傳號)的電平低于-3V,邏輯“0”(空號)的電平高于+3V;對于控制信號;接通狀態(tài)(ON)即信號有效的電平高于+3V,斷開狀態(tài)(OFF)即信號無效的電平低于-3V,也就是當(dāng)

39、傳輸電平的絕對值大于3V時,電路可以有效地檢查出來,介于-3~+3V之間的電壓無意義,低于-15V或高于+15V的電壓也認(rèn)為無意義,因此,實際工作時,應(yīng)保證電平在±(3~15)V之間。</p><p>  2.2.2 接口連接器</p><p>  由于RS-232C并未定義連接器的物理特性,因此,出現(xiàn)了DB-25和DB-9各種類型的連接器,其引腳的定義也各不相同?,F(xiàn)在計算機上一

40、般只提供DB-9連接器,都為公頭。相應(yīng)的連接線上的串口連接器也有公頭和母頭之分。</p><p>  作為多功能I/O卡或主板上提供的COM1和COM2兩個串行接口的DB-9連接器,它只提供異步通信的9個信號引腳,見圖2.1,各針腳的信號功能描述見表2.1。</p><p>  圖 2.1 DB9串口連接器</p><p>  表2.1 9針串行口的陣腳功能&l

41、t;/p><p>  2.2.3 近距離通信線路連接</p><p>  當(dāng)兩臺RS-232C串口設(shè)備通信距離較近(<15m)時,可以用電纜線直接將來臺設(shè)備的RS-232C端口連接,若通信距離較遠(yuǎn)(>15m)時,需附加調(diào)制解調(diào)器(Modem)。</p><p>  在RS-232C的應(yīng)用中,很少嚴(yán)格按照RS-232C標(biāo)準(zhǔn)。其主要原因是因為許多定義的信號在大

42、多數(shù)的應(yīng)用中并沒有用上。</p><p>  當(dāng)通信距離較近時,通信雙方不需要Modem,可以直接連接,這種情況下,只需要少數(shù)幾根信號線。最簡單的情況,在通信中根本不需要RS-232C的控制聯(lián)絡(luò)信號,只需3根線(發(fā)送線、接收線、信號地線)便可實現(xiàn)全雙工異步串行通信。</p><p>  三線連接是兩臺串口通信設(shè)備之間的最簡單連接,接收腳與發(fā)送腳交叉連接是因為在直連方式時,把通信雙方都當(dāng)做數(shù)

43、據(jù)終端設(shè)備看待,雙方都可發(fā)也可收。</p><p>  2.3 計算機中的串行端口</p><p>  在PC機上,有各種各樣的接頭,其中有兩個9針的接頭區(qū),見圖2.2,這就是串行通信端口。PC機上的串行接口有多個名稱:RS-232C口、串口、通信口、COM口、異步口等。</p><p>  圖2.2 PC機上的串行端口</p><p> 

44、 2.3.1 查看串行端口信息</p><p><b>  1查看設(shè)備信息</b></p><p>  進入Windows系統(tǒng),單擊“我的電腦”彈出系統(tǒng)屬性對話框,單擊“硬件”項,在“設(shè)備管理器”列表中有端口COM和LPT設(shè)備信息,見圖2.3所示。</p><p>  圖2.3 查看端口設(shè)備信息</p><p>  2

45、 查看端口屬性</p><p>  選擇通信端口COM1,單擊右鍵,選擇“屬性”,可以查看端口的低級配置(見圖2.4)及其資源(見圖2.5)。在端口設(shè)置選項卡中,可以看到缺省的數(shù)據(jù)傳輸率和其他設(shè)置,這些設(shè)置可以再端口設(shè)置中改變,也可以在應(yīng)用程序中很方便地修改。</p><p>  圖2.4 查看端口設(shè)置</p><p>  圖2.5 查看端口資源</p

46、><p>  2.3.2 串行端口的中斷</p><p><b>  1.中斷概述</b></p><p>  中斷即IRQ(Interrupt Request)。CPU一般情況下是連續(xù)進行工作,一旦外圍設(shè)備(如打印機、串行端口等)需要CPU處理事件時,就會通過硬件線路(即中斷線路)來通知CPU。CPU收到通知后,就會停下正在進行的工作,轉(zhuǎn)而去執(zhí)

47、行外設(shè)的請求。</p><p>  IRQ由中斷控制器(8259A)處理,每一個中斷控制器有8個中斷輸入?,F(xiàn)在的系統(tǒng)一般有兩個中斷控制器,以功能處理16個中斷,從IRQ0到IRQ15。由于第二個中斷控制器需要接收第一個中斷控制器的一個輸入,這樣第一個中斷控制器就被占用了一個中斷輸入,因此,中斷控制器實際上只能處理15個中斷。表2.2表示了15個中斷設(shè)置。</p><p>  表2.2 中

48、斷設(shè)置</p><p>  中斷請求的流程如下。</p><p> ?。?)由設(shè)備發(fā)出中斷請求</p><p> ?。?)8259A收到中斷請求</p><p> ?。?)檢查此中斷的優(yōu)先級來決定是否把中斷送給CPU</p><p> ?。?)等到CPU接受此中斷,然后向8259A送出信號</p><

49、;p> ?。?)中斷的參數(shù)由8259A發(fā)送給CPU</p><p> ?。?)通過中斷參數(shù)可以得到中斷服務(wù)程序的入口地址</p><p> ?。?)CPU執(zhí)行終端服務(wù)程序</p><p>  2. 查看計算機內(nèi)的中斷</p><p>  進入Windows系統(tǒng)中,以此打開“我的電腦”和“設(shè)備管理器”項,在“查看”菜單項選擇“依照類型排序

50、資源”,打開中斷請求(IRQ)項,可以看到計算機中各設(shè)備的中斷分配信息,如圖2.6所示。</p><p>  圖2.6 查看計算機內(nèi)設(shè)備中斷信息</p><p>  2.3.3 串行端口的地址</p><p><b>  1.地址概述</b></p><p>  在計算機內(nèi),每個設(shè)備都有一個地址。當(dāng)CPU需要傳送信息

51、或者是從外圍設(shè)備讀取信息時,必須知道信心在什么地方,這個地方就是外圍設(shè)備的地址。在計算機內(nèi)部使用16進制的方式記錄每個外圍設(shè)備的地址,每個設(shè)備的地址都是不一樣的,這樣才能保證信息的讀寫不會出錯。一個設(shè)備所要占用的地址號碼可能不止一個,如果需要占用多個地址,那么所占用的地址一般情況連續(xù)的。</p><p>  1.查看計算機內(nèi)的地址</p><p>  進入Windows系統(tǒng)中,以此打開“我

52、的電腦”和“設(shè)備管理器”項,在“查看”菜單項選擇“依照類型排序資源”,打開輸入/輸出(I/O)項,可以看到計算機中各段設(shè)備的地址分配信息,如圖2.7所示。</p><p>  圖2.7 查看計算機內(nèi)的設(shè)備地址信息</p><p>  1.串行端口的地址及寄存器</p><p>  COM1與COM2的地址是3F8~3FF和2F8~2FF,在這個范圍內(nèi)每個地址都有不

53、同的功能,這些功能分別通過寄存器來實現(xiàn)。寄存器是用來暫時存放信息的地方,這些信息以位的形式存儲,一般以一個字節(jié)作為一個單位。讀寫寄存器就是讀取這些位所代表的狀態(tài)或控制某些功能,讀寫這些寄存器就可以執(zhí)行與串行端口相關(guān)的功能。</p><p>  2.4 串口通信測試</p><p>  在進行串口開發(fā)之前,一般要進行串口測試,經(jīng)常使用的工具是“串口測試助手”程序。它是一個適用于Window

54、s平臺的串口監(jiān)視、串口測試程序。它可以在線設(shè)置各種通信速率、通信端口等參數(shù),既可以發(fā)送字符串命令,也可以發(fā)送文件,可以設(shè)置自動發(fā)送/手動發(fā)送方式,可以十六進制顯示接收到的數(shù)據(jù)等,從而提高串口開發(fā)效率。</p><p>  以PC機與XMT-3000A智能儀表串口通信為例介紹“串口測試助手”的使用。</p><p>  2.4.1 系統(tǒng)連接</p><p>  觀察

55、所用計算機主機箱后RS-232C串口的數(shù)量、位置和幾何特征,查看計算機與智能儀表的串口連接線及其端口。在計算機與智能儀表通電前,按圖2.8所示將傳感器Cu50、上、下限報警器指示燈與XMT-3000智能儀表連接,通過串口線將計算機與智能儀表連接起來,線路檢查無誤后接通電源。</p><p>  圖2.8 PC機與智能儀器串口通信線路</p><p>  2.4.2 溫度測量與控制<

56、;/p><p>  溫度測量與控制具體實施步驟:</p><p> ?。?)正確設(shè)置儀表參數(shù)后,儀表PV窗顯示當(dāng)前溫度測量值。</p><p> ?。?)給傳感器升溫,當(dāng)溫度測量大于上限報警值30℃時,上限指示燈L2亮,儀表SV窗顯示上限報警信息。</p><p> ?。?)給傳感器降溫,當(dāng)溫度測量值小于上限報警值30℃,大于下限20℃時,上限指

57、示燈L2和下限L1均滅。</p><p>  (4)給傳感器繼續(xù)降溫,當(dāng)溫度測量值小于下限報警值20℃時,下限指示燈L1亮,儀表SV窗下限報警信息。</p><p>  2.4.3 計算機串口設(shè)置</p><p>  進入Windows系統(tǒng),單擊“我的電腦”項,彈出系統(tǒng)屬性對話框,在“設(shè)備管理器”列表中有端口COM和LPT設(shè)備信息,選中通訊端口COM1,查看其屬性

58、,在COM1端口屬性的端口設(shè)置選項中,將其數(shù)據(jù)傳輸率(即每秒位數(shù))設(shè)為4800,停止位設(shè)為2,見圖2.9。</p><p>  圖2.9 計算機通訊端口(COM1)設(shè)置</p><p>  2.4.4 串口程序的使用</p><p>  XMT-3000A智能儀表使用異步串行通信接口,采用RS-232C通信方式,其數(shù)據(jù)格式為:1個起始位,8個數(shù)據(jù)位,無校驗位,2

59、個停止位。</p><p>  打開“串口測試助手”程序,首先設(shè)置串口號、數(shù)據(jù)傳輸率、校驗位、數(shù)據(jù)位、停止位等參數(shù),選擇十六進制顯示和十六進制發(fā)送方法:打開串口。</p><p>  在“發(fā)送的字符/數(shù)據(jù)”文本框中輸入讀指令,單擊“手動發(fā)送”按鈕,則PC機向儀表發(fā)送一條指令,儀表返回一串,該串?dāng)?shù)據(jù)在返回信息框內(nèi)顯示。</p><p>  3 Visual Basi

60、c與串口通信</p><p>  Visual Basic是一般程序設(shè)計人員在Windows環(huán)境下最常用的串口編寫程序語言。</p><p>  利用Visual Basic 開發(fā)串口通信程序主要有兩種方法:一是使用MSComm串口控件,二是調(diào)用Windows API函數(shù)。</p><p>  在實踐中,使用Visual Basic串口控件實現(xiàn)通信的方法比調(diào)用API

61、動態(tài)鏈接庫的方法更加方便、快捷,而且用較少的代碼可以實現(xiàn)相同的功能,從而使編程效率大大提高,也較少了因為編程不當(dāng)而導(dǎo)致的系統(tǒng)不穩(wěn)定。</p><p>  3.1 MSComm控件</p><p>  MSComm控件全稱為Microsoft Communications Control,是Microsoft公司提供的ActiveX控件,目的是為了簡化Windows下串行通信編程,它既可以

62、用來提供簡單的串行端口通信功能,也可以用來創(chuàng)建功能完備的、事件驅(qū)動的高級通信工具。</p><p>  3.1.1 MSComm控件處理通信的方式</p><p>  MSComm控件通過串行端口傳輸和接收數(shù)據(jù),為應(yīng)用程序提供串行通信功能。它提供下列兩種處理通信的方式</p><p><b>  1. 事件驅(qū)動方式</b></p>

63、<p>  事件驅(qū)動通訊是處理串行端口交互作用的一種非常有效的方法。在許多情況下,在事件發(fā)生時需要得到通知,例如,在串口接收緩沖區(qū)中有字符,或者 Carrier Detect (CD) 或 Request To Send (RTS) 線上一個字符到達或一個變化發(fā)生時。在這些情況下,可以利用 MSComm 控件的 OnComm 事件捕獲并處理這些通訊事件。OnComm 事件還可以檢查和處理通訊錯誤。所有通訊事件和通訊錯誤的列

64、表,參閱 CommEvent 屬性。</p><p><b>  2. 查詢方式</b></p><p>  在程序的每個關(guān)鍵功能完成之后,可以通過檢查CommEvent屬性的值來查詢事件和錯誤。如果應(yīng)用程序較小,并且是自保持的,這種方法可能是更可取。例如,如果寫一個簡單的電話撥號程序,則沒有必要對每接收一個字符都產(chǎn)生事件,因此惟一等待接收的字符是調(diào)制解調(diào)器的“OK”

65、響應(yīng)。</p><p>  3.1.2 MSComm控件的引用</p><p><b>  1.控件添加</b></p><p>  開始一個項目的設(shè)計時,Visual Basic 的工具箱中會有許多默認(rèn)的控件讓設(shè)計者選用,這些原本就出現(xiàn)在工具箱中的控件是內(nèi)置控件,它提供了一些基本的系統(tǒng)設(shè)計組件給設(shè)計者,不過,功能比較特別的控件就不會出現(xiàn)在其中

66、,如設(shè)計通信功能的控件MSComm就不在其中。</p><p>  由于Visual Basic的串行通信組件不在工具箱中,當(dāng)需要MSComm控件時,首先要把它加入到工具箱中。如圖3.1所示。</p><p>  圖3.1 添加MSComm串口通信控件</p><p>  工具箱中有了MSComm控件,就可以選擇MSComm控件的圖標(biāo)后將其加到程序窗體上,利用該控件

67、PC機就可以通過Visual Basic 實現(xiàn)與串口設(shè)備的串口通信了。</p><p><b>  2. 控件操作</b></p><p>  在使用Visual Basic 所提供的串行功能之前,必須對Visual Basic 的MSComm控件做一個了解,以便可以將串行通信的概念應(yīng)用上去。</p><p>  3.1.3 MSComm控件

68、的常用屬性</p><p>  利用MSComm控件實現(xiàn)計算機通信的關(guān)鍵是理解并正確設(shè)置MSCornm控件眾多屬性和方法。該控件常用的屬性和方法有:</p><p> ?。?)CoramPort:用于設(shè)置或返回通信連接端口號碼,必須在打開端口之前設(shè)置 CommPort 屬性</p><p> ?。?)Settings:用于設(shè)置或返回初始化參數(shù),即波特率、奇偶校驗位、

69、數(shù)據(jù)位和停止位。</p><p> ?。?)PortOpen:用于設(shè)置或返回返回通信連接端口的狀態(tài)。使用前必須將要使用的串行接口先行打開,而在使用完畢之后,也必須執(zhí)行關(guān)閉操作。</p><p> ?。?)Input:用于從輸入緩存區(qū)返回并刪除字符。程序靠該命令將對方傳到輸入緩存區(qū)中的字符讀進來,并清除緩存區(qū)中已被讀取的字符。在設(shè)計階段時無效,運行階段時為只讀。</p><

70、;p>  (5)InputLen:確定被Input屬性讀取的字符數(shù)。</p><p> ?。?)OutPut:用于將一個字符串寫入輸出緩存區(qū).在設(shè)計階段時無效,運行階段時為只讀。</p><p> ?。?)InputMode:用于設(shè)置或返回Input屬性取回的數(shù)據(jù)形態(tài)。該屬性值有0或1,分別對應(yīng)文本形式或二進制式。</p><p> ?。?)CommEvent

71、:在通信錯誤或事件發(fā)生時都會產(chǎn)生OnComm事件,CommEvent屬性存有該錯誤或事件的數(shù)值碼。(這也是此控件唯一的事件)</p><p> ?。?)InBufferCount:用于返回在接收緩存區(qū)中的字符數(shù)。該屬性在設(shè)計階段無法使用,如果把該屬性值設(shè)置為O,以清除接收緩存區(qū)。</p><p>  3.1.4 MSComm控件的事件</p><p>  根據(jù)應(yīng)用

72、程序的用途和功能,在連接到其他設(shè)備的過程中,以及接收或發(fā)送數(shù)據(jù)過程中,可能需要監(jiān)視并響應(yīng)一些事件和錯誤</p><p>  可以使用和OnComm事件和commEvent屬性捕捉并檢查通信事件和錯誤的值。commEvent屬性返回最近的通信事件或錯誤,該屬性在設(shè)計時無效,在運行時為只讀。</p><p>  3.1.5 MSComm控件通信步驟</p><p> 

73、 通常以下面的步驟來使用Visual Basic的MSComm控件作為通信控制:</p><p> ?。?)加入通信部件,也就是MSComm對象。</p><p> ?。?)設(shè)置通信端口號嗎,即CommPort屬性。</p><p> ?。?)設(shè)置通信協(xié)議,即HandShaking屬性。</p><p> ?。?)設(shè)置傳輸速度等參數(shù),即Set

74、tings屬性。</p><p> ?。?)設(shè)置其他參數(shù),若必要時再加上其他的屬性設(shè)置。</p><p> ?。?)打開通信端口,即PortOpen屬性設(shè)成True。</p><p> ?。?)送出字符串或讀入字符串,使用Input及Output屬性。</p><p> ?。?)使用完MSComm通信對象后,將通信端口關(guān)閉,即PortOpen

75、屬性設(shè)成False。</p><p>  遵循以上步驟,可以構(gòu)建自己的串行通信傳輸系統(tǒng)了。</p><p>  3.2 API函數(shù)</p><p>  Visual Basic目前已成為Windows系統(tǒng)下一種高效靈活的主流開發(fā)工具致以,調(diào)用API應(yīng)用程序接口正是對Visual Basic功能的強有力的補充,它使得Visual Basic能夠直接控制和處理PC硬件

76、資源,而不必依賴于MS-DOS系統(tǒng)服務(wù)。正是借助于API使得Visual Basic既能隱藏大部分Windows編程的難點,同時又使用了Windows編程環(huán)境的靈活性。</p><p>  Windows的API包括了串行通信的函數(shù),因而在串行通信中,調(diào)用API接口是Visual Basic編程實現(xiàn)控制串行口硬件簡便可行的解決方案。</p><p>  3.2.1 動態(tài)鏈接庫與API函數(shù)&

77、lt;/p><p>  動態(tài)鏈接分為兩個階段,即鏈接過程和裝入過程。</p><p>  API函數(shù),即Application Program Interface (應(yīng)用程序接口),是Windows操作系統(tǒng)提供應(yīng)用程序調(diào)用的由C語言編寫一組函數(shù)組合。Windows操作系統(tǒng)包含1000多個經(jīng)過嚴(yán)格測試的功能強大的API 函數(shù),共程序開發(fā)人員編程時直接調(diào)用,它在VB變成中的作用就是增請VB的編程能

78、力,實現(xiàn)VB語言不能實現(xiàn)的特殊功能。它包括的類型:系統(tǒng)服務(wù)(功能:用于對計算機和操作系統(tǒng)資源的訪問),窗口管理(功能:建立和管理應(yīng)用程序,以及系統(tǒng)的所有輸入和輸出),圖形設(shè)備接口(功能:管理系統(tǒng)支持的所有圖形設(shè)備),多媒體(功能:播放波形音頻 MIDI音樂 和數(shù)字?jǐn)z影)。</p><p>  API函數(shù)的使用:在32位操作系統(tǒng)中API函數(shù)被稱為 Win32 API 。在VB中API函數(shù)和內(nèi)部函數(shù)的使用是有差別

79、的:API函數(shù)必須在模塊的聲明段中聲明后才能使用(就像內(nèi)部函數(shù)一樣使用),而未經(jīng)聲明的API函數(shù)是不能調(diào)用的。只是他們的唯一差別,但它們的本質(zhì)是一樣的:都是函數(shù),供編程人員隨時調(diào)用,以實現(xiàn)特定的功能。API 函數(shù)就動態(tài)鏈接庫中的函數(shù),當(dāng)調(diào)用他們時,總是要涉及到一些參量的,還有它應(yīng)有的一些定量。Windows操作系統(tǒng)是由幾個核心的動態(tài)鏈接庫構(gòu)成的,見表3.1。</p><p>  表3.1 Windows核心動態(tài)鏈

80、接庫</p><p>  3.2.2 Visual Basic與動態(tài)鏈接庫</p><p>  在Visual Basic中使用動態(tài)數(shù)據(jù)庫,是擴展Visual Basic的功能、充分發(fā)揮Windows系統(tǒng)性能的重要手段。用戶可以在Visual Basic應(yīng)用程序中調(diào)用這些動態(tài)鏈接庫中的函數(shù),通過它們使用和管理Windows系統(tǒng)環(huán)境及硬件設(shè)備。</p><p>  

81、3.2.3 用API文本瀏覽器聲明API函數(shù)</p><p><b>  1.API函數(shù)聲明</b></p><p>  只有對函數(shù)聲明之后,才可以把API函數(shù)等同于Visual Basic自己的函數(shù)來使用。在調(diào)用時,Visual Basic將根據(jù)聲明確定參數(shù)個數(shù),并運行類型檢查。</p><p>  API函數(shù)的聲明通過Declare語句來實

82、現(xiàn)。當(dāng)要調(diào)用的API函數(shù)有返回值時,在Visual Basic作為Function過程聲明,如果沒有返回值則作為Sub過程聲明。</p><p>  API函數(shù)有以下兩種格式。</p><p><b>  格式1:</b></p><p>  Declare sub API函數(shù)名Lib"庫名"[Alias"別名&q

83、uot;]([參數(shù)列表])</p><p><b>  格式2:</b></p><p>  Declare Function API函數(shù)名Lib"庫名"[Alias"別名"]([參數(shù)列表])AS類型</p><p><b> ?。?)API函數(shù)名</b></p>&l

84、t;p>  “API函數(shù)名”指的是DLL中的函數(shù)名,同時也是Visual Basic應(yīng)用程序中使用的過程名,即在Visual Basic聲明的過程名與DLL中的函數(shù)名是相同的。</p><p><b> ?。?)庫名</b></p><p>  “庫名”指的是函數(shù)所在的動態(tài)鏈接庫,即DLL文件的名稱。</p><p> ?。?)別名(Al

85、ias)</p><p>  用Alias選項可以為要使用的API函數(shù)設(shè)置別名。</p><p><b> ?。?)參數(shù)列表</b></p><p>  用來指定傳送給API函數(shù)的參數(shù)??梢愿鶕?jù)函數(shù)的要求(即形參)傳送多個函數(shù),每個參數(shù)具有如下的格式:[Byval]參數(shù)As類型。</p><p>  2.API文本瀏覽器

86、</p><p>  用API文本瀏覽器可以瀏覽含有API信息的聲明、常量和類型,它們存放在文本文件或jet數(shù)據(jù)庫中,可以將這些信息拷貝到剪貼板中,然后粘貼到Visual Basic代碼中。</p><p> ?。?)啟動API瀏覽器</p><p>  啟動API瀏覽器有兩種方法:</p><p> ?、僭赪indows操作系統(tǒng)環(huán)境下啟動&

87、lt;/p><p> ?、谠赩isual Basic環(huán)境下啟動</p><p>  圖3.2 API瀏覽器</p><p> ?。?)加載API文件</p><p>  在Visual Basic中,與API文件有關(guān)的信息包括類型、聲明和常量存放在兩個文本文件中。</p><p>  C:\Program Flies\Mi

88、crosoft Visual Studio\Common\Tools\WinAPI</p><p>  API瀏覽器可以讀取文本文件或jet數(shù)據(jù)庫文件。為了加載API文件,可執(zhí)行“文件”菜單中的“加載文本文件”命令,而為了裝入jet數(shù)據(jù)庫API文件,可執(zhí)行“文件”菜單中的“加載數(shù)據(jù)庫文件”命令。</p><p>  在裝入API文本文件或數(shù)據(jù)庫文件后,可以查看文件中的聲明、常量或類型,也可

89、以把它們拷貝到Visual Basic代碼中。</p><p> ?。?)查看聲明、常量或類型</p><p>  單擊API閱覽器中“API類型”下拉列表框中右端的箭頭,如圖3.3從中選擇“常數(shù)”、“聲明”或“類型”,即可在“可用項”列表框中列出相應(yīng)的項目。</p><p>  圖3.3 選擇要顯示的項目類型</p><p><b&g

90、t; ?。?)拷貝聲明</b></p><p>  為了把指定的項目拷貝到Visual Basic代碼中,必須先在“可用項”列表框中找到項目,并選擇該項目(即把條形光標(biāo)移到該項目上),然后單擊“添加”按鈕,即可把該項目拷貝到“選定項”列表框內(nèi)。</p><p> ?。?)拷貝常量和類型</p><p><b> ?、倏截惓A?lt;/b>

91、</p><p>  API函數(shù)中某些參數(shù)的取值有一定的限制,如mouse_event函數(shù)的第一個參數(shù)為dwflags,它可以取9種值(即9個標(biāo)志)。</p><p>  有些參數(shù)的取值比較多,可能有十幾個、幾十個甚至更多。如果在調(diào)用API函數(shù)時都能用到,則可以用一個枚舉類型來定義它們的值。</p><p><b> ?、诳截愵愋?lt;/b><

92、;/p><p>  API函數(shù)一般用C語言編寫,要用到C語言中的一些數(shù)據(jù)類型。調(diào)用API函數(shù)時,這些類型不是Visual Basic中的基本類型,必須在Visual Basic中定義它們。這和參數(shù)一樣,可以通過API瀏覽器拷貝。為了用API瀏覽器拷貝類型,應(yīng)在“API類型”下拉列表框中選擇“類型”項,其他操作與拷貝聲明或拷貝常量相同。</p><p>  3.2.4 與串口通信有關(guān)的API函數(shù)

93、</p><p>  與串口通信有關(guān)的API函數(shù)均在\Windows\system32子目錄下的USER.EXE動態(tài)鏈接庫中。</p><p>  3.3 直接訪問端口</p><p>  從最底層訪問串口的方法是直接讀寫端口的寄存器。Visual Basic中沒有提供直接讀寫I/O端口的函數(shù)和方法,但可以借助其他語言來編寫DLL,然后在Visual Basic中調(diào)

94、用。在C語言里有inp和outp函數(shù)可以直接對端口進行讀寫操作,因此可以先用C語言編寫程序,編譯生成DLL,然后在Visual Basic調(diào)用它。</p><p>  4 利用MSComm控件實現(xiàn)PC雙串口互通信</p><p>  所用的硬件和軟件清單見表4.1</p><p>  表4.1 所用軟、硬件</p><p>  4.1 串口

95、通訊連接圖</p><p><b>  線路說明</b></p><p>  如果一臺計算機有兩個串口,可通過串口線將兩個串口連接起來:COM1端口的TXD與COM2端口的RXD相連,COM1端口的RXD與COM2端口的TXD相連,COM1端口的GND與COM2端口的GND相連,使用串口通信設(shè)備之間的最簡單連接(即三線連接)。見圖4.1。</p><

96、;p>  圖4.1串口通訊設(shè)備之間的連接</p><p><b>  4.2 程序設(shè)計</b></p><p>  4.2.1 程序界面設(shè)計</p><p>  運行Visual Basic 6.0,創(chuàng)建標(biāo)準(zhǔn)的工程項目文件,設(shè)計程序窗體。</p><p> ?。?)添加兩個TextBox控件,用于輸入要發(fā)送的字

97、符和顯示需要接收的字符。 </p><p> ?。?)添加兩個Label控件,作為發(fā)送和接收字符區(qū)的標(biāo)簽。</p><p> ?。?)添加一個Timer控件,用于周期性地讀取串口數(shù)據(jù)。</p><p> ?。?)添加3個CommandButton控件,分別執(zhí)行發(fā)送字符、接收字符、關(guān)閉程序等命令。</p><p>  程序設(shè)計界面見圖4.2&

98、lt;/p><p>  4.2 程序窗體界面</p><p>  4.2.2 屬性設(shè)置</p><p>  程序窗體、控件對象的主要屬性設(shè)置見表4.2</p><p>  表4.2 窗體、控件對象的主要屬性設(shè)置</p><p>  4.2.3 程序代碼設(shè)計</p><p><b>  

99、' 串口初始化</b></p><p>  ' 串口1與串口2的通信參數(shù)應(yīng)一致</p><p>  Private Sub Form_Load()</p><p>  MSComm1.CommPort = 1 ' 設(shè)置通信端口號為COM1</p><p>  MSComm1

100、.Settings = "9600,n,8,1" ' 設(shè)置串口1參數(shù)</p><p>  MSComm1.InputMode = 0 ' 接收文本型數(shù)據(jù)</p><p>  MSComm1.PortOpen = True ' 打開通信端口1</p>&l

101、t;p>  MSComm2.CommPort = 2 ' 設(shè)置通信端口號為COM2</p><p>  MSComm2.Settings = "9600,n,8,1" ' 設(shè)置串口2參數(shù)</p><p>  MSComm2.InputMode = 0 ' 接收

102、文本型數(shù)據(jù)</p><p>  MSComm2.PortOpen = True ' 打開通信端口2</p><p><b>  End Sub</b></p><p>  ' 把字符通過串口發(fā)送出去</p><p><b>  ' 啟動定時器</b&g

103、t;</p><p>  Private Sub Cmdsend_Click()</p><p>  MSComm1.Output = Trim(Textsend.Text)</p><p>  Timer1.Enabled = True</p><p><b>  End Sub</b></p><

104、p><b>  ' 接收字符</b></p><p>  Private Sub Timer1_Timer()</p><p><b>  Dim buf$</b></p><p>  Timer1.Enabled = False</p><p>  buf = Trim(MSComm

105、2.Input) ' 將緩沖區(qū)內(nèi)的數(shù)據(jù)讀入buf變量中</p><p>  If Len(buf) = 0 Then ' 判斷緩沖區(qū)內(nèi)是否存在數(shù)據(jù)</p><p>  TextReceive.Text = ""</p><p><b>  Else

106、</b></p><p>  TextReceive.Text = buf</p><p><b>  End If</b></p><p><b>  End Sub</b></p><p><b>  ' 停止程序運行</b></p>&l

107、t;p>  Private Sub Cmdquit_Click()</p><p><b>  Unload Me</b></p><p><b>  End Sub</b></p><p><b>  ' 關(guān)閉通信端口,</b></p><p>  Privat

108、e Sub Form_Unload(Cancel As Integer)</p><p>  MSComm1.PortOpen = False</p><p>  MSComm2.PortOpen = False</p><p><b>  End Sub</b></p><p>  4.2.4 運行程序</p&g

109、t;<p>  程序設(shè)計、調(diào)試完畢,執(zhí)行菜單“運行/啟動”命令或單擊工具欄快捷按鈕“啟動”,運行程序</p><p>  1 首先在程序窗體中發(fā)送字符區(qū)輸入要發(fā)送的字符,單擊“發(fā)送字符”按鈕,發(fā)送區(qū)的字符串通過COM1口3管腳發(fā)送出去。</p><p>  2 在程序窗體中單擊“接收字符”按鈕,COM1口傳送過來的字符串就可以COM2端口的管腳2輸入緩沖區(qū)并讀入,顯示在接收區(qū)

110、中。</p><p>  程序運行界面見圖4.3。</p><p>  圖4.3 程序運行界面</p><p><b>  總 結(jié)</b></p><p>  隨著計算機的廣泛使用,市場上很多電器產(chǎn)品應(yīng)用串口通信技術(shù)作為對外數(shù)據(jù)交換的橋梁,串口通信受到如此重視,主要原因是這個簡單而且容易實現(xiàn)。</p>&

111、lt;p>  本文介紹了串口通信的基本概念,RS-232串口通信標(biāo)準(zhǔn)、計算機中的串行端口和利用Visual Basic開發(fā)串口通信的兩種方法:使用MSComm串口控件,和調(diào)用Windows API函數(shù)。</p><p>  本文實現(xiàn)了在Windows環(huán)境下利用VB6.0中MSComm控件編寫Visual Basic串行通信控件編程的方法實現(xiàn)PC機雙串口通信。</p><p><

112、b>  參考文獻</b></p><p>  [1] 李華.單片機通用接口技術(shù)[M].北京:北京航空航天大學(xué)出版社,1999</p><p>  [2] 楊毓,李明.Visual Basic6.0實用開發(fā)教程[M].成都:電子科技大學(xué)出版社,2001.</p><p>  [3] 王義祥.mcs-96單片機原理與應(yīng)用[M].北京:兵器工業(yè)出版社,1

113、994</p><p>  [4] 王子恢,戴健鵬.C語言大全.北京:電子工業(yè)出版社,2001</p><p>  [5] 劉圣才,李春葆.Visual Basic程序設(shè)計導(dǎo)學(xué) 清華大學(xué)出版社.2002年1月 </p><p>  [6] 范逸之,陳立元. Visual Basic與RS-232串行通信控制(最新版).清華大學(xué)出版社.2002[7] 鄭晟,鞏

溫馨提示

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

評論

0/150

提交評論