2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩47頁(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>  基于C++的RS232通信</p><p><b>  協(xié)議模擬終端</b></p><p>  Analog Terminal For RS232 Communication </p><p>  Protocol Based On C++</p><p>  學(xué) 院: </p&

2、gt;<p><b>  專(zhuān) 業(yè) 班 級(jí): </b></p><p>  學(xué) 號(hào):</p><p><b>  學(xué) 生 姓 名: </b></p><p><b>  指 導(dǎo) 教 師: </b></p><p>  2013 年 06 月</p&

3、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&

4、gt;  圍繞串行通信技術(shù),本文主要介紹了串行通信接口——RS232標(biāo)準(zhǔn)串口,闡述了RS232串行通信基本原理和CRC校驗(yàn),通過(guò)VC界面編程實(shí)現(xiàn)串行通信。傳輸過(guò)程中通過(guò)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)其通信,本文中的接口

5、使用的是計(jì)算機(jī)上的USB口。</p><p>  在軟件實(shí)現(xiàn)方面,本設(shè)計(jì)在比較了多種方法之后,最終選擇了基于C++的MFC應(yīng)用程序。利用 MSComm ActiveX 串行通信控件來(lái)實(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)被人們廣泛

6、應(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

7、, 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 comm

8、unication 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 comm

9、unication technology, this paper mainly introduces the serial communication interface - RS232 serial port, and expounds the basic principle of RS232 serial communication and CRC check .It is completed to realize serial c

10、ommunication by VC programming. It can check the data during the process of transmission through the CRC.</p><p>  In the study of RS232 serial communication principle, this design mainly introduces the prin

11、ciple of serial communication, serial port and RS232 protocol,and analyzes communication parameters in detail. Considering RS232 serial port and working principle, this design adopts serial full-duplex mode to realize co

12、mmunication. In the article, the interface is the USB port on the PC. </p><p>  In the aspect of software realization, after several methods are compared,this design selects the MFC application program which

13、 is based on C++ .The design realize the serial communication by using MSComm ActiveX serial communication control. This article introduces the ActiveX control technology--MSComm control. Finally, the design realizes ser

14、ial communication between two computers.</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

15、 machines is the foundation of realizing more complex communication.</p><p>  Keywords:RS232 protocol; Serial Communications; C++; CRC Cyclic </p><p>  Redundancy Check</p><p><b

16、>  目 錄</b></p><p><b>  摘 要I</b></p><p>  AbstractII</p><p><b>  第1章 緒論1</b></p><p>  1.1 課題的研究意義1</p><p>  1.2 研

17、究現(xiàn)狀及發(fā)展趨勢(shì)2</p><p>  1.2.1 RS232串行通信的研究現(xiàn)狀2</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&g

18、t;<p>  2.1.1 RS232標(biāo)準(zhǔn)4</p><p>  2.1.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 串行通信的分類(lèi)7</

19、p><p>  2.3 串口的調(diào)制8</p><p>  2.3.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><

20、;p>  3.1.1 CRC校驗(yàn)碼的基本原理11</p><p>  3.1.2 CRC校驗(yàn)碼權(quán)的形式12</p><p>  3.2 CRC校驗(yàn)的實(shí)現(xiàn)13</p><p>  3.3本章小結(jié)13</p><p>  第4章 軟件的實(shí)現(xiàn)及其測(cè)試14</p><p>  4.1 開(kāi)發(fā)工具概述14<

21、/p><p>  4.1.1 Windows編程與MFC14</p><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

22、建立工程17</p><p>  4.4.2 界面功能實(shí)現(xiàn)18</p><p>  4.4.3 模塊分析21</p><p>  4.4.4 程序測(cè)試34</p><p>  4.5 本章小結(jié)39</p><p><b>  第5章 結(jié)論40</b></p><p&

23、gt;  參 考 文 獻(xiàn)41</p><p><b>  致 謝43</b></p><p><b>  第1章 緒論</b></p><p>  1.1 課題的研究意義</p><p>  在發(fā)展如此迅速的信息化時(shí)代,隨著計(jì)算機(jī)的普及和信息技術(shù)的發(fā)展,形成了對(duì)信息的獲取-傳送-處理-利用

24、的完整技術(shù)體系,并在此基礎(chǔ)上形成了通信技術(shù),它應(yīng)用在生產(chǎn)、醫(yī)療、教育、生活等多種領(lǐng)域,成為現(xiàn)今社會(huì)生存和發(fā)展不可或缺的技術(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)

25、域。</p><p>  VC++是新一代面向?qū)ο蟮目梢暬_(kāi)發(fā)工具,作為一個(gè)主流的開(kāi)發(fā)平臺(tái)一直深受編程愛(ài)好者的喜愛(ài),提供了良好的界面設(shè)計(jì)資源,是當(dāng)下圖形開(kāi)發(fā)的一個(gè)比較重要的技能和手段,Window圖形界面編程就是VC++編程開(kāi)發(fā)的經(jīng)典展現(xiàn)之一。Windows圖形界面編程下的MFC,全稱(chēng)是Microsoft Foundation Classes,它是Win32中的應(yīng)用程序,目前Win32中基于VC++6.0的串口通

26、信程序一般可以用兩種方法實(shí)現(xiàn):一是利用 MSComm ActiveX 串行通信控件;二是使用Windows API通信函數(shù)。其中Windows平臺(tái)先進(jìn)的 ActiveX 技術(shù)對(duì)串口編程不再需要處理繁瑣的細(xì)節(jié)。利用自帶的ActiveX控件技術(shù),只要編寫(xiě)少量的代碼,就能很快的完成通信任務(wù)。</p><p>  伴隨著科學(xué)技術(shù)的不斷創(chuàng)新與現(xiàn)代化生產(chǎn)過(guò)程中智能化、自動(dòng)化程度的不斷提高,越來(lái)越多的綜生產(chǎn)過(guò)程和工業(yè)控制系統(tǒng)需

27、要應(yīng)用自身的控制平臺(tái)與數(shù)據(jù)采集處理,利用Windows編程技術(shù)開(kāi)發(fā)這樣的應(yīng)用程序時(shí),其中要面臨的最關(guān)鍵的問(wèn)題是與外圍監(jiān)控設(shè)備連接與通信。與外圍監(jiān)控設(shè)備通信實(shí)際上是計(jì)算機(jī)與計(jì)算機(jī)或計(jì)算機(jī)與終端機(jī)之間的數(shù)據(jù)傳遞,它可以采用串行通信和并行通信兩種通信方式。由于串行通信方式具有使用線(xiàn)路少、成本低、特別是在遠(yuǎn)程傳輸時(shí),避免了很多條線(xiàn)路的特性不一致而被人們廣泛應(yīng)用。所以現(xiàn)在大量的智能儀器、工控設(shè)備、實(shí)驗(yàn)研究設(shè)備或數(shù)據(jù)采集模塊都帶有RS232串行通訊

28、接口,通過(guò)相應(yīng)的通訊協(xié)議和串口通訊程序,可以將測(cè)試、采集的數(shù)據(jù)傳輸?shù)缴衔还た貦C(jī),以滿(mǎn)足各種形式后續(xù)數(shù)據(jù)處理的要求,同時(shí)整個(gè)監(jiān)控系統(tǒng)會(huì)根據(jù)系統(tǒng)運(yùn)行情況通過(guò)串口向監(jiān)控設(shè)備發(fā)送指令,調(diào)節(jié)設(shè)備的運(yùn)行參數(shù)等使得生產(chǎn)過(guò)程平穩(wěn)進(jìn)行[1]。所以學(xué)習(xí)RS232串行通信意義非常重大。</p><p>  1.2 研究現(xiàn)狀及發(fā)展趨勢(shì)</p><p>  1.2.1 RS232串行通信的研究現(xiàn)狀</p>

29、;<p>  目前,串行通信在各類(lèi)領(lǐng)域中都得到了廣泛的應(yīng)用,同時(shí)它還具有較高的性?xún)r(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è)備,它主要采取不平衡傳輸方法,即所謂的單端通信。近年來(lái),

30、串行技術(shù)與連接設(shè)備都得到了很大的發(fā)展,串口設(shè)備在設(shè)備電纜、工業(yè)控制和軟件應(yīng)用程序中得到了大量的應(yīng)用,毫無(wú)疑問(wèn),串行連接技術(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ā)展。未來(lái)R

31、S-232串口通信仍將在低成本、設(shè)計(jì)簡(jiǎn)單的產(chǎn)品中繼續(xù)發(fā)揮著重要作用。低供電電壓和高數(shù)據(jù)率等都將成為未來(lái)發(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>  本文主要通過(guò)RS232標(biāo)準(zhǔn)串口協(xié)議,使用VC++編程語(yǔ)言實(shí)現(xiàn)串行通信,最終完成模擬

32、終端的調(diào)試與仿真。在設(shè)計(jì)過(guò)程中,我通過(guò)查閱大量相關(guān)書(shū)籍和資料,研究學(xué)習(xí)了RS232標(biāo)準(zhǔn)協(xié)議和VC++編程語(yǔ)言下的MFC界面編程,學(xué)習(xí)串行通信相關(guān)知識(shí),通過(guò)編程軟件的仿真完成了基于C++的RS232通信協(xié)議的模擬終端。</p><p><b>  具體工作內(nèi)容如下:</b></p><p>  了解RS232協(xié)議,串口和串行通信原理。</p><p&

33、gt;  分析RS232串行通信的基本原理,并通過(guò)串口調(diào)試助手調(diào)通串口以方便接下來(lái)的操作。</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><

34、p>  2.1 RS232通信協(xié)議</p><p>  2.1.1 RS232標(biāo)準(zhǔn)</p><p>  RS-232標(biāo)準(zhǔn)(協(xié)議)(ANSI/EIA-232標(biāo)準(zhǔn))的全稱(chēng)是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等公司一起開(kāi)發(fā)的1969年公布的通信

35、協(xié)議。</p><p>  RS232協(xié)議一共有兩個(gè)通道:一個(gè)主通道和一個(gè)輔助通道,很多情況下主要使用的是主通道。有25條信號(hào)線(xiàn),盡管有如此多的信號(hào)線(xiàn),但是對(duì)于一般雙工通信,僅僅需要其中幾條信號(hào)線(xiàn)就可實(shí)現(xiàn)數(shù)據(jù)的傳送,即一條發(fā)送線(xiàn)、一條接收線(xiàn)和一條地線(xiàn)。它適合于數(shù)據(jù)傳輸速率在0~20000b/s范圍內(nèi)的通信,即為每秒50、70、100、150、300、600、1200、2400、4800、9600、19200波特,

36、這個(gè)標(biāo)準(zhǔn)對(duì)串行通信接口的有關(guān)問(wèn)題都作了明確規(guī)定[2]。由于通信設(shè)備廠(chǎng)商都生產(chǎn)與RS-232C制式兼容的通信設(shè)備,因此,它作為一種標(biāo)準(zhǔn),目前已在微機(jī)通信接口中廣泛采用,例如在IBM PC機(jī)上的COM1、COM2接口,就是RS-232C接口。它規(guī)定連接電纜、機(jī)械、電氣特性、信號(hào)功能及傳送過(guò)程等。同時(shí),由于RS-232標(biāo)準(zhǔn)具有連線(xiàn)簡(jiǎn)單、通訊距離長(zhǎng)等優(yōu)點(diǎn),目前也廣泛應(yīng)用于微型計(jì)算機(jī)系統(tǒng)、工控機(jī)和大型設(shè)備系統(tǒng)中。</p><p

37、>  2.1.2 RS232接口</p><p>  RS232標(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è)串行口CO

38、M1和COM2,新一代的計(jì)算機(jī)主要以9引腳的D型口接出所有的RS232通信信號(hào)及控制線(xiàn)(有的計(jì)算機(jī)的串口為25引腳)[3]。在RS232的通訊標(biāo)準(zhǔn)中是以一個(gè)25針的接口來(lái)定義的,25針的接口在早期的計(jì)算機(jī)如PC或XT機(jī)型上廣泛使用,但在A(yíng)T機(jī)以后的機(jī)型上,實(shí)際均采用了9針的簡(jiǎn)化版接口應(yīng)用,現(xiàn)在所說(shuō)的RS-232通訊均默認(rèn)為9針的接口[4]?,F(xiàn)在大多數(shù)個(gè)人計(jì)算機(jī)幾乎都沒(méi)有串口,大多采用USB接口,所以要實(shí)現(xiàn)個(gè)人計(jì)算機(jī)與外圍設(shè)備進(jìn)行通信大多

39、采用RS-232轉(zhuǎn)USB接口。RS-232 9針通訊的接口圖如圖2-1所示 。</p><p>  圖2-1 9針通訊接口</p><p><b>  2.2 串行通信</b></p><p>  2.2.1 串行通信基本原理</p><p>  兩個(gè)設(shè)備之間交換數(shù)據(jù)的過(guò)程我們稱(chēng)之為通信。從同時(shí)傳輸?shù)臄?shù)據(jù)位數(shù)來(lái)分通信方式

40、可以分為串行通信(Serial)和并行通信(Parrel)。并行通信中所傳送數(shù)據(jù)的各位同時(shí)發(fā)送或接收。串行通信中所傳送數(shù)據(jù)的各位按順序一位一位地發(fā)送或接收。兩種基本通信方式如圖2-2所示:</p><p><b>  嗎</b></p><p>  a)并行通信 b)串行通信</p><p>  圖2

41、-2 兩種基本的通信方式</p><p>  從上面的圖中可以看到,并行通信成本高,并須使用多條通信線(xiàn),而串行通信只需使用兩條通信線(xiàn)就可以完成兩個(gè)設(shè)備間的數(shù)據(jù)交換,大大降低了通信成本,串行通信又以其串行線(xiàn)間的干擾小得到了廣泛的應(yīng)用。</p><p>  串行通信大多數(shù)用于Windows開(kāi)發(fā)的應(yīng)用程序與外圍數(shù)據(jù)源設(shè)備之間的數(shù)據(jù)交換。串行通信是通過(guò)串行端口實(shí)現(xiàn)的。串行端口的本質(zhì)功能是作為CPU

42、和串行設(shè)備間的編碼轉(zhuǎn)換器[5]。當(dāng)數(shù)據(jù)從CPU經(jīng)過(guò)串行端口發(fā)送出去時(shí),數(shù)據(jù)格式由字節(jié)數(shù)據(jù)轉(zhuǎn)換為串行的位(bit)。在接收數(shù)據(jù)時(shí),數(shù)據(jù)格式由串行的位(bit)被轉(zhuǎn)換為字節(jié)數(shù)據(jù)。</p><p>  2.2.2 串行通信參數(shù)</p><p>  串行通信在數(shù)據(jù)交換過(guò)程中,要對(duì)幾個(gè)重要的通信參數(shù)進(jìn)行設(shè)置,其中包括波特率、數(shù)據(jù)位、停止位、奇偶校驗(yàn)位等。</p><p>&l

43、t;b>  (1)波特率</b></p><p>  所謂波特率就是每秒中傳送的二進(jìn)制位數(shù),其單位是bps(bits per second),用來(lái)描述數(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

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

45、<p><b>  (2)數(shù)據(jù)位</b></p><p>  數(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ù)據(jù)位的取值取決于傳送的信息。數(shù)據(jù)一般為5-8位,它在起始位的后面,是衡量傳送字符的有效數(shù)據(jù)位的個(gè)數(shù)。傳送時(shí)先傳送字符的低位,后傳送字符的高位。數(shù)據(jù)位可以由硬件或軟件設(shè)備進(jìn)行設(shè)置,用來(lái)滿(mǎn)足設(shè)備間數(shù)據(jù)交換

46、的需要。</p><p><b>  (3)停止位</b></p><p>  停止位一般為1、1.5和2位,用來(lái)表示單個(gè)包的最后一位。停止位不僅僅是表示傳輸?shù)慕Y(jié)束,還為計(jì)算機(jī)提供校正時(shí)鐘同步的機(jī)會(huì),由于數(shù)據(jù)是在傳輸線(xiàn)上定時(shí)的,并且每個(gè)設(shè)備都有其自己的時(shí)鐘,很可能在通信中要進(jìn)行數(shù)據(jù)交換的兩臺(tái)設(shè)備間出現(xiàn)小小的不同步,停止位的設(shè)置就是為了避免其中小小的不同步[6]。停止位

47、的位數(shù)的設(shè)置可以由設(shè)備的軟件設(shè)置,停止位的位數(shù)越多,不同時(shí)鐘同步的容忍程度越大,但是數(shù)據(jù)傳輸率相應(yīng)地也會(huì)越慢。</p><p><b>  (4)奇偶校驗(yàn)位</b></p><p>  在串行通信中奇偶校驗(yàn)是一種簡(jiǎn)單的檢錯(cuò)方式,奇偶校驗(yàn)位僅占一位,用于進(jìn)行奇校驗(yàn)和偶校驗(yàn),同時(shí)也可以無(wú)校驗(yàn)位。對(duì)于奇校驗(yàn)和偶校驗(yàn),串口會(huì)設(shè)置校驗(yàn)位,是數(shù)據(jù)位后面的一位,用一個(gè)值保證傳輸?shù)臄?shù)

48、據(jù)有偶個(gè)或者奇?zhèn)€邏輯高位。例如,如果數(shù)據(jù)是001,那么對(duì)于奇校驗(yàn),校驗(yàn)位是0;如果是偶校驗(yàn),校驗(yàn)位是1。這樣使得接收設(shè)備能夠知道一個(gè)位的狀態(tài),有機(jī)會(huì)判斷是否有噪聲干擾了通信或者傳輸和接收數(shù)據(jù)是否發(fā)生了不同步。</p><p>  2.2.3 串行通信的分類(lèi)</p><p>  串行通信又可以分為同步串行通信和異步串行通信兩類(lèi)。</p><p>  同步通信是一種在發(fā)

49、送端發(fā)送一個(gè)抑制載波的雙邊帶信號(hào),而在接收端恢復(fù)載波,再進(jìn)行檢波的通信方式。是按照軟件識(shí)別同步字符來(lái)實(shí)現(xiàn)數(shù)據(jù)的發(fā)送和接收。它是一種連續(xù)串行傳送數(shù)據(jù)的通信方式,一次通信只傳送一幀信息。信息中含有若干個(gè)數(shù)據(jù)字符。 它們均由數(shù)據(jù)字符、CRC即同步字符和校驗(yàn)字符組成。因?yàn)榛謴?fù)的載波與被接收的信號(hào)載波同頻同相,故取名為同步通信,也稱(chēng)抑制載波雙邊帶通信。</p><p>  異步通信數(shù)據(jù)通常以字符或者字節(jié)為單位組成字符幀傳送

50、,字符幀由發(fā)送端逐幀發(fā)送,通過(guò)傳輸線(xiàn)被接收設(shè)備逐幀接收[7]。異步通信通常有兩個(gè)非常重要的指標(biāo):即字符幀格式和波特率。發(fā)送端和接收端可以由各自的時(shí)鐘源來(lái)控制數(shù)據(jù)的發(fā)送和接收,這兩個(gè)時(shí)鐘源彼此獨(dú)立,互不同步,接收端檢測(cè)到傳輸線(xiàn)上發(fā)送過(guò)來(lái)的低電平邏輯"0"(即字符幀起始位)時(shí),確定發(fā)送端已開(kāi)始發(fā)送數(shù)據(jù),每當(dāng)接收端收到字符幀中的停止位時(shí),就知道一幀字符已經(jīng)發(fā)送完畢[3]。異步通信有自己的的缺點(diǎn),其缺點(diǎn)是它在通信時(shí)的傳輸效率

51、較低。當(dāng)然它也具有自己獨(dú)特的優(yōu)點(diǎn),其優(yōu)點(diǎn)就是它的通信設(shè)備簡(jiǎn)單、便宜。</p><p><b>  2.3 串口的調(diào)制</b></p><p>  2.3.1 串口連接</p><p>  現(xiàn)在大多數(shù)計(jì)算機(jī)外用接口都是USB口,外用接口很少有串口的,并且現(xiàn)在的個(gè)人計(jì)算機(jī)的串口大多都是簡(jiǎn)型的9針串口。所以要想通過(guò)串行通信實(shí)現(xiàn)與外圍設(shè)備數(shù)據(jù)交換,必須

52、用USB轉(zhuǎn)RS-232 9針串口轉(zhuǎn)換線(xiàn)。9芯管腳圖如圖 2-3 所示。</p><p>  圖2-3 9芯管腳圖</p><p>  表 2-1 9針管腳各引腳名稱(chēng)功能圖</p><p>  目前,市場(chǎng)上使用的串口有9針管腳的還有25針管腳的。在RS-232的通訊標(biāo)準(zhǔn)中是以一個(gè)25針的接口來(lái)定義的,并且在早期的計(jì)算機(jī)中,如PC機(jī)或XT機(jī)型上得到了廣泛地使用,但是

53、在A(yíng)T機(jī)以后的機(jī)型上,實(shí)際上均采用了9針管腳的簡(jiǎn)化版本應(yīng)用,現(xiàn)在所說(shuō)的RS-232通訊均默認(rèn)為9針的接口。圖2-3顯示了9針通訊的接口管腳,9針管腳的串口各引腳名稱(chēng)、功能和信號(hào)來(lái)源各不相同。表 2-1說(shuō)明九針管腳的串口各引腳的名稱(chēng),功能說(shuō)明和信號(hào)源等。</p><p>  由表 2-1 可知要想實(shí)現(xiàn)兩臺(tái)個(gè)人計(jì)算機(jī)間的數(shù)據(jù)交換,可以將兩個(gè)USB轉(zhuǎn)RS-232線(xiàn)的接口頭的2、3引腳交叉對(duì)接,兩個(gè)5腳相接即可,具體接法

54、如圖2-4所示,然后再講兩個(gè)USB接頭與兩臺(tái)電腦相連。</p><p>  圖2-4 USB轉(zhuǎn)RS232線(xiàn)的連接圖</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)換線(xiàn)的2、3引腳短接,然后

55、將帶有“驅(qū)動(dòng)程序”的光盤(pán)放入個(gè)人計(jì)算機(jī)中,安裝并運(yùn)行與自己計(jì)算機(jī)相匹配的驅(qū)動(dòng)程序,接著將轉(zhuǎn)換線(xiàn)的USB端插入個(gè)人計(jì)算機(jī)的USB口,即完成了初步的安裝。打開(kāi)設(shè)備管理器,看一下所插入的轉(zhuǎn)換線(xiàn)占的是哪個(gè)串口,因?yàn)樵诮酉聛?lái)調(diào)試串口要用到。</p><p>  串口調(diào)試助手是一個(gè)專(zhuān)門(mén)用來(lái)調(diào)試串口程序的功能軟件,要想測(cè)試串口是否可用,應(yīng)先打開(kāi)軟件,選擇串口號(hào),打開(kāi)串口,在發(fā)送區(qū)輸入內(nèi)容,點(diǎn)擊發(fā)送按鈕,若在接收區(qū)中有所發(fā)送的內(nèi)

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

57、 CRC校驗(yàn)</b></p><p>  3.1 CRC校驗(yàn)原理</p><p>  3.1.1 CRC校驗(yàn)碼的基本原理</p><p>  早期的通信由于受到外界各種因素的干擾,會(huì)造成傳輸、接收信號(hào)的不準(zhǔn)確。這主要是由通信技術(shù)不可靠性決定的。這樣不可靠的通信就會(huì)帶來(lái)“確認(rèn)信息”的麻煩,造成一些事情的延誤等。為了避免這一弊端,在進(jìn)行數(shù)據(jù)交換,通信的過(guò)程中

58、,對(duì)通信的可靠性檢查就需要校驗(yàn),校驗(yàn)是從數(shù)據(jù)本身進(jìn)行檢查,它依靠某種數(shù)學(xué)上約定的形式進(jìn)行檢查,校驗(yàn)的結(jié)果是可靠或不可靠,如果可靠就對(duì)數(shù)據(jù)進(jìn)行處理,如果不可靠,就丟棄重發(fā)或者進(jìn)行修復(fù)。</p><p>  如早期一樣目前在通信系統(tǒng)的數(shù)據(jù)傳輸過(guò)程中,由于信道中各種復(fù)雜因素的影響,使傳輸?shù)男盘?hào)受到干擾,造成傳輸過(guò)程中誤碼的出現(xiàn)[8]。接收方為了檢查所接收的數(shù)據(jù)是否有誤碼,可采用多種檢測(cè)方法。差錯(cuò)控制編碼是目前數(shù)據(jù)傳輸過(guò)

59、程中普遍采用的一種提高數(shù)據(jù)通信可靠性的方法,而CRC是一種在實(shí)際通信中應(yīng)用很廣泛的差錯(cuò)控制編碼,具有很強(qiáng)的檢錯(cuò)能力。</p><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)[9]

60、。例如:代碼101011對(duì)應(yīng)的多項(xiàng)式為,而多項(xiàng)式為對(duì)應(yīng)的代碼1100101。CRC校驗(yàn)碼是在K位信息碼后再拼接R位的校驗(yàn)碼,整個(gè)編碼長(zhǎng)度為N位,因此,這種編碼也叫(N,K)碼。</p><p>  CRC校驗(yàn)碼的生成借助于多項(xiàng)式除法,其余數(shù)為校驗(yàn)字段。其中發(fā)送方發(fā)出傳輸字段,傳輸字段由兩部分組成的,分別為信息字段和校驗(yàn)字段[10,11]。接收方使用相同的生成碼進(jìn)行校驗(yàn),若接收到的字段或生成碼(二進(jìn)制除法)如果能夠

61、除盡,則說(shuō)明在通信過(guò)程中,數(shù)據(jù)交換期間未受到其他因素的干擾,消息收發(fā)成功。</p><p>  3.1.2 CRC校驗(yàn)碼權(quán)的形式</p><p>  CRC校驗(yàn)碼有很多種權(quán)的行式,使用哪一種形式是根據(jù)通信雙方共同制定的“規(guī)則”而定的,其中各種常用權(quán)的形式如下所示:</p><p><b>  (3-1)</b></p><p

62、><b> ?。?-2)</b></p><p><b> ?。?-3)</b></p><p><b> ?。?-4)</b></p><p><b>  (3-5)</b></p><p>  以其中CRC-CCITT形式為例。圖 3-1說(shuō)明了

63、CRC 校驗(yàn)中 CRC 值是如何計(jì)算出來(lái)的,體現(xiàn)的多項(xiàng)式正是式(3-5)。從把數(shù)據(jù)移位開(kāi)始計(jì)算,將數(shù)據(jù)位(從最低的數(shù)據(jù)位開(kāi)始)逐位移入反向耦合移位寄存器。當(dāng)所有數(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的移位寄存器

64、的作用原理</p><p>  3.2 CRC校驗(yàn)的實(shí)現(xiàn)</p><p>  實(shí)現(xiàn)CRC校驗(yàn)有很多種算法和方式,最基本的算法應(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)。在使用

65、的時(shí)候,把計(jì)算出來(lái)的校驗(yàn)值放在最后兩個(gè)字節(jié)里,將其發(fā)送出去,接收端對(duì)所有的數(shù)據(jù)進(jìn)行相同的校驗(yàn),如校驗(yàn)值為0我們則認(rèn)為其數(shù)據(jù)沒(méi)有出錯(cuò)。這個(gè)是按高位到低位的發(fā)送順序時(shí)使用的校驗(yàn)方法。</p><p><b>  3.3本章小結(jié)</b></p><p>  本章介紹了通信中最常使用的校驗(yàn)方法,即CRC校驗(yàn)。分析了CRC校驗(yàn)原理、算法形式和算法的實(shí)現(xiàn)。并通過(guò)CRC校驗(yàn)實(shí)現(xiàn)通信

66、中的檢錯(cuò)。</p><p>  第4章 軟件的實(shí)現(xiàn)及其測(cè)試</p><p>  4.1 開(kāi)發(fā)工具概述</p><p>  4.1.1 Windows編程與MFC</p><p>  Windows編程大致有兩種方法,一種是Windows C方向,即SDK方向,調(diào)用Win 32 API函數(shù),主要是利用C語(yǔ)言來(lái)實(shí)現(xiàn)軟件的功能與編程;另外一種方法是

67、C++對(duì)SDK函數(shù)進(jìn)行包裝,如VC的MFC(微軟基礎(chǔ)類(lèi)庫(kù)),BOB的OWL等[12,13]。其中使用MFC直接編寫(xiě)提供大量預(yù)先編好的類(lèi)和支持代碼或使用MFC和向?qū)В╓izards)編寫(xiě),用AppWizard來(lái)生成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é)

68、構(gòu),還為其提供了標(biāo)準(zhǔn)的圖形用戶(hù)界面如菜單欄、工具欄、狀態(tài)欄等,開(kāi)發(fā)人員只需要在此基礎(chǔ)上添加針對(duì)特定應(yīng)用的代碼即可。使用此應(yīng)用程序框架有很多優(yōu)點(diǎn),如其應(yīng)用程序代碼小,運(yùn)行速度快,并且此應(yīng)用程序提供的工具也降低了編碼的難度等。</p><p>  Windows應(yīng)用程序的框架主要有兩種類(lèi)型,一種是基于對(duì)話(huà)框的應(yīng)用程序框架,另外一種是基于文檔、視圖結(jié)構(gòu)的應(yīng)用程序框架。平大家所見(jiàn)到的大多數(shù)Windows應(yīng)用程序均屬于這兩

69、種框架。</p><p>  MFC的全稱(chēng)是Microsoft Foundation Classes。是微軟把Windows API 進(jìn)行封裝的類(lèi)庫(kù),該類(lèi)庫(kù)以層次結(jié)構(gòu)組織起來(lái),其中封裝了大部分Windows API函數(shù)和Windows控件[14]。1989年微軟公司成立Application Framework技術(shù)團(tuán)隊(duì),名為AFX小組,用以開(kāi)發(fā)C++面向?qū)ο蠊ぞ呓oWindows應(yīng)用程序開(kāi)發(fā)人員使用。啟用MFC編碼

70、可以使Windows程序員能夠利用C++面向?qū)ο蟮乃枷脒M(jìn)行編程,用好的類(lèi)作為標(biāo)準(zhǔn),減少代碼的編寫(xiě)量[15]。</p><p>  4.1.2 串行通信控件MSComm</p><p>  目前,以Windows下的MFC應(yīng)用程序?yàn)橹饕目蚣?,常用的基于VC++的串行通信編程一般可以用兩種方法實(shí)現(xiàn):一種是使用Windows API通信函數(shù)。雖然在Windows下Win32API提供了使用文件

71、操作方式的函數(shù)進(jìn)行串口操作的方法,但是在編程實(shí)現(xiàn)上還是比較復(fù)雜。其余一種是利用MSComm ActiveX 串行通信控件。Windows提供的ActiveX控件利用它本身帶的MSComm ActiveX控件,只需要程序員編寫(xiě)少量的代碼,就能輕松完成任務(wù),這樣就使得對(duì)串口編程不再需要處理煩瑣的細(xì)節(jié)。程序員就不需要花費(fèi)大量時(shí)間去了解API函數(shù),只需要利用MSComm控件就可實(shí)現(xiàn)串口通信編程[16]。所以,本次實(shí)現(xiàn)兩臺(tái)PC間的通信使用的就是M

72、SComm控件。</p><p>  4.2 程序的主要功能</p><p>  實(shí)現(xiàn)兩臺(tái)PC機(jī)之間的通信的應(yīng)用程序,主要實(shí)現(xiàn)了密碼登陸、參設(shè)設(shè)置、參數(shù)顯示、打開(kāi)串口、關(guān)閉串口、數(shù)據(jù)發(fā)送、數(shù)據(jù)接收、CRC校驗(yàn)等功能。主要功能框圖如圖4-1所示。</p><p>  圖4-1 主要功能框圖</p><p>  應(yīng)用程序主要實(shí)現(xiàn)的功能如圖4-1所

73、示的主要功能框圖,此應(yīng)用程序的總體程序流程圖如圖4-2所示。</p><p>  圖4-2 程序流程框圖</p><p>  使用此應(yīng)用程序時(shí),需要有正確的用戶(hù)名和密碼才能登錄到此軟件的主界面,登錄到主界面后,要想實(shí)現(xiàn)兩臺(tái)PC間的通信則需要選擇可用的串口號(hào)并且傳輸參數(shù)要一致,其中包括波特率、數(shù)據(jù)位、停止位、奇偶校驗(yàn)位等,只有設(shè)置對(duì)的參數(shù)才能實(shí)現(xiàn)數(shù)據(jù)交換的功能。在發(fā)送接收數(shù)據(jù)過(guò)程中需要打開(kāi)串

74、口。通信結(jié)束后,關(guān)閉打開(kāi)的串口。能夠發(fā)送單個(gè)或多個(gè)數(shù)據(jù)。能夠接收和顯示多個(gè)數(shù)據(jù),并且能夠通過(guò)CRC校驗(yàn)檢查接收的數(shù)據(jù)是否正確。程序流程圖如圖3-2所示。</p><p>  4.3 程序運(yùn)行平臺(tái)</p><p>  在程序設(shè)計(jì)時(shí),原計(jì)劃使用VS2008軟件,但是由于電腦、操作系統(tǒng)等各種原因,就改用VC++ 6.0這個(gè)軟件。</p><p><b>  4.

75、4詳細(xì)設(shè)計(jì)</b></p><p>  4.4.1 建立工程</p><p>  要實(shí)現(xiàn)通信,首先應(yīng)先建立工程,即新建基于Win32的MFC應(yīng)用程序。首先打開(kāi)VC++6.0軟件,建立基于對(duì)話(huà)框的MFC應(yīng)用程序。并將這個(gè)應(yīng)用程序命名為通信[17,18]。然后在將基于對(duì)話(huà)框選中(如圖4-3),直接下一步即可,最后直到完成。</p><p>  圖4-3 建立

76、基于對(duì)話(huà)框應(yīng)用程序過(guò)程圖</p><p>  按照如上所示的方法步驟,建立Win32下的MFC應(yīng)用程序工程,應(yīng)用程序工程名為“通信”,最后點(diǎn)擊完成按鈕,就會(huì)出現(xiàn)MFC應(yīng)用程序初始界面如圖4-4所示[19]。</p><p>  圖4-4 應(yīng)用程序最初界面</p><p>  4.4.2 界面功能實(shí)現(xiàn)</p><p><b>  (1

77、)登錄界面</b></p><p>  登錄界面的設(shè)計(jì)除了應(yīng)用MFC中的控件和工具外,要想實(shí)現(xiàn)其用戶(hù)名和密碼的驗(yàn)證功能還利用了數(shù)據(jù)庫(kù)的知識(shí)。本次登陸界面使用的數(shù)據(jù)庫(kù)是微軟的Access數(shù)據(jù)庫(kù)。Access數(shù)據(jù)庫(kù)是一個(gè)小型的數(shù)據(jù)庫(kù),使用起來(lái)非常的靈活、方便 。對(duì)Access數(shù)據(jù)庫(kù)的連接與操作有很多種方法,例如在A(yíng)SP中建立對(duì)Access數(shù)據(jù)庫(kù)的連接、使用Recordset對(duì)象操作Access數(shù)據(jù)庫(kù)、使用

78、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è)诔绦蛑校恍枰妙A(yù)先定義的數(shù)據(jù)源名DSN即可[20,21]。</p><p>  首先,啟動(dòng)Microsoft Office Access,建立Access數(shù)據(jù)庫(kù),命名為demo01,然后在數(shù)據(jù)庫(kù)中創(chuàng)建一

79、個(gè)表,命名為puser,在表puser中輸入序號(hào)(userid)、用戶(hù)名(username)和密碼(userpwd),將這個(gè)數(shù)據(jù)庫(kù)保存。最后為Access數(shù)據(jù)庫(kù)demo01建立數(shù)據(jù)源,利用ODBC驅(qū)動(dòng)。數(shù)據(jù)庫(kù)和數(shù)據(jù)源建立完成后,開(kāi)始用MFC建立登陸界面。數(shù)據(jù)庫(kù)中用戶(hù)名和密碼如圖4-5所示。</p><p>  圖4-5 數(shù)據(jù)庫(kù)中用戶(hù)名和弱密碼</p><p>  運(yùn)行應(yīng)用程序時(shí),若輸入了錯(cuò)

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

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

82、/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è)置則點(diǎn)擊取消按鈕,參數(shù)設(shè)置界面關(guān)閉,回到主界面。界面的具體情況如圖4-8所示。</p><p><b>

83、;  圖4-8 設(shè)置界面</b></p><p>  4.4.3 模塊分析</p><p>  (1)用戶(hù)名密碼登錄模塊</p><p>  在登錄界面下,在編輯框中輸入用戶(hù)名和密碼,單擊界面中的【登錄】按鈕,可以驗(yàn)證用戶(hù)名密碼輸入是否正確,若正確登錄,程序提示“登陸成功,歡迎使用!”,然后登陸界面關(guān)閉顯示主界面,若輸入錯(cuò)誤則程序提示“密碼用戶(hù)名錯(cuò)誤,請(qǐng)

84、重新輸入!”。需要重新輸入和驗(yàn)證,驗(yàn)證通過(guò)后才可以登錄。實(shí)現(xiàn)該功能的程序流程圖如圖4-9所示,實(shí)現(xiàn)該功能的程序代碼如下:</p><p>  圖4-9 用戶(hù)名密碼登錄模塊流程圖</p><p>  void CMylogin::OnBnClickedOk()</p><p><b>  {</b></p><p>  /

85、/ TODO: Add your control notification handler code here</p><p><b>  OnOK();</b></p><p><b>  }</b></p><p>  void CMylogin::OnOK() </p><p><b&g

86、t;  {</b></p><p>  TODO: Add extra validation here</p><p>  UpdateData(TRUE); //讀取編輯框內(nèi)容</p><p>  CUserRecordset m_user; //新建的類(lèi),是基于CRecordset</p><p><b>  try

87、</b></p><p><b>  {</b></p><p>  if(m_user.IsOpen())//判斷記錄集是否打開(kāi)</p><p>  m_user.Close(); //若打開(kāi)則將其關(guān)閉</p><p>  m_user.m_strFilter.Format("username

88、='%s'anduserpwd='%s'",m_username,m_userpwd);//用來(lái)作為檢索條件,字符串格式化輸出</p><p>  m_user.Open(CRecordset::snapshot,NULL,CRecordset::none);</p><p>  if(m_user.IsEOF())//密碼用戶(hù)名不一致()<

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

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

91、t;  CDialog::OnOK();</p><p><b>  }</b></p><p><b>  }</b></p><p>  catch(CDBException* e)//try….catch是捕捉異常,即先執(zhí)行try若成功則結(jié)束</p><p>  {

92、 //若失敗則執(zhí)行catch捕捉異常并輸出</p><p>  e->ReportError();</p><p><b>  return;</b></p><p><b>  }</b></p><p>  (2)應(yīng)用程序初始化</p><p>  實(shí)現(xiàn)先顯

93、示登陸界面后主界面,利用MFC中的模式對(duì)話(huà)框在初始化函數(shù)中來(lái)實(shí)現(xiàn),若串口是打開(kāi)的則關(guān)閉串口,同時(shí)串口參數(shù)的設(shè)置也是在初始化函數(shù)中設(shè)置實(shí)現(xiàn)的。初始化的程序流程圖如圖4-10所示。具體程序代碼如下面所示:</p><p>  圖4-10 初始化流程圖</p><p>  BOOL CMyDlg::OnInitDialog()</p><p><b>  {&l

94、t;/b></p><p>  CDialog::OnInitDialog();</p><p><b>  ……</b></p><p>  // TODO: Add extra initialization here</p><p>  CMylogin my;</p><p>  my

95、.DoModal();//顯示登錄界面</p><p>  if(m_cComm.GetPortOpen()) //如果發(fā)現(xiàn)串口本來(lái)是打開(kāi)的,則關(guān)閉串口</p><p>  m_cComm.SetPortOpen(FALSE);</p><p>  m_cComm.SetCommPort(4); //選擇COM4端口</p><p>  m_

96、cComm.SetInputMode(1); //輸入方式為二進(jìn)制方式</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

97、");//波特率,無(wú)校驗(yàn),數(shù)據(jù)位,停止位</p><p>  return TRUE; </p><p><b>  }</b></p><p>  (3)設(shè)置、打開(kāi)和關(guān)閉串口功能</p><p>  圖4-11 設(shè)置、打開(kāi)和關(guān)閉串口流程圖</p><p>  串行通信是通過(guò)串口實(shí)現(xiàn)數(shù)

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

99、gt;<p>  m_cComm.SetPortOpen(FALSE);</p><p>  CMyDlg md1;</p><p>  UpdateData(true);</p><p>  md1.m_comn = m_comn;</p><p>  m_cComm.SetCommPort(m_comn+1); //設(shè)置串口

100、號(hào)</p><p>  m_cComm.SetInBufferSize(1024); //接收緩沖區(qū)</p><p>  m_cComm.SetOutBufferSize(1024);//發(fā)送緩沖區(qū)</p><p>  m_cComm.SetInputLen(0);//設(shè)置當(dāng)前接收區(qū)數(shù)據(jù)長(zhǎng)度為,表示全部讀取</p><p>  m_cComm

101、.SetInputMode(1);//以二進(jìn)制方式讀寫(xiě)數(shù)據(jù)</p><p>  m_cComm.SetRThreshold(1);</p><p>  if(!m_cComm.GetPortOpen())</p><p><b>  {</b></p><p>  m_cComm.SetPortOpen(TRUE); /

102、/打開(kāi)串口</p><p>  m_cComm.SetRThreshold(1); //每當(dāng)接收緩沖區(qū)有個(gè)字符則接收串口數(shù)據(jù)</p><p>  m_cComm.SetInputLen(0); //設(shè)置當(dāng)前緩沖區(qū)長(zhǎng)度</p><p>  m_cComm.GetInput(); //預(yù)讀緩沖區(qū)以清除殘留數(shù)據(jù)</p><p><b> 

103、 }</b></p><p><b>  else</b></p><p>  AfxMessageBox("打開(kāi)端口失敗!",MB_ICONSTOP,0);</p><p><b>  }</b></p><p>  void CMyDlg::OnClose()//

104、關(guān)閉串口</p><p><b>  {</b></p><p>  m_cComm.SetPortOpen(FALSE);</p><p><b>  }</b></p><p>  (4)實(shí)現(xiàn)數(shù)據(jù)交換模塊</p><p>  使用MSComm通信控件是MFC中進(jìn)行串口通訊

105、最簡(jiǎn)單的。MSComm通信控件提供了一系列標(biāo)準(zhǔn)通信命令的接口,它可以建立串口連接,可以連接到其他通信設(shè)備(如Modem)還可以發(fā)送命令、進(jìn)行數(shù)據(jù)交換以及以及監(jiān)視通信中的干擾,從而可以用它創(chuàng)建全雙工 、事件驅(qū)動(dòng)的、高效實(shí)用的通信程序[22,23]。加入MSComm通信控件,實(shí)現(xiàn)從緩沖區(qū)中讀取數(shù)據(jù),同時(shí)將數(shù)據(jù)給接收變量,更新接收區(qū)編輯框的內(nèi)容。實(shí)現(xiàn)此模塊的程序流程圖如圖4-12所示,其功能代碼如下:</p><p>

106、  圖4-12 數(shù)據(jù)交換模塊流程圖</p><p><b>  代碼如下:</b></p><p>  void CMyDlg::OnOnComm() </p><p><b>  {</b></p><p>  // TODO: Add your control notification hand

107、ler code here</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>  CStri

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

109、p=variant_inp; ///變量轉(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>

110、;  for(k=0;k<len;k++) //將數(shù)組轉(zhuǎn)換為CString型變量</p><p><b>  {</b></p><p>  char bt=*(char*)(rxdata+k); //字符型</p><p>  if(m_ctrlHexDiaplay.GetCheck())</p><p>  s

111、trtemp.Format("%02X ",bt); //將字符以十六進(jìn)制方式送入臨時(shí)變量strtemp,加空格</p><p>  else strtemp.Format("%c",bt); //將字符送入臨時(shí)變量strtemp存放</p><p>  CByteArray hexdata;</p><p>  unsign

112、ed int le1=String2Hex(strtemp,hexdata);</p><p>  unsigned char* a= (unsigned char*)(LPCTSTR)strtemp; </p><p>  if(m_strlcrcs.GetCheck())</p><p>  m_crca=crc16r(a,le1);</p>&l

113、t;p>  UpdateData(false);</p><p>  m_receive+=strtemp; //加入接收編輯框?qū)?yīng)字符串</p><p><b>  }</b></p><p><b>  }</b></p><p>  CString temp=("\r\n&qu

114、ot;); //顯示完成后要自動(dòng)換行</p><p>  m_receive+=temp;</p><p>  UpdateData(FALSE); //更新編輯框內(nèi)容</p><p><b>  }</b></p><p><b>  (5)參數(shù)設(shè)置模塊</b></p><p&

溫馨提示

  • 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)論