2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩35頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

35、平、信號(hào)線(xiàn)功能、電氣特性、機(jī)械特性等都做了明確規(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)而制定的。因此這個(gè)標(biāo)準(zhǔn)的制定,并未考慮計(jì)算機(jī)系統(tǒng)的應(yīng)用要求。但目前它又廣泛地被借來(lái)用

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

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

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

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

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

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

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

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

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

45、 查看端口屬性</p><p>  選擇通信端口COM1,單擊右鍵,選擇“屬性”,可以查看端口的低級(jí)配置(見(jiàn)圖2.4)及其資源(見(jiàn)圖2.5)。在端口設(shè)置選項(xiàng)卡中,可以看到缺省的數(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ù)進(jìn)行工作,一旦外圍設(shè)備(如打印機(jī)、串行端口等)需要CPU處理事件時(shí),就會(huì)通過(guò)硬件線(xiàn)路(即中斷線(xiàn)路)來(lái)通知CPU。CPU收到通知后,就會(huì)停下正在進(jìn)行的工作,轉(zhuǎn)而去執(zhí)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

74、tings屬性。</p><p> ?。?)設(shè)置其他參數(shù),若必要時(shí)再加上其他的屬性設(shè)置。</p><p> ?。?)打開(kāi)通信端口,即PortOpen屬性設(shè)成True。</p><p> ?。?)送出字符串或讀入字符串,使用Input及Output屬性。</p><p>  (8)使用完MSComm通信對(duì)象后,將通信端口關(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)下一種高效靈活的主流開(kāi)發(fā)工具致以,調(diào)用API應(yīng)用程序接口正是對(duì)Visual Basic功能的強(qiáng)有力的補(bǔ)充,它使得Visual Basic能夠直接控制和處理PC硬件

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

95、通訊連接圖</p><p><b>  線(xiàn)路說(shuō)明</b></p><p>  如果一臺(tái)計(jì)算機(jī)有兩個(gè)串口,可通過(guò)串口線(xiàn)將兩個(gè)串口連接起來(lái):COM1端口的TXD與COM2端口的RXD相連,COM1端口的RXD與COM2端口的TXD相連,COM1端口的GND與COM2端口的GND相連,使用串口通信設(shè)備之間的最簡(jiǎn)單連接(即三線(xiàn)連接)。見(jiàn)圖4.1。</p><

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

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

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

99、' 串口初始化</b></p><p>  ' 串口1與串口2的通信參數(shù)應(yīng)一致</p><p>  Private Sub Form_Load()</p><p>  MSComm1.CommPort = 1 ' 設(shè)置通信端口號(hào)為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 ' 打開(kāi)通信端口1</p>&l

101、t;p>  MSComm2.CommPort = 2 ' 設(shè)置通信端口號(hào)為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 ' 打開(kāi)通信端口2</p><p><b>  End Sub</b></p><p>  ' 把字符通過(guò)串口發(fā)送出去</p><p><b>  ' 啟動(dòng)定時(shí)器</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>  ' 停止程序運(yùn)行</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 運(yùn)行程序</p&g

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

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

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

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

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論