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

下載本文檔

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

文檔簡介

1、<p>  網(wǎng)上購物系統(tǒng)的設(shè)計與實(shí)現(xiàn)畢業(yè)論文</p><p>  題 目 網(wǎng)上購物系統(tǒng)的設(shè)計與實(shí)現(xiàn) </p><p>  學(xué)生姓名 </p><p>  專業(yè)班級 </p><p>  學(xué) 號 </p><p

2、>  院 (系) </p><p>  指導(dǎo)教師(職稱) </p><p>  完成時間 </p><p>  網(wǎng)上購物系統(tǒng)的設(shè)計與實(shí)現(xiàn)</p><p><b>  摘 要</b></p><p>  短信平臺是基于中國移動、聯(lián)

3、通、電信直接提供的網(wǎng)關(guān)或者基于GSM/CDMA模塊實(shí)現(xiàn)短信批量發(fā)送和自定義發(fā)送的,它分為軟件單機(jī)版CS 結(jié)構(gòu)和網(wǎng)絡(luò)共享版BS 結(jié)構(gòu)。</p><p>  傳統(tǒng)企業(yè)短信平臺多采用基于網(wǎng)關(guān)的BS架構(gòu)模式,考慮到系統(tǒng)的經(jīng)濟(jì)性特別是針對個人用戶,本次畢業(yè)設(shè)計所開發(fā)的系統(tǒng)采用基于GSM/CDMA模塊的CS架構(gòu)模式。同時為了方便用戶使用,本系統(tǒng)將CS架構(gòu)的C與S集成在一起。用戶所看到的將只有客戶端模塊。 </p>

4、<p>  針對GSM模塊和CDMA模塊的差異,系統(tǒng)將自動識別并調(diào)用相關(guān)AT指令以完成同樣的功能。系統(tǒng)的實(shí)現(xiàn)采用MFC串口編程技術(shù),這樣在Windows平臺下的通用性更好。</p><p>  本系統(tǒng)包含了短信發(fā)送、短信管理、語音通話、通訊錄管理、媒介測試等幾個模塊。同時為了方便用戶,本系統(tǒng)的信息存儲未采用傳統(tǒng)商業(yè)數(shù)據(jù)庫,而采用將用戶所有信息以文本文件保存在本地,這樣即使在系統(tǒng)崩潰,用戶的通訊錄及短

5、信內(nèi)容依然可以方便地手工查看。</p><p>  關(guān)鍵詞  通訊錄;短信平臺; GSM; CDMA</p><p>  GSM/CDMA-BASED SMS PLATFORM </p><p>  RESEARCH AND DESIGN</p><p><b>  Abstract</b></p><

6、;p>  SMS platform is based on the gateway provided directly by China Mobile,China Unicom,China Telecom or based on GSM / CDMA module to send custom batch SMS.It can be divided into the software stand-alone CS structur

7、e and structure of the network share version of BS.More traditional enterprise messaging platform, gateway-based BS structure, taking into account the economics of the system especially for individual users, this gradu

8、ation design the software system based on GSM / CDMA modules of CS a</p><p>  Keywords Address Book, SMS Platform, GSM, CDMA目 錄</p><p><b>  摘 要I</b></p><p>  Abstract

9、II</p><p><b>  1. 引言1</b></p><p><b>  2 系統(tǒng)概述2</b></p><p>  2.1 需求分析2</p><p>  2.1.1 短信平臺的功能特點(diǎn)2</p><p>  2.1.2 短信平臺優(yōu)勢2</p&g

10、t;<p>  2.2 可行性分析3</p><p>  2.2.1 GSM短信系統(tǒng)原理3</p><p>  2.2.2 CDMA簡介5</p><p>  2.2.3開發(fā)工具選用及介紹6</p><p>  2.2.4串口通信技術(shù)10</p><p>  2.2.5 Visual C++串口

11、通信編程12</p><p>  2.2.6 AT指令介紹19</p><p>  2.3 功能描述20</p><p>  2.3.1 短信發(fā)送20</p><p>  2.4 系統(tǒng)的功能結(jié)構(gòu)圖21</p><p>  2.4.1 短信平臺系統(tǒng)結(jié)構(gòu)21</p><p>  2.4.

12、2 短信發(fā)送模塊23</p><p>  2.4.3 短信管理模塊23</p><p>  2.4.4 語音通話模塊24</p><p>  2.4.5 通訊錄管理模塊24</p><p>  2.4.6 媒介檢測模塊25</p><p>  3 系統(tǒng)總體設(shè)計26</p><p> 

13、 3.1 數(shù)據(jù)存儲的設(shè)計26</p><p>  3.1.1 E-R圖26</p><p>  3.2 系統(tǒng)流程26</p><p>  3.2.1 系統(tǒng)數(shù)據(jù)流程26</p><p>  3.3邏輯結(jié)構(gòu)設(shè)計27</p><p>  3.3.1 通訊錄文件27</p><p>  3.

14、3.2 聯(lián)系人分組文件27</p><p>  3.3.3 短信存儲文件27</p><p>  4 系統(tǒng)詳細(xì)設(shè)計與初步實(shí)現(xiàn)29</p><p>  4.1 運(yùn)行平臺或環(huán)境29</p><p>  4.2 系統(tǒng)詳細(xì)設(shè)計(界面設(shè)計)29</p><p>  4.2.1 主界面29</p><

15、;p>  4.2.2 短信發(fā)送模塊30</p><p>  4.2.3 短信管理模塊30</p><p>  4.2.4 語音通話模塊31</p><p>  4.2.5 通訊錄管理模塊32</p><p>  4.2.6 媒介測試模塊33</p><p>  4.3 實(shí)現(xiàn)方法34</p>

16、<p>  4.3.1 系統(tǒng)配置34</p><p>  4.3.2 面板管理34</p><p>  4.3.3 短信發(fā)送模塊35</p><p>  4.4.4 短信管理模塊37</p><p>  4.4.5 語音通話模塊38</p><p>  4.4.6 通訊錄管理模塊38</

17、p><p>  4.4.7 媒介測試模塊39</p><p><b>  5 討論40</b></p><p>  5.1 系統(tǒng)開發(fā)技術(shù)和思想40</p><p>  5.2 系統(tǒng)展望40</p><p><b>  結(jié)束語41</b></p><p

18、><b>  致 謝42</b></p><p><b>  參考文獻(xiàn)43</b></p><p><b>  附 錄44</b></p><p>  附錄1 AT指令集44</p><p>  附錄2 手機(jī)號碼格式轉(zhuǎn)換44</p><p&g

19、t;  附錄3 MFC切割字符串代碼46</p><p><b>  1. 引言</b></p><p>  手機(jī)短信作為一種特殊的信息載體,具有語音所不具備的特殊性:占用通信信道量小、信息載量大、簡短直觀、廉價、便于保存以及群發(fā)功能等,因此利用短信提供增值服務(wù)已經(jīng)為越來越多的公司和單位所接受。</p><p>  在實(shí)際應(yīng)用中,構(gòu)建短信平臺

20、主要有兩種方式[ 1 ] 。一是將短信平臺服務(wù)器連接到移動通信網(wǎng)絡(luò),通過移動網(wǎng)關(guān)來發(fā)送和接收短信。這種需要通過有線方式直接接入移動運(yùn)營商的網(wǎng)絡(luò),由于運(yùn)營商對于直接接入的設(shè)備以及業(yè)務(wù)量等方面的限制,再加上申請過程以及接入方式復(fù)雜等因素,對于一般的中小企事業(yè)單位不太適用,此外由于依賴與移動網(wǎng)關(guān)的連接,當(dāng)網(wǎng)絡(luò)出現(xiàn)故障時,將導(dǎo)致無法正常提供短信服務(wù)。另一種方式是使用AT指令控制GSM無線模塊來發(fā)送和接收短信,不需要接入移動運(yùn)營商的短信網(wǎng)關(guān), G

21、SM/CDMA模塊以無線的方式與短信服務(wù)中心通信,從而將短信發(fā)送至用戶移動終端,或接收來自移動端的短信。這種方式對硬件要求不高,實(shí)現(xiàn)簡單,而且通過設(shè)置狀態(tài)報告,還能夠獲知用戶移動終端是否接收到了短信。對于中小企事業(yè)單位來說,后一種方式是構(gòu)建短信平臺比較可行的方案[2]。</p><p>  為了提高辦公效率,節(jié)約辦公成本,筆者在導(dǎo)師的指導(dǎo)下在開發(fā)一個通用短信平臺,使用短信服務(wù)滿足日常辦公消息通知、事件提醒等需要。

22、本文以該系統(tǒng)的設(shè)計過程為例,介紹了基于GSM/CDMA模塊的短信平臺的軟硬件結(jié)構(gòu),短信服務(wù)器程序的設(shè)計和實(shí)現(xiàn)。</p><p>  為了更好地支持Windows平臺,本系統(tǒng)采用MFC開發(fā)。同時為了方便用戶,本系統(tǒng)未采用傳統(tǒng)商業(yè)數(shù)據(jù)庫,而是以文本文件保存用戶的所有通訊錄資料和短信資料,這樣即使系統(tǒng)崩潰,用戶亦可方便地手工查看通訊錄和短信。</p><p>  本系統(tǒng)用到的相關(guān)技術(shù)主要有MFC

23、串口編程技術(shù)、GSM/CDMA相關(guān)模塊AT指令。</p><p>  論文從介紹基于GSM/CDMA短信平臺的需求分析入手,在第二章詳細(xì)介紹了所用的開發(fā)工具VC6.0及其串口通信開發(fā)技術(shù),并介紹了開發(fā)基于GSM/CDMA模塊的通信系統(tǒng)時要用的AT關(guān)鍵指令。第三章介紹了系統(tǒng)數(shù)據(jù)存儲設(shè)計和總體流程設(shè)計。在第四章展示了本系統(tǒng)的界面設(shè)計與編程實(shí)現(xiàn)的核心代碼。最后在第五章進(jìn)行了本系統(tǒng)的進(jìn)一步展望。</p>&

24、lt;p><b>  2 系統(tǒng)概述</b></p><p><b>  2.1 需求分析</b></p><p>  短信群發(fā)的宗旨是為企業(yè)發(fā)展、節(jié)約開支、提高效益而產(chǎn)生的,它將“打折信息”、“促銷活動”、“新品發(fā)布”等相關(guān)信息發(fā)布到目標(biāo)客戶的手機(jī)上,為企業(yè)樹立品牌形象或占有市場創(chuàng)造了無限商機(jī),也能為企業(yè)大幅降低廣告開支。</p>

25、;<p>  2.1.1 短信平臺的功能特點(diǎn)</p><p>  支持向全國移動、聯(lián)通手機(jī)用戶發(fā)送!用戶界面友好,無須培訓(xùn)即可使用。</p><p>  高效:信息群發(fā)群收,瞬間到達(dá)。支持GSM GPRS CDMA。</p><p>  經(jīng)濟(jì):最便宜的通訊方式,不受時間地域限制。</p><p>  實(shí)用:人性化界面設(shè)計,簡單操

26、作,有單機(jī)版本和網(wǎng)絡(luò)版本。</p><p>  安全:無須經(jīng)過互聯(lián)網(wǎng)和短信平臺,因而不會受到網(wǎng)絡(luò)上安全威脅,具有完全的獨(dú)立性。</p><p>  投資省:廣告主定好自己的支出預(yù)算,定向定條發(fā)送給目標(biāo)客戶,百元、千元、萬元,隨心所欲。其費(fèi)用是傳統(tǒng)媒體的十分之一,可以為您省下大筆的廣告宣傳費(fèi)用。</p><p>  2.1.2 短信平臺優(yōu)勢</p>&l

27、t;p>  手機(jī)短信作為“第五媒體”的地位,已經(jīng)得到廣泛的認(rèn)同,與傳統(tǒng)大眾媒體具有相通、相似、相近的共同之處,擁有龐大的受眾群體。對于廣告主而言,手機(jī)短信息廣告媒體具有以下不可替代的信息傳播優(yōu)勢:</p><p>  速度快:短信廣告的傳播不受時間和地域的限制,全國任意一個省市都一樣;發(fā)送數(shù)百萬手機(jī)用戶,勻可在發(fā)送完畢后馬上接收到廣告信息。發(fā)布廣告內(nèi)容可以隨時更改,保證最新信息在最短的時間內(nèi)傳播給消費(fèi)者。&

28、lt;/p><p>  分眾性、回報高:短信廣告直接影響到最有消費(fèi)力的一族,且同一產(chǎn)品可根據(jù)不同的接收對象輕松傳遞不同的廣告信息,以求最大限度提供客戶的購買欲。</p><p>  投資?。憾绦艔V告打破傳統(tǒng)廣告媒體定價的行規(guī),廣告主定好自己的支出預(yù)算,定向定條發(fā)送給目標(biāo)客戶。傳播形式時尚、新穎。</p><p>  精確性:短信廣告最大的特性就是直達(dá)接收者手機(jī),“一對一

29、”傳遞信息,強(qiáng)制性閱讀,時效性強(qiáng),100%閱讀率!在媒介與人接觸的有限時間中,能提高人與廣告的接觸頻率。</p><p>  蔓延性:短信廣告具有很強(qiáng)的散播性,速度快,一分鐘即時發(fā)送,一瞬間萬人傳播!接收者可將信息隨身保存,隨時咨詢廣告主,需要時可反復(fù)閱讀,并可隨時發(fā)送給感興趣的朋友。  </p><p>  靈活性:短信廣告發(fā)布時間極具靈活性,廣告主可以根據(jù)產(chǎn)品特點(diǎn)彈性選擇廣告投放時間,

30、甚至具體到某個具體的時間段內(nèi)發(fā)布。 </p><p>  互動性:短信廣告可以讓機(jī)主與銷售終端互動,與大眾媒體互動,通過這些使短信用戶參與到商業(yè)互動中,短信廣告使人們參與互動的機(jī)會大增。</p><p>  低成本:短信廣告的發(fā)布費(fèi)用非常低廉,與傳統(tǒng)媒體動輒上十萬甚至上百萬的廣告費(fèi)用相比,短信廣告的成本幾乎可以忽略不計。而通過短信平臺提交短信廣告,比直接用手機(jī)發(fā)短信息更便宜,大大降低了廣告

31、主的廣告發(fā)布成本?!?</p><p>  瞬時轟動效應(yīng)強(qiáng):它具有其它任何一個廣告媒體無法比擬的瞬時轟動效果! </p><p>  形式新穎:短信是基于現(xiàn)代移動通訊的一種富于創(chuàng)意的全新直投式廣告形式,相對電話營銷是一種非語音通訊方式,內(nèi)容時尚。</p><p><b>  2.2 可行性分析</b></p><p> 

32、 2.2.1 GSM短信系統(tǒng)原理</p><p>  2.2.1.1 GSM的歷史與發(fā)展</p><p>  移動通信發(fā)展到現(xiàn)在,經(jīng)歷了由模擬到數(shù)字的變化,早期的移動通信系統(tǒng)是模擬移動通信系統(tǒng)。90年代,隨著移動通信用戶數(shù)量的增加,用戶對跨地區(qū),跨國漫游以及各種增值服務(wù)要求也隨之增加,同時數(shù)字通信技術(shù)發(fā)展也日趨成熟,歐洲的移動通信運(yùn)營商開始考慮發(fā)展一種新型的數(shù)字移動通信系統(tǒng),GSM移動

33、系統(tǒng)也就應(yīng)運(yùn)而生。</p><p>  GSM(Global System for Mobile)移動通信系統(tǒng)最初被設(shè)計成為一個泛歐洲的移動通信標(biāo)準(zhǔn),是第一個數(shù)字移動通信系統(tǒng),能夠在歐洲范圍內(nèi)進(jìn)行國際漫游。GSM系統(tǒng)是迄今為止商業(yè)化運(yùn)營最成功的移動通信系統(tǒng)。1987年末廣州開通了我國第一個模擬蜂窩式移動通信系統(tǒng),采用ETACS體制900MHz頻段,成為我國蜂窩移動通信系統(tǒng)的標(biāo)準(zhǔn)。1992年GSM系統(tǒng)由中國聯(lián)通首先

34、引入廣州,經(jīng)過近十年的發(fā)展,GSM網(wǎng)絡(luò)已經(jīng)覆蓋了全國大多數(shù)的城市和鄉(xiāng)鎮(zhèn),其用戶數(shù)量也占我國移動通信用戶的大多數(shù)。GSM系統(tǒng)已經(jīng)發(fā)展成為一個龐大的通信系統(tǒng)家族。</p><p>  2.2.1.2 GSM短消息業(yè)務(wù)原理</p><p>  在GSM提供的眾多的業(yè)務(wù)中,短消息業(yè)務(wù)是頗具特色的。所謂短消息業(yè)務(wù),就是用戶通過手機(jī),可以收到由短消息服務(wù)中心轉(zhuǎn)發(fā)過來的其它GSM手機(jī)發(fā)送的簡短的字符信息

35、,這些字符信息可以是英文,也可以是中文,將其儲存在手機(jī)內(nèi)的SIM卡中。當(dāng)手機(jī)收到短消息時,在屏幕上會顯示出一個小信封,同時發(fā)出一種獨(dú)特的聲音提示用戶,用戶即可通過檢索手機(jī)屏幕的菜單來閱讀接收的信息。</p><p>  SMS(點(diǎn)對點(diǎn)短消息)是GSM標(biāo)準(zhǔn)定義的一種通過信令信道傳送簡短信息的業(yè)務(wù)。SMS的消息長度最大為160字節(jié)。</p><p>  用戶通過移動終端發(fā)送短消息的流程是:短消

36、息首先被發(fā)往主叫用戶的歸屬短消息中心,鑒權(quán)成功后,短消息中心根據(jù)被叫用戶號碼,通過GSM網(wǎng)與其它網(wǎng)絡(luò)向其歸屬VLR(位置來訪寄存器,用于保存用戶的動態(tài)數(shù)據(jù),如手機(jī)開、關(guān)機(jī)的狀態(tài)信息和目前處在哪個位置區(qū)等的數(shù)據(jù))請求路由信息,然后由GMSC根據(jù)路由信息將短消息通過信令網(wǎng)直接發(fā)往被叫所在地的MSC(移動交換中心),由MSC通過無線系統(tǒng)將信息發(fā)給被叫用戶。</p><p>  SMS既是一種基本電信業(yè)務(wù),又可以作為信息

37、服務(wù)業(yè)務(wù)的數(shù)據(jù)傳輸載體。作為信息服務(wù)的載體,可將短消息中心與信息平臺相聯(lián)。用戶以短消息形式發(fā)出信息請求,短消息將根據(jù)信息請求中的業(yè)務(wù)碼,將信息請示發(fā)送給相應(yīng)的信息平臺,信息平臺再將用戶需要的信息傳送給短消息中心,再以短消息形式發(fā)給用戶。</p><p>  短消息是目前GSM網(wǎng)唯一采用分組方式的數(shù)據(jù)業(yè)務(wù),既是電信業(yè)務(wù)也可以做承載業(yè)務(wù),提供多種簡單消息的數(shù)據(jù)業(yè)務(wù)。由于短消息需要在短消息中心存儲轉(zhuǎn)發(fā)。因此實(shí)時性較弱。

38、另外,由于短消息的傳送占用的是控制信道,因此無線容量也很有限。在業(yè)務(wù)量較高時,可能會因短信中心的處理能力有限及無線信道的阻塞而影響信息的及時傳送和出現(xiàn)業(yè)務(wù)失敗的情況。因此在引入多種利用短消息承載的信息服務(wù)時一定要考慮對網(wǎng)絡(luò)規(guī)劃的影響及短消息中心處理能力。</p><p>  短消息沒有對話機(jī)制,每次數(shù)據(jù)的發(fā)送或接收都要發(fā)起一次短信呼叫,因此反應(yīng)較慢(3~5秒)。短消息的技術(shù)較成熟,對網(wǎng)絡(luò)改造較小,實(shí)現(xiàn)業(yè)務(wù)比較容易

39、。短消息的計費(fèi)可以按月計費(fèi),也可以按次計費(fèi),對開發(fā)各種增值業(yè)務(wù)提供了條件。</p><p>  2.2.2 CDMA簡介</p><p>  CDMA,就是利用展頻的通訊技術(shù),因而可以減少手機(jī)之間的干擾,并且可以增加用戶的容量,而且手機(jī)的功率還可以做的比較低,不但可以使使用時間更長,更重要的是可以降低電磁波輻射對人的傷害。 CDMA的帶寬可以擴(kuò)展較大,還可以傳輸影像呢,這是第三代手機(jī)為什么

40、選用CDMA的原因。就安全性能而言,CDMA不但有良好的認(rèn)證體制,更因?yàn)槠鋫鬏數(shù)奶匦?,用碼來區(qū)分用戶,防止被人盜聽的能力大大地增強(qiáng)。 目前CDMA系統(tǒng)正快速發(fā)展中。 Wideband CDMA(WCDMA)寬帶碼分多址傳輸技術(shù),為IMT-2000的重要基礎(chǔ)技術(shù),將是第三代數(shù)字無線通信系統(tǒng)的標(biāo)準(zhǔn)之一。</p><p>  CDMA技術(shù)的標(biāo)準(zhǔn)化經(jīng)歷了幾個階段。IS-95是cdmaONE系列標(biāo)準(zhǔn)中最先發(fā)布的標(biāo)準(zhǔn),真正在

41、全球得到廣泛應(yīng)用的第一個CDMA標(biāo)準(zhǔn)是IS-95A,這一標(biāo)準(zhǔn)支持8K編碼話音服務(wù)。其后又分別出版了13K話音編碼器的TSB74標(biāo)準(zhǔn),支持1.9GHz的CDMA PCS系統(tǒng)的STD-008標(biāo)準(zhǔn),其中13K編碼話音服務(wù)質(zhì)量已非常接近有線電話的話音質(zhì)量。隨著移動通信對數(shù)據(jù)業(yè)務(wù)需求的增長,1998年2月,美國高通公司宣布將IS-95B標(biāo)準(zhǔn)用于CDMA基礎(chǔ)平臺上。IS-95B可提供CDMA系統(tǒng)性能,并增加用戶移動通信設(shè)備的數(shù)據(jù)流量,提供對64kb

42、ps數(shù)據(jù)業(yè)務(wù)的支持。其后,cdma2000成為窄帶CDMA系統(tǒng)向第三代系統(tǒng)過渡的標(biāo)準(zhǔn)。cdma2000在標(biāo)準(zhǔn)研究的前期,提出了1X和3X的發(fā)展策略,但隨后的研究表明,1X和1X增強(qiáng)型技術(shù)代表了未來發(fā)展方向。   </p><p>  CDMA技術(shù)的標(biāo)準(zhǔn)化,推進(jìn)了這項技術(shù)在世界范圍的應(yīng)用。目前,在美國、韓國、日本等國家,CDMA技術(shù)已獲得了較大規(guī)模的應(yīng)用。在一些歐洲國家,一些運(yùn)營商也建起了CDMA網(wǎng)絡(luò)。據(jù)CDG(世

43、界CDMA發(fā)展集團(tuán))統(tǒng)計,1996年底CDMA用戶僅為100萬;到1998年3月已迅速增長到1000萬;截至1999年9月,用戶數(shù)量已超過4000萬。2000年初全球CDMA移動電話用戶的總數(shù)已突破5000萬,在一年內(nèi)用戶數(shù)量增長率達(dá)到118%。CDG表示,目前亞洲已經(jīng)成為CDMA市場增長的主要動力,亞洲地區(qū)CDMA用戶數(shù)量比一年前增長88%,達(dá)到2800萬。美國地區(qū)的增長率更是高達(dá)143%,達(dá)到1650萬,但用戶絕對數(shù)量要低于亞洲,在

44、亞太地區(qū),中國香港、日本、韓國、澳大利亞、泰國、印度、菲律賓、新西蘭、孟加拉國等許多國家和地區(qū)都已建有CDMA商用網(wǎng)絡(luò),用戶數(shù)量已超過2100萬戶。增長率位于第三的是中美洲和南美洲,CDMA用戶數(shù)量達(dá)到500萬。CDG還表示,今后全球CDMA市場中,中國大陸地區(qū)的增長潛力最大。   </p><p>  CDMA是移動通信技術(shù)的發(fā)展方向。在2G階段,CDMA增強(qiáng)型IS95A與GSM在技術(shù)體制上處于同一代產(chǎn)品,提供

45、大致相同的業(yè)務(wù)。但CDMA技術(shù)有其獨(dú)到之處,在通話質(zhì)量好、掉話少、低輻射、健康環(huán)保等方面具有顯著特色。在2.5G階段,CDMA2000 1X RTT 與GPRS在技術(shù)上已有明顯不同,在傳輸速率上1X RTT高于GPRS,在新業(yè)務(wù)承載上1X RTT比GPRS成熟,可提供更多的中高速率的新業(yè)務(wù)。從2.5G向3G技術(shù)體制過渡上, CDMA2000 1X向CDMA2000 1X EV-DO過渡比GPRS向WCDMA過渡更為平滑。</p&g

46、t;<p>  2.2.3開發(fā)工具選用及介紹</p><p>  2.2.3.1 Visaul C++ 6.0開發(fā)平臺簡介</p><p>  Visual C++6.0是Microsoft公司推出的一個基于Windows系統(tǒng)平臺、可視化的集成開發(fā)環(huán)境,它的源程序按C++語言的要求編寫,并加入了微軟提供的功能強(qiáng)大的MFC(Microsoft Foundation Class)

47、類庫。MFC中封裝了大部分Windows API函數(shù)和Windows控件,它包含的功能涉及到整個Windows操作系統(tǒng)。MFC不僅給用戶提供了Windows圖形環(huán)境下應(yīng)用程序的框架,而且還提供了創(chuàng)建應(yīng)用程序的組件,這樣,開發(fā)人員不必從頭設(shè)計創(chuàng)建和管理一個標(biāo)準(zhǔn)Windows應(yīng)用程序所需的程序,而是從一個比較高的起點(diǎn)編程,故節(jié)省了大量的時間。另外,它提供了大量的代碼,指導(dǎo)用戶編程時實(shí)現(xiàn)某些技術(shù)和功能。因此,使用VC++提供的高度可視化的應(yīng)用

48、程序開發(fā)工具和MFC類庫,可使應(yīng)用程序開發(fā)變得簡單。</p><p>  2.2.3.2 Winodws API</p><p>  API(應(yīng)用程序接口)為:“‘計算機(jī)操作系統(tǒng)(Operating system)’或‘程序庫’提供給應(yīng)用程序調(diào)用使用的代碼”。其主要目的是讓應(yīng)用程序開發(fā)人員得以調(diào)用一組例程功能,而無須考慮其底層的源代碼為何、或理解其內(nèi)部工作機(jī)制的細(xì)節(jié)。API本身是抽象的,它

49、僅定義了一個接口,而不涉入應(yīng)用程序如何實(shí)現(xiàn)的細(xì)節(jié)。 </p><p>  例如,圖形庫中的一組API定義了繪制指針的方式,可于屏幕上顯示指針。當(dāng)應(yīng)用程序需要指針功能時,可引用、編譯時鏈接到這組API,而運(yùn)行時就會調(diào)用此API的實(shí)現(xiàn)(庫)來顯示指針。 </p><p>  應(yīng)用程序接口是一組數(shù)量上千、極其復(fù)雜的函數(shù)和副程序,可讓程序設(shè)計師做很多任務(wù)作,譬如“讀取文件”、“顯示菜單”、“在視窗

50、中顯示網(wǎng)頁”等等。操作系統(tǒng)的API可用來分配存儲器或讀取文件。許多系統(tǒng)應(yīng)用程序借由API接口來實(shí)現(xiàn),像是圖形系統(tǒng)、數(shù)據(jù)庫、網(wǎng)絡(luò)Web服務(wù),甚至是在線游戲。 </p><p>  應(yīng)用程序接口有諸多不同設(shè)計。用于快速執(zhí)行的接口通常包括函數(shù)、常量、變量與數(shù)據(jù)結(jié)構(gòu)。也有其它方式,如通過解釋器,或是提供抽象層以遮蔽同API實(shí)現(xiàn)相關(guān)的信息,確保使用API的代碼無需更改而適應(yīng)實(shí)現(xiàn)變化。 </p><p&g

51、t;  應(yīng)用程序接口經(jīng)常是軟件開發(fā)工具包(SDK)的一部分。</p><p>  Windows 這個多作業(yè)系統(tǒng)除了協(xié)調(diào)應(yīng)用程序的執(zhí)行、分配內(nèi)存、管理資源…之外, 她同時也是一個很大的服務(wù)中心,調(diào)用這個服務(wù)中心的各種服務(wù)(每一種服務(wù)就是一個函數(shù)),可以幫應(yīng)用程式達(dá)到開啟視窗、描繪圖形、使用周邊設(shè)備等目的,由于這些函數(shù)服務(wù)的對象是應(yīng)用程序(Application), 所以便稱之為 Application Progr

52、amming Interface,簡稱 API 函數(shù)。WIN32 API也就是Microsoft Windows 32位平臺的應(yīng)用程序編程接口。 </p><p>  Win32程序是構(gòu)筑在Win32API基礎(chǔ)上的。在Win32API中包含了大量的函數(shù)、結(jié)構(gòu)和消息等,它不僅為應(yīng)用程序所調(diào)用,也是Windows自身的一部分,Windows自身的運(yùn)行也調(diào)用這些API函數(shù)。</p><p>  

53、當(dāng)WINDOWS操作系統(tǒng)開始占據(jù)主導(dǎo)地位的時候,開發(fā)WINDOWS平臺下的應(yīng)用程序成為人們的需要。而在WINDOWS程序設(shè)計領(lǐng)域處于發(fā)展的初期,WINDOWS程序員所能使用的編程工具唯有API函數(shù),這些函數(shù)是WINDOWS提供給應(yīng)用程序與操作系統(tǒng)的接口,他們猶如“積木塊”一樣,可以搭建出各種界面豐富,功能靈活的應(yīng)用程序。所以可以認(rèn)為API函數(shù)是構(gòu)筑整個WINDOWS框架的基石,在它的下面是WINDOWS的操作系統(tǒng)核心,而它的上面則是所有

54、的華麗的WINDOWS應(yīng)用程序。 </p><p>  但是,沒有合適的Windows編程平臺,程序員想編寫具有Windows風(fēng)格的軟件,必須借助API,API也因此被賦予至高無上的地位。那時的WINDOWS程序開發(fā)還是比較復(fù)雜的工作,程序員必須熟記一大堆常用的API函數(shù),而且還得對WINDOWS操作系統(tǒng)有深入的了解。然而隨著軟件技術(shù)的不斷發(fā)展,在WINDOWS平臺上出現(xiàn)了很多優(yōu)秀的可視化編程環(huán)境,程序員可以采用

55、“即見即所得”的編程方式來開發(fā)具有精美用戶界面和功能強(qiáng)大的應(yīng)用程序。 </p><p>  這些優(yōu)秀可視化編程環(huán)境操作簡單、界面友好(諸如VB、VC++、DELPHI等),在這些工具中提供了大量的類庫和各種控件,它們替代了API的神秘功能,事實(shí)上這些類庫和控件都是構(gòu)架在WIN32 API函數(shù)基礎(chǔ)之上的,是封裝了的API函數(shù)的集合。它們把常用的API函數(shù)的組合在一起成為一個控件或類庫,并賦予其方便的使用方法,所以極

56、大的加速了WINDOWS應(yīng)用程序開發(fā)的過程。有了這些控件和類庫,程序員便可以把主要精力放在程序整體功能的設(shè)計上,而不必過于關(guān)注技術(shù)細(xì)節(jié)。 </p><p>  實(shí)際上如果我們要開發(fā)出更靈活、更實(shí)用、更具效率的應(yīng)用程序,必然要涉及到直接使用API函數(shù),雖然類庫和控件使應(yīng)用程序的開發(fā)簡單的多,但它們只提供WINDOWS的一般功能,對于比較復(fù)雜和特殊的功能來說,使用類庫和控件是非常難以實(shí)現(xiàn)的,這時就需要采用API函數(shù)來

57、實(shí)現(xiàn)。 </p><p>  2.2.3.3 MFC概述</p><p>  MFC,微軟基礎(chǔ)類(Microsoft Foundation Classes),同VCL類似,是一種Application Framework,隨微軟Visual C++ 開發(fā)工具發(fā)布。目前最新版本為9.0(截止2008年11月)。該類庫提供一組通用的可重用的類庫供開發(fā)人員使用。大部分類均從CObject 直接或

58、間接派生,只有少部分類例外。 </p><p>  MFC 應(yīng)用程序的總體結(jié)構(gòu)通常由開發(fā)人員從MFC類派生的幾個類和一個CWinApp類對象(應(yīng)用程序?qū)ο螅┙M成。MFC 提供了MFC AppWizard 自動生成框架。 </p><p>  MFC的部分類為MFC/ATL 通用,可以在Win32 應(yīng)用程序中單獨(dú)包含并使用這些類。 </p><p>  MFC,微軟

59、基礎(chǔ)類(Microsoft Foundation Classes),實(shí)際上是微軟提供的,用于在C++環(huán)境下編寫應(yīng)用程序的一個框架和引擎,VC++是WinDOS下開發(fā)人員使用的專業(yè)C++ SDK(SDK,Standard SoftWare Develop Kit,專業(yè)軟件開發(fā)平臺),MFC就是掛在它之上的一個輔助軟件開發(fā)包,MFC作為與VC++血肉相連的部分(注意C++和VC++的區(qū)別:C++是一種程序設(shè)計語言,是一種大家都承認(rèn)的軟件編制

60、的通用規(guī)范,而VC++只是一個編譯器,或者說是一種編譯器+源程序編輯器的IDE,WS,PlatForm,這跟Pascal和Delphi的關(guān)系一個道理,Pascal是Delphi的語言基礎(chǔ),Delphi使用Pascal規(guī)范來進(jìn)行Win下應(yīng)用程序的開發(fā)和編譯,卻不同于Basic語言和VB的關(guān)系,Basic語言在VB開發(fā)出來被應(yīng)用的年代已經(jīng)成了Basic語言的新規(guī)范,VB新加的Basic語言要素,如面向?qū)ο蟪绦蛟O(shè)計的要素,是一種性質(zhì)上的飛躍,

61、使VB既是一個IDE,又成長成一個新的程序設(shè)計語言),MFC同VC++集成的VCL一樣是一個非外掛式的軟件包</p><p>  MFC是Win API與C++的結(jié)合,API,即微軟提供的WinDOS下應(yīng)用程序的編程語言接口,是一種軟件編程的規(guī)范,但不是一種程序開發(fā)語言本身,可以允許用戶使用各種各樣的第三方(如我是一方,微軟是一方,Borland就是第三方)的編程語言來進(jìn)行對WinDOS下應(yīng)用程序的開發(fā),使這些被

62、開發(fā)出來的應(yīng)用程序能在WinDOS下運(yùn)行,比如VB,VC++,Java,Dehpi編程語言函數(shù)本質(zhì)上全部源于API,因此用它們開發(fā)出來的應(yīng)用程序都能工作在WinOS的消息機(jī)制和繪圖里,遵守WinDOS作為一個操作系統(tǒng)的內(nèi)部實(shí)現(xiàn),這其實(shí)也是一種必要,微軟如果不提供API,這個世上對Win編程的工作就不會存在,微軟的產(chǎn)品就會迅速從時尚變成垃圾,上面說到MFC是微軟對API函數(shù)的專用C++封裝,這種結(jié)合一方面讓用戶使用微軟的專業(yè)C++ SDK

63、來進(jìn)行Win下應(yīng)用程序的開發(fā)變得容易,因?yàn)镸FC是對API的封裝,微軟做了大量的工作,隱藏了好多程序開發(fā)人員在Win下用C++ & MFC編制軟件時的大量內(nèi)節(jié),如應(yīng)用程序?qū)崿F(xiàn)消息的處理,設(shè)備環(huán)境繪圖,這種結(jié)合是以方便為目的的,必定要付出一定代價(這是微軟的一向作風(fēng)),因此就</p><p>  最后要明白MFC不只是一個功能單純的界面開發(fā)系統(tǒng),它提供的類絕大部分用來進(jìn)行界面開發(fā),關(guān)聯(lián)一個窗口的動作,但它提

64、供的類中有好多類不與一個窗口關(guān)聯(lián),即類的作用不是一個界面類,不實(shí)現(xiàn)對一個窗口對象的控制(如創(chuàng)建,銷毀),而是一些在WinDOS(用MFC編寫的程序絕大部分都在WinDOS中運(yùn)行)中實(shí)現(xiàn)內(nèi)部處理的類,如數(shù)據(jù)庫的管理類等,學(xué)習(xí)中最應(yīng)花費(fèi)時間的是消息和設(shè)備環(huán)境,對C++和MFC的學(xué)習(xí)中最難的部分是指針,C++面向?qū)ο癯绦蛟O(shè)計的其它部分,如數(shù)據(jù)類型,流程控制都不難,建議學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)C++版。 </p><p>  MFC

65、是微軟封裝了的API。什么意思呢?windows作為一個提供功能強(qiáng)大的應(yīng)用程序接口編程的操作系統(tǒng),的確方便了許多程序員,傳統(tǒng)的win32開發(fā)(直接使用windows的接口函數(shù)API)對于程序員來說非常的困難,因?yàn)?,API函數(shù)實(shí)在太多了,而且名稱很亂,從零構(gòu)架一個窗口動輒就是上百行的代碼。MFC是面向?qū)ο蟪绦蛟O(shè)計與Application framework的完美結(jié)合,他將傳統(tǒng)的API進(jìn)行了分類封裝,并且為你創(chuàng)建了程序的一般框架。</

66、p><p>  2.2.4串口通信技術(shù)</p><p>  2.2.4.1 串口</p><p>  串口叫做串行接口,也稱串行通信接口,按電氣標(biāo)準(zhǔn)及協(xié)議來分包括RS-232-C、RS-422、RS485、USB等。 RS-232-C、RS-422與RS-485標(biāo)準(zhǔn)只對接口的電氣特性做出規(guī)定,不涉及接插件、電纜或協(xié)議。USB是近幾年發(fā)展起來的新型接口標(biāo)準(zhǔn),主要應(yīng)用于高速

67、數(shù)據(jù)傳輸領(lǐng)域。</p><p>  串口形容一下就是只有一條車道,而并口就是有8個車道同一時刻能傳送8位(一個字節(jié))數(shù)據(jù)。但是并口并不比串口快,由于8位通道之間的互相干擾。傳輸時速度就受到了限制。而且當(dāng)傳輸出錯時,要同時重新傳8個位的數(shù)據(jù)。串口沒有干擾,傳輸出錯后重發(fā)一位就可以了。所以要比并口快。串口硬盤就是這樣被人們重視的。</p><p>  串口是計算機(jī)上一種非常通用設(shè)備通信的協(xié)議。

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

69、收數(shù)據(jù)。它很簡單并且能夠?qū)崿F(xiàn)遠(yuǎn)距離通信。比如IEEE488定義并行通行狀態(tài)時,規(guī)定設(shè)備線總長不得超過20米,并且任意兩個設(shè)備間的長度不得超過2米;而對于串口而言,長度可達(dá)1200米。典型地,串口用于ASCII碼字符的傳輸。通信使用3根線完成:(1)地線,(2)發(fā)送,(3)接收。由于串口通信是異步的,端口能夠在一根線上發(fā)送數(shù)據(jù)同時在另一根線上接收數(shù)據(jù)。其他線用于握手,但是不是必須的。串口通信最重要的參數(shù)是波特率、數(shù)據(jù)位、停止位和奇偶校驗(yàn)。

70、對于兩個進(jìn)行通行的端口,這些參數(shù)必須匹配: </p><p>  a,波特率:這是一個衡量通信速度的參數(shù)。它表示每秒鐘傳送的bit的個數(shù)。例如300波特表示每秒鐘發(fā)送300個bit。當(dāng)我們提到時鐘周期時,我們就是指波特率例如如果協(xié)議需要4800波特率,那么時鐘是4800Hz。這意味著串口通信在數(shù)據(jù)線上的采樣率為4800Hz。通常電話線的波特率為14400,28800和36600。波特率可以遠(yuǎn)遠(yuǎn)大于這些值,但是波特

71、率和距離成反比。高波特率常常用于放置的很近的儀器間的通信,典型的例子就是GPIB設(shè)備的通信。 </p><p>  b,數(shù)據(jù)位:這是衡量通信中實(shí)際數(shù)據(jù)位的參數(shù)。當(dāng)計算機(jī)發(fā)送一個信息包,實(shí)際的數(shù)據(jù)不會是8位的,標(biāo)準(zhǔn)的值是5、7和8位。如何設(shè)置取決于你想傳送的信息。比如,標(biāo)準(zhǔn)的ASCII碼是0~127(7位)。擴(kuò)展的ASCII碼是0~255(8位)。如果數(shù)據(jù)使用簡單的文本(標(biāo)準(zhǔn) ASCII碼),那么每個數(shù)據(jù)包使用7位

72、數(shù)據(jù)。每個包是指一個字節(jié),包括開始/停止位,數(shù)據(jù)位和奇偶校驗(yàn)位。由于實(shí)際數(shù)據(jù)位取決于通信協(xié)議的選取,術(shù)語“包”指任何通信的情況。 </p><p>  c,停止位:用于表示單個包的最后一位。典型的值為1,1.5和2位。由于數(shù)據(jù)是在傳輸線上定時的,并且每一個設(shè)備有其自己的時鐘,很可能在通信中兩臺設(shè)備間出現(xiàn)了小小的不同步。因此停止位不僅僅是表示傳輸?shù)慕Y(jié)束,并且提供計算機(jī)校正時鐘同步的機(jī)會。適用于停止位的位數(shù)越多,不同

73、時鐘同步的容忍程度越大,但是數(shù)據(jù)傳輸率同時也越慢。 </p><p>  d,奇偶校驗(yàn)位:在串口通信中一種簡單的檢錯方式。有四種檢錯方式:偶、奇、高和低。當(dāng)然沒有校驗(yàn)位也是可以的。對于偶和奇校驗(yàn)的情況,串口會設(shè)置校驗(yàn)位(數(shù)據(jù)位后面的一位),用一個值確保傳輸?shù)臄?shù)據(jù)有偶個或者奇?zhèn)€邏輯高位。例如,如果數(shù)據(jù)是011,那么對于偶校驗(yàn),校驗(yàn)位為0,保證邏輯高的位數(shù)是偶數(shù)個。如果是奇校驗(yàn),校驗(yàn)位位1,這樣就有3個邏輯高位。高位

74、和低位不真正的檢查數(shù)據(jù),簡單置位邏輯高或者邏輯低校驗(yàn)。這樣使得接收設(shè)備能夠知道一個位的狀態(tài),有機(jī)會判斷是否有噪聲干擾了通信或者是否傳輸和接收數(shù)據(jù)是否不同步。</p><p>  2.2.5 Visual C++串口通信編程</p><p>  在Win32下,可以使用兩種編程方式實(shí)現(xiàn)串口通信,其一是使用ActiveX控件,這種方法程序簡單,但欠靈活。其二是調(diào)用Windows的API函數(shù),這

75、種方法可以清楚地掌握串口通信的機(jī)制,并且自由靈活。  串口的操作可以有兩種操作方式:同步操作方式和重疊操作方式(又稱為異步操作方式)。同步操作時,API函數(shù)會阻塞直到操作完成以后才能返回(在多線程方式中,雖然不會阻塞主線程,但是仍然會阻塞監(jiān)聽線程);而重疊操作方式,API函數(shù)會立即返回,操作在后臺進(jìn)行,避免線程的阻塞。</p><p>  2.2.5.1 VC++中實(shí)現(xiàn)串行通信的編程技術(shù)</p>

76、<p> ?。?)利用VC++的標(biāo)準(zhǔn)通信函數(shù) </p><p>  利用VC++的標(biāo)準(zhǔn)通信函數(shù)_inp和_outp可實(shí)現(xiàn)串口通信。下面是一個串口初始化的程序: </p><p>  void init_com(PORT)</p><p><b>  {char i;</b></p><p>  outp(POR

77、T+3,0x80);</p><p>  outp(PORT,0x0C);</p><p>  outp(PORT+1,0);</p><p>  outp(PORT+3 ,0x3a);</p><p>  outp(PORT+3 ,0x03);</p><p>  i=inp(PORT+5) && 0

78、xfe;</p><p>  outp(PORT+5,i);} </p><p> ?。?)使用串行通信控件MSComm </p><p>  串行通信控件MSCOmm32.OCX提供了使用RS-232來進(jìn)行數(shù)據(jù)通信的所有協(xié)議,VC為該控件提供了標(biāo)準(zhǔn)的事件處理函數(shù)、過程,并通過屬性和方法提供了串行通信的設(shè)置。它使用戶能夠方便地訪問Windows串行通信驅(qū)動程序的大多

79、數(shù)特性,包括輸入、輸出緩沖區(qū)的大小及決定何時使用流控制命令掛起數(shù)據(jù)傳輸?shù)取?lt;/p><p>  在ClassWizard中為新創(chuàng)建的通信控件定義成員對象(CMSComm m_Serial),通過該對象便可以對串口屬性進(jìn)行設(shè)置,MSComm控件共有27個屬性。以下是通過設(shè)置控件屬性對串口進(jìn)行初始化的實(shí)例: </p><p>  BOOL CSampleDlg:: PortOpen()<

80、/p><p>  { BOOL m_Opened;</p><p><b>  ......</b></p><p>  m_Serial.SetCommPort(2); // 指定串口號</p><p>  m_Serial.SetSettings("4800,N,8,1");</p>&

81、lt;p><b>  // 通信參數(shù)設(shè)置</b></p><p>  m_Serial.SetInBufferSize(1024);</p><p>  // 指定接收緩沖區(qū)大小</p><p>  m_Serial.SetInBufferCount(0);</p><p>  // 清空接收緩沖區(qū)</p&g

82、t;<p>  m_Serial.InputMode(1);</p><p>  // 設(shè)置數(shù)據(jù)獲取方式</p><p>  m_Serial.SetInputLen(0);</p><p><b>  // 設(shè)置讀取方式</b></p><p>  m_Opened=m_Serail.SetPortOpe

83、n(1);</p><p>  // 打開指定的串口</p><p>  return m_Opened;} </p><p>  打開所需串口后,我們需要考慮串口通信的時機(jī)。在接收或發(fā)送數(shù)據(jù)過程中,可能需要監(jiān)視并響應(yīng)一些事件和錯誤,所以事件驅(qū)動是處理串行端口交互作用的一種非常有效的方法。使用OnComm事件和CommEvent屬性捕捉并檢查通信事件和錯誤的值。發(fā)生

84、通信事件或錯誤時將觸發(fā)OnComm事件,CommEvent屬性的值將被改變,應(yīng)用程序通過檢查CommEvent屬性值并作出相應(yīng)的反應(yīng)。 </p><p> ?。?)使用API函數(shù) </p><p>  控件雖然簡單易用,但由于必須拿到對話框中使用,在一些需要在線程中實(shí)現(xiàn)通信的應(yīng)用場合下,控件的使用顯得捉襟見肘。API是附帶在Windows內(nèi)部的一個極其重要的組成部分。Windows的32位

85、API主要是一系列很復(fù)雜的函數(shù)和消息集合。它可以看作是Windows系統(tǒng)為在其下運(yùn)行的各種開發(fā)系統(tǒng)提供的開放式通用功能增強(qiáng)接口。 </p><p>  通信程序在CreateFile處指定串口設(shè)備及相關(guān)的操作屬性,再返回一個句柄,該句柄將被用于后續(xù)的通信操作,并貫穿整個通信過程。串口打開后,其屬性被設(shè)置為默認(rèn)值,根據(jù)具體需要,通過調(diào)用GetCommState(hComm,&&dcb)讀取當(dāng)前串口設(shè)

86、備控制塊DCB設(shè)置,修改后通過SetCommState(hComm,&&dcb)將其寫入。運(yùn)用ReadFile()與WriteFile()這兩個API函數(shù)實(shí)現(xiàn)串口讀寫操作,若為異步通信方式,兩函數(shù)中最后一個參數(shù)為指向OVERLAPPED結(jié)構(gòu)的非空指針,在讀寫函數(shù)返回值為FALSE的情況下,調(diào)用GetLastError()函數(shù),返回值為ERROR_IO_PENDING,表明I/O操作懸掛,即操作轉(zhuǎn)入后臺繼續(xù)執(zhí)行。此時,可以

87、用WaitForSingleObject()來等待結(jié)束信號并設(shè)置最長等待時間,舉例如下:</p><p>  BOOL bReadStatus;</p><p>  bReadStatus = ReadFile( m_hIDComDev, buffer,</p><p>  dwBytesRead, &&dwBytesRead, &&

88、m_OverlappedRead );</p><p>  if(!bReadStatus){</p><p>  if(GetLastError()==ERROR_IO_PENDING){</p><p>  WaitForSingleObject(m_OverlappedRead.hEvent,1000);</p><p>  retur

89、n ((int)dwBytesRead);}</p><p>  return(0);}</p><p>  return ((int)dwBytesRead); </p><p> ?。?)多線程下實(shí)現(xiàn)串行通信 </p><p>  Windows內(nèi)部的搶先調(diào)度程序在活動的線程之間分配CPU時間,Windows區(qū)分兩種不同類型的線程,一種是

90、用戶界面線程(User Interface Thread),它包含消息循環(huán)或消息泵,用于處理接收到的消息;另一種是工作線程(Work Thread),它沒有消息循環(huán),用于執(zhí)行后臺任務(wù)、監(jiān)視串口事件的線程即為工作線程。 </p><p>  多線程程序的編寫在端口的配置,連接部分與單線程的相同,在端口配置完畢后,最重要的是根據(jù)實(shí)際情況,建立多線程之間的同步對象,如信號燈、臨界區(qū)和事件等。 </p>&

91、lt;p>  一切就緒后即可啟動工作線程,程序如下:</p><p>  CWinThrea CommThread = AfxBegin</p><p>  Thread(CommWatchThread, // 線程函數(shù)名</p><p>  (LPVOID) m_pTTYInfo, // 傳遞的參數(shù)</p><p>  THREAD

92、_PRIORITY_ABOVE_NORMAL,</p><p>  // 設(shè)置線程優(yōu)先級</p><p>  (UINT) 0, // 最大堆棧大小</p><p>  (DWORD) CREATE_SUSPENDED , // 創(chuàng)建標(biāo)志</p><p>  (LPSECURITY_ATTRIBUTES) NULL);</p>

93、<p>  if(WaitCommEvent(pTTYInfo->idComDev,&&dwEvtMask,NULL))</p><p><b>  {</b></p><p>  if((dwEvtMask && pTTYInfo->dwEvtMask )== pTTYInfo->dwEvtMask)</p>

94、<p><b>  {</b></p><p>  WaitForSingleObject(pTTYInfo->hPostEvent,0xFFFFFFFF);</p><p>  ResetEvent(pTTYInfo->hPostEvent);</p><p>  // 置同步事件對象為非信號態(tài)</p><p&g

95、t;  ::PostMessage(CSampleView,ID_COM1_DATA,0,0); // 發(fā)送通知消息}}</p><p>  BEGIN_MESSAGE_MAP(CSampleView, CView)</p><p>  //{{AFX_MSG_MAP(CSampleView)</p><p>  ON_MESSAGE(ID_COM1_DATA, O

96、nProcessCom1Data)</p><p>  ON_MESSAGE(ID_COM2_DATA, OnProcessCom2Data)</p><p><b> ?。?lt;/b></p><p>  //}}AFX_MSG_MAP</p><p>  END_MESSAGE_MAP() </p>

97、<p>  多線程的實(shí)現(xiàn)可以使得各端口獨(dú)立,準(zhǔn)確地實(shí)現(xiàn)串行通信,使串行通信具有更廣泛的靈活性與嚴(yán)格性,且充分利用CPU時間。但在具體的實(shí)時監(jiān)控系統(tǒng)中如何協(xié)調(diào)多個線程、線程之間以何種方式實(shí)現(xiàn)同步,這是多線程串行通信程序?qū)崿F(xiàn)的難點(diǎn)。</p><p>  2.2.5.2串行通信的操作方式 </p><p><b>  (1)同步方式 </b></p>

98、<p>  同步方式中,讀串口的函數(shù)試圖在串口的接收緩沖區(qū)中讀取規(guī)定數(shù)目的數(shù)據(jù),直到規(guī)定數(shù)目的數(shù)據(jù)全部被讀出或設(shè)定的超時時間已到時才返回。例如: </p><p>  COMMTIMEOUTS timeOver;</p><p>  memset(&&timeOver,0,sizeof(timeOver));</p><p>  DWO

99、RD timeMultiplier,timeConstant;</p><p>  timeOver.ReadTotalTimeoutMultiplier=timeMultiplier;</p><p>  timeOver.ReadTotalTimeoutConstant=timeConstant;</p><p>  SetCommTimeouts(hCompo

100、rt,&&timeOver);</p><p><b>  ……</b></p><p>  ReadFile(hComport,inBuffer,nWantRead,&&nRealRead,NULL); </p><p>  COMMTIMEOUTS結(jié)構(gòu)用于設(shè)置讀寫函數(shù)的等待時間。 </p>&l

101、t;p>  在ReadFile函數(shù)中hComport為待讀串口句柄;inBuffer為輸入緩沖區(qū)大??;nWantRead為每次調(diào)用ReadFile時,函數(shù)試圖讀出的字節(jié)數(shù);nRealRead為實(shí)際讀出的字節(jié)數(shù);最后一個參數(shù)值NULL代表ReadFile將采用同步文件讀寫的方式。</p><p>  如果所規(guī)定的待讀取數(shù)據(jù)的數(shù)目nWantRead較大且設(shè)定的超時時間也較長,而接收緩沖區(qū)中數(shù)據(jù)較少,則可能引起線

102、程阻塞。解決這一問題的方法是檢查COMSTAT結(jié)構(gòu)的cbInQue成員,該成員的大小即為接收緩沖區(qū)中處于等待狀態(tài)的數(shù)據(jù)的實(shí)際個數(shù)。如果令nWantRead的值等于COMSTAT.cbInQue,就能較好地防止線程阻塞。 </p><p><b> ?。?)查詢方式 </b></p><p>  查詢方式,即一個進(jìn)程中的某一線程定時地查詢串口的接收緩沖區(qū),如果緩沖區(qū)中有

103、數(shù)據(jù),就讀取數(shù)據(jù);若緩沖區(qū)中沒有數(shù)據(jù),該線程將繼續(xù)執(zhí)行,因此會占用大量的CPU時間,它實(shí)際上是同步方式的一種派生。例如: </p><p>  COMMTIMEOUTS timeOver;</p><p>  memset(&&timeOver,0,sizeof(timeOver));</p><p>  timeOver.ReadIntervalT

104、imeout=MAXWORD;</p><p>  SetCommTimeouts(hComport.&&timeOver);</p><p><b>  ……</b></p><p>  ReadFile(hComport.inBuffer.nWantRead.&&nRealRead,NULL); </p

105、><p>  除了COMMTIMEOUTS結(jié)構(gòu)的變量timeOver設(shè)置不同外,查詢方式與同步方式在程序代碼方面很類似,但二者的工作方式卻差別很大。盡管ReadFile采用的也是同步文件讀寫方式,但由于timeOver的區(qū)間超過時間設(shè)置為MAXWORD,所以ReadFile每次將讀出接收隊列中的所有處于等待狀態(tài)的數(shù)據(jù),一次最多可讀出nWantRead個字節(jié)的數(shù)據(jù)。</p><p><b&

106、gt; ?。?)異步方式 </b></p><p>  異步方式中,利用Windows的多線程結(jié)構(gòu),可以讓串口的讀寫操作在后臺進(jìn)行,而應(yīng)用程序的其他部分在前臺執(zhí)行。例如: </p><p>  OVERLAPPED wrOverlapped;</p><p>  COMMTIMEOUTS timeOver;</p><p>  m

107、emset(&&timeOver.0.sizeof(timeOver));</p><p>  DWORDtimeMultiplier,timeConstant;</p><p>  timeOver.ReadTotalTimeoutMultiplier=timeMultiplier;</p><p>  timeOver.ReadTotalTime

108、outConstant=timeConstant;</p><p>  SetCommTimeouts(hComport,&&timeOver);</p><p>  wrOverlapped.hEvent=CreateEvent(NULL.TRUE,FALSE,NULL);</p><p><b>  ……</b></p

109、><p>  ReadFile(hComport,inBuffer,nWantRead,&&nRealRead,&&wrOverlapped);</p><p>  GetOverlappedResult(hComport,&&wrOverlapped,&& nRealRead,TRUE);</p><p>

110、;<b>  ……</b></p><p>  ResetEvent(wrOverlapped.hEvent); </p><p>  上面代碼中的ReadFile由于采用了異步方式,所以它只返回數(shù)據(jù)是否已開始讀入的狀態(tài),并不返回實(shí)際的讀入數(shù)據(jù),即ReadFile中的nRealRead無效。實(shí)際讀入的數(shù)據(jù)是由GetOverlappedResult函數(shù)返回的,該函數(shù)的最

溫馨提示

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

評論

0/150

提交評論