串口設(shè)備遠程監(jiān)控軟件設(shè)計與實現(xiàn)(本科畢業(yè)論文)_第1頁
串口設(shè)備遠程監(jiān)控軟件設(shè)計與實現(xiàn)(本科畢業(yè)論文)_第2頁
串口設(shè)備遠程監(jiān)控軟件設(shè)計與實現(xiàn)(本科畢業(yè)論文)_第3頁
串口設(shè)備遠程監(jiān)控軟件設(shè)計與實現(xiàn)(本科畢業(yè)論文)_第4頁
串口設(shè)備遠程監(jiān)控軟件設(shè)計與實現(xiàn)(本科畢業(yè)論文)_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

郭一君:串口設(shè)備遠程監(jiān)控軟件設(shè)計與實現(xiàn)西安理工大學(xué)本科生畢業(yè)設(shè)計(論文)畢業(yè)設(shè)論題目串口設(shè)備遠程監(jiān)控軟件設(shè)計與實現(xiàn)專業(yè)電子信息工程班級電信104學(xué)生××指導(dǎo)教師××2014年串口設(shè)備遠程監(jiān)控軟件設(shè)計與實現(xiàn)專業(yè):電子信息工程班級:電信101班作者:指導(dǎo)教師:職稱:答辯日期:2014年6月22日摘要隨著互聯(lián)網(wǎng)的發(fā)展,人們對通訊的認識進入到一個新的時期,通訊變得更加快速和方便。這種網(wǎng)絡(luò)的發(fā)展不僅提升了人與人(MantoMan)的通訊,更加逐步發(fā)展出了人與物(MantoThing)甚至物與物(ThingtoThing)的通訊需要。這個階段的互聯(lián)網(wǎng),我們稱之為物聯(lián)網(wǎng)(InternetofThings)。物聯(lián)網(wǎng)的基礎(chǔ)網(wǎng)絡(luò)仍然是互聯(lián)網(wǎng),只是在終端接入上則是各式各樣的物體。因此其最后100米的通訊實現(xiàn)方法變得非常多樣化,也是業(yè)界研究的熱點。這其中就包括串口通訊。本文即研究了串口聯(lián)網(wǎng)的原理,采用串口聯(lián)網(wǎng)服務(wù)器實現(xiàn)串口通訊與互聯(lián)網(wǎng)的結(jié)合,完成一臺串口設(shè)備的遠程通訊。關(guān)鍵詞:互聯(lián)網(wǎng),物聯(lián)網(wǎng),串口通訊,遠程通訊AbstractWiththedevelopmentofInternet,people'sunderstandingofcommunicationintoanewdays,communicationbecomesmorerapidandconvenient.Thedevelopmentofthenetworktoenhancenotonlythepeople(MantoMan)communication,themoredevelopedandobjects(MantoThing)orobjects(ThingtoThing)communicationneeds.ThisphaseoftheInternet,wecalledtheInternetofthings(InternetofThings).BasicnetworkoftheInternetofthingsisstilltheInternet,onlyintheterminalaccessiseverykindofobject.Sothelast100metersofcommunicationimplementationmethodhasbecomeverydiverse,butalsothefocusoftheindustry.Thisincludestheserialcommunication.Thispaperstudiestheprincipleofserialcommunication,usingtheserialportservertorealizetheserialcommunicationandtheInternet,remotecommunicationtocompleteaserialdevice.Keywords:Internet,Internetofthings,serialcommunication,remotecommunication目錄2399第一章緒論 197691.1引言 1234141.2物聯(lián)網(wǎng)、串口通訊及遠程監(jiān)控的概述 1111981.2.1發(fā)展歷史 1288751.2.2研究現(xiàn)狀 3114331.3本文的主要工作 545891.3.1硬件結(jié)構(gòu)設(shè)計 6106761.3.2監(jiān)控軟件設(shè)計 75397第二章串口聯(lián)網(wǎng)服務(wù)器概述及VC++(MFC)工具介紹 7241962.1串口聯(lián)網(wǎng)服務(wù)器概述 7134282.1.1串口聯(lián)網(wǎng)服務(wù)器原理 8238332.1.2串口聯(lián)網(wǎng)服務(wù)器工作模式 8246382.1.3硬件網(wǎng)絡(luò)架構(gòu) 9108212.2VC++(MFC)工具介紹 10127322.2.1VC++ 1027922.2.2.MFC 1141292.3本章小結(jié) 1228655第三章串口聯(lián)網(wǎng)服務(wù)器通訊底層 13238143.1通信底層設(shè)計 1380423.2MFC中TCPsocket編程 14280813.2.1TCPsocket基本原理 14274463.2.2基本W(wǎng)indowsSocketAPI 15326513.2.3MFC下的Socket編程類 2025703.2.4MFC下Socket編程基本步驟 2124343.3TCPClient端Socket的編程實現(xiàn) 2335673.3.1Client接收數(shù)據(jù)處理 2364283.3.2ClientSocket套接字創(chuàng)建 2529183.4本章小結(jié) 298587第四章GPS設(shè)備協(xié)議解析 29242624.1接收數(shù)據(jù)的驗證 2951264.2接收數(shù)據(jù)的解析 31106584.3本章小結(jié) 325162第五章人機交互設(shè)計 32123355.1VisualC++6.0編譯器簡介 32287285.2MFC框架 34161295.2.1MFC框架簡介 3411285.2.2MFC類層次結(jié)構(gòu)圖 34173115.2.3初始化流程及消息循環(huán)機制 37106645.3MFC開發(fā)應(yīng)用程序?qū)崿F(xiàn) 38221985.3.1VisualC++6.0新建MFC應(yīng)用程序 3849915.3.2消息響應(yīng)函數(shù)添加與實現(xiàn) 42115155.4課題的人機界面設(shè)計 44240505.5本章小結(jié) 4519447第六章結(jié)論 45214016.1成果展示 4526416.2課題工作總結(jié)和結(jié)論 47300186.3需進一步研究的問題 4824404致謝 4922491參考文獻 50第一章緒論1.1引言隨著互聯(lián)網(wǎng)的發(fā)展,人們對通訊的認識進入到一個新的時期,通訊變得更加快速和方便。這種網(wǎng)絡(luò)的發(fā)展不僅提升了人與人(MantoMan)的通訊,更加逐步發(fā)展出了人與物(MantoThing)甚至物與物(ThingtoThing)的通訊需要。這個階段的互聯(lián)網(wǎng),我們稱之為物聯(lián)網(wǎng)(InternetofThings)。物聯(lián)網(wǎng)的基礎(chǔ)網(wǎng)絡(luò)仍然是互聯(lián)網(wǎng),只是在終端接入上則是各式各樣的物體。因此其最后100米的通訊實現(xiàn)方法變得非常多樣化,也是業(yè)界研究的熱點。這其中就包括串口通訊。串口通訊是一種簡單的、低速率通訊手段。但其因為實現(xiàn)簡單、成本低廉、穩(wěn)定可靠而廣泛的應(yīng)用于工業(yè)、通信等許多專業(yè)領(lǐng)域的設(shè)備中,用以進行本地的短距離、低容量通訊。因此串口通訊擁有極其龐大的設(shè)備數(shù)量基礎(chǔ)。作為物體通訊手段,在物聯(lián)網(wǎng)時代,其與互聯(lián)網(wǎng)相結(jié)合實現(xiàn)多節(jié)點、遠程化的串口通訊網(wǎng)成為物聯(lián)網(wǎng)應(yīng)用的一個重要方向。1.2物聯(lián)網(wǎng)、串口通訊及遠程監(jiān)控的概述1.2.1發(fā)展歷史物聯(lián)網(wǎng)(InternetofThings,縮寫IOT)是一個基于互聯(lián)網(wǎng)、傳統(tǒng)電信網(wǎng)等信息承載體,讓所有能夠被獨立尋址的普通物理對象實現(xiàn)互聯(lián)互通的網(wǎng)絡(luò)。廣義上說,當(dāng)下涉及到信息技術(shù)的應(yīng)用,都可以納入物聯(lián)網(wǎng)的范疇。物聯(lián)網(wǎng)是新一代信息技術(shù)的重要組成部分。顧名思義,物聯(lián)網(wǎng)就是物物相連的互聯(lián)網(wǎng)。其一,物聯(lián)網(wǎng)的核心和基礎(chǔ)仍然是互聯(lián)網(wǎng),是在互聯(lián)網(wǎng)基礎(chǔ)上的延伸和擴展的網(wǎng)絡(luò);其二,其用戶端延伸和擴展到了任何物品與物品之間,進行信息交換和通信。物聯(lián)網(wǎng)就是“物物相連的互聯(lián)網(wǎng)”。物聯(lián)網(wǎng)通過智能感知、識別技術(shù)與普適計算、廣泛應(yīng)用于網(wǎng)絡(luò)的融合中,也因此被稱為繼計算機、互聯(lián)網(wǎng)之后世界信息產(chǎn)業(yè)發(fā)展的第三次浪潮。物聯(lián)網(wǎng)是互聯(lián)網(wǎng)的應(yīng)用拓展,相對于網(wǎng)絡(luò)這樣一個概念,不如說物聯(lián)網(wǎng)是業(yè)務(wù)和應(yīng)用。串口通信(SerialCommunication),是指外設(shè)間,通過數(shù)據(jù)信號線、地線、控制線等,按位進行傳輸數(shù)據(jù)的一種通訊方式,主要用于串行式逐位數(shù)據(jù)傳輸。串行接口按電氣標準及協(xié)議來分,常見的有一般電腦應(yīng)用的RS-232(使用25針或9針連接器)和工業(yè)電腦應(yīng)用的半雙工RS-485與全雙工RS-422。目前,串口也廣泛的應(yīng)用各類專業(yè)設(shè)備上,用作設(shè)備對外的通訊接口使用。這種通信方式使用的數(shù)據(jù)線少,在遠距離通信中可以節(jié)約通信成本,但其傳輸速度比并行傳輸?shù)?。串口是一種常見且有較長應(yīng)用歷史的設(shè)備間的通訊辦法。物聯(lián)網(wǎng)是隨著網(wǎng)絡(luò)技術(shù)發(fā)展而發(fā)展起來的一種通訊網(wǎng)絡(luò)。因此,由于歷史原因,串口通訊必將是物聯(lián)網(wǎng)的一種常見物聯(lián)通訊方式。上文中也提到串口是實現(xiàn)物聯(lián)網(wǎng)最后100米通訊連接的一種極為重要的方式。尤其在工業(yè)、通訊等領(lǐng)域內(nèi),串口在設(shè)備通訊方面有著極為廣泛的應(yīng)用。雖然現(xiàn)在以以太網(wǎng)形式的接口也非常之多并在逐步成為主流,但串口仍然因其歷史應(yīng)用廣泛、連接簡單、通訊可靠而大量存在。遠程監(jiān)控從字面上理解可以分為“監(jiān)”和“控”兩部分,其中“監(jiān)”是指通過網(wǎng)絡(luò)獲得信息為主:而“控”是指通過網(wǎng)絡(luò)對遠程計算機進行操作的方法,對遠程計算機進行重新啟動、關(guān)機等操作,還包括對遠端計算機進行日常設(shè)置的工作。遠程監(jiān)控這個詞有兩重意思。計算機領(lǐng)域和視頻監(jiān)控領(lǐng)域都有遠程監(jiān)控的說法,但意義完全不一樣。本篇論文中所涉及的到的遠程監(jiān)控為計算機領(lǐng)域的遠程監(jiān)控。1.2.2研究現(xiàn)狀物聯(lián)網(wǎng)在實際應(yīng)用上的開展需要各行各業(yè)的參與,并且需要國家政府的主導(dǎo)以及相關(guān)法規(guī)政策上的扶助,物聯(lián)網(wǎng)的開展具有規(guī)模性、廣泛參與性、管理性、技術(shù)性、物的屬性等等特征,其中,技術(shù)上的問題是物聯(lián)網(wǎng)最為關(guān)鍵的問題。物聯(lián)網(wǎng)技術(shù)是一項綜合性的技術(shù),是一項系統(tǒng),其理論上的研究已經(jīng)在各行各業(yè)展開,而實際應(yīng)用還僅局限于行業(yè)內(nèi)部。關(guān)于物聯(lián)網(wǎng)的規(guī)劃和設(shè)計以及研發(fā)關(guān)鍵在于RFID、傳感器、嵌入式軟件以及傳輸數(shù)據(jù)計算等領(lǐng)域的研究。物聯(lián)網(wǎng)將是下一個推動世界高速發(fā)展的“重要生產(chǎn)力”,是繼通信網(wǎng)之后的另一個萬億級市場。業(yè)內(nèi)專家認為,物聯(lián)網(wǎng)一方面可以提高經(jīng)濟效益,大大節(jié)約成本;另一方面可以為全球經(jīng)濟的復(fù)蘇提供技術(shù)動力。其普及以后,用于動物、植物和機器、物品的傳感器與電子標簽及配套的接口裝置的數(shù)量將大大超過手機的數(shù)量。按照對物聯(lián)網(wǎng)的需求,需要按億計的傳感器和電子標簽,這將大大推進信息技術(shù)元件的生產(chǎn),同時增加大量的就業(yè)機會。且物聯(lián)擁有業(yè)界最完整的專業(yè)物聯(lián)產(chǎn)品系列,覆蓋從傳感器、控制器到云計算的各種應(yīng)用。產(chǎn)品服務(wù)智能家居、交通物流、環(huán)境保護、公共安全、智能消防、工業(yè)監(jiān)測、個人健康等各種領(lǐng)域。構(gòu)建了“質(zhì)量好、技術(shù)優(yōu)、專業(yè)性強,成本低,滿足客戶需求”的綜合優(yōu)勢,持續(xù)為客戶提供有競爭力的產(chǎn)品和服務(wù)。物聯(lián)網(wǎng)產(chǎn)業(yè)是當(dāng)今世界經(jīng)濟和科技發(fā)展的戰(zhàn)略制高點之一。隨著計算機系統(tǒng)的應(yīng)用和微機網(wǎng)絡(luò)的發(fā)展,通信功能越來越顯得重要。這里所說的通信是指計算機與外界的信息交換。因此,通信既包括計算機與外部設(shè)備之間,也包括計算機和計算機之間的信息交換。由于串行通信是在一根傳輸線上一位一位的傳送信息,所用的傳輸線少,并且可以借助現(xiàn)成的電話網(wǎng)進行信息傳送,因此,特別適合于遠距離傳輸。對于那些與計算機相距不遠的人-機交換設(shè)備和串行存儲的外部設(shè)備如終端、打印機、邏輯分析儀、磁盤等,采用串行方式交換數(shù)據(jù)也很普遍。在實時控制和管理方面,采用多臺微機處理機組成分級分布控制系統(tǒng)中,各CPU之間的通信一般都是串行方式。所以串行接口是微機應(yīng)用系統(tǒng)常用的接口。許多外設(shè)和計算機按串行方式進行通信,這里所說的串行方式,是指外設(shè)與接口電路之間的信息傳送方式,實際上,CPU與接口之間仍按并行方式工作。需要特別說明的是串口的電平規(guī)范。一般在設(shè)備內(nèi)部CPU或單片機使用的是TTL電平,而設(shè)備外部一般是使用EIA規(guī)定的電氣接口,兩者間需要進行電平轉(zhuǎn)換。我們通常所說的設(shè)備的串口都是按照EIA規(guī)定的電氣特性而設(shè)計的。研究物聯(lián)網(wǎng),對串口設(shè)備的聯(lián)網(wǎng)、組網(wǎng)的研究也就是勢在必行的。物聯(lián)網(wǎng)的發(fā)展將串口通訊從原來簡單針對本地低速率通訊應(yīng)用的模式發(fā)展為其最后100米的通訊連接辦法之一。這也就要求在物聯(lián)網(wǎng)應(yīng)用中,需要將串口通訊與互聯(lián)網(wǎng)相結(jié)合,完成通訊距離更遠、終端數(shù)量更多的復(fù)雜通訊功能。串口聯(lián)網(wǎng)服務(wù)器正是順應(yīng)上述要求而產(chǎn)生的一種硬件設(shè)備,以實現(xiàn)串口通訊與互聯(lián)網(wǎng)的結(jié)合。遠程監(jiān)控系統(tǒng)有兩種類型,一種是生產(chǎn)現(xiàn)場沒有現(xiàn)場監(jiān)控系統(tǒng),而是將數(shù)據(jù)采集后直接送到遠程計算機進行處理,這種遠程監(jiān)控與一般的現(xiàn)場監(jiān)控沒有多大的區(qū)別,只是數(shù)據(jù)傳輸距離比現(xiàn)場監(jiān)控系統(tǒng)要遠,其它部分則和現(xiàn)場監(jiān)控系統(tǒng)相同;另一種是現(xiàn)場監(jiān)控與遠程監(jiān)控并存。一般是采用現(xiàn)場總線技術(shù)將分布于各個設(shè)備的傳感器、監(jiān)控設(shè)備等連接起來,這樣就從分立單元階段進入了集成單元階段,然后各個管理站點的服務(wù)再用局域網(wǎng)連接起來,這樣就形成了企業(yè)內(nèi)部網(wǎng)(Intranet)。由于建立了基本的網(wǎng)絡(luò)信息基礎(chǔ)結(jié)構(gòu),設(shè)備監(jiān)測、維護技術(shù)進入了集成系統(tǒng)階段,在一個單位的內(nèi)部基本上實現(xiàn)了資源和信息共享。隨著網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,遠程監(jiān)控將更多地應(yīng)用在企業(yè)生產(chǎn)過程的管理中,專業(yè)技術(shù)人員可以通過互聯(lián)網(wǎng)來管理和維護生產(chǎn)過程,優(yōu)化生產(chǎn)工藝,提高設(shè)備的可用率,最終降低生產(chǎn)成本,提高效益。1.3本文的主要工作本文即研究了串口聯(lián)網(wǎng)的原理,采用串口聯(lián)網(wǎng)服務(wù)器實現(xiàn)串口通訊與互聯(lián)網(wǎng)的結(jié)合,完成一臺串口設(shè)備的遠程通訊。全文大致分為以下幾部分內(nèi)容。首先,介紹物聯(lián)網(wǎng)的概念和發(fā)展,介紹串口通訊的概念和發(fā)展,并闡述串口通訊與物聯(lián)網(wǎng)以及遠程監(jiān)控的應(yīng)用關(guān)系。論文第二章將介紹串口聯(lián)網(wǎng)服務(wù)器的概念和原理。論文的第三至第七章將分析本課題的工作并詳細描述基于串口聯(lián)網(wǎng)服務(wù)器的串口遠程聯(lián)網(wǎng)連接的實現(xiàn)。第八章將展示文章的相關(guān)成果,供大家參考使用。本課題設(shè)計實現(xiàn)PC機對串口設(shè)備的遠程通訊管理。課題工作主要分為:硬件結(jié)構(gòu)設(shè)計;監(jiān)控軟件設(shè)計。1.3.1硬件結(jié)構(gòu)設(shè)計圖STYLEREF1\s3SEQ圖\*ARABIC\s11:課題硬件結(jié)構(gòu)設(shè)計課題設(shè)計如圖3-1所示硬件結(jié)構(gòu)。課題以一臺GPS時鐘設(shè)備作為目標通訊設(shè)備,通過串口服務(wù)器實現(xiàn)該GPS設(shè)備串口通訊的網(wǎng)絡(luò)化連接,并最終通過以太網(wǎng)連接到遠程計算機。該結(jié)構(gòu)用以實現(xiàn)一臺計算機遠程的連接一臺或多臺GPS時鐘設(shè)備,完成對這些GPS時鐘設(shè)備的遠程監(jiān)控功能。這種結(jié)構(gòu)可用于批量的設(shè)備拷機測試或者遠程站點設(shè)備監(jiān)控,是各種復(fù)雜應(yīng)用的原型基礎(chǔ)。如果計算機至串口服務(wù)器的連接是經(jīng)由互聯(lián)網(wǎng)(Internet)的,則還需掌握相關(guān)路由配置,有可能需增加一定網(wǎng)絡(luò)設(shè)備以打通路由連接。1.3.2監(jiān)控軟件設(shè)計監(jiān)控軟件是指運行于計算機上,用以連接遠端串口服務(wù)器并進而連接GPS時鐘設(shè)備的服務(wù)軟件。該軟件需要完成如下功能:TCPSocket通訊GPS時鐘設(shè)備協(xié)議解析人機交互界面其中最核心的部分為前兩項。在這兩項的基礎(chǔ)上,可以擴展開發(fā)出功能更為復(fù)雜、應(yīng)用更具針對性的應(yīng)用軟件。本課題的目標也是實現(xiàn)這一基礎(chǔ)功能,為后續(xù)應(yīng)用設(shè)計提供底層服務(wù)。第二章串口聯(lián)網(wǎng)服務(wù)器概述及VC++(MFC)工具介紹2.1串口聯(lián)網(wǎng)服務(wù)器概述2.1.1串口聯(lián)網(wǎng)服務(wù)器原理串口聯(lián)網(wǎng)服務(wù)器是為RS-232/485串口到TCP/IP網(wǎng)絡(luò)之間完成數(shù)據(jù)轉(zhuǎn)換的通訊接口轉(zhuǎn)換器。提供RS-232/485終端串口與TCP/IP網(wǎng)絡(luò)的數(shù)據(jù)雙向透明傳輸。它能將多個串口設(shè)備連接并能將串口數(shù)據(jù)流進行選擇和處理,把現(xiàn)有的串口的數(shù)據(jù)轉(zhuǎn)化成IP端口的數(shù)據(jù),然后進行IP化的管理,IP化的數(shù)據(jù)存取,這樣就能將傳統(tǒng)的串行數(shù)據(jù)送上流行的IP通道。2.1.2串口聯(lián)網(wǎng)服務(wù)器工作模式由于串口協(xié)議不具有網(wǎng)絡(luò)層和傳輸層,所以串口轉(zhuǎn)網(wǎng)口的通信,實際是將串口數(shù)據(jù)作為TCP/IP的應(yīng)用層數(shù)據(jù),用TCP封裝傳輸?shù)姆绞健S捎赥CP/IP協(xié)議的傳輸層包含了TCP協(xié)議和UDP協(xié)議,而TCP協(xié)議具有客戶端和服務(wù)端兩種工作模式,所以串口轉(zhuǎn)網(wǎng)口通信的工作模式可以分為:TCP服務(wù)器端模式(TCPServer)、TCP客戶端模式(TCPClient)和UDP模式三種。TCP模式:TCP模式采用數(shù)據(jù)可靠傳輸機制,所以可以保證數(shù)據(jù)基本不誤碼、不丟失。在TCP通信中,必須由通信兩端構(gòu)成,即一方為TCP客戶端,另一方為TCP服務(wù)端。此種模式類似于打電話機制,打電話的人是TCP客戶端,而接電話的是TCP服務(wù)端。UDP模式:UDP模式是基于非連接的模式,只要有數(shù)據(jù)發(fā)送即可立即發(fā)送,不需要事先連接,但是它無法保證數(shù)據(jù)不丟失,容易產(chǎn)生誤碼。在網(wǎng)口設(shè)備虛擬串口設(shè)備通信中,可以選擇基于三種工作模式的通信機制,即在虛擬串口PC端作為Server端的TCP通信模式、作為Client端的TCP通信模式和UDP通信模式。2.1.3硬件網(wǎng)絡(luò)架構(gòu)串口聯(lián)網(wǎng)通訊,主要通過串口服務(wù)器,把串口設(shè)備連接到互聯(lián)網(wǎng)中,從而達到通過網(wǎng)絡(luò)來控制串口設(shè)備的目的。其基本的硬件架構(gòu)如圖2-1所示:圖STYLEREF1\s2SEQ圖\*ARABIC\s11:串口聯(lián)網(wǎng)服務(wù)器應(yīng)用網(wǎng)絡(luò)架構(gòu)整個控制網(wǎng)絡(luò)中,串口設(shè)備通過RS232/RS485連接到串口服務(wù)器上,串口服務(wù)器通過路由器/交換器接入以太網(wǎng)。針對串口設(shè)備的通信協(xié)議,設(shè)計相應(yīng)的監(jiān)控軟件。運行在PC機終端上的遠程監(jiān)控軟件則可以通過以太網(wǎng)實現(xiàn)對串口設(shè)備的遠程監(jiān)控。2.2VC++(MFC)工具介紹2.2.1VC++MicrosoftVisualC++,(簡稱VisualC++、MSVC、VC++或VC)微軟公司的C++開發(fā)工具,具有集成開發(fā)環(huán)境,可提供編輯C語言,C++以及C++/CLI等編程語言。VC++整合了便利的除錯工具,特別是整合了微軟視窗程式設(shè)計(WindowsAPI)、三維動畫DirectXAPI,Microsoft.NET框架。目前最新的版本是MicrosoftVisualC++2013。MicrosoftVisualC++是Microsoft公司推出的開發(fā)Win32環(huán)境程序,面向?qū)ο蟮目梢暬删幊滔到y(tǒng)。它不但具有程序框架自動生成、靈活方便的類管理、代碼編寫和界面設(shè)計集成交互操作、可開發(fā)多種程序等優(yōu)點,而且通過簡單的設(shè)置就可使其生成的程序框架支持數(shù)據(jù)庫接口、OLE2,WinSock網(wǎng)絡(luò)、3D控制界面。它以擁有“語法高亮”,IntelliSense(自動完成功能)以及高級除錯功能而著稱。比如,它允許用戶進行遠程調(diào)試,單步執(zhí)行等。還有允許用戶在調(diào)試期間重新編譯被修改的代碼,而不必重新啟動正在調(diào)試的程序。其編譯及建置系統(tǒng)以預(yù)編譯頭文件、最小重建功能及累加連結(jié)著稱。這些特征明顯縮短程式編輯、編譯及連結(jié)花費的時間,在大型軟件計劃上尤其顯著。VisualStudio是微軟公司推出的開發(fā)環(huán)境,VisualStudio可以用來創(chuàng)建Windows平臺下的Windows應(yīng)用程序和網(wǎng)絡(luò)應(yīng)用程序,也可以用來創(chuàng)建網(wǎng)絡(luò)服務(wù)、智能設(shè)備應(yīng)用程序和Office插件。VisualStudio是目前最流行的Windows平臺應(yīng)用程序開發(fā)環(huán)境。VisualStudio2008包括各種增強功能,例如可視化設(shè)計器(使用.NETFramework3.5加速開發(fā))、對Web開發(fā)工具的大量改進,以及能夠加速開發(fā)和處理所有類型數(shù)據(jù)的語言增強功能。VisualStudio2008為開發(fā)人員提供了所有相關(guān)的工具和框架支持,幫助創(chuàng)建引人注目的、令人印象深刻并支持AJAX的Web應(yīng)用程序。開發(fā)人員能夠利用這些豐富的客戶端和服務(wù)器端框架輕松構(gòu)建以客戶為中心的Web應(yīng)用程序,這些應(yīng)用程序可以集成任何后端數(shù)據(jù)提供程序、在任何當(dāng)前瀏覽器內(nèi)運行并完全訪問ASPNET應(yīng)用程序服務(wù)和Microsoft平臺。2.2.2.MFCMFC(MicrosoftFoundationClasses)是微軟基礎(chǔ)類庫的簡稱,是微軟公司實現(xiàn)的一個c++類庫,主要封裝了大部分的windowsAPI函數(shù),vc++是微軟公司開發(fā)的c/c++的集成開發(fā)環(huán)境,所謂集成開發(fā)環(huán)境,就是說利用它你可以編輯,編譯,調(diào)試,而不是使用多種工具輪換操作,靈活性較大。有時人們說vc呢也指它的內(nèi)部編譯器,集成開發(fā)環(huán)境必須有一個編譯器內(nèi)核,要不有什么用,例如DevC++其中一個編譯器內(nèi)核就是gcc。MFC除了是一個類庫以外,還是一個框架,你應(yīng)該試過,在vc++里新建一個MFC的工程,開發(fā)環(huán)境會自動幫你產(chǎn)生許多文件,同時它使用了mfcxx.dll。xx是版本,它封裝了mfc內(nèi)核,所以你在你的代碼看不到原本的SDK編程中的消息循環(huán)等等東西,因為MFC框架幫你封裝好了,這樣你就可以專心的考慮你程序的邏輯,而不是這些每次編程都要重復(fù)的東西,但是由于是通用框架,沒有最好的針對性,當(dāng)然也就喪失了一些靈活性和效率但是MFC的封裝很淺,所以效率上損失不大,靈活性還可以,雖然也有很多缺陷,但還是一個比較好的東西。MFC中最重要的封裝是對Win32API的封裝,因此,理解WindowsObject和MFCObject(C++對象,一個C++類的實例)之間的關(guān)系是理解MFC的關(guān)鍵之一。所謂WindowsObject(Windows對象)是Win32下用句柄表示的Windows操作系統(tǒng)對象;所謂MFCObject(MFC對象)是C++對象,是一個C++類的實例,這里(本書范圍內(nèi))MFCObject是有特定含義的,指封裝WindowsObject的C++Object,并非指任意的C++Object。MFCObject和WindowsObject是不一樣的,但兩者緊密聯(lián)系。2.3本章小結(jié)本章主要講述了本課題在軟硬件設(shè)計方面需要的基礎(chǔ)知識,包括硬件方面串口聯(lián)網(wǎng)服務(wù)器的原理及工作模式,以及硬件架構(gòu)。軟件方面,介紹了編寫程序時所需要的VC++軟件,及MFC框架。能夠為后面知識的學(xué)習(xí)提供基礎(chǔ)的幫助。第三章串口聯(lián)網(wǎng)服務(wù)器通訊底層3.1通信底層設(shè)計串口聯(lián)網(wǎng)軟件底層以其硬件架構(gòu)為基礎(chǔ)。控制網(wǎng)絡(luò)的架構(gòu)采用C/S模式架構(gòu)。其中串口服務(wù)器運行TCPServer端,PC監(jiān)控終端則設(shè)計為TCPClient端。每一臺連接到串口服務(wù)器上的串口設(shè)備,都具有固定的IP及端口號。運行在PC的Client監(jiān)控終端,通過Socket與運行在串口服務(wù)器的Server端建立通信連接,進而控制串口設(shè)備。如下圖5-1所示:圖STYLEREF1\s5SEQ圖\*ARABIC\s11:底層通信原理連接到網(wǎng)絡(luò)中的串口服務(wù)器,需要把串口服務(wù)器設(shè)置成TCPServer模式。以康海時代NC600系列串口服務(wù)器為例,其設(shè)置步驟如下:用IE內(nèi)核的瀏覽器登錄串口服務(wù)器的IP地址,進入設(shè)置主界面在串口配置項里面配置好響應(yīng)設(shè)備串口的波特率燈參數(shù)。在工作模式中把對應(yīng)的工作模式設(shè)置成TCPServer工作模式保存提交。3.2MFC中TCPsocket編程串口聯(lián)網(wǎng)網(wǎng)絡(luò)中,串口設(shè)備與PC端監(jiān)控軟件的通信,主要通過TCPsocket套接字實現(xiàn)。TCP為面向連接的一種網(wǎng)絡(luò)連接方式,能夠保證數(shù)據(jù)通信的安全性。MFC中對socket編程有很好的支持,這為物聯(lián)網(wǎng)串口設(shè)備遠程監(jiān)控提供了便利。3.2.1TCPsocket基本原理TCPsocket采用流式套接字進行網(wǎng)絡(luò)連接。流式套接字提供沒有記錄邊界的數(shù)據(jù)流,即字節(jié)流。字節(jié)流能確保以正確的順序無重復(fù)地被送達。其主要的編程模型如下:圖STYLEREF1\s5SEQ圖\*ARABIC\s12:流式套接字編程模型在該模型中,服務(wù)器端創(chuàng)建并初始化套接字,監(jiān)聽來自客戶端的連接請求??蛻舳送瑯咏⑻捉幼?,用于向服務(wù)器端發(fā)起連接請求。當(dāng)服務(wù)器接收到來自客戶機的連接請求后,與客戶機建立連接。連接成功后,則服務(wù)器和客戶機可以進行數(shù)據(jù)收發(fā)通信。通信完成后,服務(wù)器和客戶機關(guān)閉套接字。3.2.2基本W(wǎng)indowsSocketAPIWindows操作系統(tǒng)提供了很多用于Socket通信的API,可以很方便地開發(fā)Socket通信軟件。主要的API函數(shù)如下:1)WSAStartup調(diào)用windowsSocketDLL函數(shù)原型intWSAStartup(WORDwVersionRequested,//應(yīng)用程序要求的sockets版本LPWSADATAlpWSAData//指向數(shù)據(jù)結(jié)構(gòu)WSDATA的指針,//得到windowsSocket的具體信息);WSDATA定義如下:typedefstructWSAData{WORDwVersion;WORDwHighVersion;#ifdef_WIN64unsignedshortiMaxSockets;unsignedshortiMaxUdpDg;charFAR*lpVendorInfo;charszDescription[WSADESCRIPTION_LEN+1];charszSystemStatus[WSASYS_STATUS_LEN+1];#elsecharszDescription[WSADESCRIPTION_LEN+1];charszSystemStatus[WSASYS_STATUS_LEN+1];unsignedshortiMaxSockets;unsignedshortiMaxUdpDg;charFAR*lpVendorInfo;#endif}WSADATA,FAR*LPWSADATA;2)WSACleanup結(jié)束對WindowsSocketsDLL的調(diào)用函數(shù)原型:intWSACleanup(void);3)socket用于建立Sockets。函數(shù)原型:SOCKETsocket(intaf,//地址族,一般是AF_INETinttype,//socket類型,SOCK_STREAM或SOCK_DGRAMintprotocol//協(xié)議類型,通常取值0);4)closesocket關(guān)閉套接字函數(shù)原型:intclosesocket(SOCKETs//要關(guān)閉的套接字);5)bind將一個本地地址和一個SOCKET描述字連接起來函數(shù)原型:intbind(SOCKETs,//要綁定的套接字conststructsockaddrFAR*name,//指向SOCKADDR結(jié)構(gòu)的地址intnamelen//地址結(jié)構(gòu)的sizeof)Tcp/ipSOCKADDR的結(jié)構(gòu)為structsockaddr{unsignedshortsa_family;charsa_data[4];};structsockaddr_in{shortsin_family;unsignedshortsin_port;structin_addrsin_addr;charsin_zero[8];};6)listen設(shè)定socket為監(jiān)聽狀態(tài)函數(shù)原型:intlisten(SOCKETs,//進行監(jiān)聽的socketintbacklog//客戶端可以連接的請求個數(shù));7)accept接受一個socket的連接請求,同時返回一個新的socket,新的socket用來在服務(wù)器與客戶端之間傳遞和接收信息。函數(shù)原型:SOCKETaccept(SOCKETs,//處于監(jiān)聽狀態(tài)的socketstructsockaddrFAR*addr,//將要接受地址的sockaddr指針intFAR*addrlen//地址的長度);8)connect連接客戶端的socket到指定的網(wǎng)絡(luò)服務(wù)器。連接成功后,客戶端用此socket與服務(wù)器通信。函數(shù)原型:intconnect(SOCKETs,//將要連接的socketconststructsockaddrFAR*name,//目標socket地址intnamelen//地址結(jié)構(gòu)sizeof);9)recv用于接收已經(jīng)建立連接的socket數(shù)據(jù)信息函數(shù)原型:intrecv(SOCKETs,charFAR*buf,//接收數(shù)據(jù)緩沖區(qū)intlen,//緩沖區(qū)長度intflags//有MSG_PEEK和MSG_OOB);返回值:接收到的字節(jié)數(shù)10)send對已經(jīng)建立連接的socket發(fā)送數(shù)據(jù)信息函數(shù)原型:intsend(SOCKETs,charFAR*buf,//發(fā)送數(shù)據(jù)緩沖區(qū)intlen,//緩沖區(qū)長度intflags//有MSG_PEEK和MSG_OOB);返回值:發(fā)送的字節(jié)數(shù)11)WSAAsyncSelect要求socket在有事件發(fā)生時通知使用者,本函數(shù)將套接口設(shè)置成為非阻塞方式。函數(shù)原型:intWSAAsyncSelect(SOCKETs,HWNDhWnd,//接收網(wǎng)絡(luò)事件的窗口句柄unsignedintwMsg,//發(fā)送給窗口的網(wǎng)絡(luò)事件消息longlEvent//網(wǎng)絡(luò)消息);12)sendto向目標地址發(fā)送數(shù)據(jù)信息函數(shù)原型:intsendto(SOCKETs,constcharFAR*buf,intlen,intflags,conststructsockaddrFAR*to,inttolen);13)recvfrom接收目標地址傳來的數(shù)據(jù)信息函數(shù)原型:intrecvfrom(INSOCKETs,OUTcharFAR*buf,INintlen,INintflags,OUTstructsockaddrFAR*from,INOUTintFAR*fromlen);3.2.3MFC下的Socket編程類MFC提供了兩個類用以支持套接字編程,它們是CAsyncSocket類和CSocket類。1)CAsyncSocket類CAsyncSocket類一對一地封裝WindowsSocketAPI。CAsyncSocket類適合哪些對網(wǎng)絡(luò)通信細節(jié)很了解,但希望利用回調(diào)的便利通知網(wǎng)絡(luò)事件的程序員使用。如果想利用WindowsSockets方便地處理MFC應(yīng)用程序中的多個網(wǎng)絡(luò)協(xié)議,而又不想放棄靈活性,可以考慮使用CAsyncSocket。CAsyncSocket類是MFC在方便性與靈活性中的一種折衷方案。它提供了一個類用以保留網(wǎng)絡(luò)編程的靈活性,而方便性則由CSocket類來提供。2)CSocket類CSocket類是CAsyncSocket類的派生類,它致力于提供比CAsyncSocket類更高的抽象性,使得網(wǎng)絡(luò)編程變得簡單方便。CSocket類支持流方式和數(shù)據(jù)報方式,但一般情況下用的更多的是流方式的數(shù)據(jù)通信。在流方式的通信模式下,CSocket類通常會與CArchive類結(jié)合,以串行化的方式發(fā)送和接收數(shù)據(jù),這使得網(wǎng)絡(luò)編程變得像讀寫文件一樣簡單了。CArchive類扮演的是一個數(shù)據(jù)緩沖區(qū)的角色,它通過CSocketFile類與一個套接字相聯(lián)系。只要建立了兩者的聯(lián)系,然后往“數(shù)據(jù)緩沖區(qū)”裝入數(shù)據(jù)與取出數(shù)據(jù)就完成了。3.2.4MFC下Socket編程基本步驟

sockets(套接字)編程有三種,流式套接字(SOCK_STREAM),數(shù)據(jù)報套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);基于TCP的socket編程是采用的流式套接字。流式套接字Socket編程是基于Client/Server模式,其編程主要包括客客戶機和服務(wù)器端的編程,程序編寫之前ws2_32.lib的庫文件?;镜木幊滩襟E如下:服務(wù)器端編程的步驟:

1)加載套接字庫,創(chuàng)建套接字(WSAStartup()/socket());

2)綁定套接字到一個IP地址和一個端口上(bind());

3)將套接字設(shè)置為監(jiān)聽模式等待連接請求(listen());

4)請求到來后,接受連接請求,返回一個新的對應(yīng)于此次連接的套接字(accept());

5)用返回的套接字和客戶端進行通信(send()/recv());

6)返回,等待另一連接請求;

7)關(guān)閉套接字,關(guān)閉加載的套接字庫(closesocket()/WSACleanup())。客戶機端編程步驟:1)加載套接字庫,創(chuàng)建套接字(WSAStartup()/socket());

2)向服務(wù)器發(fā)出連接請求(connect());

3)和服務(wù)器端進行通信(send()/recv());

4)關(guān)閉套接字,關(guān)閉加載的套接字庫(closesocket()/WSACleanup())??蛻魴C與服務(wù)器通信過程如圖5-3所示:圖STYLEREF1\s5SEQ圖\*ARABIC\s13:客戶機服務(wù)器底層通信過程3.3TCPClient端Socket的編程實現(xiàn)串口聯(lián)網(wǎng)實現(xiàn)串口設(shè)備的網(wǎng)絡(luò)互聯(lián),其主要的編程在于實現(xiàn)Client端上位機的監(jiān)控設(shè)計。以GPS頻標時標同步信號源為例,介紹串口設(shè)備聯(lián)網(wǎng)TCPClient端編程的具體實現(xiàn)。3.3.1Client接收數(shù)據(jù)處理串口設(shè)備數(shù)據(jù)的收發(fā)以字符形式進行。在串口設(shè)備實現(xiàn)網(wǎng)絡(luò)互聯(lián)模型中,Client端接收數(shù)據(jù)處理,主要方式有兩種。一種是通過WSAAsyncSelect()函數(shù)注冊Socket套接字消息響應(yīng)來進行實現(xiàn),這是最普遍的。當(dāng)串口連接到網(wǎng)絡(luò)的串口設(shè)備比較多時,則可以通過多線程的方式來進行接收數(shù)據(jù)的處理。1)Socket消息響應(yīng)實現(xiàn)數(shù)據(jù)接收利用Socket消息響應(yīng)實現(xiàn)數(shù)據(jù)收發(fā),首先需要利用WSAAsyncSelect()注冊消息響應(yīng)類型。WSAAsyncSelect()函數(shù)如下:intPASCALFARWSAAsyncSelect(SOCKETs,HWNDhWnd,unsignedintwMsg,longlEvent);s標識一個需要事件通知的套接口的描述符.hWnd標識一個在網(wǎng)絡(luò)事件發(fā)生時需要接收消息的窗口句柄.wMsg在網(wǎng)絡(luò)事件發(fā)生時要接收的消息.lEvent位屏蔽碼,用于指明應(yīng)用程序感興趣的網(wǎng)絡(luò)事件集合.lEvent參數(shù)由下表中列出的值組成:FD_READ欲接收讀準備好的通知.FD_WRITE欲接收寫準備好的通知.FD_OOB欲接收帶邊數(shù)據(jù)到達的通知.FD_ACCEPT欲接收將要連接的通知.FD_CONNECT欲接收已連接好的通知.FD_CLOSE欲接收套接口關(guān)閉的通知.實際編程時,則根據(jù)需要注冊響應(yīng)的網(wǎng)絡(luò)事件。注冊號網(wǎng)絡(luò)實際后,在程序中添加自定義OnSocket消息響應(yīng)函數(shù),則可以實現(xiàn)數(shù)據(jù)的收發(fā)。OnSocket消息響應(yīng)函數(shù)添加步驟如下:定義Onsocket消息:#defineWM_SOCKET(WM_USER+100)定義OnSocket()消息響應(yīng)函數(shù):afx_msgvoidOnSocket(WPARAMwParam,LPARAMlParam);添加OnSocket()函數(shù)消息映射:ON_MESSAGE(WM_SOCKET,OnSocket)最后實現(xiàn)OnSocket函數(shù)。2)多線程接收實現(xiàn)當(dāng)串口設(shè)備較多時,則可以利用多線程處理各個設(shè)備數(shù)據(jù)的收發(fā)。多線程實現(xiàn)數(shù)據(jù)的收發(fā),其主要的思想是建立一個TCPClientBase的基類。當(dāng)有新的設(shè)備需要監(jiān)控時,則在主應(yīng)用程序中新開辟一個線程,該線程用于專門處理新增加設(shè)備數(shù)據(jù)的收發(fā)。在新的線程中,新增加了一個TCPClient類,該類繼承于TCPClientBase基類,從實現(xiàn)應(yīng)用程序與新增加設(shè)備進行數(shù)據(jù)通信的目的。3.3.2ClientSocket套接字創(chuàng)建在終端監(jiān)控軟件,當(dāng)用戶需要對串口設(shè)備通過網(wǎng)絡(luò)進行控制時,點擊連接按鈕,終端軟件建立Client端套接字,實現(xiàn)與串口設(shè)備的通信。GPS頻標時標同步信號源為例,其實現(xiàn)代碼如下:1)調(diào)用windowsSocketDLL初始化套接字: WSADATAdata; //定義WSADATA結(jié)構(gòu)體對象WORDw=MAKEWORD(2,0); //定義版本號碼 ::WSAStartup(w,&data);2)獲取控件輸入的端口號和IP地址: GetDlgItemText(IDC_EDIT_ADDR,strIP); GetDlgItemText(IDC_EDIT_PORT,strPort); intnPort=atoi(strPort);3)創(chuàng)建Socket套接字:m_socket=::socket(AF_INET,SOCK_STREAM,0);消息響應(yīng)機制/多線程監(jiān)聽機制。4)設(shè)置套接字的阻塞模式:::WSAAsyncSelect(m_socket,this->m_hWnd,WM_SOCKET,FD_READ|FD_CONNECT);5)套接字參數(shù)設(shè)置: addr.sin_family=AF_INET; addr.sin_addr.S_un.S_addr=inet_addr(strIP.GetBuffer(1)); addr.sin_port=ntohs(nPort);6)連接服務(wù)器端connect(m_socket,(sockaddr*)&addr,sizeof(addr));7)數(shù)據(jù)接收VoidCGPSctrlView::OnSocket(WPARAMwParam,LPARAMlParam)//有socket數(shù)據(jù)發(fā)來時,調(diào)用此函數(shù){ CString strText,str; strText.Empty(); str.Empty(); TRACE("OnSocket\n"); if(lParam==FD_READ) { TRACE("CGPSctrlView::OnReceive\n"); charbuffer[128]={0}; BYTEbuf[128]={0}; intnRead; CStringArraystrArray; strArray.RemoveAll(); nRead=::recv(m_socket,buffer,128,0); memcpy((void*)buf,(void*)buffer,128); TRACE("nRead:%d",nRead); switch(nRead) { case0: break; caseSOCKET_ERROR: if(GetLastError()!=WSAEWOULDBLOCK) AfxMessageBox("Erroroccurred"); break; default: buffer[nRead]='\0'; intj=0; for(inti=0;i<nRead;i++) { TRACE("buffer[%d]=%02x",i,buf[i]); OnCommunication((WPARAM)buf[i],0); } } } if(lParam==FD_CONNECT) { m_bConnected=true; SetDlgItemText(IDC_BUTTON_CONNECT,_T("斷開連接")); ((CButton*)GetDlgItem(IDC_BUTTON_OPEN_COM))->EnableWindow(false); m_sendWay=SEND_BY_INTERNET; ((CStatic*)GetDlgItem(IDC_LIGHT_CONNECT))->SetIcon(m_greenIcon); }}8)數(shù)據(jù)發(fā)送: ::send(m_socket,(char*)szBuffer,len,0);9)關(guān)閉套接字: ::closesocket(m_socket);3.4本章小結(jié)本章通過學(xué)習(xí)底層通信原理及流式套接字編程模型等相關(guān)知識,在VC++中運用調(diào)用socketAPI中的函數(shù)進行編程,來實現(xiàn)客戶端與服務(wù)器的數(shù)據(jù)互通。第四章GPS設(shè)備協(xié)議解析Socket套接字實現(xiàn)接收數(shù)據(jù)后,還需要對接收的數(shù)據(jù)進行驗證和解析處理。以GPS頻標時標設(shè)備為例,詳細介紹該過程。4.1接收數(shù)據(jù)的驗證接收數(shù)據(jù)的驗證,主要是驗證數(shù)據(jù)否否符合設(shè)備的數(shù)據(jù)協(xié)議,確定接收到的數(shù)據(jù)是否正確。若接收到的數(shù)據(jù)與設(shè)備協(xié)議相符合,則對數(shù)據(jù)進行解析處理。否則丟棄接收到的數(shù)據(jù)。數(shù)據(jù)的驗證機制主要在實現(xiàn)定義好的OnCommunication()函數(shù)中實現(xiàn)。OnCommunication()函數(shù)的實現(xiàn)則以設(shè)備的發(fā)送協(xié)議為基礎(chǔ)進行設(shè)計,采用狀態(tài)機機制,用來驗證數(shù)據(jù)。幀頭(1)地址(1)控制字(1)數(shù)據(jù)長度(1)數(shù)據(jù)(N)CRC16校驗(2)GPS串口設(shè)備中,其發(fā)送的數(shù)據(jù)幀格式為:根據(jù)協(xié)議,設(shè)計了6個狀態(tài)的狀態(tài)機,用于實現(xiàn)數(shù)據(jù)驗證:Waiting:數(shù)據(jù)等待狀態(tài),當(dāng)接受到數(shù)據(jù)時,則根據(jù)判斷流轉(zhuǎn)到下一個狀態(tài)BYTE_HEAD:幀頭驗證狀態(tài)BYTE_ADDR:地址驗證狀態(tài)BYTE_CONTROL:控制字驗證狀態(tài)BYTE_LENGTH:數(shù)據(jù)長度驗證狀態(tài)BYTE_DATA:數(shù)據(jù)項驗證狀態(tài)BYTE_CRC:校驗碼驗證狀態(tài)整個狀態(tài)機的流轉(zhuǎn)過程如下圖所示圖STYLEREF1\s6SEQ圖\*ARABIC\s11:串口數(shù)據(jù)接收及驗證機制OnSocket()函數(shù)接收到字符數(shù)據(jù)以后,把接收到的字符存入到事先定義好的Buffer[]緩存數(shù)組。軟件終端調(diào)用OnCommunication()函數(shù)對存在Buffer[]中的數(shù)據(jù)進行狀態(tài)機驗證。若通過狀態(tài)機的驗證,則接收數(shù)據(jù)正確,對數(shù)據(jù)進行解析。4.2接收數(shù)據(jù)的解析狀態(tài)機驗證接收數(shù)據(jù)后,接收的數(shù)據(jù)存儲在一個m_RecvData[128]的數(shù)組中,數(shù)據(jù)的解析則是根據(jù)協(xié)議解析m_RecvData[128]數(shù)組中的內(nèi)容。GPS設(shè)備中協(xié)議中,時間部分協(xié)議如下:以GPS協(xié)議接收數(shù)據(jù)的時間幀為例,DisPlay()函數(shù)解析時間過程如下:判斷是否是時間幀:時間幀的控制字為0x81,而控制字存在m_RecvData[128]數(shù)組的第3個字節(jié),即m_RecvData[2]中,所以第一步判斷m_RecvData[2]的數(shù)據(jù),若其為0x81,則對其按時間幀進行解析時分秒的解析根據(jù)協(xié)議,數(shù)據(jù)項長度為3個字節(jié),存儲在m_RecvData[128]數(shù)組的第5-7個字節(jié)中。及m_RecvData[4]中為時,m_RecvData[5]中為分,m_RecvData[6]中為秒。對此三個字節(jié)的數(shù)據(jù),利用函數(shù)解析后,顯示到列表控件響應(yīng)的位置,如下:strText.Format("%d",m_RecvData[4]);strText.Format("%d",m_RecvData[5]);strText.Format("%d",m_RecvData[6]);其他數(shù)據(jù)項的解析與時間的解析思路一致,只是具體項的具體解析算法不一致。4.3本章小結(jié)本章主要講述了幀數(shù)據(jù)的結(jié)構(gòu),然后依據(jù)其結(jié)構(gòu),引出在接收幀數(shù)據(jù)時,所需要的各個步驟。一步一步來判斷一個幀數(shù)據(jù)是如何接收到的。之后,學(xué)習(xí)了在接收到幀數(shù)據(jù)后是如何對其進行解析。整體掌握幀數(shù)據(jù)從接收到解析出來,能夠進行使用的整個過程。第五章人機交互設(shè)計串口設(shè)備網(wǎng)絡(luò)互聯(lián)系統(tǒng)中,主要的一部分是上位機人機交互的設(shè)計。在人機交互的設(shè)計中,主要利用VC++編譯器和MFC框架實現(xiàn)上層界面的設(shè)計。VC++編譯器和MFC框架,為串口設(shè)備網(wǎng)絡(luò)互聯(lián)系統(tǒng)的界面開發(fā)提供了方便。5.1VisualC++6.0編譯器簡介VisualC++6.0,簡稱VC或者VC6.0,是微軟推出的一款C++編譯器,將“高級語言”翻譯為“機器語言(低級語言)”的程序。VisualC++是一個功能強大的可視化軟件開發(fā)工具。自1993年Microsoft公司推出VisualC++1.0后,隨著其新版本的不斷問世,VisualC++已成為專業(yè)程序員進行軟件開發(fā)的首選工具。雖然微軟公司推出了VisualC++.NET(VisualC++7.0),但它的應(yīng)用的很大的局限性,只適用于Windows2000、WindowsXP和WindowsNT4.0。所以實際中,更多的是以VisualC++6.0為平臺。VisualC++6.0不僅是一個C++編譯器,而且是一個基于Windows操作系統(tǒng)的可視化集成開發(fā)環(huán)境(integrateddevelopmentenvironment,IDE)。VisualC++6.0由許多組件組成,包括編輯器、調(diào)試器以及程序向?qū)ppWizard、類向?qū)lassWizard等開發(fā)工具。這些組件通過一個名為DeveloperStudio的組件集成為和諧的開發(fā)環(huán)境。VC++應(yīng)用程序的開發(fā)主要有兩種模式,一種是WIN

API方式,另一種則是MFC方式,傳統(tǒng)的WIN

API開發(fā)方式比較繁瑣,而MFC則是對WIN

API再次封裝,所以MFC相對于WIN

API開發(fā)更具備效率優(yōu)勢。串口設(shè)備網(wǎng)絡(luò)互聯(lián)系統(tǒng)中,主要利用VisualC++6.0中MFC進行應(yīng)用程序開發(fā)。MFC借助C++的優(yōu)勢為Windows開發(fā)開辟了一片新天地,同時也借助ApplicationWizzard使開發(fā)者擺脫離了每次都必寫基本代碼,借助ClassWizard和消息映射使開發(fā)者擺脫了定義消息處理時那種混亂和冗長的代碼段。另外,MFC利用C++的封裝功能使開發(fā)者擺脫Windows中各種句柄的困擾,只需要面對C++中的對象,這樣一來使開發(fā)更接近開發(fā)語言而遠離系統(tǒng)。利用C++的封裝性開發(fā)者可以更容易理解和操作各種窗口對象;利用C++的派生性開發(fā)者可以減少開發(fā)自定義窗口的時間和創(chuàng)造出可重用的代碼;利用虛擬性可以在必要時更好的控制窗口的活動。而且C++本身所具備的超越C語言的特性都可以使開發(fā)者編寫出更易用,更靈活的代碼。 5.2MFC框架5.2.1MFC框架簡介MFC,微軟基礎(chǔ)類(MicrosoftFoundationClasses),是微軟提供的用于在C++環(huán)境下編寫應(yīng)用程序的一個框架和引擎,是對API函數(shù)的專用C++封裝,微軟做了大量的封裝,隱藏了許多內(nèi)部實現(xiàn),簡化了開發(fā)人員的工作量。MFC(MicrosoftFoundationClassLibrary)中的各種類相互結(jié)合起來構(gòu)成了一個應(yīng)用程序框架,它的目的就是讓程序員在此基礎(chǔ)上來建立Windows下的應(yīng)用程序,這是一種相對SDK來說更為簡單的方法。因為總體上,MFC框架定義了應(yīng)用程序的輪廓,并提供了用戶接口的標準實現(xiàn)方法,程序員所要做的就是通過預(yù)定義的接口把具體應(yīng)用程序特有的東西填入這個輪廓。MicrosoftVisualC++提供了相應(yīng)的工具來完成這個工作:AppWizard可以用來生成初步的框架文件(代碼和資源等);資源編輯器用于幫助直觀地設(shè)計用戶接口;ClassWizard用來協(xié)助添加代碼到框架文件;最后,編譯,則通過類庫實現(xiàn)了應(yīng)用程序特定的邏輯。5.2.2MFC類層次結(jié)構(gòu)圖微軟MFC類庫提供了大量的MFC類,開發(fā)人員可以很方便地利用這些類高效快速地開發(fā)出自己的應(yīng)用程序。圖8-1為從MFC類庫截取的部分類的層次結(jié)構(gòu)圖。從圖中,可以看到各種類和控件的相互關(guān)系。圖STYLEREF1\s7SEQ圖\*ARABIC\s11:MFC類庫層次結(jié)構(gòu)圖(部分)1)CWinApp類每個應(yīng)用程序從類CWinApp派生出自己的應(yīng)用程序類,并定義一個全局的對象。該應(yīng)用程序類包含了Windows下MFC應(yīng)用程序的初始化、運行和結(jié)束過程?;诳蚣芙⒌膽?yīng)用程序必須有一個(且只能有一個)從CWinApp派生的類的對象。CWinApp所包含的數(shù)據(jù)成員主要用于存放和控制應(yīng)用程序本身的信息。其主要的成員函數(shù)如表9-1所示:數(shù)據(jù)成員名稱作用入描述m_pszAppName指定了應(yīng)用程序名稱m_hInstance標識了應(yīng)用程序的當(dāng)前實例m_lpCmdLine指示一個以NULL結(jié)尾的字符串,指向應(yīng)用程序的命令行m_nCmdShow指示最初如何顯示窗口m_pszExeName應(yīng)用程序的模塊名稱m_pszHelpFilePath應(yīng)用程序的幫助文件路徑m_pszProfileName應(yīng)用程序?qū)?yīng)的.ini文件名表9-1CWinApp主要成員函數(shù)除了CWinApp的成員函數(shù)以外,微軟基礎(chǔ)類庫還提供AfxGetApp等全局函數(shù),用于訪問你的CWinApp對象以及其它全局信息。2)CWnd類CWnd類提供了微軟基礎(chǔ)類庫中所有窗口類的基本功能。CWnd對象與Windows的窗口不同,但是兩者有緊密聯(lián)系。CWnd對象是由CWnd的構(gòu)造函數(shù)和析構(gòu)函數(shù)創(chuàng)建或銷毀的。另一方面,Windows的窗口是Windows的一種內(nèi)部數(shù)據(jù)結(jié)構(gòu),它是由CWnd的Create成員函數(shù)創(chuàng)建的,而由CWnd的虛擬析構(gòu)函數(shù)銷毀。DestroyWindow函數(shù)銷毀Windows的窗口,但是不銷毀對象。CWnd類和消息映射機制隱藏了WndProc函數(shù)。接收到的Windows通知消息通過消息映射被自動發(fā)送到適當(dāng)?shù)腃WndOnMessage成員函數(shù)。程序開發(fā)者可以在派生類中重載OnMessage成員函數(shù)以處理成員的特定消息。使用CWnd類同時還能夠為應(yīng)用程序創(chuàng)建Windows的子窗口。先從CWnd繼承一個類,然后在派生類中加入成員變量以保存與你的應(yīng)用程序有關(guān)的數(shù)據(jù)。在派生類中實現(xiàn)消息處理成員函數(shù)和消息映射,以指定當(dāng)消息被發(fā)送到窗口時應(yīng)該如何動作。程序開發(fā)者可以經(jīng)過兩個步驟來創(chuàng)建一個子窗口。首先,調(diào)用構(gòu)造函數(shù)CWnd以創(chuàng)建一個CWnd對象,然后調(diào)用Create成員函數(shù)以創(chuàng)建子窗口并將它連接到CWnd對象。

當(dāng)用戶關(guān)閉你的子窗口時,應(yīng)銷毀CWnd對象,或者調(diào)用DestroyWindow成員函數(shù)以清除窗口并銷毀它的數(shù)據(jù)結(jié)構(gòu)。在微軟基礎(chǔ)類庫中,從CWnd派生了許多其它類以提供特定的窗口類型。這些類中有許多,包括CFrameWnd,CMDIFrameWnd,CMDIChildWnd,CView和CDialog,被用來進一步派生。從CWnd派生的控件類,如CButton,可以被直接使用,也可以被進一步派生出其它類來。5.2.3初始化流程及消息循環(huán)機制基于MFC的對話框應(yīng)用程序的初始化流程及消息循環(huán)機制的過程如圖8-2所示:圖STYLEREF1\s7SEQ圖\*ARABIC\s12:MFC消息循環(huán)機制由于Windows是一個面向消息的操作系統(tǒng),在Windows環(huán)境下很大一部分編程工作涉及消息處理。每當(dāng)發(fā)生一個事件,如擊鍵或鼠標點擊,就會向應(yīng)用程序發(fā)送一個消息,然后由它來處理事件。微軟基礎(chǔ)類庫提供了為基于消息的編程而優(yōu)化的編程模式。在這種模式下,“消息映射”被用于指明哪個函數(shù)將為特定的類處理不同的消息。消息映射包含了一個或多個宏,用以指定哪個函數(shù)處理哪個消息。5.3MFC開發(fā)應(yīng)用程序?qū)崿F(xiàn)VisualC++6.0編譯器類向?qū)Т蟠筇峁┝薓FC應(yīng)用程序的開發(fā)效率。利用類向?qū)?,可以方便地新建基于單文檔、多文檔及基于對話框的界面應(yīng)用程序。界面開發(fā)中,各種控件可以方便的添加需要的消息響應(yīng),提供應(yīng)用程序后臺數(shù)據(jù)的處理及通訊效率。5.3.1VisualC++6.0新建MFC應(yīng)用程序VisualC++6.0可以方便地建立MFC應(yīng)用程序。下面以建立基于對話框的應(yīng)用程序為例,詳述建立MFC應(yīng)用程序步驟。運行VisualC++6.0集成開發(fā)環(huán)境。點擊文件->新建,彈出新建應(yīng)用程序?qū)υ捒?,如下圖所示:選擇在新建對話框中選擇“工程”主菜單,選中“MFCAppWizard(exe)”,在“工程名稱”一欄中輸入相應(yīng)的工程名稱,選擇好工程相應(yīng)的位置,點擊“確定”按鈕,則彈出MFC應(yīng)用程序向?qū)υ捒?,此界面可以選擇應(yīng)用程序是基于單文檔、多文檔還是基本對話框,如下圖所示。選擇基于對話框,點擊下一步,彈出應(yīng)用程序外觀設(shè)置。如下圖。應(yīng)用程序開發(fā)這可以根據(jù)需要進行相應(yīng)的選擇。所有選擇保存默認,點擊下一步。后續(xù)彈出的對話框如下所示:所有選擇保存默認,點擊下一步。后續(xù)彈出的對話框如下所示。該對話框顯示了應(yīng)用程序創(chuàng)建的MFC類和文件。點擊完成,則新建基于對話框的應(yīng)用程序成功。如下圖所示。用戶可以根據(jù)需要在該界面拖動控件布局成自己需要的界面程序。5.3.2消息響應(yīng)函數(shù)添加與實現(xiàn)利用VisualC++6.0的類向?qū)В焖俚貙Σ季衷诮缑娴目丶?、對話框等添加消息響?yīng)函數(shù)。也可以方便的添加類的成員變量??丶㈨憫?yīng)是VisualC++開發(fā)中最常用到的一種響應(yīng)機制,其消息響應(yīng)添加步驟如下:設(shè)置控件ID和文本標題以按鈕控件為例,在右側(cè)功率欄中,把按鈕控件拖動到窗口界面中。選中按鈕控件。點擊右鍵,選中屬性,彈出如下對話框按鈕控件屬性對話框。把控件設(shè)置好響應(yīng)的控件ID和標題。如下圖所示。點擊關(guān)閉利用類向?qū)砑酉㈨憫?yīng)函數(shù)。在VisualC++6.0菜單欄中,點擊“查看”->建立類向?qū)?,或直接“Ctrl+W”快捷鍵,彈出類向?qū)υ捒?,在類向?qū)е锌梢詾閼?yīng)用程序添加新的類,可以為控件和對畫框添加消息響應(yīng)函數(shù),綁定成員變量。如下圖所示:選擇MessageMaps菜單,在ObjectIDs中選擇需要添加響應(yīng)函數(shù)的按鈕,選中后,在Messages一欄中會顯示系統(tǒng)提供給該控件的消息響應(yīng)。選擇需要進行響應(yīng)的消息,點擊AddFunction,彈出添加響應(yīng)函數(shù)的對話框,如下圖所示:點擊OK,則添加添加消息響應(yīng)函數(shù)成功。選擇EditCode,則進入添加的消息響應(yīng)函數(shù)中。軟件開發(fā)人員可以根據(jù)需要在函數(shù)中提供實現(xiàn)相應(yīng)的功能。此時,若用戶點擊界面的按鈕,則消息響應(yīng)函數(shù)執(zhí)行。VisualC++6.0編譯器和MFC框架極大地提高了界面程序的開發(fā)效率。為串口設(shè)備通過網(wǎng)絡(luò)實現(xiàn)人機交互提供了可能。5.4課題的人機界面設(shè)計本課題采用固定的查詢指令,向GPS時鐘進行自動或手動的發(fā)送。對接收到的數(shù)據(jù)回復(fù)進行接收、解析并顯示。由于發(fā)送內(nèi)容固定,因此不設(shè)計控制命令輸入串口,僅需完成相關(guān)數(shù)據(jù)內(nèi)容顯示、發(fā)送控制等界面設(shè)計。圖STYLEREF1\s7SEQ圖\*ARABIC\s13:軟件界面功能說明運用MFC框架方法,課題開發(fā)了簡單的人機界面。主要包括:串口通訊數(shù)據(jù)發(fā)送監(jiān)視窗口串口通訊數(shù)據(jù)接收監(jiān)視窗口數(shù)據(jù)幀內(nèi)容解析顯示窗口串口服務(wù)器網(wǎng)絡(luò)配置窗口串口通訊其它配置窗口串口設(shè)置窗口(預(yù)留)數(shù)據(jù)記錄功能窗口(預(yù)留)5.5本章小結(jié)本章主要講述了通過用VisualC++6.0編譯器及MFC框架,來進行軟件的人機交互設(shè)計。運用此種方法進行設(shè)計,能夠大大提升效率。第六章結(jié)論6.1成果展示啟動程序連接互聯(lián)網(wǎng)后,輸入IP地址及端口號后,點擊查詢,之后會與遠端的GPS時鐘設(shè)備及串口聯(lián)網(wǎng)服務(wù)器相連接,通過發(fā)送數(shù)據(jù),設(shè)備在接受數(shù)據(jù)后,相應(yīng)的發(fā)送回我們所需要的數(shù)據(jù)。演示成果圖及硬件圖如下圖所示:串口通訊雖歷史悠久且速率低,但其簡單可靠的特點仍然在專業(yè)領(lǐng)域得到大量應(yīng)用。物聯(lián)網(wǎng)時代,串口作為物聯(lián)的最后100米連接辦法,仍將在專業(yè)領(lǐng)域得到大量應(yīng)用。因此,串口的聯(lián)網(wǎng)解決方案是物聯(lián)網(wǎng)時代的重要課題之一。本課題設(shè)計了一種串口聯(lián)網(wǎng)硬件結(jié)構(gòu),并進行了計算機軟件實現(xiàn)。由于時間原因,僅實現(xiàn)了基本的通訊功能,成果有限。下一步還需繼續(xù)將課題成果向?qū)嵱没?、?fù)雜化方向延伸,實現(xiàn)更多結(jié)構(gòu)復(fù)雜數(shù)量龐大的串口聯(lián)網(wǎng)通訊功能。6.2課題工作總結(jié)和結(jié)論本課題對物聯(lián)網(wǎng)、串口通訊、遠程監(jiān)控等應(yīng)用概念進行了理論基礎(chǔ)學(xué)習(xí),分析了串口通訊在物聯(lián)網(wǎng)時代的地位和價值,提出了基于串口聯(lián)網(wǎng)服務(wù)器的串口遠程聯(lián)網(wǎng)方案并進行了實現(xiàn)。到此,本文的內(nèi)容已經(jīng)基本完成,所做工作如下:查閱了大量國內(nèi)外文獻資料,對物聯(lián)網(wǎng)、遠程監(jiān)控、串口通訊等重要概念進行了多方查證研究。對串口通訊的歷史和未來進行了研究,并總結(jié)串口通訊在物聯(lián)網(wǎng)以及遠程監(jiān)控等方面依然具有極為重要的應(yīng)用價值。對串口通訊的聯(lián)網(wǎng)方案進行了研究,提出了基于串口聯(lián)網(wǎng)服務(wù)器的解決方案。課題提出了具體的方案硬件架構(gòu),并著重進行了計算機軟件的開發(fā)設(shè)計,針對GPS時鐘這一目標設(shè)備,完成了TCPSocket通信、協(xié)議解析、人機接口設(shè)計三方面工作,實現(xiàn)了計算機軟件對遠端GPS設(shè)備的遠程監(jiān)控功能。課題研究表明,串口雖然是一個較低速率的簡單通訊方式,但在當(dāng)今的網(wǎng)絡(luò)甚至是物聯(lián)網(wǎng)系統(tǒng)中,其仍然是不可或缺的一種通訊手段,而實現(xiàn)串口通訊的遠程聯(lián)網(wǎng)是順應(yīng)技術(shù)和應(yīng)用發(fā)展的一種切實需要。課題通過具體硬件和軟件設(shè)計實現(xiàn)了串口的遠程聯(lián)網(wǎng)通訊,證明串口通訊在物聯(lián)網(wǎng)時代仍然可以簡單、有效的得以實現(xiàn)和整合,成為物聯(lián)網(wǎng)重要的有機組成部分。6.3需進一步研究的問題本課題僅完成了最基本的串口通訊遠程實現(xiàn),對于實際應(yīng)用還有一些需要實際考慮和完善的問題:軟件的編寫是基于單串口通

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論