版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
郭一君:串口設(shè)備遠(yuǎn)程監(jiān)控軟件設(shè)計(jì)與實(shí)現(xiàn)西安理工大學(xué)本科生畢業(yè)設(shè)計(jì)(論文)畢業(yè)設(shè)論題目串口設(shè)備遠(yuǎn)程監(jiān)控軟件設(shè)計(jì)與實(shí)現(xiàn)專業(yè)電子信息工程班級(jí)電信104學(xué)生××指導(dǎo)教師××2014年串口設(shè)備遠(yuǎn)程監(jiān)控軟件設(shè)計(jì)與實(shí)現(xiàn)專業(yè):電子信息工程班級(jí):電信101班作者:指導(dǎo)教師:職稱:答辯日期:2014年6月22日摘要隨著互聯(lián)網(wǎng)的發(fā)展,人們對(duì)通訊的認(rèn)識(shí)進(jìn)入到一個(gè)新的時(shí)期,通訊變得更加快速和方便。這種網(wǎng)絡(luò)的發(fā)展不僅提升了人與人(MantoMan)的通訊,更加逐步發(fā)展出了人與物(MantoThing)甚至物與物(ThingtoThing)的通訊需要。這個(gè)階段的互聯(lián)網(wǎng),我們稱之為物聯(lián)網(wǎng)(InternetofThings)。物聯(lián)網(wǎng)的基礎(chǔ)網(wǎng)絡(luò)仍然是互聯(lián)網(wǎng),只是在終端接入上則是各式各樣的物體。因此其最后100米的通訊實(shí)現(xiàn)方法變得非常多樣化,也是業(yè)界研究的熱點(diǎn)。這其中就包括串口通訊。本文即研究了串口聯(lián)網(wǎng)的原理,采用串口聯(lián)網(wǎng)服務(wù)器實(shí)現(xiàn)串口通訊與互聯(lián)網(wǎng)的結(jié)合,完成一臺(tái)串口設(shè)備的遠(yuǎn)程通訊。關(guān)鍵詞:互聯(lián)網(wǎng),物聯(lián)網(wǎng),串口通訊,遠(yuǎn)程通訊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)、串口通訊及遠(yuǎn)程監(jiān)控的概述 1111981.2.1發(fā)展歷史 1288751.2.2研究現(xiàn)狀 3114331.3本文的主要工作 545891.3.1硬件結(jié)構(gòu)設(shè)計(jì) 6106761.3.2監(jiān)控軟件設(shè)計(jì) 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è)計(jì) 1380423.2MFC中TCPsocket編程 14280813.2.1TCPsocket基本原理 14274463.2.2基本W(wǎng)indowsSocketAPI 15326513.2.3MFC下的Socket編程類 2025703.2.4MFC下Socket編程基本步驟 2124343.3TCPClient端Socket的編程實(shí)現(xiàn) 2335673.3.1Client接收數(shù)據(jù)處理 2364283.3.2ClientSocket套接字創(chuàng)建 2529183.4本章小結(jié) 298587第四章GPS設(shè)備協(xié)議解析 29242624.1接收數(shù)據(jù)的驗(yàn)證 2951264.2接收數(shù)據(jù)的解析 31106584.3本章小結(jié) 325162第五章人機(jī)交互設(shè)計(jì) 32123355.1VisualC++6.0編譯器簡(jiǎn)介 32287285.2MFC框架 34161295.2.1MFC框架簡(jiǎn)介 3411285.2.2MFC類層次結(jié)構(gòu)圖 34173115.2.3初始化流程及消息循環(huán)機(jī)制 37106645.3MFC開(kāi)發(fā)應(yīng)用程序?qū)崿F(xiàn) 38221985.3.1VisualC++6.0新建MFC應(yīng)用程序 3849915.3.2消息響應(yīng)函數(shù)添加與實(shí)現(xiàn) 42115155.4課題的人機(jī)界面設(shè)計(jì) 44240505.5本章小結(jié) 4519447第六章結(jié)論 45214016.1成果展示 4526416.2課題工作總結(jié)和結(jié)論 47300186.3需進(jìn)一步研究的問(wèn)題 4824404致謝 4922491參考文獻(xiàn) 50第一章緒論1.1引言隨著互聯(lián)網(wǎng)的發(fā)展,人們對(duì)通訊的認(rèn)識(shí)進(jìn)入到一個(gè)新的時(shí)期,通訊變得更加快速和方便。這種網(wǎng)絡(luò)的發(fā)展不僅提升了人與人(MantoMan)的通訊,更加逐步發(fā)展出了人與物(MantoThing)甚至物與物(ThingtoThing)的通訊需要。這個(gè)階段的互聯(lián)網(wǎng),我們稱之為物聯(lián)網(wǎng)(InternetofThings)。物聯(lián)網(wǎng)的基礎(chǔ)網(wǎng)絡(luò)仍然是互聯(lián)網(wǎng),只是在終端接入上則是各式各樣的物體。因此其最后100米的通訊實(shí)現(xiàn)方法變得非常多樣化,也是業(yè)界研究的熱點(diǎn)。這其中就包括串口通訊。串口通訊是一種簡(jiǎn)單的、低速率通訊手段。但其因?yàn)閷?shí)現(xiàn)簡(jiǎn)單、成本低廉、穩(wěn)定可靠而廣泛的應(yīng)用于工業(yè)、通信等許多專業(yè)領(lǐng)域的設(shè)備中,用以進(jìn)行本地的短距離、低容量通訊。因此串口通訊擁有極其龐大的設(shè)備數(shù)量基礎(chǔ)。作為物體通訊手段,在物聯(lián)網(wǎng)時(shí)代,其與互聯(lián)網(wǎng)相結(jié)合實(shí)現(xiàn)多節(jié)點(diǎn)、遠(yuǎn)程化的串口通訊網(wǎng)成為物聯(lián)網(wǎng)應(yīng)用的一個(gè)重要方向。1.2物聯(lián)網(wǎng)、串口通訊及遠(yuǎn)程監(jiān)控的概述1.2.1發(fā)展歷史物聯(lián)網(wǎng)(InternetofThings,縮寫IOT)是一個(gè)基于互聯(lián)網(wǎng)、傳統(tǒng)電信網(wǎng)等信息承載體,讓所有能夠被獨(dú)立尋址的普通物理對(duì)象實(shí)現(xiàn)互聯(lián)互通的網(wǎng)絡(luò)。廣義上說(shuō),當(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ǔ)上的延伸和擴(kuò)展的網(wǎng)絡(luò);其二,其用戶端延伸和擴(kuò)展到了任何物品與物品之間,進(jìn)行信息交換和通信。物聯(lián)網(wǎng)就是“物物相連的互聯(lián)網(wǎng)”。物聯(lián)網(wǎng)通過(guò)智能感知、識(shí)別技術(shù)與普適計(jì)算、廣泛應(yīng)用于網(wǎng)絡(luò)的融合中,也因此被稱為繼計(jì)算機(jī)、互聯(lián)網(wǎng)之后世界信息產(chǎn)業(yè)發(fā)展的第三次浪潮。物聯(lián)網(wǎng)是互聯(lián)網(wǎng)的應(yīng)用拓展,相對(duì)于網(wǎng)絡(luò)這樣一個(gè)概念,不如說(shuō)物聯(lián)網(wǎng)是業(yè)務(wù)和應(yīng)用。串口通信(SerialCommunication),是指外設(shè)間,通過(guò)數(shù)據(jù)信號(hào)線、地線、控制線等,按位進(jìn)行傳輸數(shù)據(jù)的一種通訊方式,主要用于串行式逐位數(shù)據(jù)傳輸。串行接口按電氣標(biāo)準(zhǔn)及協(xié)議來(lái)分,常見(jiàn)的有一般電腦應(yīng)用的RS-232(使用25針或9針連接器)和工業(yè)電腦應(yīng)用的半雙工RS-485與全雙工RS-422。目前,串口也廣泛的應(yīng)用各類專業(yè)設(shè)備上,用作設(shè)備對(duì)外的通訊接口使用。這種通信方式使用的數(shù)據(jù)線少,在遠(yuǎn)距離通信中可以節(jié)約通信成本,但其傳輸速度比并行傳輸?shù)汀4谑且环N常見(jiàn)且有較長(zhǎng)應(yīng)用歷史的設(shè)備間的通訊辦法。物聯(lián)網(wǎng)是隨著網(wǎng)絡(luò)技術(shù)發(fā)展而發(fā)展起來(lái)的一種通訊網(wǎng)絡(luò)。因此,由于歷史原因,串口通訊必將是物聯(lián)網(wǎng)的一種常見(jiàn)物聯(lián)通訊方式。上文中也提到串口是實(shí)現(xiàn)物聯(lián)網(wǎng)最后100米通訊連接的一種極為重要的方式。尤其在工業(yè)、通訊等領(lǐng)域內(nèi),串口在設(shè)備通訊方面有著極為廣泛的應(yīng)用。雖然現(xiàn)在以以太網(wǎng)形式的接口也非常之多并在逐步成為主流,但串口仍然因其歷史應(yīng)用廣泛、連接簡(jiǎn)單、通訊可靠而大量存在。遠(yuǎn)程監(jiān)控從字面上理解可以分為“監(jiān)”和“控”兩部分,其中“監(jiān)”是指通過(guò)網(wǎng)絡(luò)獲得信息為主:而“控”是指通過(guò)網(wǎng)絡(luò)對(duì)遠(yuǎn)程計(jì)算機(jī)進(jìn)行操作的方法,對(duì)遠(yuǎn)程計(jì)算機(jī)進(jìn)行重新啟動(dòng)、關(guān)機(jī)等操作,還包括對(duì)遠(yuǎn)端計(jì)算機(jī)進(jìn)行日常設(shè)置的工作。遠(yuǎn)程監(jiān)控這個(gè)詞有兩重意思。計(jì)算機(jī)領(lǐng)域和視頻監(jiān)控領(lǐng)域都有遠(yuǎn)程監(jiān)控的說(shuō)法,但意義完全不一樣。本篇論文中所涉及的到的遠(yuǎn)程監(jiān)控為計(jì)算機(jī)領(lǐng)域的遠(yuǎn)程監(jiān)控。1.2.2研究現(xiàn)狀物聯(lián)網(wǎng)在實(shí)際應(yīng)用上的開(kāi)展需要各行各業(yè)的參與,并且需要國(guó)家政府的主導(dǎo)以及相關(guān)法規(guī)政策上的扶助,物聯(lián)網(wǎng)的開(kāi)展具有規(guī)模性、廣泛參與性、管理性、技術(shù)性、物的屬性等等特征,其中,技術(shù)上的問(wèn)題是物聯(lián)網(wǎng)最為關(guān)鍵的問(wèn)題。物聯(lián)網(wǎng)技術(shù)是一項(xiàng)綜合性的技術(shù),是一項(xiàng)系統(tǒng),其理論上的研究已經(jīng)在各行各業(yè)展開(kāi),而實(shí)際應(yīng)用還僅局限于行業(yè)內(nèi)部。關(guān)于物聯(lián)網(wǎng)的規(guī)劃和設(shè)計(jì)以及研發(fā)關(guān)鍵在于RFID、傳感器、嵌入式軟件以及傳輸數(shù)據(jù)計(jì)算等領(lǐng)域的研究。物聯(lián)網(wǎng)將是下一個(gè)推動(dòng)世界高速發(fā)展的“重要生產(chǎn)力”,是繼通信網(wǎng)之后的另一個(gè)萬(wàn)億級(jí)市場(chǎng)。業(yè)內(nèi)專家認(rèn)為,物聯(lián)網(wǎng)一方面可以提高經(jīng)濟(jì)效益,大大節(jié)約成本;另一方面可以為全球經(jīng)濟(jì)的復(fù)蘇提供技術(shù)動(dòng)力。其普及以后,用于動(dòng)物、植物和機(jī)器、物品的傳感器與電子標(biāo)簽及配套的接口裝置的數(shù)量將大大超過(guò)手機(jī)的數(shù)量。按照對(duì)物聯(lián)網(wǎng)的需求,需要按億計(jì)的傳感器和電子標(biāo)簽,這將大大推進(jìn)信息技術(shù)元件的生產(chǎn),同時(shí)增加大量的就業(yè)機(jī)會(huì)。且物聯(lián)擁有業(yè)界最完整的專業(yè)物聯(lián)產(chǎn)品系列,覆蓋從傳感器、控制器到云計(jì)算的各種應(yīng)用。產(chǎn)品服務(wù)智能家居、交通物流、環(huán)境保護(hù)、公共安全、智能消防、工業(yè)監(jiān)測(cè)、個(gè)人健康等各種領(lǐng)域。構(gòu)建了“質(zhì)量好、技術(shù)優(yōu)、專業(yè)性強(qiáng),成本低,滿足客戶需求”的綜合優(yōu)勢(shì),持續(xù)為客戶提供有競(jìng)爭(zhēng)力的產(chǎn)品和服務(wù)。物聯(lián)網(wǎng)產(chǎn)業(yè)是當(dāng)今世界經(jīng)濟(jì)和科技發(fā)展的戰(zhàn)略制高點(diǎn)之一。隨著計(jì)算機(jī)系統(tǒng)的應(yīng)用和微機(jī)網(wǎng)絡(luò)的發(fā)展,通信功能越來(lái)越顯得重要。這里所說(shuō)的通信是指計(jì)算機(jī)與外界的信息交換。因此,通信既包括計(jì)算機(jī)與外部設(shè)備之間,也包括計(jì)算機(jī)和計(jì)算機(jī)之間的信息交換。由于串行通信是在一根傳輸線上一位一位的傳送信息,所用的傳輸線少,并且可以借助現(xiàn)成的電話網(wǎng)進(jìn)行信息傳送,因此,特別適合于遠(yuǎn)距離傳輸。對(duì)于那些與計(jì)算機(jī)相距不遠(yuǎn)的人-機(jī)交換設(shè)備和串行存儲(chǔ)的外部設(shè)備如終端、打印機(jī)、邏輯分析儀、磁盤等,采用串行方式交換數(shù)據(jù)也很普遍。在實(shí)時(shí)控制和管理方面,采用多臺(tái)微機(jī)處理機(jī)組成分級(jí)分布控制系統(tǒng)中,各CPU之間的通信一般都是串行方式。所以串行接口是微機(jī)應(yīng)用系統(tǒng)常用的接口。許多外設(shè)和計(jì)算機(jī)按串行方式進(jìn)行通信,這里所說(shuō)的串行方式,是指外設(shè)與接口電路之間的信息傳送方式,實(shí)際上,CPU與接口之間仍按并行方式工作。需要特別說(shuō)明的是串口的電平規(guī)范。一般在設(shè)備內(nèi)部CPU或單片機(jī)使用的是TTL電平,而設(shè)備外部一般是使用EIA規(guī)定的電氣接口,兩者間需要進(jìn)行電平轉(zhuǎn)換。我們通常所說(shuō)的設(shè)備的串口都是按照EIA規(guī)定的電氣特性而設(shè)計(jì)的。研究物聯(lián)網(wǎng),對(duì)串口設(shè)備的聯(lián)網(wǎng)、組網(wǎng)的研究也就是勢(shì)在必行的。物聯(lián)網(wǎng)的發(fā)展將串口通訊從原來(lái)簡(jiǎn)單針對(duì)本地低速率通訊應(yīng)用的模式發(fā)展為其最后100米的通訊連接辦法之一。這也就要求在物聯(lián)網(wǎng)應(yīng)用中,需要將串口通訊與互聯(lián)網(wǎng)相結(jié)合,完成通訊距離更遠(yuǎn)、終端數(shù)量更多的復(fù)雜通訊功能。串口聯(lián)網(wǎng)服務(wù)器正是順應(yīng)上述要求而產(chǎn)生的一種硬件設(shè)備,以實(shí)現(xiàn)串口通訊與互聯(lián)網(wǎng)的結(jié)合。遠(yuǎn)程監(jiān)控系統(tǒng)有兩種類型,一種是生產(chǎn)現(xiàn)場(chǎng)沒(méi)有現(xiàn)場(chǎng)監(jiān)控系統(tǒng),而是將數(shù)據(jù)采集后直接送到遠(yuǎn)程計(jì)算機(jī)進(jìn)行處理,這種遠(yuǎn)程監(jiān)控與一般的現(xiàn)場(chǎng)監(jiān)控沒(méi)有多大的區(qū)別,只是數(shù)據(jù)傳輸距離比現(xiàn)場(chǎng)監(jiān)控系統(tǒng)要遠(yuǎn),其它部分則和現(xiàn)場(chǎng)監(jiān)控系統(tǒng)相同;另一種是現(xiàn)場(chǎng)監(jiān)控與遠(yuǎn)程監(jiān)控并存。一般是采用現(xiàn)場(chǎng)總線技術(shù)將分布于各個(gè)設(shè)備的傳感器、監(jiān)控設(shè)備等連接起來(lái),這樣就從分立單元階段進(jìn)入了集成單元階段,然后各個(gè)管理站點(diǎn)的服務(wù)再用局域網(wǎng)連接起來(lái),這樣就形成了企業(yè)內(nèi)部網(wǎng)(Intranet)。由于建立了基本的網(wǎng)絡(luò)信息基礎(chǔ)結(jié)構(gòu),設(shè)備監(jiān)測(cè)、維護(hù)技術(shù)進(jìn)入了集成系統(tǒng)階段,在一個(gè)單位的內(nèi)部基本上實(shí)現(xiàn)了資源和信息共享。隨著網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,遠(yuǎn)程監(jiān)控將更多地應(yīng)用在企業(yè)生產(chǎn)過(guò)程的管理中,專業(yè)技術(shù)人員可以通過(guò)互聯(lián)網(wǎng)來(lái)管理和維護(hù)生產(chǎn)過(guò)程,優(yōu)化生產(chǎn)工藝,提高設(shè)備的可用率,最終降低生產(chǎn)成本,提高效益。1.3本文的主要工作本文即研究了串口聯(lián)網(wǎng)的原理,采用串口聯(lián)網(wǎng)服務(wù)器實(shí)現(xiàn)串口通訊與互聯(lián)網(wǎng)的結(jié)合,完成一臺(tái)串口設(shè)備的遠(yuǎn)程通訊。全文大致分為以下幾部分內(nèi)容。首先,介紹物聯(lián)網(wǎng)的概念和發(fā)展,介紹串口通訊的概念和發(fā)展,并闡述串口通訊與物聯(lián)網(wǎng)以及遠(yuǎn)程監(jiān)控的應(yīng)用關(guān)系。論文第二章將介紹串口聯(lián)網(wǎng)服務(wù)器的概念和原理。論文的第三至第七章將分析本課題的工作并詳細(xì)描述基于串口聯(lián)網(wǎng)服務(wù)器的串口遠(yuǎn)程聯(lián)網(wǎng)連接的實(shí)現(xiàn)。第八章將展示文章的相關(guān)成果,供大家參考使用。本課題設(shè)計(jì)實(shí)現(xiàn)PC機(jī)對(duì)串口設(shè)備的遠(yuǎn)程通訊管理。課題工作主要分為:硬件結(jié)構(gòu)設(shè)計(jì);監(jiān)控軟件設(shè)計(jì)。1.3.1硬件結(jié)構(gòu)設(shè)計(jì)圖STYLEREF1\s3SEQ圖\*ARABIC\s11:課題硬件結(jié)構(gòu)設(shè)計(jì)課題設(shè)計(jì)如圖3-1所示硬件結(jié)構(gòu)。課題以一臺(tái)GPS時(shí)鐘設(shè)備作為目標(biāo)通訊設(shè)備,通過(guò)串口服務(wù)器實(shí)現(xiàn)該GPS設(shè)備串口通訊的網(wǎng)絡(luò)化連接,并最終通過(guò)以太網(wǎng)連接到遠(yuǎn)程計(jì)算機(jī)。該結(jié)構(gòu)用以實(shí)現(xiàn)一臺(tái)計(jì)算機(jī)遠(yuǎn)程的連接一臺(tái)或多臺(tái)GPS時(shí)鐘設(shè)備,完成對(duì)這些GPS時(shí)鐘設(shè)備的遠(yuǎn)程監(jiān)控功能。這種結(jié)構(gòu)可用于批量的設(shè)備拷機(jī)測(cè)試或者遠(yuǎn)程站點(diǎn)設(shè)備監(jiān)控,是各種復(fù)雜應(yīng)用的原型基礎(chǔ)。如果計(jì)算機(jī)至串口服務(wù)器的連接是經(jīng)由互聯(lián)網(wǎng)(Internet)的,則還需掌握相關(guān)路由配置,有可能需增加一定網(wǎng)絡(luò)設(shè)備以打通路由連接。1.3.2監(jiān)控軟件設(shè)計(jì)監(jiān)控軟件是指運(yùn)行于計(jì)算機(jī)上,用以連接遠(yuǎn)端串口服務(wù)器并進(jìn)而連接GPS時(shí)鐘設(shè)備的服務(wù)軟件。該軟件需要完成如下功能:TCPSocket通訊GPS時(shí)鐘設(shè)備協(xié)議解析人機(jī)交互界面其中最核心的部分為前兩項(xiàng)。在這兩項(xiàng)的基礎(chǔ)上,可以擴(kuò)展開(kāi)發(fā)出功能更為復(fù)雜、應(yīng)用更具針對(duì)性的應(yīng)用軟件。本課題的目標(biāo)也是實(shí)現(xiàn)這一基礎(chǔ)功能,為后續(xù)應(yīng)用設(shè)計(jì)提供底層服務(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ù)雙向透明傳輸。它能將多個(gè)串口設(shè)備連接并能將串口數(shù)據(jù)流進(jìn)行選擇和處理,把現(xiàn)有的串口的數(shù)據(jù)轉(zhuǎn)化成IP端口的數(shù)據(jù),然后進(jìn)行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í)際是將串口數(shù)據(jù)作為TCP/IP的應(yīng)用層數(shù)據(jù),用TCP封裝傳輸?shù)姆绞?。由于TCP/IP協(xié)議的傳輸層包含了TCP協(xié)議和UDP協(xié)議,而TCP協(xié)議具有客戶端和服務(wù)端兩種工作模式,所以串口轉(zhuǎn)網(wǎng)口通信的工作模式可以分為:TCP服務(wù)器端模式(TCPServer)、TCP客戶端模式(TCPClient)和UDP模式三種。TCP模式:TCP模式采用數(shù)據(jù)可靠傳輸機(jī)制,所以可以保證數(shù)據(jù)基本不誤碼、不丟失。在TCP通信中,必須由通信兩端構(gòu)成,即一方為TCP客戶端,另一方為TCP服務(wù)端。此種模式類似于打電話機(jī)制,打電話的人是TCP客戶端,而接電話的是TCP服務(wù)端。UDP模式:UDP模式是基于非連接的模式,只要有數(shù)據(jù)發(fā)送即可立即發(fā)送,不需要事先連接,但是它無(wú)法保證數(shù)據(jù)不丟失,容易產(chǎn)生誤碼。在網(wǎng)口設(shè)備虛擬串口設(shè)備通信中,可以選擇基于三種工作模式的通信機(jī)制,即在虛擬串口PC端作為Server端的TCP通信模式、作為Client端的TCP通信模式和UDP通信模式。2.1.3硬件網(wǎng)絡(luò)架構(gòu)串口聯(lián)網(wǎng)通訊,主要通過(guò)串口服務(wù)器,把串口設(shè)備連接到互聯(lián)網(wǎng)中,從而達(dá)到通過(guò)網(wǎng)絡(luò)來(lái)控制串口設(shè)備的目的。其基本的硬件架構(gòu)如圖2-1所示:圖STYLEREF1\s2SEQ圖\*ARABIC\s11:串口聯(lián)網(wǎng)服務(wù)器應(yīng)用網(wǎng)絡(luò)架構(gòu)整個(gè)控制網(wǎng)絡(luò)中,串口設(shè)備通過(guò)RS232/RS485連接到串口服務(wù)器上,串口服務(wù)器通過(guò)路由器/交換器接入以太網(wǎng)。針對(duì)串口設(shè)備的通信協(xié)議,設(shè)計(jì)相應(yīng)的監(jiān)控軟件。運(yùn)行在PC機(jī)終端上的遠(yuǎn)程監(jiān)控軟件則可以通過(guò)以太網(wǎng)實(shí)現(xiàn)對(duì)串口設(shè)備的遠(yuǎn)程監(jiān)控。2.2VC++(MFC)工具介紹2.2.1VC++MicrosoftVisualC++,(簡(jiǎn)稱VisualC++、MSVC、VC++或VC)微軟公司的C++開(kāi)發(fā)工具,具有集成開(kāi)發(fā)環(huán)境,可提供編輯C語(yǔ)言,C++以及C++/CLI等編程語(yǔ)言。VC++整合了便利的除錯(cuò)工具,特別是整合了微軟視窗程式設(shè)計(jì)(WindowsAPI)、三維動(dòng)畫DirectXAPI,Microsoft.NET框架。目前最新的版本是MicrosoftVisualC++2013。MicrosoftVisualC++是Microsoft公司推出的開(kāi)發(fā)Win32環(huán)境程序,面向?qū)ο蟮目梢暬删幊滔到y(tǒng)。它不但具有程序框架自動(dòng)生成、靈活方便的類管理、代碼編寫和界面設(shè)計(jì)集成交互操作、可開(kāi)發(fā)多種程序等優(yōu)點(diǎn),而且通過(guò)簡(jiǎn)單的設(shè)置就可使其生成的程序框架支持?jǐn)?shù)據(jù)庫(kù)接口、OLE2,WinSock網(wǎng)絡(luò)、3D控制界面。它以擁有“語(yǔ)法高亮”,IntelliSense(自動(dòng)完成功能)以及高級(jí)除錯(cuò)功能而著稱。比如,它允許用戶進(jìn)行遠(yuǎn)程調(diào)試,單步執(zhí)行等。還有允許用戶在調(diào)試期間重新編譯被修改的代碼,而不必重新啟動(dòng)正在調(diào)試的程序。其編譯及建置系統(tǒng)以預(yù)編譯頭文件、最小重建功能及累加連結(jié)著稱。這些特征明顯縮短程式編輯、編譯及連結(jié)花費(fèi)的時(shí)間,在大型軟件計(jì)劃上尤其顯著。VisualStudio是微軟公司推出的開(kāi)發(fā)環(huán)境,VisualStudio可以用來(lái)創(chuàng)建Windows平臺(tái)下的Windows應(yīng)用程序和網(wǎng)絡(luò)應(yīng)用程序,也可以用來(lái)創(chuàng)建網(wǎng)絡(luò)服務(wù)、智能設(shè)備應(yīng)用程序和Office插件。VisualStudio是目前最流行的Windows平臺(tái)應(yīng)用程序開(kāi)發(fā)環(huán)境。VisualStudio2008包括各種增強(qiáng)功能,例如可視化設(shè)計(jì)器(使用.NETFramework3.5加速開(kāi)發(fā))、對(duì)Web開(kāi)發(fā)工具的大量改進(jìn),以及能夠加速開(kāi)發(fā)和處理所有類型數(shù)據(jù)的語(yǔ)言增強(qiáng)功能。VisualStudio2008為開(kāi)發(fā)人員提供了所有相關(guān)的工具和框架支持,幫助創(chuàng)建引人注目的、令人印象深刻并支持AJAX的Web應(yīng)用程序。開(kāi)發(fā)人員能夠利用這些豐富的客戶端和服務(wù)器端框架輕松構(gòu)建以客戶為中心的Web應(yīng)用程序,這些應(yīng)用程序可以集成任何后端數(shù)據(jù)提供程序、在任何當(dāng)前瀏覽器內(nèi)運(yùn)行并完全訪問(wèn)ASPNET應(yīng)用程序服務(wù)和Microsoft平臺(tái)。2.2.2.MFCMFC(MicrosoftFoundationClasses)是微軟基礎(chǔ)類庫(kù)的簡(jiǎn)稱,是微軟公司實(shí)現(xiàn)的一個(gè)c++類庫(kù),主要封裝了大部分的windowsAPI函數(shù),vc++是微軟公司開(kāi)發(fā)的c/c++的集成開(kāi)發(fā)環(huán)境,所謂集成開(kāi)發(fā)環(huán)境,就是說(shuō)利用它你可以編輯,編譯,調(diào)試,而不是使用多種工具輪換操作,靈活性較大。有時(shí)人們說(shuō)vc呢也指它的內(nèi)部編譯器,集成開(kāi)發(fā)環(huán)境必須有一個(gè)編譯器內(nèi)核,要不有什么用,例如DevC++其中一個(gè)編譯器內(nèi)核就是gcc。MFC除了是一個(gè)類庫(kù)以外,還是一個(gè)框架,你應(yīng)該試過(guò),在vc++里新建一個(gè)MFC的工程,開(kāi)發(fā)環(huán)境會(huì)自動(dòng)幫你產(chǎn)生許多文件,同時(shí)它使用了mfcxx.dll。xx是版本,它封裝了mfc內(nèi)核,所以你在你的代碼看不到原本的SDK編程中的消息循環(huán)等等東西,因?yàn)镸FC框架幫你封裝好了,這樣你就可以專心的考慮你程序的邏輯,而不是這些每次編程都要重復(fù)的東西,但是由于是通用框架,沒(méi)有最好的針對(duì)性,當(dāng)然也就喪失了一些靈活性和效率但是MFC的封裝很淺,所以效率上損失不大,靈活性還可以,雖然也有很多缺陷,但還是一個(gè)比較好的東西。MFC中最重要的封裝是對(duì)Win32API的封裝,因此,理解WindowsObject和MFCObject(C++對(duì)象,一個(gè)C++類的實(shí)例)之間的關(guān)系是理解MFC的關(guān)鍵之一。所謂WindowsObject(Windows對(duì)象)是Win32下用句柄表示的Windows操作系統(tǒng)對(duì)象;所謂MFCObject(MFC對(duì)象)是C++對(duì)象,是一個(gè)C++類的實(shí)例,這里(本書范圍內(nèi))MFCObject是有特定含義的,指封裝WindowsObject的C++Object,并非指任意的C++Object。MFCObject和WindowsObject是不一樣的,但兩者緊密聯(lián)系。2.3本章小結(jié)本章主要講述了本課題在軟硬件設(shè)計(jì)方面需要的基礎(chǔ)知識(shí),包括硬件方面串口聯(lián)網(wǎng)服務(wù)器的原理及工作模式,以及硬件架構(gòu)。軟件方面,介紹了編寫程序時(shí)所需要的VC++軟件,及MFC框架。能夠?yàn)楹竺嬷R(shí)的學(xué)習(xí)提供基礎(chǔ)的幫助。第三章串口聯(lián)網(wǎng)服務(wù)器通訊底層3.1通信底層設(shè)計(jì)串口聯(lián)網(wǎng)軟件底層以其硬件架構(gòu)為基礎(chǔ)??刂凭W(wǎng)絡(luò)的架構(gòu)采用C/S模式架構(gòu)。其中串口服務(wù)器運(yùn)行TCPServer端,PC監(jiān)控終端則設(shè)計(jì)為TCPClient端。每一臺(tái)連接到串口服務(wù)器上的串口設(shè)備,都具有固定的IP及端口號(hào)。運(yùn)行在PC的Client監(jiān)控終端,通過(guò)Socket與運(yùn)行在串口服務(wù)器的Server端建立通信連接,進(jìn)而控制串口設(shè)備。如下圖5-1所示:圖STYLEREF1\s5SEQ圖\*ARABIC\s11:底層通信原理連接到網(wǎng)絡(luò)中的串口服務(wù)器,需要把串口服務(wù)器設(shè)置成TCPServer模式。以康海時(shí)代NC600系列串口服務(wù)器為例,其設(shè)置步驟如下:用IE內(nèi)核的瀏覽器登錄串口服務(wù)器的IP地址,進(jìn)入設(shè)置主界面在串口配置項(xiàng)里面配置好響應(yīng)設(shè)備串口的波特率燈參數(shù)。在工作模式中把對(duì)應(yīng)的工作模式設(shè)置成TCPServer工作模式保存提交。3.2MFC中TCPsocket編程串口聯(lián)網(wǎng)網(wǎng)絡(luò)中,串口設(shè)備與PC端監(jiān)控軟件的通信,主要通過(guò)TCPsocket套接字實(shí)現(xiàn)。TCP為面向連接的一種網(wǎng)絡(luò)連接方式,能夠保證數(shù)據(jù)通信的安全性。MFC中對(duì)socket編程有很好的支持,這為物聯(lián)網(wǎng)串口設(shè)備遠(yuǎn)程監(jiān)控提供了便利。3.2.1TCPsocket基本原理TCPsocket采用流式套接字進(jìn)行網(wǎng)絡(luò)連接。流式套接字提供沒(méi)有記錄邊界的數(shù)據(jù)流,即字節(jié)流。字節(jié)流能確保以正確的順序無(wú)重復(fù)地被送達(dá)。其主要的編程模型如下:圖STYLEREF1\s5SEQ圖\*ARABIC\s12:流式套接字編程模型在該模型中,服務(wù)器端創(chuàng)建并初始化套接字,監(jiān)聽(tīng)來(lái)自客戶端的連接請(qǐng)求??蛻舳送瑯咏⑻捉幼?,用于向服務(wù)器端發(fā)起連接請(qǐng)求。當(dāng)服務(wù)器接收到來(lái)自客戶機(jī)的連接請(qǐng)求后,與客戶機(jī)建立連接。連接成功后,則服務(wù)器和客戶機(jī)可以進(jìn)行數(shù)據(jù)收發(fā)通信。通信完成后,服務(wù)器和客戶機(jī)關(guān)閉套接字。3.2.2基本W(wǎng)indowsSocketAPIWindows操作系統(tǒng)提供了很多用于Socket通信的API,可以很方便地開(kāi)發(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é)束對(duì)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將一個(gè)本地地址和一個(gè)SOCKET描述字連接起來(lái)函數(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īng)狀態(tài)函數(shù)原型:intlisten(SOCKETs,//進(jìn)行監(jiān)聽(tīng)的socketintbacklog//客戶端可以連接的請(qǐng)求個(gè)數(shù));7)accept接受一個(gè)socket的連接請(qǐng)求,同時(shí)返回一個(gè)新的socket,新的socket用來(lái)在服務(wù)器與客戶端之間傳遞和接收信息。函數(shù)原型:SOCKETaccept(SOCKETs,//處于監(jiān)聽(tīng)狀態(tài)的socketstructsockaddrFAR*addr,//將要接受地址的sockaddr指針intFAR*addrlen//地址的長(zhǎng)度);8)connect連接客戶端的socket到指定的網(wǎng)絡(luò)服務(wù)器。連接成功后,客戶端用此socket與服務(wù)器通信。函數(shù)原型:intconnect(SOCKETs,//將要連接的socketconststructsockaddrFAR*name,//目標(biāo)socket地址intnamelen//地址結(jié)構(gòu)sizeof);9)recv用于接收已經(jīng)建立連接的socket數(shù)據(jù)信息函數(shù)原型:intrecv(SOCKETs,charFAR*buf,//接收數(shù)據(jù)緩沖區(qū)intlen,//緩沖區(qū)長(zhǎng)度intflags//有MSG_PEEK和MSG_OOB);返回值:接收到的字節(jié)數(shù)10)send對(duì)已經(jīng)建立連接的socket發(fā)送數(shù)據(jù)信息函數(shù)原型:intsend(SOCKETs,charFAR*buf,//發(fā)送數(shù)據(jù)緩沖區(qū)intlen,//緩沖區(qū)長(zhǎng)度intflags//有MSG_PEEK和MSG_OOB);返回值:發(fā)送的字節(jié)數(shù)11)WSAAsyncSelect要求socket在有事件發(fā)生時(shí)通知使用者,本函數(shù)將套接口設(shè)置成為非阻塞方式。函數(shù)原型:intWSAAsyncSelect(SOCKETs,HWNDhWnd,//接收網(wǎng)絡(luò)事件的窗口句柄unsignedintwMsg,//發(fā)送給窗口的網(wǎng)絡(luò)事件消息longlEvent//網(wǎng)絡(luò)消息);12)sendto向目標(biāo)地址發(fā)送數(shù)據(jù)信息函數(shù)原型:intsendto(SOCKETs,constcharFAR*buf,intlen,intflags,conststructsockaddrFAR*to,inttolen);13)recvfrom接收目標(biāo)地址傳來(lái)的數(shù)據(jù)信息函數(shù)原型:intrecvfrom(INSOCKETs,OUTcharFAR*buf,INintlen,INintflags,OUTstructsockaddrFAR*from,INOUTintFAR*fromlen);3.2.3MFC下的Socket編程類MFC提供了兩個(gè)類用以支持套接字編程,它們是CAsyncSocket類和CSocket類。1)CAsyncSocket類CAsyncSocket類一對(duì)一地封裝WindowsSocketAPI。CAsyncSocket類適合哪些對(duì)網(wǎng)絡(luò)通信細(xì)節(jié)很了解,但希望利用回調(diào)的便利通知網(wǎng)絡(luò)事件的程序員使用。如果想利用WindowsSockets方便地處理MFC應(yīng)用程序中的多個(gè)網(wǎng)絡(luò)協(xié)議,而又不想放棄靈活性,可以考慮使用CAsyncSocket。CAsyncSocket類是MFC在方便性與靈活性中的一種折衷方案。它提供了一個(gè)類用以保留網(wǎng)絡(luò)編程的靈活性,而方便性則由CSocket類來(lái)提供。2)CSocket類CSocket類是CAsyncSocket類的派生類,它致力于提供比CAsyncSocket類更高的抽象性,使得網(wǎng)絡(luò)編程變得簡(jiǎn)單方便。CSocket類支持流方式和數(shù)據(jù)報(bào)方式,但一般情況下用的更多的是流方式的數(shù)據(jù)通信。在流方式的通信模式下,CSocket類通常會(huì)與CArchive類結(jié)合,以串行化的方式發(fā)送和接收數(shù)據(jù),這使得網(wǎng)絡(luò)編程變得像讀寫文件一樣簡(jiǎn)單了。CArchive類扮演的是一個(gè)數(shù)據(jù)緩沖區(qū)的角色,它通過(guò)CSocketFile類與一個(gè)套接字相聯(lián)系。只要建立了兩者的聯(lián)系,然后往“數(shù)據(jù)緩沖區(qū)”裝入數(shù)據(jù)與取出數(shù)據(jù)就完成了。3.2.4MFC下Socket編程基本步驟
sockets(套接字)編程有三種,流式套接字(SOCK_STREAM),數(shù)據(jù)報(bào)套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);基于TCP的socket編程是采用的流式套接字。流式套接字Socket編程是基于Client/Server模式,其編程主要包括客客戶機(jī)和服務(wù)器端的編程,程序編寫之前ws2_32.lib的庫(kù)文件?;镜木幊滩襟E如下:服務(wù)器端編程的步驟:
1)加載套接字庫(kù),創(chuàng)建套接字(WSAStartup()/socket());
2)綁定套接字到一個(gè)IP地址和一個(gè)端口上(bind());
3)將套接字設(shè)置為監(jiān)聽(tīng)模式等待連接請(qǐng)求(listen());
4)請(qǐng)求到來(lái)后,接受連接請(qǐng)求,返回一個(gè)新的對(duì)應(yīng)于此次連接的套接字(accept());
5)用返回的套接字和客戶端進(jìn)行通信(send()/recv());
6)返回,等待另一連接請(qǐng)求;
7)關(guān)閉套接字,關(guān)閉加載的套接字庫(kù)(closesocket()/WSACleanup())??蛻魴C(jī)端編程步驟:1)加載套接字庫(kù),創(chuàng)建套接字(WSAStartup()/socket());
2)向服務(wù)器發(fā)出連接請(qǐng)求(connect());
3)和服務(wù)器端進(jìn)行通信(send()/recv());
4)關(guān)閉套接字,關(guān)閉加載的套接字庫(kù)(closesocket()/WSACleanup())??蛻魴C(jī)與服務(wù)器通信過(guò)程如圖5-3所示:圖STYLEREF1\s5SEQ圖\*ARABIC\s13:客戶機(jī)服務(wù)器底層通信過(guò)程3.3TCPClient端Socket的編程實(shí)現(xiàn)串口聯(lián)網(wǎng)實(shí)現(xiàn)串口設(shè)備的網(wǎng)絡(luò)互聯(lián),其主要的編程在于實(shí)現(xiàn)Client端上位機(jī)的監(jiān)控設(shè)計(jì)。以GPS頻標(biāo)時(shí)標(biāo)同步信號(hào)源為例,介紹串口設(shè)備聯(lián)網(wǎng)TCPClient端編程的具體實(shí)現(xiàn)。3.3.1Client接收數(shù)據(jù)處理串口設(shè)備數(shù)據(jù)的收發(fā)以字符形式進(jìn)行。在串口設(shè)備實(shí)現(xiàn)網(wǎng)絡(luò)互聯(lián)模型中,Client端接收數(shù)據(jù)處理,主要方式有兩種。一種是通過(guò)WSAAsyncSelect()函數(shù)注冊(cè)Socket套接字消息響應(yīng)來(lái)進(jìn)行實(shí)現(xiàn),這是最普遍的。當(dāng)串口連接到網(wǎng)絡(luò)的串口設(shè)備比較多時(shí),則可以通過(guò)多線程的方式來(lái)進(jìn)行接收數(shù)據(jù)的處理。1)Socket消息響應(yīng)實(shí)現(xiàn)數(shù)據(jù)接收利用Socket消息響應(yīng)實(shí)現(xiàn)數(shù)據(jù)收發(fā),首先需要利用WSAAsyncSelect()注冊(cè)消息響應(yīng)類型。WSAAsyncSelect()函數(shù)如下:intPASCALFARWSAAsyncSelect(SOCKETs,HWNDhWnd,unsignedintwMsg,longlEvent);s標(biāo)識(shí)一個(gè)需要事件通知的套接口的描述符.hWnd標(biāo)識(shí)一個(gè)在網(wǎng)絡(luò)事件發(fā)生時(shí)需要接收消息的窗口句柄.wMsg在網(wǎng)絡(luò)事件發(fā)生時(shí)要接收的消息.lEvent位屏蔽碼,用于指明應(yīng)用程序感興趣的網(wǎng)絡(luò)事件集合.lEvent參數(shù)由下表中列出的值組成:FD_READ欲接收讀準(zhǔn)備好的通知.FD_WRITE欲接收寫準(zhǔn)備好的通知.FD_OOB欲接收帶邊數(shù)據(jù)到達(dá)的通知.FD_ACCEPT欲接收將要連接的通知.FD_CONNECT欲接收已連接好的通知.FD_CLOSE欲接收套接口關(guān)閉的通知.實(shí)際編程時(shí),則根據(jù)需要注冊(cè)響應(yīng)的網(wǎng)絡(luò)事件。注冊(cè)號(hào)網(wǎng)絡(luò)實(shí)際后,在程序中添加自定義OnSocket消息響應(yīng)函數(shù),則可以實(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)最后實(shí)現(xiàn)OnSocket函數(shù)。2)多線程接收實(shí)現(xiàn)當(dāng)串口設(shè)備較多時(shí),則可以利用多線程處理各個(gè)設(shè)備數(shù)據(jù)的收發(fā)。多線程實(shí)現(xiàn)數(shù)據(jù)的收發(fā),其主要的思想是建立一個(gè)TCPClientBase的基類。當(dāng)有新的設(shè)備需要監(jiān)控時(shí),則在主應(yīng)用程序中新開(kāi)辟一個(gè)線程,該線程用于專門處理新增加設(shè)備數(shù)據(jù)的收發(fā)。在新的線程中,新增加了一個(gè)TCPClient類,該類繼承于TCPClientBase基類,從實(shí)現(xiàn)應(yīng)用程序與新增加設(shè)備進(jìn)行數(shù)據(jù)通信的目的。3.3.2ClientSocket套接字創(chuàng)建在終端監(jiān)控軟件,當(dāng)用戶需要對(duì)串口設(shè)備通過(guò)網(wǎng)絡(luò)進(jìn)行控制時(shí),點(diǎn)擊連接按鈕,終端軟件建立Client端套接字,實(shí)現(xiàn)與串口設(shè)備的通信。GPS頻標(biāo)時(shí)標(biāo)同步信號(hào)源為例,其實(shí)現(xiàn)代碼如下:1)調(diào)用windowsSocketDLL初始化套接字: WSADATAdata; //定義WSADATA結(jié)構(gòu)體對(duì)象WORDw=MAKEWORD(2,0); //定義版本號(hào)碼 ::WSAStartup(w,&data);2)獲取控件輸入的端口號(hào)和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)機(jī)制/多線程監(jiān)聽(tīng)機(jī)制。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ā)來(lái)時(shí),調(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("斷開(kāi)連接")); ((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é)本章通過(guò)學(xué)習(xí)底層通信原理及流式套接字編程模型等相關(guān)知識(shí),在VC++中運(yùn)用調(diào)用socketAPI中的函數(shù)進(jìn)行編程,來(lái)實(shí)現(xiàn)客戶端與服務(wù)器的數(shù)據(jù)互通。第四章GPS設(shè)備協(xié)議解析Socket套接字實(shí)現(xiàn)接收數(shù)據(jù)后,還需要對(duì)接收的數(shù)據(jù)進(jìn)行驗(yàn)證和解析處理。以GPS頻標(biāo)時(shí)標(biāo)設(shè)備為例,詳細(xì)介紹該過(guò)程。4.1接收數(shù)據(jù)的驗(yàn)證接收數(shù)據(jù)的驗(yàn)證,主要是驗(yàn)證數(shù)據(jù)否否符合設(shè)備的數(shù)據(jù)協(xié)議,確定接收到的數(shù)據(jù)是否正確。若接收到的數(shù)據(jù)與設(shè)備協(xié)議相符合,則對(duì)數(shù)據(jù)進(jìn)行解析處理。否則丟棄接收到的數(shù)據(jù)。數(shù)據(jù)的驗(yàn)證機(jī)制主要在實(shí)現(xiàn)定義好的OnCommunication()函數(shù)中實(shí)現(xiàn)。OnCommunication()函數(shù)的實(shí)現(xiàn)則以設(shè)備的發(fā)送協(xié)議為基礎(chǔ)進(jìn)行設(shè)計(jì),采用狀態(tài)機(jī)機(jī)制,用來(lái)驗(yàn)證數(shù)據(jù)。幀頭(1)地址(1)控制字(1)數(shù)據(jù)長(zhǎng)度(1)數(shù)據(jù)(N)CRC16校驗(yàn)(2)GPS串口設(shè)備中,其發(fā)送的數(shù)據(jù)幀格式為:根據(jù)協(xié)議,設(shè)計(jì)了6個(gè)狀態(tài)的狀態(tài)機(jī),用于實(shí)現(xiàn)數(shù)據(jù)驗(yàn)證:Waiting:數(shù)據(jù)等待狀態(tài),當(dāng)接受到數(shù)據(jù)時(shí),則根據(jù)判斷流轉(zhuǎn)到下一個(gè)狀態(tài)BYTE_HEAD:幀頭驗(yàn)證狀態(tài)BYTE_ADDR:地址驗(yàn)證狀態(tài)BYTE_CONTROL:控制字驗(yàn)證狀態(tài)BYTE_LENGTH:數(shù)據(jù)長(zhǎng)度驗(yàn)證狀態(tài)BYTE_DATA:數(shù)據(jù)項(xiàng)驗(yàn)證狀態(tài)BYTE_CRC:校驗(yàn)碼驗(yàn)證狀態(tài)整個(gè)狀態(tài)機(jī)的流轉(zhuǎn)過(guò)程如下圖所示圖STYLEREF1\s6SEQ圖\*ARABIC\s11:串口數(shù)據(jù)接收及驗(yàn)證機(jī)制OnSocket()函數(shù)接收到字符數(shù)據(jù)以后,把接收到的字符存入到事先定義好的Buffer[]緩存數(shù)組。軟件終端調(diào)用OnCommunication()函數(shù)對(duì)存在Buffer[]中的數(shù)據(jù)進(jìn)行狀態(tài)機(jī)驗(yàn)證。若通過(guò)狀態(tài)機(jī)的驗(yàn)證,則接收數(shù)據(jù)正確,對(duì)數(shù)據(jù)進(jìn)行解析。4.2接收數(shù)據(jù)的解析狀態(tài)機(jī)驗(yàn)證接收數(shù)據(jù)后,接收的數(shù)據(jù)存儲(chǔ)在一個(gè)m_RecvData[128]的數(shù)組中,數(shù)據(jù)的解析則是根據(jù)協(xié)議解析m_RecvData[128]數(shù)組中的內(nèi)容。GPS設(shè)備中協(xié)議中,時(shí)間部分協(xié)議如下:以GPS協(xié)議接收數(shù)據(jù)的時(shí)間幀為例,DisPlay()函數(shù)解析時(shí)間過(guò)程如下:判斷是否是時(shí)間幀:時(shí)間幀的控制字為0x81,而控制字存在m_RecvData[128]數(shù)組的第3個(gè)字節(jié),即m_RecvData[2]中,所以第一步判斷m_RecvData[2]的數(shù)據(jù),若其為0x81,則對(duì)其按時(shí)間幀進(jìn)行解析時(shí)分秒的解析根據(jù)協(xié)議,數(shù)據(jù)項(xiàng)長(zhǎng)度為3個(gè)字節(jié),存儲(chǔ)在m_RecvData[128]數(shù)組的第5-7個(gè)字節(jié)中。及m_RecvData[4]中為時(shí),m_RecvData[5]中為分,m_RecvData[6]中為秒。對(duì)此三個(gè)字節(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ù)項(xiàng)的解析與時(shí)間的解析思路一致,只是具體項(xiàng)的具體解析算法不一致。4.3本章小結(jié)本章主要講述了幀數(shù)據(jù)的結(jié)構(gòu),然后依據(jù)其結(jié)構(gòu),引出在接收幀數(shù)據(jù)時(shí),所需要的各個(gè)步驟。一步一步來(lái)判斷一個(gè)幀數(shù)據(jù)是如何接收到的。之后,學(xué)習(xí)了在接收到幀數(shù)據(jù)后是如何對(duì)其進(jìn)行解析。整體掌握幀數(shù)據(jù)從接收到解析出來(lái),能夠進(jìn)行使用的整個(gè)過(guò)程。第五章人機(jī)交互設(shè)計(jì)串口設(shè)備網(wǎng)絡(luò)互聯(lián)系統(tǒng)中,主要的一部分是上位機(jī)人機(jī)交互的設(shè)計(jì)。在人機(jī)交互的設(shè)計(jì)中,主要利用VC++編譯器和MFC框架實(shí)現(xiàn)上層界面的設(shè)計(jì)。VC++編譯器和MFC框架,為串口設(shè)備網(wǎng)絡(luò)互聯(lián)系統(tǒng)的界面開(kāi)發(fā)提供了方便。5.1VisualC++6.0編譯器簡(jiǎn)介VisualC++6.0,簡(jiǎn)稱VC或者VC6.0,是微軟推出的一款C++編譯器,將“高級(jí)語(yǔ)言”翻譯為“機(jī)器語(yǔ)言(低級(jí)語(yǔ)言)”的程序。VisualC++是一個(gè)功能強(qiáng)大的可視化軟件開(kāi)發(fā)工具。自1993年Microsoft公司推出VisualC++1.0后,隨著其新版本的不斷問(wèn)世,VisualC++已成為專業(yè)程序員進(jìn)行軟件開(kāi)發(fā)的首選工具。雖然微軟公司推出了VisualC++.NET(VisualC++7.0),但它的應(yīng)用的很大的局限性,只適用于Windows2000、WindowsXP和WindowsNT4.0。所以實(shí)際中,更多的是以VisualC++6.0為平臺(tái)。VisualC++6.0不僅是一個(gè)C++編譯器,而且是一個(gè)基于Windows操作系統(tǒng)的可視化集成開(kāi)發(fā)環(huán)境(integrateddevelopmentenvironment,IDE)。VisualC++6.0由許多組件組成,包括編輯器、調(diào)試器以及程序向?qū)ppWizard、類向?qū)lassWizard等開(kāi)發(fā)工具。這些組件通過(guò)一個(gè)名為DeveloperStudio的組件集成為和諧的開(kāi)發(fā)環(huán)境。VC++應(yīng)用程序的開(kāi)發(fā)主要有兩種模式,一種是WIN
API方式,另一種則是MFC方式,傳統(tǒng)的WIN
API開(kāi)發(fā)方式比較繁瑣,而MFC則是對(duì)WIN
API再次封裝,所以MFC相對(duì)于WIN
API開(kāi)發(fā)更具備效率優(yōu)勢(shì)。串口設(shè)備網(wǎng)絡(luò)互聯(lián)系統(tǒng)中,主要利用VisualC++6.0中MFC進(jìn)行應(yīng)用程序開(kāi)發(fā)。MFC借助C++的優(yōu)勢(shì)為Windows開(kāi)發(fā)開(kāi)辟了一片新天地,同時(shí)也借助ApplicationWizzard使開(kāi)發(fā)者擺脫離了每次都必寫基本代碼,借助ClassWizard和消息映射使開(kāi)發(fā)者擺脫了定義消息處理時(shí)那種混亂和冗長(zhǎng)的代碼段。另外,MFC利用C++的封裝功能使開(kāi)發(fā)者擺脫Windows中各種句柄的困擾,只需要面對(duì)C++中的對(duì)象,這樣一來(lái)使開(kāi)發(fā)更接近開(kāi)發(fā)語(yǔ)言而遠(yuǎn)離系統(tǒng)。利用C++的封裝性開(kāi)發(fā)者可以更容易理解和操作各種窗口對(duì)象;利用C++的派生性開(kāi)發(fā)者可以減少開(kāi)發(fā)自定義窗口的時(shí)間和創(chuàng)造出可重用的代碼;利用虛擬性可以在必要時(shí)更好的控制窗口的活動(dòng)。而且C++本身所具備的超越C語(yǔ)言的特性都可以使開(kāi)發(fā)者編寫出更易用,更靈活的代碼。 5.2MFC框架5.2.1MFC框架簡(jiǎn)介MFC,微軟基礎(chǔ)類(MicrosoftFoundationClasses),是微軟提供的用于在C++環(huán)境下編寫應(yīng)用程序的一個(gè)框架和引擎,是對(duì)API函數(shù)的專用C++封裝,微軟做了大量的封裝,隱藏了許多內(nèi)部實(shí)現(xiàn),簡(jiǎn)化了開(kāi)發(fā)人員的工作量。MFC(MicrosoftFoundationClassLibrary)中的各種類相互結(jié)合起來(lái)構(gòu)成了一個(gè)應(yīng)用程序框架,它的目的就是讓程序員在此基礎(chǔ)上來(lái)建立Windows下的應(yīng)用程序,這是一種相對(duì)SDK來(lái)說(shuō)更為簡(jiǎn)單的方法。因?yàn)榭傮w上,MFC框架定義了應(yīng)用程序的輪廓,并提供了用戶接口的標(biāo)準(zhǔn)實(shí)現(xiàn)方法,程序員所要做的就是通過(guò)預(yù)定義的接口把具體應(yīng)用程序特有的東西填入這個(gè)輪廓。MicrosoftVisualC++提供了相應(yīng)的工具來(lái)完成這個(gè)工作:AppWizard可以用來(lái)生成初步的框架文件(代碼和資源等);資源編輯器用于幫助直觀地設(shè)計(jì)用戶接口;ClassWizard用來(lái)協(xié)助添加代碼到框架文件;最后,編譯,則通過(guò)類庫(kù)實(shí)現(xiàn)了應(yīng)用程序特定的邏輯。5.2.2MFC類層次結(jié)構(gòu)圖微軟MFC類庫(kù)提供了大量的MFC類,開(kāi)發(fā)人員可以很方便地利用這些類高效快速地開(kāi)發(fā)出自己的應(yīng)用程序。圖8-1為從MFC類庫(kù)截取的部分類的層次結(jié)構(gòu)圖。從圖中,可以看到各種類和控件的相互關(guān)系。圖STYLEREF1\s7SEQ圖\*ARABIC\s11:MFC類庫(kù)層次結(jié)構(gòu)圖(部分)1)CWinApp類每個(gè)應(yīng)用程序從類CWinApp派生出自己的應(yīng)用程序類,并定義一個(gè)全局的對(duì)象。該應(yīng)用程序類包含了Windows下MFC應(yīng)用程序的初始化、運(yùn)行和結(jié)束過(guò)程?;诳蚣芙⒌膽?yīng)用程序必須有一個(gè)(且只能有一個(gè))從CWinApp派生的類的對(duì)象。CWinApp所包含的數(shù)據(jù)成員主要用于存放和控制應(yīng)用程序本身的信息。其主要的成員函數(shù)如表9-1所示:數(shù)據(jù)成員名稱作用入描述m_pszAppName指定了應(yīng)用程序名稱m_hInstance標(biāo)識(shí)了應(yīng)用程序的當(dāng)前實(shí)例m_lpCmdLine指示一個(gè)以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ǔ)類庫(kù)還提供AfxGetApp等全局函數(shù),用于訪問(wèn)你的CWinApp對(duì)象以及其它全局信息。2)CWnd類CWnd類提供了微軟基礎(chǔ)類庫(kù)中所有窗口類的基本功能。CWnd對(duì)象與Windows的窗口不同,但是兩者有緊密聯(lián)系。CWnd對(duì)象是由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的窗口,但是不銷毀對(duì)象。CWnd類和消息映射機(jī)制隱藏了WndProc函數(shù)。接收到的Windows通知消息通過(guò)消息映射被自動(dòng)發(fā)送到適當(dāng)?shù)腃WndOnMessage成員函數(shù)。程序開(kāi)發(fā)者可以在派生類中重載OnMessage成員函數(shù)以處理成員的特定消息。使用CWnd類同時(shí)還能夠?yàn)閼?yīng)用程序創(chuàng)建Windows的子窗口。先從CWnd繼承一個(gè)類,然后在派生類中加入成員變量以保存與你的應(yīng)用程序有關(guān)的數(shù)據(jù)。在派生類中實(shí)現(xiàn)消息處理成員函數(shù)和消息映射,以指定當(dāng)消息被發(fā)送到窗口時(shí)應(yīng)該如何動(dòng)作。程序開(kāi)發(fā)者可以經(jīng)過(guò)兩個(gè)步驟來(lái)創(chuàng)建一個(gè)子窗口。首先,調(diào)用構(gòu)造函數(shù)CWnd以創(chuàng)建一個(gè)CWnd對(duì)象,然后調(diào)用Create成員函數(shù)以創(chuàng)建子窗口并將它連接到CWnd對(duì)象。
當(dāng)用戶關(guān)閉你的子窗口時(shí),應(yīng)銷毀CWnd對(duì)象,或者調(diào)用DestroyWindow成員函數(shù)以清除窗口并銷毀它的數(shù)據(jù)結(jié)構(gòu)。在微軟基礎(chǔ)類庫(kù)中,從CWnd派生了許多其它類以提供特定的窗口類型。這些類中有許多,包括CFrameWnd,CMDIFrameWnd,CMDIChildWnd,CView和CDialog,被用來(lái)進(jìn)一步派生。從CWnd派生的控件類,如CButton,可以被直接使用,也可以被進(jìn)一步派生出其它類來(lái)。5.2.3初始化流程及消息循環(huán)機(jī)制基于MFC的對(duì)話框應(yīng)用程序的初始化流程及消息循環(huán)機(jī)制的過(guò)程如圖8-2所示:圖STYLEREF1\s7SEQ圖\*ARABIC\s12:MFC消息循環(huán)機(jī)制由于Windows是一個(gè)面向消息的操作系統(tǒng),在Windows環(huán)境下很大一部分編程工作涉及消息處理。每當(dāng)發(fā)生一個(gè)事件,如擊鍵或鼠標(biāo)點(diǎn)擊,就會(huì)向應(yīng)用程序發(fā)送一個(gè)消息,然后由它來(lái)處理事件。微軟基礎(chǔ)類庫(kù)提供了為基于消息的編程而優(yōu)化的編程模式。在這種模式下,“消息映射”被用于指明哪個(gè)函數(shù)將為特定的類處理不同的消息。消息映射包含了一個(gè)或多個(gè)宏,用以指定哪個(gè)函數(shù)處理哪個(gè)消息。5.3MFC開(kāi)發(fā)應(yīng)用程序?qū)崿F(xiàn)VisualC++6.0編譯器類向?qū)Т蟠筇峁┝薓FC應(yīng)用程序的開(kāi)發(fā)效率。利用類向?qū)?,可以方便地新建基于單文檔、多文檔及基于對(duì)話框的界面應(yīng)用程序。界面開(kāi)發(fā)中,各種控件可以方便的添加需要的消息響應(yīng),提供應(yīng)用程序后臺(tái)數(shù)據(jù)的處理及通訊效率。5.3.1VisualC++6.0新建MFC應(yīng)用程序VisualC++6.0可以方便地建立MFC應(yīng)用程序。下面以建立基于對(duì)話框的應(yīng)用程序?yàn)槔?,詳述建立MFC應(yīng)用程序步驟。運(yùn)行VisualC++6.0集成開(kāi)發(fā)環(huán)境。點(diǎn)擊文件->新建,彈出新建應(yīng)用程序?qū)υ捒颍缦聢D所示:選擇在新建對(duì)話框中選擇“工程”主菜單,選中“MFCAppWizard(exe)”,在“工程名稱”一欄中輸入相應(yīng)的工程名稱,選擇好工程相應(yīng)的位置,點(diǎn)擊“確定”按鈕,則彈出MFC應(yīng)用程序向?qū)?duì)話框,此界面可以選擇應(yīng)用程序是基于單文檔、多文檔還是基本對(duì)話框,如下圖所示。選擇基于對(duì)話框,點(diǎn)擊下一步,彈出應(yīng)用程序外觀設(shè)置。如下圖。應(yīng)用程序開(kāi)發(fā)這可以根據(jù)需要進(jìn)行相應(yīng)的選擇。所有選擇保存默認(rèn),點(diǎn)擊下一步。后續(xù)彈出的對(duì)話框如下所示:所有選擇保存默認(rèn),點(diǎn)擊下一步。后續(xù)彈出的對(duì)話框如下所示。該對(duì)話框顯示了應(yīng)用程序創(chuàng)建的MFC類和文件。點(diǎn)擊完成,則新建基于對(duì)話框的應(yīng)用程序成功。如下圖所示。用戶可以根據(jù)需要在該界面拖動(dòng)控件布局成自己需要的界面程序。5.3.2消息響應(yīng)函數(shù)添加與實(shí)現(xiàn)利用VisualC++6.0的類向?qū)В焖俚貙?duì)布局在界面的控件、對(duì)話框等添加消息響應(yīng)函數(shù)。也可以方便的添加類的成員變量??丶㈨憫?yīng)是VisualC++開(kāi)發(fā)中最常用到的一種響應(yīng)機(jī)制,其消息響應(yīng)添加步驟如下:設(shè)置控件ID和文本標(biāo)題以按鈕控件為例,在右側(cè)功率欄中,把按鈕控件拖動(dòng)到窗口界面中。選中按鈕控件。點(diǎn)擊右鍵,選中屬性,彈出如下對(duì)話框按鈕控件屬性對(duì)話框。把控件設(shè)置好響應(yīng)的控件ID和標(biāo)題。如下圖所示。點(diǎn)擊關(guān)閉利用類向?qū)砑酉㈨憫?yīng)函數(shù)。在VisualC++6.0菜單欄中,點(diǎn)擊“查看”->建立類向?qū)?,或直接“Ctrl+W”快捷鍵,彈出類向?qū)?duì)話框,在類向?qū)е锌梢詾閼?yīng)用程序添加新的類,可以為控件和對(duì)畫框添加消息響應(yīng)函數(shù),綁定成員變量。如下圖所示:選擇MessageMaps菜單,在ObjectIDs中選擇需要添加響應(yīng)函數(shù)的按鈕,選中后,在Messages一欄中會(huì)顯示系統(tǒng)提供給該控件的消息響應(yīng)。選擇需要進(jìn)行響應(yīng)的消息,點(diǎn)擊AddFunction,彈出添加響應(yīng)函數(shù)的對(duì)話框,如下圖所示:點(diǎn)擊OK,則添加添加消息響應(yīng)函數(shù)成功。選擇EditCode,則進(jìn)入添加的消息響應(yīng)函數(shù)中。軟件開(kāi)發(fā)人員可以根據(jù)需要在函數(shù)中提供實(shí)現(xiàn)相應(yīng)的功能。此時(shí),若用戶點(diǎn)擊界面的按鈕,則消息響應(yīng)函數(shù)執(zhí)行。VisualC++6.0編譯器和MFC框架極大地提高了界面程序的開(kāi)發(fā)效率。為串口設(shè)備通過(guò)網(wǎng)絡(luò)實(shí)現(xiàn)人機(jī)交互提供了可能。5.4課題的人機(jī)界面設(shè)計(jì)本課題采用固定的查詢指令,向GPS時(shí)鐘進(jìn)行自動(dòng)或手動(dòng)的發(fā)送。對(duì)接收到的數(shù)據(jù)回復(fù)進(jìn)行接收、解析并顯示。由于發(fā)送內(nèi)容固定,因此不設(shè)計(jì)控制命令輸入串口,僅需完成相關(guān)數(shù)據(jù)內(nèi)容顯示、發(fā)送控制等界面設(shè)計(jì)。圖STYLEREF1\s7SEQ圖\*ARABIC\s13:軟件界面功能說(shuō)明運(yùn)用MFC框架方法,課題開(kāi)發(fā)了簡(jiǎn)單的人機(jī)界面。主要包括:串口通訊數(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é)本章主要講述了通過(guò)用VisualC++6.0編譯器及MFC框架,來(lái)進(jìn)行軟件的人機(jī)交互設(shè)計(jì)。運(yùn)用此種方法進(jìn)行設(shè)計(jì),能夠大大提升效率。第六章結(jié)論6.1成果展示啟動(dòng)程序連接互聯(lián)網(wǎng)后,輸入IP地址及端口號(hào)后,點(diǎn)擊查詢,之后會(huì)與遠(yuǎn)端的GPS時(shí)鐘設(shè)備及串口聯(lián)網(wǎng)服務(wù)器相連接,通過(guò)發(fā)送數(shù)據(jù),設(shè)備在接受數(shù)據(jù)后,相應(yīng)的發(fā)送回我們所需要的數(shù)據(jù)。演示成果圖及硬件圖如下圖所示:串口通訊雖歷史悠久且速率低,但其簡(jiǎn)單可靠的特點(diǎn)仍然在專業(yè)領(lǐng)域得到大量應(yīng)用。物聯(lián)網(wǎng)時(shí)代,串口作為物聯(lián)的最后100米連接辦法,仍將在專業(yè)領(lǐng)域得到大量應(yīng)用。因此,串口的聯(lián)網(wǎng)解決方案是物聯(lián)網(wǎng)時(shí)代的重要課題之一。本課題設(shè)計(jì)了一種串口聯(lián)網(wǎng)硬件結(jié)構(gòu),并進(jìn)行了計(jì)算機(jī)軟件實(shí)現(xiàn)。由于時(shí)間原因,僅實(shí)現(xiàn)了基本的通訊功能,成果有限。下一步還需繼續(xù)將課題成果向?qū)嵱没?、?fù)雜化方向延伸,實(shí)現(xiàn)更多結(jié)構(gòu)復(fù)雜數(shù)量龐大的串口聯(lián)網(wǎng)通訊功能。6.2課題工作總結(jié)和結(jié)論本課題對(duì)物聯(lián)網(wǎng)、串口通訊、遠(yuǎn)程監(jiān)控等應(yīng)用概念進(jìn)行了理論基礎(chǔ)學(xué)習(xí),分析了串口通訊在物聯(lián)網(wǎng)時(shí)代的地位和價(jià)值,提出了基于串口聯(lián)網(wǎng)服務(wù)器的串口遠(yuǎn)程聯(lián)網(wǎng)方案并進(jìn)行了實(shí)現(xiàn)。到此,本文的內(nèi)容已經(jīng)基本完成,所做工作如下:查閱了大量國(guó)內(nèi)外文獻(xiàn)資料,對(duì)物聯(lián)網(wǎng)、遠(yuǎn)程監(jiān)控、串口通訊等重要概念進(jìn)行了多方查證研究。對(duì)串口通訊的歷史和未來(lái)進(jìn)行了研究,并總結(jié)串口通訊在物聯(lián)網(wǎng)以及遠(yuǎn)程監(jiān)控等方面依然具有極為重要的應(yīng)用價(jià)值。對(duì)串口通訊的聯(lián)網(wǎng)方案進(jìn)行了研究,提出了基于串口聯(lián)網(wǎng)服務(wù)器的解決方案。課題提出了具體的方案硬件架構(gòu),并著重進(jìn)行了計(jì)算機(jī)軟件的開(kāi)發(fā)設(shè)計(jì),針對(duì)GPS時(shí)鐘這一目標(biāo)設(shè)備,完成了TCPSocket通信、協(xié)議解析、人機(jī)接口設(shè)計(jì)三方面工作,實(shí)現(xiàn)了計(jì)算機(jī)軟件對(duì)遠(yuǎn)端GPS設(shè)備的遠(yuǎn)程監(jiān)控功能。課題研究表明,串口雖然是一個(gè)較低速率的簡(jiǎn)單通訊方式,但在當(dāng)今的網(wǎng)絡(luò)甚至是物聯(lián)網(wǎng)系統(tǒng)中,其仍然是不可或缺的一種通訊手段,而實(shí)現(xiàn)串口通訊的遠(yuǎn)程聯(lián)網(wǎng)是順應(yīng)技術(shù)和應(yīng)用發(fā)展的一種切實(shí)需要。課題通過(guò)具體硬件和軟件設(shè)計(jì)實(shí)現(xiàn)了串口的遠(yuǎn)程聯(lián)網(wǎng)通訊,證明串口通訊在物聯(lián)網(wǎng)時(shí)代仍然可以簡(jiǎn)單、有效的得以實(shí)現(xiàn)和整合,成為物聯(lián)網(wǎng)重要的有機(jī)組成部分。6.3需進(jìn)一步研究的問(wèn)題本課題僅完成了最基本的串口通訊遠(yuǎn)程實(shí)現(xiàn),對(duì)于實(shí)際應(yīng)用還有一些需要實(shí)際考慮和完善的問(wèn)題:軟件的編寫是基于單串口通
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 物業(yè)管理招標(biāo)文件總匯
- 乘坐校車的學(xué)生保證
- 農(nóng)田建設(shè)監(jiān)理招標(biāo)文件發(fā)布
- 無(wú)紡布采購(gòu)意向書
- 工程按時(shí)完成保證協(xié)議
- 極致版安裝服務(wù)合同范本
- 招標(biāo)文件辦公家具規(guī)格
- 股權(quán)質(zhì)押借款合同范本
- 借道施工協(xié)議
- 工程分包合同的勞務(wù)成本控制策略
- 遼寧省工程咨詢集團(tuán)有限責(zé)任公司 筆試 題庫(kù)
- 腦血管介入治療進(jìn)修
- 勞動(dòng)教育(紹興文理學(xué)院)知到智慧樹(shù)章節(jié)答案
- 小學(xué)2024年秋季學(xué)生1530安全教育記錄表(全學(xué)期)
- 浙江省溫州市2023-2024學(xué)年六年級(jí)上學(xué)期期末科學(xué)試卷(含答案)3
- 2022-2023學(xué)年廣東省廣州市番禺區(qū)祈福英語(yǔ)實(shí)驗(yàn)學(xué)校七年級(jí)(上)期末英語(yǔ)試卷
- 警察小學(xué)生安全教育講座
- 同理心課件教學(xué)課件
- 靜療小組第一季度理論試卷(2024年)復(fù)習(xí)測(cè)試卷附答案
- 文化活動(dòng)突發(fā)輿情應(yīng)急預(yù)案
- 中國(guó)普通食物營(yíng)養(yǎng)成分表(修正版)
評(píng)論
0/150
提交評(píng)論