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

下載本文檔

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

文檔簡介

1、<p>  基于C++的RS232通信</p><p><b>  協(xié)議模擬終端</b></p><p>  Analog Terminal For RS232 Communication </p><p>  Protocol Based On C++</p><p>  學 院: </p&

2、gt;<p><b>  專 業(yè) 班 級: </b></p><p>  學 號:</p><p><b>  學 生 姓 名: </b></p><p><b>  指 導 教 師: </b></p><p>  2013 年 06 月</p&

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

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

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

6、應用。用RS-232協(xié)議實現(xiàn)兩臺PC機間的串行通信為以后實現(xiàn)更加復雜的設備間通信奠定了基礎。</p><p>  關鍵詞:RS232標準;串行通信;C++;CRC校驗</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ā)展趨勢2</p><p>  1.2.1 RS232串行通信的研究現(xiàn)狀2</p><p>  1.2.2 RS232串行通信的發(fā)展趨勢2</p><p>  1.3 本文主要的研究內(nèi)容2</p><p>  第2章串行通信基本原理4</p><p>  2.1 RS232通信協(xié)議4</p&g

18、t;<p>  2.1.1 RS232標準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 串行通信的分類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 本章小結10</p><p>  第3章 CRC校驗11</p><p>  3.1 CRC校驗原理11</p><

20、;p>  3.1.1 CRC校驗碼的基本原理11</p><p>  3.1.2 CRC校驗碼權的形式12</p><p>  3.2 CRC校驗的實現(xiàn)13</p><p>  3.3本章小結13</p><p>  第4章 軟件的實現(xiàn)及其測試14</p><p>  4.1 開發(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 程序運行平臺17</p><p>  4.4詳細設計17</p><p>  4.4.1

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

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

24、的完整技術體系,并在此基礎上形成了通信技術,它應用在生產(chǎn)、醫(yī)療、教育、生活等多種領域,成為現(xiàn)今社會生存和發(fā)展不可或缺的技術。</p><p>  隨著通信技術的不斷創(chuàng)新和發(fā)展以及計算機網(wǎng)絡和多微機系統(tǒng)的廣泛應用,USB通信技術的發(fā)展如此迅速,盡管如此,然而串口通信技術以其實現(xiàn)簡單、使用靈活方便、數(shù)據(jù)傳輸可靠等優(yōu)點并未面臨被淘汰,反而在通信領域中一直都被人們廣泛的應用。它主要被廣泛應用在工業(yè)控制生產(chǎn)和實驗室等重要領

25、域。</p><p>  VC++是新一代面向對象的可視化開發(fā)工具,作為一個主流的開發(fā)平臺一直深受編程愛好者的喜愛,提供了良好的界面設計資源,是當下圖形開發(fā)的一個比較重要的技能和手段,Window圖形界面編程就是VC++編程開發(fā)的經(jīng)典展現(xiàn)之一。Windows圖形界面編程下的MFC,全稱是Microsoft Foundation Classes,它是Win32中的應用程序,目前Win32中基于VC++6.0的串口通

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

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

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

29、;<p>  目前,串行通信在各類領域中都得到了廣泛的應用,同時它還具有較高的性價比和傳輸可靠性等優(yōu)點。RS-232被定義為一種在低速率串行通信中增加通信距離的單端標準。串行通信中的串口應用始于1960年,然而RS-232的初始版本于1969年才得到認證,認證的版本號為RS-232C,在這之前有RS-232A、RS-232B這兩個版本。RS-232標準主要適用于通信設備,它主要采取不平衡傳輸方法,即所謂的單端通信。近年來,

30、串行技術與連接設備都得到了很大的發(fā)展,串口設備在設備電纜、工業(yè)控制和軟件應用程序中得到了大量的應用,毫無疑問,串行連接技術仍然是工商業(yè)、醫(yī)療、教育和實驗室等領域中所應用的廣泛標志。</p><p>  1.2.2 RS232串行通信的發(fā)展趨勢</p><p>  RS-232協(xié)議自1960年形成,1969年得到認證,一直到如今的廣泛使用,始終隨著各種領域應用需求的不斷變化而穩(wěn)步發(fā)展。未來R

31、S-232串口通信仍將在低成本、設計簡單的產(chǎn)品中繼續(xù)發(fā)揮著重要作用。低供電電壓和高數(shù)據(jù)率等都將成為未來發(fā)展中新設計的普遍要求。我們堅信RS-232一定會繼續(xù)隨著各種外圍設備的不斷發(fā)展而提高,同時也將繼續(xù)保持通信領域中應用最為廣泛這一地位的。</p><p>  1.3 本文主要的研究內(nèi)容</p><p>  本文主要通過RS232標準串口協(xié)議,使用VC++編程語言實現(xiàn)串行通信,最終完成模擬

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

33、gt;  分析RS232串行通信的基本原理,并通過串口調(diào)試助手調(diào)通串口以方便接下來的操作。</p><p>  了解CRC校驗,掌握CRC校驗基本原理及應用。</p><p>  在VC++高級語言中,利用Windows下的MSComm ActiveX控件,實現(xiàn)兩臺計算機間的通信測試與仿真。</p><p>  第2章串行通信基本原理</p><

34、p>  2.1 RS232通信協(xié)議</p><p>  2.1.1 RS232標準</p><p>  RS-232標準(協(xié)議)(ANSI/EIA-232標準)的全稱是EIA-RS-232C標準,其中EIA代表美國電子工業(yè)協(xié)會,RS代表推薦標準,232是標識號,C代表RS-232的修改次數(shù)。RS-232C標準是美國EIA(電子工業(yè)聯(lián)合會)與BELL等公司一起開發(fā)的1969年公布的通信

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

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

37、>  2.1.2 RS232接口</p><p>  RS232標準是按負邏輯定義的,它的“1”電平在-5~-15 V之間,“0”電平在+5~+15 V之間。RS232接口是標準串行接口,其通訊距離小于15 m,它的傳輸速率小于20 kb/s。RS232串行接口屬于個人計算機(PC)及電信應用領域中最為成功的串行數(shù)據(jù)標準。是目前PC機與通信工業(yè)中應用最廣泛的一種串行接口?,F(xiàn)在的計算機一般至少有兩個串行口CO

38、M1和COM2,新一代的計算機主要以9引腳的D型口接出所有的RS232通信信號及控制線(有的計算機的串口為25引腳)[3]。在RS232的通訊標準中是以一個25針的接口來定義的,25針的接口在早期的計算機如PC或XT機型上廣泛使用,但在AT機以后的機型上,實際均采用了9針的簡化版接口應用,現(xiàn)在所說的RS-232通訊均默認為9針的接口[4]。現(xiàn)在大多數(shù)個人計算機幾乎都沒有串口,大多采用USB接口,所以要實現(xiàn)個人計算機與外圍設備進行通信大多

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

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

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

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

43、t;b>  (1)波特率</b></p><p>  所謂波特率就是每秒中傳送的二進制位數(shù),其單位是bps(bits per second),用來描述數(shù)據(jù)的傳送速率,是衡量串行通信數(shù)據(jù)傳輸速度快慢的重要指標。國際上對波特率規(guī)定了一個標準系列:110bps、300bps、600bps、1200bps、1800bps、2400bps、4800bps、9600bps、14.4Kbps、28.8Kbps

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

45、<p><b>  (2)數(shù)據(jù)位</b></p><p>  數(shù)據(jù)位是衡量通信中實際數(shù)據(jù)位的參數(shù)。當計算機發(fā)送一個信息包,實際的數(shù)據(jù)不會是8位的,標準的值是5、7和8位。怎樣決定數(shù)據(jù)位的取值取決于傳送的信息。數(shù)據(jù)一般為5-8位,它在起始位的后面,是衡量傳送字符的有效數(shù)據(jù)位的個數(shù)。傳送時先傳送字符的低位,后傳送字符的高位。數(shù)據(jù)位可以由硬件或軟件設備進行設置,用來滿足設備間數(shù)據(jù)交換

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

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

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

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

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

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

52、用USB轉RS-232 9針串口轉換線。9芯管腳圖如圖 2-3 所示。</p><p>  圖2-3 9芯管腳圖</p><p>  表 2-1 9針管腳各引腳名稱功能圖</p><p>  目前,市場上使用的串口有9針管腳的還有25針管腳的。在RS-232的通訊標準中是以一個25針的接口來定義的,并且在早期的計算機中,如PC機或XT機型上得到了廣泛地使用,但是

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

54、如圖2-4所示,然后再講兩個USB接頭與兩臺電腦相連。</p><p>  圖2-4 USB轉RS232線的連接圖</p><p>  2.3.2 串口調(diào)試</p><p>  實現(xiàn)個人計算機與外圍設備間的串行通信必須將個人計算機上的串口調(diào)通,驗證一下個人計算機上的串口是否好用。這就需要用到串口調(diào)試小助手。首先將一根USB轉RS-232轉換線的2、3引腳短接,然后

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

56、容,則證明此串口可用。</p><p><b>  2.4 本章小結</b></p><p>  本章從原理上介紹了串行通信的基本原理,詳細的闡述了RS232標準協(xié)議接口和與串行通信相關的一些知識。介紹了通信參數(shù)與串行通信的分類。為下文編寫Windows應用程序實現(xiàn)兩臺PC機進行數(shù)據(jù)交換提供了基礎。</p><p><b>  第3章

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

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

59、程中普遍采用的一種提高數(shù)據(jù)通信可靠性的方法,而CRC是一種在實際通信中應用很廣泛的差錯控制編碼,具有很強的檢錯能力。</p><p>  CRC(Cyclic Redundancy Check)循環(huán)冗余校驗碼是數(shù)據(jù)通信領域中最常用的一種差錯校驗碼,其特征是信息字段和校驗字段的長度可以任意選定,CRC循環(huán)冗余校驗碼的基本原理是任意一個由二進制位串組成的代碼都可以和一個系數(shù)僅為‘0’和‘1’取值的多項式一一對應[9]

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

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

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

63、CRC 校驗中 CRC 值是如何計算出來的,體現(xiàn)的多項式正是式(3-5)。從把數(shù)據(jù)移位開始計算,將數(shù)據(jù)位(從最低的數(shù)據(jù)位開始)逐位移入反向耦合移位寄存器。當所有數(shù)據(jù)位都這樣操作后,計算結束。此時,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校驗的實現(xiàn)</p><p>  實現(xiàn)CRC校驗有很多種算法和方式,最基本的算法應該是按位計算了,這個方法可以適用于所有長度的數(shù)據(jù)校驗,是最為靈活的,但由于是按位計算,其效率并不是最迅速、最優(yōu)的,只適用于對速度不敏感的場合。還有一種是按照字節(jié)計算CRC校驗碼,按字節(jié)校驗是每次計算8位數(shù)據(jù),多是基于查表的算法,首先要準備一個表,一共256項。在使用

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

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

67、C++對SDK函數(shù)進行包裝,如VC的MFC(微軟基礎類庫),BOB的OWL等[12,13]。其中使用MFC直接編寫提供大量預先編好的類和支持代碼或使用MFC和向導(Wizards)編寫,用AppWizard來生成Windows應用程序框架。</p><p>  本次軟件程序設計功能的實現(xiàn)主要利用Windows編程中MFC(利用C++語言)。MFC提供了構造Windows應用程序的框架,它不僅為應用程序建立標準的結

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

69、種框架。</p><p>  MFC的全稱是Microsoft Foundation Classes。是微軟把Windows API 進行封裝的類庫,該類庫以層次結構組織起來,其中封裝了大部分Windows API函數(shù)和Windows控件[14]。1989年微軟公司成立Application Framework技術團隊,名為AFX小組,用以開發(fā)C++面向對象工具給Windows應用程序開發(fā)人員使用。啟用MFC編碼

70、可以使Windows程序員能夠利用C++面向對象的思想進行編程,用好的類作為標準,減少代碼的編寫量[15]。</p><p>  4.1.2 串行通信控件MSComm</p><p>  目前,以Windows下的MFC應用程序為主要的框架,常用的基于VC++的串行通信編程一般可以用兩種方法實現(xiàn):一種是使用Windows API通信函數(shù)。雖然在Windows下Win32API提供了使用文件

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

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

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

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

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

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

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

78、SQL指令操作數(shù)據(jù)庫、使用DSN連接Access數(shù)據(jù)庫等。其中使用DNS連接Access數(shù)據(jù)庫方法中,在定義DSN的時候,就已經(jīng)指定好了數(shù)據(jù)源需要的ODBC驅動程序,也指定好了數(shù)據(jù)庫文件的實際路徑和名字,我們在程序中,只需要引用預先定義的數(shù)據(jù)源名DSN即可[20,21]。</p><p>  首先,啟動Microsoft Office Access,建立Access數(shù)據(jù)庫,命名為demo01,然后在數(shù)據(jù)庫中創(chuàng)建一

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

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

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

82、/p><p>  完成兩臺PC機間的串行通信(數(shù)據(jù)交換),必須保證兩個串口的通信參數(shù)一致,這樣就需要將兩個應用程序的通信參數(shù)重新設置,通信參數(shù)包括波特率、數(shù)據(jù)位、停止位、奇偶校驗位等。相應的通信參數(shù)設置完成后,點擊【確定】按鈕,應用程序則會再次跳轉到主界面(數(shù)據(jù)收發(fā)界面),若想取消設置則點擊取消按鈕,參數(shù)設置界面關閉,回到主界面。界面的具體情況如圖4-8所示。</p><p><b>

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

84、重新輸入!”。需要重新輸入和驗證,驗證通過后才可以登錄。實現(xiàn)該功能的程序流程圖如圖4-9所示,實現(xiàn)該功能的程序代碼如下:</p><p>  圖4-9 用戶名密碼登錄模塊流程圖</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; //新建的類,是基于CRecordset</p><p><b>  try

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

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

89、/p><p><b>  {</b></p><p>  m_user.Close();</p><p>  AfxMessageBox("用戶名、密碼錯誤,請重試!");</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若成功則結束</p><p>  {

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

93、示登陸界面后主界面,利用MFC中的模式對話框在初始化函數(shù)中來實現(xiàn),若串口是打開的則關閉串口,同時串口參數(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)串口本來是打開的,則關閉串口</p><p>  m_cComm.SetPortOpen(FALSE);</p><p>  m_cComm.SetCommPort(4); //選擇COM4端口</p><p>  m_

96、cComm.SetInputMode(1); //輸入方式為二進制方式</p><p>  m_cComm.SetInBufferSize(1024); //設置輸入緩沖區(qū)</p><p>  m_cComm.SetOutBufferSize(512); //設置輸出緩沖區(qū)</p><p>  m_cComm.SetSettings("9600,n,8,1

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

98、據(jù)交換的,但是PC機上有不止一個串口,需要我們設置進行串行通信端口號,并將串口打開,通信結束后將串口關閉。程序流程圖如圖4-11所示,實現(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); //設置串口

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

101、.SetInputMode(1);//以二進制方式讀寫數(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、/打開串口</p><p>  m_cComm.SetRThreshold(1); //每當接收緩沖區(qū)有個字符則接收串口數(shù)據(jù)</p><p>  m_cComm.SetInputLen(0); //設置當前緩沖區(qū)長度</p><p>  m_cComm.GetInput(); //預讀緩沖區(qū)以清除殘留數(shù)據(jù)</p><p><b> 

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

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

105、最簡單的。MSComm通信控件提供了一系列標準通信命令的接口,它可以建立串口連接,可以連接到其他通信設備(如Modem)還可以發(fā)送命令、進行數(shù)據(jù)交換以及以及監(jiān)視通信中的干擾,從而可以用它創(chuàng)建全雙工 、事件驅動的、高效實用的通信程序[22,23]。加入MSComm通信控件,實現(xiàn)從緩沖區(qū)中讀取數(shù)據(jù),同時將數(shù)據(jù)給接收變量,更新接收區(qū)編輯框的內(nèi)容。實現(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]; //設置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; ///變量轉換</p><p>  len=safearray_inp.GetOneDimSize(); //得到有效的數(shù)據(jù)長度</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ù)組轉換為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); //將字符以十六進制方式送入臨時變量strtemp,加空格</p><p>  else strtemp.Format("%c",bt); //將字符送入臨時變量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; //加入接收編輯框對應字符串</p><p><b>  }</b></p><p><b>  }</b></p><p>  CString temp=("\r\n&qu

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

溫馨提示

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

評論

0/150

提交評論