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

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  基于C++的RS232通信</p><p><b>  協(xié)議模擬終端</b></p><p>  Analog Terminal The RS232 Communication </p><p>  Protocol Based On C++</p><p>  2013 年 06 月</p&

2、gt;<p><b>  摘 要</b></p><p>  隨著科技的迅猛發(fā)展,通信技術(shù)已經(jīng)成為社會(huì)經(jīng)濟(jì)、環(huán)境、生活、工作、學(xué)習(xí)不可缺少的一部分。通信的方式多種多樣,以何種方式實(shí)現(xiàn)通信主要取決于通信設(shè)備。在工業(yè)控制系統(tǒng)和實(shí)驗(yàn)室中,由于串行通信具有實(shí)現(xiàn)簡(jiǎn)單、使用靈活方便等優(yōu)點(diǎn),串行通信是計(jì)算機(jī)與外部設(shè)備進(jìn)行數(shù)據(jù)通信時(shí)經(jīng)常使用的方式之一。</p><p&

3、gt;  圍繞串行通信技術(shù),本文主要介紹了串行通信接口——RS232標(biāo)準(zhǔn)串口,闡述了RS232串行通信基本原理和CRC校驗(yàn),通過VC界面編程實(shí)現(xiàn)串行通信。傳輸過程中通過CRC對(duì)數(shù)據(jù)進(jìn)行校驗(yàn)。</p><p>  在研究RS232串行通信原理中,主要介紹了RS232標(biāo)準(zhǔn)協(xié)議、串口以及串口通信原理。詳細(xì)的分析了幾種主要的通信參數(shù)。按照其工作原理及RS232串口的標(biāo)準(zhǔn)協(xié)議最終采用串行全雙工的方式實(shí)現(xiàn)其通信,本文中的接口

4、使用的是計(jì)算機(jī)上的USB口。</p><p>  在軟件實(shí)現(xiàn)方面,本設(shè)計(jì)在比較了多種方法之后,最終選擇了基于C++的MFC應(yīng)用程序。利用 MSComm ActiveX 串行通信控件來實(shí)現(xiàn)串行通信。文中詳細(xì)地介紹了VC下的Windows平臺(tái)先進(jìn)的 ActiveX 控件技術(shù),即MSComm控件等。最終實(shí)現(xiàn)了兩臺(tái)PC間的串行通信。</p><p>  串行通信以其成本低、結(jié)構(gòu)簡(jiǎn)單等優(yōu)點(diǎn)被人們廣泛

5、應(yīng)用。用RS-232協(xié)議實(shí)現(xiàn)兩臺(tái)PC機(jī)間的串行通信為以后實(shí)現(xiàn)更加復(fù)雜的設(shè)備間通信奠定了基礎(chǔ)。</p><p>  關(guān)鍵詞:RS232標(biāo)準(zhǔn);串行通信;C++;CRC校驗(yàn)</p><p><b>  Abstract</b></p><p>  With the rapid development of science and technology

6、, communication technology has become an indispensable part of social economy,environment,living and learning. There are many kinds of communication modes.The selection of communication mode mainly depends on the communi

7、cation equipment.In industrial control systems and laboratory.Serial communication is widely used in computer and external equipment due to the simple and flexible advantage.</p><p>  Around serial communica

8、tion technology, this paper mainly introduces the serial communication interface - RS232 serial port, and expounds the basic principle of RS232 serial communication and CRC check.Finally, realize serial communication thr

9、ough VC programming. During the process of transmission through the CRC to check the data.</p><p>  In the study of RS232 serial communication principle, this design mainly introduces the principle of serial

10、 communication, serial port and RS232 protocol,and analyzes communication parameters in detail.Considering RS232 serial port and working principle,this design adopted to serial full-duplex mode to realize communication.I

11、n this article ,the interface is the USB port on the PC. </p><p>  In the aspect of software realization,this design select the MFC application program based on C++ after several methods are compared.To real

12、ize the serial communication by using MSComm ActiveX serial communication control.This article introduces the ActiveX control technology--MSComm control.Finally,the design realize serial communication between two compute

13、rs.</p><p>  Because of the advantages of low cost and simple structure,serial communication is widely used by people.Realization of serial communication between two PC machine is the foundation of realizing

14、 more complex communication.</p><p>  Keywords: motor; RS232protocol; Serial Communications; C++; CRC Cyclic Redundancy Check</p><p><b>  目 錄</b></p><p><b>  摘

15、 要I</b></p><p>  AbstractII</p><p><b>  第1章 緒論1</b></p><p>  1.1 課題的研究意義1</p><p>  1.2 研究現(xiàn)狀及發(fā)展趨勢(shì)2</p><p>  1.2.1 RS232串行通信的研究現(xiàn)狀2&

16、lt;/p><p>  1.2.2 RS232串行通信的發(fā)展趨勢(shì)2</p><p>  1.3 本文主要的研究?jī)?nèi)容2</p><p>  第2章串行通信基本原理4</p><p>  2.1 RS232通信協(xié)議4</p><p>  2.1.1 RS232標(biāo)準(zhǔn)4</p><p>  2.1

17、.2 RS232接口4</p><p>  2.2 串行通信5</p><p>  2.2.1 串行通信基本原理5</p><p>  2.2.2 串行通信參數(shù)6</p><p>  2.2.3 串行通信的分類7</p><p>  2.3 串口的調(diào)制8</p><p>  2.3.

18、1 串口連接8</p><p>  2.3.2 串口調(diào)試9</p><p>  2.4 本章小結(jié)10</p><p>  第3章 CRC校驗(yàn)11</p><p>  3.1 CRC校驗(yàn)原理11</p><p>  3.1.1 CRC校驗(yàn)碼的基本原理11</p><p>  3.1.2

19、 CRC校驗(yàn)碼權(quán)的形式12</p><p>  3.2 CRC校驗(yàn)的實(shí)現(xiàn)12</p><p>  3.3本章小結(jié)13</p><p>  第4章 軟件的實(shí)現(xiàn)及其測(cè)試14</p><p>  4.1 開發(fā)工具概述14</p><p>  4.1.1 Windows編程與MFC14</p><

20、;p>  4.1.2 串行通信控件MSComm14</p><p>  4.2 程序的主要功能15</p><p>  4.3 程序運(yùn)行平臺(tái)17</p><p>  4.4詳細(xì)設(shè)計(jì)17</p><p>  4.4.1 建立工程17</p><p>  4.4.2 界面功能實(shí)現(xiàn)18</p>

21、<p>  4.4.3 模塊分析21</p><p>  4.4.4 程序測(cè)試32</p><p>  4.5 本章小結(jié)36</p><p><b>  第5章 結(jié)論37</b></p><p>  參 考 文 獻(xiàn)39</p><p><b>  致 謝41

22、</b></p><p><b>  第1章 緒論</b></p><p>  1.1 課題的研究意義</p><p>  在發(fā)展如此迅速的信息化時(shí)代,隨著計(jì)算機(jī)的普及和信息技術(shù)的發(fā)展,形成了對(duì)信息的獲取-傳送-處理-利用的完整技術(shù)體系,并在此基礎(chǔ)上形成了通信技術(shù),它應(yīng)用在生產(chǎn)、醫(yī)療、教育、生活等多種領(lǐng)域,成為現(xiàn)今社會(huì)生存和發(fā)展不可

23、或缺的技術(shù)。</p><p>  隨著通信技術(shù)的不斷創(chuàng)新和發(fā)展以及計(jì)算機(jī)網(wǎng)絡(luò)和多微機(jī)系統(tǒng)的廣泛應(yīng)用,USB通信技術(shù)的發(fā)展如此迅速,盡管如此,然而串口通信技術(shù)以其實(shí)現(xiàn)簡(jiǎn)單、使用靈活方便、數(shù)據(jù)傳輸可靠等優(yōu)點(diǎn)并未面臨被淘汰,反而在通信領(lǐng)域中一直都被人們廣泛的應(yīng)用。它主要被廣泛應(yīng)用在工業(yè)控制生產(chǎn)和實(shí)驗(yàn)室等重要領(lǐng)域。</p><p>  VC++是新一代面向?qū)ο蟮目梢暬_發(fā)工具,作為一個(gè)主流的開發(fā)平

24、臺(tái)一直深受編程愛好者的喜愛,提供了良好的界面設(shè)計(jì)資源,是當(dāng)下圖形開發(fā)的一個(gè)比較重要的技能和手段,Window圖形界面編程就是VC++編程開發(fā)的經(jīng)典展現(xiàn)之一。Windows圖形界面編程下的MFC,全稱是Microsoft Foundation Classes,它是Win32中的應(yīng)用程序,目前Win32中基于VC++6.0的串口通信程序一般可以用兩種方法實(shí)現(xiàn):一是利用 MSComm ActiveX 串行通信控件;二是使用Windows AP

25、I通信函數(shù)。其中Windows平臺(tái)先進(jìn)的 ActiveX 技術(shù)對(duì)串口編程不再需要處理繁瑣的細(xì)節(jié)。利用已有的ActiveX控件技術(shù),只需要編寫少量的代碼,就可以輕松高效地完成通信任務(wù)。這樣做會(huì)給編程者省去很多的代碼工作量。</p><p>  伴隨著科學(xué)技術(shù)的不斷創(chuàng)新與現(xiàn)代化生產(chǎn)過程中智能化、自動(dòng)化程度的不斷提高,越來越多的綜合過程和控制系統(tǒng)需要開發(fā)自身的監(jiān)測(cè)控制平臺(tái)與數(shù)據(jù)處理采集,利用Windows編程技術(shù)開發(fā)這

26、樣的應(yīng)用程序時(shí),其中要面臨的最關(guān)鍵的問題是與外圍監(jiān)控設(shè)備連接與通信。與外圍監(jiān)控設(shè)備通信實(shí)際上是計(jì)算機(jī)與計(jì)算機(jī)或計(jì)算機(jī)與終端機(jī)之間的數(shù)據(jù)傳遞,它可以采用串行通信和并行通信兩種通信方式。由于串行通信方式具有使用線路少、成本低、特別是在遠(yuǎn)程傳輸時(shí),避免了多條線路特性的不一致而被廣泛采用。所以現(xiàn)在大量的智能儀器、工控設(shè)備、實(shí)驗(yàn)研究設(shè)備或數(shù)據(jù)采集模塊都帶有RS232串行通訊接口,通過相應(yīng)的通訊協(xié)議和串口通訊程序,可以將測(cè)試、采集的數(shù)據(jù)傳輸?shù)缴衔还?/p>

27、控機(jī),以滿足各種形式后續(xù)數(shù)據(jù)處理的要求。同時(shí)整個(gè)監(jiān)控系統(tǒng)會(huì)根據(jù)系統(tǒng)運(yùn)行情況通過串口向監(jiān)控設(shè)備發(fā)送指令,調(diào)節(jié)設(shè)備的運(yùn)行參數(shù)等使得生產(chǎn)過程平穩(wěn)進(jìn)行。所以研究RS232串行通信意義非常重大。</p><p>  1.2 研究現(xiàn)狀及發(fā)展趨勢(shì)</p><p>  1.2.1 RS232串行通信的研究現(xiàn)狀</p><p>  目前,串行通信在各類領(lǐng)域中都得到了廣泛的應(yīng)用,同時(shí)它

28、還具有較高的性價(jià)比和傳輸可靠性等優(yōu)點(diǎn)。RS-232被定義為一種在低速率串行通信中增加通信距離的單端標(biāo)準(zhǔn)。串行通信中的串口應(yīng)用始于1960年,然而RS-232的初始版本于1969年才得到認(rèn)證,認(rèn)證的版本號(hào)為RS-232C,在這之前有RS-232A、RS-232B這兩個(gè)版本。RS-232標(biāo)準(zhǔn)主要適用于通信設(shè)備,它主要采取不平衡傳輸方法,即所謂的單端通信。近年來,串行技術(shù)與連接設(shè)備都得到了很大的發(fā)展,串口設(shè)備在設(shè)備電纜、工業(yè)控制和軟件應(yīng)用程序

29、中得到了大量的應(yīng)用,毫無疑問,串行連接技術(shù)仍然是工商業(yè)、醫(yī)療、教育和實(shí)驗(yàn)室等領(lǐng)域中所應(yīng)用的廣泛標(biāo)志。</p><p>  1.2.2 RS232串行通信的發(fā)展趨勢(shì)</p><p>  RS-232協(xié)議自1960年形成,1969年得到認(rèn)證,一直到如今的廣泛使用,始終隨著各種領(lǐng)域應(yīng)用需求的不斷變化而穩(wěn)步發(fā)展。未來RS-232串口通信仍將在低成本、設(shè)計(jì)簡(jiǎn)單的產(chǎn)品中繼續(xù)發(fā)揮著重要作用。低供電電壓和

30、高數(shù)據(jù)率等都將成為未來發(fā)展中新設(shè)計(jì)的普遍要求。我們堅(jiān)信RS-232一定會(huì)繼續(xù)隨著各種外圍設(shè)備的不斷發(fā)展而提高,同時(shí)也將繼續(xù)保持通信領(lǐng)域中應(yīng)用最為廣泛這一地位的。</p><p>  1.3 本文主要的研究?jī)?nèi)容</p><p>  本文主要通過RS232標(biāo)準(zhǔn)串口協(xié)議,使用VC++編程語(yǔ)言實(shí)現(xiàn)串行通信,最終完成模擬終端的調(diào)試與仿真。在設(shè)計(jì)過程中,我通過查閱大量相關(guān)書籍和資料,研究學(xué)習(xí)了RS23

31、2標(biāo)準(zhǔn)協(xié)議和VC++編程語(yǔ)言下的MFC界面編程,學(xué)習(xí)串行通信相關(guān)知識(shí),通過編程軟件的仿真完成了基于C++的RS232通信協(xié)議的模擬終端。</p><p><b>  具體研究?jī)?nèi)容如下:</b></p><p>  了解RS232協(xié)議,串口和串行通信原理。</p><p>  分析RS232串行通信的基本原理,并通過串口調(diào)試助手調(diào)通串口以方便接下

32、來的操作。</p><p>  了解CRC校驗(yàn),掌握CRC校驗(yàn)基本原理及應(yīng)用。</p><p>  在VC++高級(jí)語(yǔ)言中,利用Windows下的MSComm ActiveX控件,實(shí)現(xiàn)兩臺(tái)計(jì)算機(jī)間的通信測(cè)試與仿真。</p><p>  第2章串行通信基本原理</p><p>  2.1 RS232通信協(xié)議</p><p>

33、;  2.1.1 RS232標(biāo)準(zhǔn)</p><p>  RS-232標(biāo)準(zhǔn)(協(xié)議)(ANSI/EIA-232標(biāo)準(zhǔn))的全稱是EIA-RS-232C標(biāo)準(zhǔn),其中EIA代表美國(guó)電子工業(yè)協(xié)會(huì),RS代表推薦標(biāo)準(zhǔn),232是標(biāo)識(shí)號(hào),C代表RS-232的修改次數(shù)。RS-232C標(biāo)準(zhǔn)是美國(guó)EIA(電子工業(yè)聯(lián)合會(huì))與BELL等公司一起開發(fā)的1969年公布的通信協(xié)議。</p><p>  RS232協(xié)議一共有25條信

34、號(hào)線,其中包括一個(gè)主通道和一個(gè)輔助通道,大多數(shù)情況下主要使用的是主通道,盡管有如此多的信號(hào)線,但是對(duì)于一般雙工通信,僅需要其中幾條信號(hào)線就可實(shí)現(xiàn)數(shù)據(jù)的傳送,如一條發(fā)送線、一條接收線和一條地線。它適合于數(shù)據(jù)傳輸速率在0~20000b/s范圍內(nèi)的通信,即為每秒50、70、100、150、300、600、1200、2400、4800、9600、19200波特。這個(gè)標(biāo)準(zhǔn)對(duì)串行通信接口的有關(guān)問題都作了明確規(guī)定。由于通信設(shè)備廠商都生產(chǎn)與RS-232

35、C制式兼容的通信設(shè)備,因此,它作為一種標(biāo)準(zhǔn),目前已在微機(jī)通信接口中廣泛采用,例如在IBM PC機(jī)上的COM1、COM2接口,就是RS-232C接口。它規(guī)定連接電纜、機(jī)械、電氣特性、信號(hào)功能及傳送過程等。同時(shí),由于RS-232標(biāo)準(zhǔn)具有連線簡(jiǎn)單、通訊距離長(zhǎng)等優(yōu)點(diǎn),目前也廣泛應(yīng)用于微型計(jì)算機(jī)系統(tǒng)、工控機(jī)和大型設(shè)備系統(tǒng)中。</p><p>  2.1.2 RS232接口</p><p>  RS2

36、32標(biāo)準(zhǔn)是按負(fù)邏輯定義的,它的“1”電平在-5~-15 V之間,“0”電平在+5~+15 V之間。RS232接口是標(biāo)準(zhǔn)串行接口,其通訊距離小于15 m,它的傳輸速率小于20 kb/s。RS232串行接口屬于個(gè)人計(jì)算機(jī)(PC)及電信應(yīng)用領(lǐng)域中最為成功的串行數(shù)據(jù)標(biāo)準(zhǔn)。是目前PC機(jī)與通信工業(yè)中應(yīng)用最廣泛的一種串行接口?,F(xiàn)在的計(jì)算機(jī)一般至少有兩個(gè)串行口COM1和COM2,新一代的計(jì)算機(jī)主要以9引腳的D型口接出所有的RS232通信信號(hào)及控制線(有

37、的計(jì)算機(jī)的串口為25引腳)。在RS232的通訊標(biāo)準(zhǔn)中是以一個(gè)25針的接口來定義的,25針的接口在早期的計(jì)算機(jī)如PC或XT機(jī)型上廣泛使用,但在AT機(jī)以后的機(jī)型上,實(shí)際均采用了9針的簡(jiǎn)化版接口應(yīng)用,現(xiàn)在所說的RS-232通訊均默認(rèn)為9針的接口?,F(xiàn)在大多數(shù)個(gè)人計(jì)算機(jī)幾乎都沒有串口,大多采用USB接口,所以要實(shí)現(xiàn)個(gè)人計(jì)算機(jī)與外圍設(shè)備進(jìn)行通信大多采用RS-232轉(zhuǎn)USB接口。RS-232 9針通訊的接口圖如圖2-1所示 。</p>

38、<p>  圖2-1 9針通訊接口</p><p><b>  2.2 串行通信</b></p><p>  2.2.1 串行通信基本原理</p><p>  兩個(gè)設(shè)備之間交換數(shù)據(jù)的過程我們稱之為通信。從同時(shí)傳輸?shù)臄?shù)據(jù)位數(shù)來分通信方式可以分為串行通信(Serial)和并行通信(Parrel)。并行通信中所傳送數(shù)據(jù)的各位同時(shí)發(fā)送或接收。

39、串行通信中所傳送數(shù)據(jù)的各位按順序一位一位地發(fā)送或接收。兩種基本通信方式如圖2-2所示:</p><p><b>  嗎</b></p><p>  并行通信 串行通信</p><p>  圖2-2 兩種基本的通信方式</p><p>  從上面的圖中可以看到,并行通信成本高,

40、并須使用多條通信線,而串行通信只需使用兩條通信線就可以完成兩個(gè)設(shè)備間的數(shù)據(jù)交換,大大降低了通信成本,串行通信又以其串行線間的干擾小得到了廣泛的應(yīng)用。</p><p>  串行通信大多數(shù)用于Windows開發(fā)的應(yīng)用程序與外圍數(shù)據(jù)源設(shè)備之間的數(shù)據(jù)交換。串行通信是通過串行端口實(shí)現(xiàn)的。串行端口的本質(zhì)功能是作為CPU和串行設(shè)備間的編碼轉(zhuǎn)換器。當(dāng)數(shù)據(jù)從CPU經(jīng)過串行端口發(fā)送出去時(shí),數(shù)據(jù)格式由字節(jié)數(shù)據(jù)轉(zhuǎn)換為串行的位(byte)

41、。在接收數(shù)據(jù)時(shí),數(shù)據(jù)格式由串行的位(bit)被轉(zhuǎn)換為字節(jié)數(shù)據(jù)。</p><p>  2.2.2 串行通信參數(shù)</p><p>  串行通信在數(shù)據(jù)交換過程中,要對(duì)幾個(gè)重要的通信參數(shù)進(jìn)行設(shè)置,其中包括波特率、數(shù)據(jù)位、停止位、奇偶校驗(yàn)位等。</p><p><b>  (1)波特率</b></p><p>  所謂波特率就是每

42、秒中傳送的二進(jìn)制位數(shù),其單位是bps(bits per second),用來描述數(shù)據(jù)的傳送速率,是衡量串行通信數(shù)據(jù)傳輸速度快慢的重要指標(biāo)。國(guó)際上對(duì)波特率規(guī)定了一個(gè)標(biāo)準(zhǔn)系列:110bps、300bps、600bps、1200bps、1800bps、2400bps、4800bps、9600bps、14.4Kbps、28.8Kbps、33.6Kbps、56Kbps。例如:9600bps,是指每秒傳送數(shù)據(jù)9600位,其中包含字符的數(shù)位和其它必須

43、的數(shù)位。串行接口電路的接收波特率和發(fā)送的波特率可以設(shè)置,要求接收方的接收波特率必須與發(fā)送方的發(fā)送波特率是一致的。在串行通信中,通信線上所傳輸?shù)淖址麛?shù)據(jù)(代碼)是逐位傳送的,一個(gè)字符由若干位組成,所以每秒鐘所傳輸?shù)牟ㄌ芈屎妥址麛?shù)(字符速率)是完全不同的。有時(shí)也用“位周期”來表示傳輸速率,位周期是波特率的倒數(shù)。</p><p><b>  (2)數(shù)據(jù)位</b></p><p&

44、gt;  數(shù)據(jù)位是衡量通信中實(shí)際數(shù)據(jù)位的參數(shù)。當(dāng)計(jì)算機(jī)發(fā)送一個(gè)信息包,實(shí)際的數(shù)據(jù)不會(huì)是8位的,標(biāo)準(zhǔn)的值是5、7和8位。如何設(shè)置取決于傳送的信息。數(shù)據(jù)位通常為5-8位,它緊跟在起始位之后,是被傳送字符的有效數(shù)據(jù)位。傳送時(shí)先傳送字符的低位,后傳送字符的高位。數(shù)據(jù)位的位數(shù)可以有硬件或軟件設(shè)備進(jìn)行設(shè)置,以滿足設(shè)備間數(shù)據(jù)交換的需要。</p><p><b>  (3)停止位</b></p>

45、<p>  停止位一般為1、1.5和2位,用于表示單個(gè)包的最后一位。停止位不僅僅是表示傳輸?shù)慕Y(jié)束,并且提供計(jì)算機(jī)校正時(shí)鐘同步的機(jī)會(huì),因?yàn)閿?shù)據(jù)是在傳輸線上定時(shí)的,并且每個(gè)設(shè)備都有其自己的時(shí)鐘,很可能在通信中要進(jìn)行數(shù)據(jù)交換的兩臺(tái)設(shè)備間出現(xiàn)小小的不同步,設(shè)置停止位就是為了避免其中的小小的不同步。停止位的位數(shù)的設(shè)置可以由設(shè)備的軟件設(shè)置,停止位的位數(shù)越多,不同時(shí)鐘同步的容忍程度越大,但是數(shù)據(jù)傳輸率相應(yīng)地也會(huì)越慢。</p>

46、<p><b>  (4)奇偶校驗(yàn)位</b></p><p>  在串行通信中奇偶校驗(yàn)是一種簡(jiǎn)單的檢錯(cuò)方式,奇偶校驗(yàn)位僅占一位,用于進(jìn)行奇校驗(yàn)和偶校驗(yàn),同時(shí)也可以無校驗(yàn)位。對(duì)于奇校驗(yàn)和偶校驗(yàn),串口會(huì)設(shè)置校驗(yàn)位,是數(shù)據(jù)位后面的一位,用一個(gè)值保證傳輸?shù)臄?shù)據(jù)有偶個(gè)或者奇?zhèn)€邏輯高位。例如,如果數(shù)據(jù)是001,那么對(duì)于奇校驗(yàn),校驗(yàn)位是0,。如果是偶校驗(yàn),校驗(yàn)位是1。這樣使得接收設(shè)備能夠知道

47、一個(gè)位的狀態(tài),有機(jī)會(huì)判斷是否有噪聲干擾了通信或者傳輸和接收數(shù)據(jù)是否發(fā)生了不同步。</p><p>  2.2.3 串行通信的分類</p><p>  串行通信又可以分為同步串行通信和異步串行通信兩類。</p><p>  同步通信是一種在發(fā)送端發(fā)送一個(gè)抑制載波的雙邊帶信號(hào),而在接收端恢復(fù)載波,再進(jìn)行檢波的通信方式。是按照軟件識(shí)別同步字符來實(shí)現(xiàn)數(shù)據(jù)的發(fā)送和接收。它是一

48、種連續(xù)串行傳送數(shù)據(jù)的通信方式,一次通信只傳送一幀信息。信息中含有若干個(gè)數(shù)據(jù)字符。 它們均由數(shù)據(jù)字符、CRC即同步字符和校驗(yàn)字符組成。因?yàn)榛謴?fù)的載波與被接收的信號(hào)載波同頻同相,故取名為同步通信,也稱抑制載波雙邊帶通信。</p><p>  異步通信數(shù)據(jù)通常以字符或者字節(jié)為單位組成字符幀傳送,字符幀由發(fā)送端逐幀發(fā)送,通過傳輸線被接收設(shè)備逐幀接收。異步通信通常有兩個(gè)非常重要的指標(biāo):即字符幀格式和波特率。發(fā)送端和接收端可

49、以由各自的時(shí)鐘源來控制數(shù)據(jù)的發(fā)送和接收,這兩個(gè)時(shí)鐘源彼此獨(dú)立,互不同步,接收端檢測(cè)到傳輸線上發(fā)送過來的低電平邏輯"0"(即字符幀起始位)時(shí),確定發(fā)送端已開始發(fā)送數(shù)據(jù),每當(dāng)接收端收到字符幀中的停止位時(shí),就知道一幀字符已經(jīng)發(fā)送完畢。異步通信有自己的的缺點(diǎn),其缺點(diǎn)是它在通信時(shí)的傳輸效率較低。當(dāng)然它也具有自己獨(dú)特的優(yōu)點(diǎn),其優(yōu)點(diǎn)就是它的通信設(shè)備簡(jiǎn)單、便宜。</p><p><b>  2.3

50、串口的調(diào)制</b></p><p>  2.3.1 串口連接</p><p>  現(xiàn)在大多數(shù)計(jì)算機(jī)外用接口都是USB口,外用接口很少有串口的,并且現(xiàn)在的個(gè)人計(jì)算機(jī)的串口大多都是簡(jiǎn)型的9針串口。所以要想通過串行通信實(shí)現(xiàn)與外圍設(shè)備數(shù)據(jù)交換,必須用USB轉(zhuǎn)RS-232 9針串口轉(zhuǎn)換線。9芯管腳圖如圖 2-3 所示。</p><p>  圖2-3 9芯管腳圖&

51、lt;/p><p>  表 2-1 9針管腳各引腳名稱功能圖</p><p>  目前,市場(chǎng)上使用的串口有9針管腳的還有25針管腳的。在RS-232的通訊標(biāo)準(zhǔn)中是以一個(gè)25針的接口來定義的,并且在早期的計(jì)算機(jī)中,如PC機(jī)或XT機(jī)型上得到了廣泛地使用,但是在AT機(jī)以后的機(jī)型上,實(shí)際上均采用了9針管腳的簡(jiǎn)化版本應(yīng)用,現(xiàn)在所說的RS-232通訊均默認(rèn)為9針的接口。圖2-3顯示了9針通訊的接口管腳,

52、9針管腳的串口各引腳名稱、功能和信號(hào)來源各不相同。表 2-1說明九針管腳的串口各引腳的名稱,功能說明和信號(hào)源等。</p><p>  由表 2-1 可知要想實(shí)現(xiàn)兩臺(tái)個(gè)人計(jì)算機(jī)間的數(shù)據(jù)交換,可以將兩個(gè)USB轉(zhuǎn)RS-232線的接口頭的2、3引腳交叉對(duì)接,兩個(gè)5腳相接即可,具體接法如圖2-4所示,然后再講兩個(gè)USB接頭與兩臺(tái)電腦相連。</p><p>  圖2-4 USB轉(zhuǎn)RS232線的連接圖

53、</p><p>  2.3.2 串口調(diào)試</p><p>  實(shí)現(xiàn)個(gè)人計(jì)算機(jī)與外圍設(shè)備間的串行通信必須將個(gè)人計(jì)算機(jī)上的串口調(diào)通,驗(yàn)證一下個(gè)人計(jì)算機(jī)上的串口是否好用。這就需要用到串口調(diào)試小助手。首先將一根USB轉(zhuǎn)RS-232轉(zhuǎn)換線的2、3引腳短接,然后將帶有“驅(qū)動(dòng)程序”的光盤放入個(gè)人計(jì)算機(jī)中,安裝并運(yùn)行與自己計(jì)算機(jī)相匹配的驅(qū)動(dòng)程序,接著將轉(zhuǎn)換線的USB端插入個(gè)人計(jì)算機(jī)的USB口,即完成了初

54、步的安裝。打開設(shè)備管理器,看一下所插入的轉(zhuǎn)換線占的是哪個(gè)串口,因?yàn)樵诮酉聛碚{(diào)試串口要用到。</p><p>  串口調(diào)試助手是一個(gè)專門用來調(diào)試串口程序的功能軟件,要想測(cè)試串口是否可用,應(yīng)先打開軟件,選擇串口號(hào),打開串口,在發(fā)送區(qū)輸入內(nèi)容,點(diǎn)擊發(fā)送按鈕,若在接收區(qū)中有所發(fā)送的內(nèi)容,則證明此串口可用。</p><p><b>  2.4 本章小結(jié)</b></p>

55、;<p>  本章從原理上介紹了串行通信的基本原理,詳細(xì)的闡述了RS232標(biāo)準(zhǔn)協(xié)議接口和與串行通信相關(guān)的一些知識(shí)。介紹了通信參數(shù)與串行通信的分類。為下文編寫Windows應(yīng)用程序?qū)崿F(xiàn)兩臺(tái)PC機(jī)進(jìn)行數(shù)據(jù)交換提供了基礎(chǔ)。</p><p><b>  第3章 CRC校驗(yàn)</b></p><p>  3.1 CRC校驗(yàn)原理</p><p>

56、;  3.1.1 CRC校驗(yàn)碼的基本原理</p><p>  在早期的通信中,由于通信技術(shù)不夠可靠(不可靠性的來源是通信技術(shù)決定的,比如電磁波通信時(shí)受雷電等因素的影響),這樣不可靠的通信就會(huì)帶來“確認(rèn)信息”的麻煩,造成一些事情的延誤等。為了避免這一弊端,在進(jìn)行數(shù)據(jù)交換,通信的過程中,對(duì)通信的可靠性檢查就需要校驗(yàn),校驗(yàn)是從數(shù)據(jù)本身進(jìn)行檢查,它依靠某種數(shù)學(xué)上約定的形式進(jìn)行檢查,校驗(yàn)的結(jié)果是可靠或不可靠,如果可靠就對(duì)數(shù)

57、據(jù)進(jìn)行處理,如果不可靠,就丟棄重發(fā)或者進(jìn)行修復(fù)。</p><p>  如早期一樣目前在通信系統(tǒng)的數(shù)據(jù)傳輸過程中,由于信道中各種復(fù)雜因素的影響,使傳輸?shù)男盘?hào)受到干擾,造成傳輸過程中誤碼的出現(xiàn)。接收方為了檢查所接收的數(shù)據(jù)是否有誤碼,可采用多種檢測(cè)方法。差錯(cuò)控制編碼是目前數(shù)據(jù)傳輸過程中普遍采用的一種提高數(shù)據(jù)通信可靠性的方法,而CRC是一種在實(shí)際通信中應(yīng)用很廣泛的差錯(cuò)控制編碼,具有很強(qiáng)的檢錯(cuò)能力。</p>

58、<p>  CRC(Cyclic Redundancy Check)循環(huán)冗余校驗(yàn)碼是數(shù)據(jù)通信領(lǐng)域中最常用的一種差錯(cuò)校驗(yàn)碼,其特征是信息字段和校驗(yàn)字段的長(zhǎng)度可以任意選定。CRC循環(huán)冗余校驗(yàn)碼的基本原理是任意一個(gè)由二進(jìn)制位串組成的代碼都可以和一個(gè)系數(shù)僅為‘0’和‘1’取值的多項(xiàng)式一一對(duì)應(yīng)。例如:代碼101011對(duì)應(yīng)的多項(xiàng)式為,而多項(xiàng)式為對(duì)應(yīng)的代碼1100101。CRC校驗(yàn)碼是在K位信息碼后再拼接R位的校驗(yàn)碼,整個(gè)編碼長(zhǎng)度為N位,因

59、此,這種編碼也叫(N,K)碼。</p><p>  CRC校驗(yàn)碼的生成借助于多項(xiàng)式除法,其余數(shù)為校驗(yàn)字段。其中發(fā)送方發(fā)出傳輸字段,傳輸字段由兩部分組成的,分別為信息字段和校驗(yàn)字段。接收方使用相同的生成碼進(jìn)行校驗(yàn),若接收到的字段或生成碼(二進(jìn)制除法)如果能夠除盡,則說明在通信過程中,數(shù)據(jù)交換期間未受到其他因素的干擾,消息收發(fā)成功。</p><p>  3.1.2 CRC校驗(yàn)碼權(quán)的形式<

60、/p><p>  CRC校驗(yàn)碼有很多種權(quán)的行式,使用哪一種形式是根據(jù)通信雙方共同制定的“規(guī)則”而定的,其中各種常用權(quán)的形式如下所示:</p><p><b> ?。?-1)</b></p><p><b>  (3-2)</b></p><p><b> ?。?-3)</b><

61、;/p><p><b>  (3-4)</b></p><p><b> ?。?-5)</b></p><p>  以其中CRC-CCITT形式為例。圖 3-1說明了 CRC 校驗(yàn)中 CRC 值是如何計(jì)算出來的,體現(xiàn)的多項(xiàng)式正是式(3-5)。從把數(shù)據(jù)移位開始計(jì)算,將數(shù)據(jù)位(從最低的數(shù)據(jù)位開始)逐位移入反向耦合移位寄存器。當(dāng)所有

62、數(shù)據(jù)位都這樣操作后,計(jì)算結(jié)束。此時(shí),16 位移位寄存器中的內(nèi)容就是 CRC 碼。圖3-1中X 代表 Bit5,X 代表 Bit12,1 是代表 Bit0,比較特別,是指移位寄存器移入的數(shù)據(jù)。</p><p>  圖3-1 生成CRC-CCITT的移位寄存器的作用原理</p><p>  3.2 CRC校驗(yàn)的實(shí)現(xiàn)</p><p>  實(shí)現(xiàn)CRC校驗(yàn)有很多種算法和方式,

63、最基本的算法應(yīng)該是按位計(jì)算了,這個(gè)方法可以適用于所有長(zhǎng)度的數(shù)據(jù)校驗(yàn),是最為靈活的,但由于是按位計(jì)算,其效率并不是最迅速、最優(yōu)的,只適用于對(duì)速度不敏感的場(chǎng)合。還有一種是按照字節(jié)計(jì)算CRC校驗(yàn)碼,按字節(jié)校驗(yàn)是每次計(jì)算8位數(shù)據(jù),多是基于查表的算法,首先要準(zhǔn)備一個(gè)表,一共256項(xiàng)。在使用的時(shí)候,把計(jì)算出來的校驗(yàn)值放在最后兩個(gè)字節(jié)里,將其發(fā)送出去,接收端對(duì)所有的數(shù)據(jù)進(jìn)行相同的校驗(yàn),如校驗(yàn)值為0我們則認(rèn)為其數(shù)據(jù)沒有出錯(cuò)。這個(gè)是按高位到低位的發(fā)送順序

64、時(shí)使用的校驗(yàn)方法。</p><p><b>  3.3本章小結(jié)</b></p><p>  本章介紹了通信中最常使用的校驗(yàn)方法,即CRC校驗(yàn)。分析了CRC校驗(yàn)原理、算法形式和算法的實(shí)現(xiàn)。并通過CRC校驗(yàn)實(shí)現(xiàn)通信中的檢錯(cuò)。</p><p>  第4章 軟件的實(shí)現(xiàn)及其測(cè)試</p><p>  4.1 開發(fā)工具概述</p

65、><p>  4.1.1 Windows編程與MFC</p><p>  Windows編程大致有兩種方法,一種是Windows C方向,即SDK方向,調(diào)用Win 32 API函數(shù),主要是利用C語(yǔ)言來實(shí)現(xiàn)軟件的功能與編程;另外一種方法是C++對(duì)SDK函數(shù)進(jìn)行包裝,如VC的MFC(微軟基礎(chǔ)類庫(kù)),BOB的OWL等。其中使用MFC直接編寫提供大量預(yù)先編好的類和支持代碼或使用MFC和向?qū)В╓izar

66、ds)編寫,用AppWizard來生成Windows應(yīng)用程序框架。</p><p>  本次軟件程序設(shè)計(jì)功能的實(shí)現(xiàn)主要利用Windows編程中MFC(利用C++語(yǔ)言)。MFC提供了構(gòu)造Windows應(yīng)用程序的框架,它不僅為應(yīng)用程序建立標(biāo)準(zhǔn)的結(jié)構(gòu),還為其提供了標(biāo)準(zhǔn)的圖形用戶界面如菜單欄、工具欄、狀態(tài)欄等,開發(fā)人員只需要在此基礎(chǔ)上添加針對(duì)特定應(yīng)用的代碼即可。使用此應(yīng)用程序框架有很多優(yōu)點(diǎn),如其應(yīng)用程序代碼小,運(yùn)行速度快

67、,并且此應(yīng)用程序提供的工具也降低了編碼的難度等。</p><p>  Windows應(yīng)用程序的框架主要有兩種類型,一種是基于對(duì)話框的應(yīng)用程序框架,另外一種是基于文檔、視圖結(jié)構(gòu)的應(yīng)用程序框架。平大家所見到的大多數(shù)Windows應(yīng)用程序均屬于這兩種框架。</p><p>  MFC的全稱是Microsoft Foundation Classes。是微軟把Windows API 進(jìn)行封裝的類庫(kù),

68、該類庫(kù)以層次結(jié)構(gòu)組織起來,其中封裝了大部分Windows API函數(shù)和Windows控件。1989年微軟公司成立Application Framework技術(shù)團(tuán)隊(duì),名為AFX小組,用以開發(fā)C++面向?qū)ο蠊ぞ呓oWindows應(yīng)用程序開發(fā)人員使用。啟用MFC編碼可以使Windows程序員能夠利用C++面向?qū)ο蟮乃枷脒M(jìn)行編程,用好的類作為標(biāo)準(zhǔn),減少代碼的編寫量。</p><p>  4.1.2 串行通信控件MSComm

69、</p><p>  目前,以Win 32 下的MFC應(yīng)用程序?yàn)橹饕蚣?,基于VC++的常用串行通信編程一般可以用兩種方法實(shí)現(xiàn):一種是使用Windows API通信函數(shù)。雖然在Windows下Win32API提供了使用文件操作方式的函數(shù)進(jìn)行串口操作的方法,但是在編程實(shí)現(xiàn)上還是比較復(fù)雜。其余一種是利用MSComm ActiveX 串行通信控件。Windows平臺(tái)先進(jìn)的ActiveX技術(shù)利用已有的MSComm Act

70、iveX控件,只需要編寫少量的代碼,就可以輕松高效地完成任務(wù),使得對(duì)串口編程不再需要處理煩瑣的細(xì)節(jié)。這樣程序員就不需要花費(fèi)大量時(shí)間去了解復(fù)雜的API函數(shù),只需要利用MSComm控件就可實(shí)現(xiàn)串口編程。所以,本次實(shí)現(xiàn)兩臺(tái)PC間的通信使用的就是MSComm控件。</p><p>  4.2 程序的主要功能</p><p>  實(shí)現(xiàn)兩臺(tái)PC機(jī)之間的通信的應(yīng)用程序,主要實(shí)現(xiàn)了密碼登陸、參設(shè)設(shè)置、參數(shù)

71、顯示、打開串口、關(guān)閉串口、數(shù)據(jù)發(fā)送、數(shù)據(jù)接收等功能。主要功能框圖如圖4-1所示。</p><p>  圖4-1 主要功能框圖</p><p>  應(yīng)用程序主要實(shí)現(xiàn)的功能如圖4-1所示的主要功能框圖,此應(yīng)用程序的總體程序流程圖如圖4-2所示。</p><p>  圖4-2 程序流程框圖</p><p>  使用此應(yīng)用程序時(shí),需要有正確的用戶名和

72、密碼才能登錄到此軟件的主界面,登錄到主界面后,要想實(shí)現(xiàn)兩臺(tái)PC間的通信則需要選擇可用的串口號(hào)并且傳輸參數(shù)要一致,其中包括波特率、數(shù)據(jù)位、停止位、奇偶校驗(yàn)位等,只有設(shè)置對(duì)的參數(shù)才能實(shí)現(xiàn)數(shù)據(jù)交換的功能。在發(fā)送接收數(shù)據(jù)過程中需要打開串口。通信結(jié)束后,關(guān)閉打開的串口。能夠發(fā)送單個(gè)或多個(gè)數(shù)據(jù)。能夠接收和顯示多個(gè)數(shù)據(jù)。程序流程圖如圖3-2所示。</p><p>  4.3 程序運(yùn)行平臺(tái)</p><p>

73、;  在程序設(shè)計(jì)時(shí),原計(jì)劃使用VS2008軟件,但是由于電腦、操作系統(tǒng)等各種原因,就改用VC++ 6.0這個(gè)軟件。</p><p><b>  4.4詳細(xì)設(shè)計(jì)</b></p><p>  4.4.1 建立工程</p><p>  要實(shí)現(xiàn)通信,首先應(yīng)先建立工程,即新建基于Win32的MFC應(yīng)用程序。首先打開VC++6.0軟件,建立基于對(duì)話框的MF

74、C應(yīng)用程序。并將這個(gè)應(yīng)用程序命名為通信。然后在將基于對(duì)話框選中(如圖4-3),直接下一步即可,最后直到完成。</p><p>  圖4-3 建立基于對(duì)話框應(yīng)用程序過程圖</p><p>  按照如上所示的方法步驟,建立Win32下的MFC應(yīng)用程序工程,應(yīng)用程序工程名為“通信”,最后點(diǎn)擊完成按鈕,就會(huì)出現(xiàn)MFC應(yīng)用程序初始界面如圖4-4所示。</p><p>  圖4

75、-4 應(yīng)用程序最初界面</p><p>  4.4.2 界面功能實(shí)現(xiàn)</p><p><b>  1.登錄界面</b></p><p>  登錄界面的設(shè)計(jì)除了應(yīng)用MFC中的控件和工具外,要想實(shí)現(xiàn)其用戶名和密碼的驗(yàn)證功能還利用了數(shù)據(jù)庫(kù)的知識(shí)。本次登陸界面使用的數(shù)據(jù)庫(kù)是微軟的Access數(shù)據(jù)庫(kù)。Access數(shù)據(jù)庫(kù)是一個(gè)小型的數(shù)據(jù)庫(kù),使用起來非常的靈

76、活、方便 。對(duì)Access數(shù)據(jù)庫(kù)的連接與操作有很多種方法,例如在ASP中建立對(duì)Access數(shù)據(jù)庫(kù)的連接、使用Recordset對(duì)象操作Access數(shù)據(jù)庫(kù)、使用SQL指令操作數(shù)據(jù)庫(kù)、使用DSN連接Access數(shù)據(jù)庫(kù)等。其中使用DNS連接Access數(shù)據(jù)庫(kù)方法中,在定義DSN的時(shí)候,就已經(jīng)指定好了數(shù)據(jù)源需要的ODBC驅(qū)動(dòng)程序,也指定好了數(shù)據(jù)庫(kù)文件的實(shí)際路徑和名字,我們?cè)诔绦蛑?,只需要引用預(yù)先定義的數(shù)據(jù)源名DSN即可。</p>

77、<p>  首先,啟動(dòng)Microsoft Office Access,建立Access數(shù)據(jù)庫(kù),命名為demo01,然后在數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)表,命名為puser,在表puser中輸入序號(hào)(userid)、用戶名(username)和密碼(userpwd),將這個(gè)數(shù)據(jù)庫(kù)保存。最后為Access數(shù)據(jù)庫(kù)demo01建立數(shù)據(jù)源,利用ODBC驅(qū)動(dòng)。數(shù)據(jù)庫(kù)和數(shù)據(jù)源建立完成后,開始用MFC建立登陸界面。數(shù)據(jù)庫(kù)中用戶名和密碼如圖4-5所示。<

78、;/p><p>  圖4-5 數(shù)據(jù)庫(kù)中用戶名和弱密碼</p><p>  運(yùn)行應(yīng)用程序時(shí),若輸入了錯(cuò)誤的用戶名或密碼,則系統(tǒng)會(huì)提示輸入錯(cuò)誤。若輸入用戶名和密碼正確,即與Access數(shù)據(jù)庫(kù)表login內(nèi)容相一致,點(diǎn)擊登錄按鈕,出現(xiàn)提示正確,點(diǎn)擊確定按鈕應(yīng)用程序的界面會(huì)由登陸界面跳轉(zhuǎn)到主界面,開始進(jìn)行數(shù)據(jù)交換。登陸界面如圖 4-6 所示。</p><p>  圖4-6 登

79、錄界面</p><p><b>  2.主界面</b></p><p>  主界面是整個(gè)應(yīng)用程序的主體,大致可劃分為三部分,有接收區(qū)、發(fā)送區(qū)和設(shè)置區(qū)。接收區(qū)由靜態(tài)文本框和編輯框組成;發(fā)送區(qū)同樣也是由靜態(tài)文本框和邊界框組成;設(shè)置區(qū)由組合框、按鈕和靜態(tài)文本框組成。完整的主界面如圖4-7所示。 </p><p><b>  圖4-7 主

80、界面</b></p><p><b>  3.參數(shù)設(shè)置界面</b></p><p>  完成兩臺(tái)PC機(jī)間的串行通信(數(shù)據(jù)交換),必須保證兩個(gè)串口的通信參數(shù)一致,這樣就需要將兩個(gè)應(yīng)用程序的通信參數(shù)重新設(shè)置,通信參數(shù)包括波特率、數(shù)據(jù)位、停止位、奇偶校驗(yàn)位等。相應(yīng)的通信參數(shù)設(shè)置完成后,點(diǎn)擊【確定】按鈕,應(yīng)用程序則會(huì)再次跳轉(zhuǎn)到主界面(數(shù)據(jù)收發(fā)界面),若想取消設(shè)置則

81、點(diǎn)擊取消按鈕,參數(shù)設(shè)置界面關(guān)閉,回到主界面。界面的具體情況如圖4-8所示。</p><p><b>  圖4-8 設(shè)置界面</b></p><p>  4.4.3 模塊分析</p><p>  1.用戶名密碼登錄模塊</p><p>  在登錄界面下,在編輯框中輸入用戶名和密碼,單擊界面中的【登錄】按鈕,可以驗(yàn)證用戶名密

82、碼輸入是否正確,若正確登錄,程序提示“登陸成功,歡迎使用!”,然后登陸界面關(guān)閉顯示主界面,若輸入錯(cuò)誤則程序提示“密碼用戶名錯(cuò)誤,請(qǐng)重新輸入!”。需要重新輸入和驗(yàn)證,驗(yàn)證通過后才可以登錄。實(shí)現(xiàn)該功能的程序流程圖如圖4-9所示,實(shí)現(xiàn)該功能的程序代碼如下:</p><p>  圖4-9 用戶名密碼登錄模塊流程圖</p><p>  void CMylogin::OnBnClickedOk()&l

83、t;/p><p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p><b>  OnOK();</b></p><p><b>  }</b></p&g

84、t;<p>  void CMylogin::OnOK() </p><p><b>  {</b></p><p>  TODO: Add extra validation here</p><p>  UpdateData(TRUE); //讀取編輯框內(nèi)容</p><p>  CUserRecordse

85、t m_user; </p><p><b>  try</b></p><p><b>  {</b></p><p>  if(m_user.IsOpen())</p><p>  m_user.Close();</p><p>  m_user.m_strFilter.

86、Format("username='%s'anduserpwd='%s'",m_username,m_userpwd);</p><p>  m_user.Open(CRecordset::snapshot,NULL,CRecordset::none);</p><p>  if(m_user.IsEOF())//密碼用戶名不一致<

87、/p><p><b>  {</b></p><p>  m_user.Close();</p><p>  AfxMessageBox("用戶名、密碼錯(cuò)誤,請(qǐng)重試!");</p><p><b>  return;</b></p><p><b>

88、  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  m_user.Close();</p><p>  AfxMessageBox("登錄成功,歡迎使用!");</p><p&g

89、t;  CDialog::OnOK();</p><p><b>  }</b></p><p><b>  }</b></p><p>  catch(CDBException* e)</p><p><b>  {</b></p><p>  e-&

90、gt;ReportError();</p><p><b>  return;</b></p><p><b>  }</b></p><p><b>  2.應(yīng)用程序初始化</b></p><p>  實(shí)現(xiàn)先顯示登陸界面后主界面,利用MFC中的模式對(duì)話框在初始化函數(shù)中來實(shí)現(xiàn),

91、若串口是打開的則關(guān)閉串口,同時(shí)串口參數(shù)的設(shè)置也是在初始化函數(shù)中設(shè)置實(shí)現(xiàn)的。初始化的程序流程圖如圖4-10所示。具體程序代碼如下面所示:</p><p>  圖4-10 初始化流程圖</p><p>  BOOL CMyDlg::OnInitDialog()</p><p><b>  {</b></p><p>  CD

92、ialog::OnInitDialog();</p><p><b>  ……</b></p><p>  // TODO: Add extra initialization here</p><p>  CMylogin my;</p><p>  my.DoModal();//顯示登錄界面</p>&l

93、t;p>  if(m_cComm.GetPortOpen()) //如果發(fā)現(xiàn)串口本來是打開的,則關(guān)閉串口</p><p>  m_cComm.SetPortOpen(FALSE);</p><p>  m_cComm.SetCommPort(4); //選擇COM4端口</p><p>  m_cComm.SetInputMode(1); //輸入方式為二進(jìn)制

94、方式</p><p>  m_cComm.SetInBufferSize(1024); //設(shè)置輸入緩沖區(qū)</p><p>  m_cComm.SetOutBufferSize(512); //設(shè)置輸出緩沖區(qū)</p><p>  m_cComm.SetSettings("9600,n,8,1");//波特率,無校驗(yàn),個(gè)數(shù)據(jù)位,個(gè)停止位</p

95、><p>  return TRUE; // return TRUE unless you set the focus to a control</p><p><b>  }</b></p><p>  3.設(shè)置、打開和關(guān)閉串口功能</p><p>  圖4-11 設(shè)置、打開和關(guān)閉串口流程圖</p>&l

96、t;p>  串行通信是通過串口實(shí)現(xiàn)數(shù)據(jù)交換的,但是PC機(jī)上有不止一個(gè)串口,需要我們?cè)O(shè)置進(jìn)行串行通信端口號(hào),并將串口打開,通信結(jié)束后將串口關(guān)閉。程序流程圖如圖4-11所示,實(shí)現(xiàn)其功能代碼如下:</p><p>  void CMyDlg::OnOpen() </p><p><b>  {</b></p><p>  // TODO: Ad

97、d your control notification handler code here</p><p>  if(m_cComm.GetPortOpen())</p><p>  m_cComm.SetPortOpen(FALSE);</p><p>  CMyDlg md1;</p><p>  UpdateData(true);<

98、;/p><p>  md1.m_comn = m_comn;</p><p>  m_cComm.SetCommPort(m_comn+1); //設(shè)置串口號(hào)</p><p>  m_cComm.SetInBufferSize(1024); //接收緩沖區(qū)</p><p>  m_cComm.SetOutBufferSize(1024);//發(fā)送

99、緩沖區(qū)</p><p>  m_cComm.SetInputLen(0);//設(shè)置當(dāng)前接收區(qū)數(shù)據(jù)長(zhǎng)度為,表示全部讀取</p><p>  m_cComm.SetInputMode(1);//以二進(jìn)制方式讀寫數(shù)據(jù)</p><p>  m_cComm.SetRThreshold(1);//接收緩沖區(qū)有個(gè)及個(gè)以上字符時(shí),將引發(fā)接收數(shù)據(jù)的OnCommMscomm事件<

100、/p><p>  if(!m_cComm.GetPortOpen())</p><p><b>  {</b></p><p>  m_cComm.SetPortOpen(TRUE); //打開串口</p><p>  m_cComm.SetRThreshold(1); //每當(dāng)接收緩沖區(qū)有個(gè)字符則接收串口數(shù)據(jù)</p&

101、gt;<p>  m_cComm.SetInputLen(0); //設(shè)置當(dāng)前緩沖區(qū)長(zhǎng)度</p><p>  m_cComm.GetInput(); //預(yù)讀緩沖區(qū)以清除殘留數(shù)據(jù)</p><p><b>  }</b></p><p><b>  else</b></p><p>  

102、AfxMessageBox("打開端口失敗!",MB_ICONSTOP,0);</p><p><b>  }</b></p><p>  void CMyDlg::OnClose()//關(guān)閉串口</p><p><b>  {</b></p><p>  // TODO: Ad

103、d your control notification handler code herem_cComm.SetPortOpen(FALSE);</p><p><b>  }</b></p><p>  4.實(shí)現(xiàn)數(shù)據(jù)交換模塊</p><p>  使用MSComm通信控件是MFC中進(jìn)行串口通訊最簡(jiǎn)單的。MSComm通信控件提供了一系列標(biāo)準(zhǔn)通

104、信命令的接口,它允許建立串口連接,可以連接到其他通信設(shè)備(如Modem).還可以發(fā)送命令、進(jìn)行數(shù)據(jù)交換以及監(jiān)視和響應(yīng)在通信過程中可能發(fā)生的各種錯(cuò)誤和事件,從而可以用它創(chuàng)建全雙工 、事件驅(qū)動(dòng)的、高效實(shí)用的通信程序。加入MSComm通信控件,實(shí)現(xiàn)從緩沖區(qū)中讀取數(shù)據(jù),同時(shí)將數(shù)據(jù)給接收變量,更新接收區(qū)編輯框的內(nèi)容。實(shí)現(xiàn)此模塊的程序流程圖如圖4-12所示,其功能代碼如下:</p><p>  圖4-12 數(shù)據(jù)交換模塊流程圖

105、</p><p><b>  代碼如下:</b></p><p>  void CMyDlg::OnOnComm() </p><p><b>  {</b></p><p>  // TODO: Add your control notification handler code here<

106、/p><p>  VARIANT variant_inp;</p><p>  COleSafeArray safearray_inp;</p><p>  long len,k;</p><p>  byte rxdata[512]; //設(shè)置BYTE數(shù)組</p><p>  CString strtemp;</p

107、><p>  if(m_cComm.GetCommEvent()==2) //值為表示接收緩沖區(qū)內(nèi)有字符</p><p><b>  {</b></p><p>  variant_inp=m_cComm.GetInput(); //讀緩沖區(qū)消息</p><p>  safearray_inp=variant_inp; //

108、/變量轉(zhuǎn)換</p><p>  len=safearray_inp.GetOneDimSize(); //得到有效的數(shù)據(jù)長(zhǎng)度</p><p>  for(k=0;k<len;k++)</p><p>  safearray_inp.GetElement(&k,rxdata+k);</p><p>  for(k=0;k<l

109、en;k++) //將數(shù)組轉(zhuǎn)換為CString型變量</p><p><b>  {</b></p><p>  char bt=*(char*)(rxdata+k); //字符型</p><p>  strtemp.Format("%c",bt); //將字符送入臨時(shí)變量strtemp存放</p><p

110、>  m_receive+=strtemp; //加入接收編輯框?qū)?yīng)字符串</p><p><b>  }</b></p><p><b>  }</b></p><p>  CString temp=("\r\n"); //顯示完成后要自動(dòng)換行</p><p>  m_r

111、eceive+=temp;</p><p>  UpdateData(FALSE); //更新編輯框內(nèi)容</p><p><b>  }</b></p><p><b>  5.參數(shù)設(shè)置模塊</b></p><p>  對(duì)數(shù)據(jù)交換過程中的波特率、數(shù)據(jù)位、停止位、奇偶校驗(yàn)位等通信參數(shù)進(jìn)行設(shè)置,點(diǎn)擊【確

112、定】按鈕,設(shè)置成功;點(diǎn)擊【退出】按鈕,取消設(shè)置,返回主界面。參數(shù)設(shè)置模塊流程圖如圖 4-13 所示,實(shí)現(xiàn)應(yīng)用程序具體功能的代碼如下:</p><p>  圖4-13 通信參數(shù)設(shè)置流程圖</p><p>  void CMyDlg::OnSet() </p><p><b>  {</b></p><p>  // TOD

113、O: Add your control notification handler code here</p><p>  CSetcs sc;</p><p>  sc.m_baund = m_baund; </p><p>  sc.m_databit = m_databit;</p><p>  sc.m_jiaoyan = m_jiao

114、yan;</p><p>  sc.m_stopbit = m_stopbit;</p><p>  if(sc.DoModal()==IDOK) // 配置對(duì)話框是“確定”按鈕按下,需要重新配置端口</p><p><b>  {</b></p><p>  m_cComm.SetPortOpen(FALSE);&l

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論