




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
摘要隨著計(jì)算機(jī)技術(shù)的發(fā)展和推廣,利用串口進(jìn)行數(shù)據(jù)通訊在通訊領(lǐng)域中占有著重要的地位。為了方便和快速的通過(guò)Internet網(wǎng)絡(luò)訪(fǎng)問(wèn)串口服務(wù)器的串口,本課題把串口通信集成到Windows服務(wù),Windows服務(wù)完成串口通信的基本操作。由文中詳細(xì)描述了串口通信服務(wù)的原理和工作流程,還列舉出了相關(guān)的核心代碼。用流程圖的方式來(lái)描述了各個(gè)模塊的邏輯實(shí)現(xiàn)。串口通信服務(wù)中采用安全隊(duì)列的機(jī)制來(lái)控制多線(xiàn)程訪(fǎng)問(wèn)多串口.在開(kāi)發(fā)中按照軟件工程的流程,從需求分析到概要設(shè)計(jì)從詳細(xì)設(shè)計(jì)到編碼,以及最后的測(cè)試,利用軟件工程的工具管理開(kāi)發(fā)代碼和文檔。此外,還開(kāi)發(fā)出了客戶(hù)端來(lái)測(cè)試該服務(wù)工作是否正常。經(jīng)過(guò)測(cè)試服務(wù)工作正常,能通過(guò)網(wǎng)絡(luò)連接到服務(wù)器完成串口的通信.最后總結(jié)了開(kāi)發(fā)和設(shè)計(jì)的不足之處,程序還有待進(jìn)一步完善.關(guān)鍵詞:串口通信;Windows服務(wù);安全隊(duì)列;多線(xiàn)程Abstract
With
the
developmentofcomputertechnology
and
topromote
theuse
of
serial
datacommunication
occupies
animportantpositionin
the
communications
field。
Inorderto
easilyandquickly
throughtheInternet
network
to
access
the
serial
server
serial,thesubjectof
serialcommunication
integrated
intotheWindows
services,Windows
services
tocomplete
thebasicoperation
of
the
serialcommunication.
By
the
paper
describesindetail
theprinciplesand
workflow
of
the
serialcommunication,
alsocited
the
corecode。
Flowchart
way
todescribe
the
logic
of
eachmodule。
Serialcommunication
services
usedin
the
security
queue
mechanismtocontrol
the
multi—threaded
access
to
morethan
serial。Development
in
accordance
with
the
softwareengineeringprocess,fromrequirements
analysisto
outlinedesign,
detaileddesign
to
coding,
and
finaltesting,theuseof
softwareengineering
toolsformanaging
thedevelopmentof
codeanddocumentation.
Alsodeveloped
a
client
totest
theservice
isworkingproperly.
After
the
normal
work
of
testingservices,throughthenetwork
toconnecttothe
servertocomplete
theserial
communication.
Concluded
the
developmentanddesignoftheinadequaciesof
the
program
remainstobe
furtherimproved。Keywords:serialcommunication;Windowsservice;
securityqueue;
multi—threaded目錄TOC\o"1-3”\h\z\uHYPERLINK\l”_Toc323916696"摘要 1Abstract 2HYPERLINK\l”_Toc323916698”第一章引言 51.3研究目的及意義 6HYPERLINK\l”_Toc323916702”第二章開(kāi)發(fā)技術(shù)簡(jiǎn)介 7HYPERLINK\l”_Toc323916703”2。1串行通信簡(jiǎn)介 7HYPERLINK\l”_Toc323916704"2。2vc++簡(jiǎn)介 72。3USB接口技術(shù)簡(jiǎn)介 92。4USB通信參考模型 9HYPERLINK\l”_Toc323916707”2.5USB接口的通訊原理 102.5。2USB設(shè)備的識(shí)別 10HYPERLINK\l”_Toc323916710"2。6功能需求 11_Toc323916712”2.6.2串口通信 112。6.3客戶(hù)端 11HYPERLINK\l”_Toc323916714"2。7設(shè)計(jì)方案 112。7。2串口通信 12HYPERLINK\l”_Toc323916717”2。7。3客戶(hù)端 12HYPERLINK\l”_Toc323916718"第三章系統(tǒng)程序設(shè)計(jì) 13_Toc323916720"3。2通信協(xié)議 144。1程序功能 15HYPERLINK\l”_Toc323916723"4。1.1參數(shù)設(shè)置功能 15HYPERLINK\l”_Toc323916724”4。1。2參數(shù)顯示功能 154.1。4關(guān)閉串口功能 15_Toc323916728"4.1.6發(fā)送數(shù)據(jù)功能 15HYPERLINK\l”_Toc323916729"4.1.7清空數(shù)據(jù)接收區(qū)功能 15HYPERLINK\l”_Toc323916730"4。1.8清空數(shù)據(jù)發(fā)送區(qū)功能 15_Toc323916732”4.1。10十六進(jìn)制顯示功能 15HYPERLINK\l”_Toc323916733"4.1。11十六進(jìn)制發(fā)送功能 15_Toc323916736”4.4程序類(lèi)的說(shuō)明 16_Toc323916740”4.5.3發(fā)送數(shù)據(jù)模塊 21HYPERLINK\l”_Toc323916741”4。5.4自動(dòng)發(fā)送模塊 22HYPERLINK\l”_Toc323916742"4。5。5接收數(shù)據(jù)模塊 224。5.6清空接收區(qū)模塊 23HYPERLINK\l”_Toc323916744"4。5.7清空發(fā)送區(qū)模塊 23HYPERLINK\l”_Toc323916745"4。5。8關(guān)閉串口模塊 24第五章系統(tǒng)測(cè)試 25HYPERLINK\l”_Toc323916747”5。1系統(tǒng)測(cè)試 25HYPERLINK\l”_Toc323916748"5.2測(cè)試目的 25HYPERLINK\l”_Toc323916749"5。3測(cè)試結(jié)果 25總結(jié) 27參考文獻(xiàn) 28HYPERLINK\l”_Toc323916752”致謝 29第一章引言串口應(yīng)用是一種常見(jiàn)的應(yīng)用技術(shù)。無(wú)論是在一些工業(yè)控制領(lǐng)域還是其他行業(yè),這種應(yīng)用屢見(jiàn)不鮮。用于開(kāi)發(fā)串口應(yīng)用的編程語(yǔ)言也有很多種,在諸多編程語(yǔ)言中,使用VisualC++進(jìn)行串口開(kāi)發(fā)無(wú)疑是最好的方法.使用VisualC++進(jìn)行串口應(yīng)用開(kāi)發(fā)有兩種可選方法:一是利用Microsoft提供的CMSCOMM控件進(jìn)行通訊,不過(guò)現(xiàn)在很多程序員都覺(jué)應(yīng)該放棄這種方式,因?yàn)檫@種方法雖然簡(jiǎn)單快捷,但是靈活性差。二是利用WINAPI函數(shù)進(jìn)行編程,這種編程的難度高,要求掌握很多的API函數(shù),這種方法功能強(qiáng)大,針對(duì)不同的要求,有多種應(yīng)用方式.1.1課題背景隨著信息技術(shù)的迅速發(fā)展,數(shù)據(jù)采集和處理技術(shù)廣泛應(yīng)用于雷達(dá)、通信、遙測(cè)、遙感等領(lǐng)域。而在早期的計(jì)算機(jī)系統(tǒng)上通常使用串口或并口來(lái)發(fā)送數(shù)據(jù),每個(gè)接口都需要占用計(jì)算機(jī)內(nèi)部很多的資源,傳統(tǒng)的接口一般采用PCI總線(xiàn)或RS—232串行總線(xiàn)。PCI總線(xiàn)有較高的傳輸速率,可達(dá)132Mbit/s,也可以即插即用,但是它們的擴(kuò)充槽有限且插拔不方便;RS—232串行總線(xiàn)連接比較方便,但是傳輸速率太慢,不易用于高速傳送數(shù)據(jù)和傳送大量數(shù)據(jù).USB(通用串行總線(xiàn))集中了PCI和RS-232串行總線(xiàn)的優(yōu)點(diǎn),具有方便的即插即用和熱插拔特性以及較高的傳輸速率,因此,將USB技術(shù)應(yīng)用于數(shù)據(jù)采集是非常合適的,可以達(dá)到數(shù)據(jù)采集系統(tǒng)的高速度處理。目前,USB已經(jīng)推出了其協(xié)議的2。0版本,速率高達(dá)480Mbit/s。計(jì)算機(jī)與外界進(jìn)行信息交換稱(chēng)為通信。通常說(shuō)的通信方式有并行通信和串行通信兩種。串行通信指的是一條信息的各位數(shù)據(jù)被逐位按順序傳送的通信方式。串行通信的特點(diǎn)是:數(shù)據(jù)位傳送,按位順序進(jìn)行,最少只需要一根傳輸線(xiàn),雖然成本低,但是傳送速度慢。串行通信的距離可以從幾米到幾千米.1.2研究現(xiàn)狀串口通訊目前流行的方法大概有三種:一是利用WINAPI函數(shù)進(jìn)行編程,這種編程的難度高,不好掌握,要求掌握很多的API函數(shù).二是利用Microsoft提供的CMSCOMM控件進(jìn)行通訊,不過(guò)現(xiàn)在很多程序員都覺(jué)應(yīng)該放棄這種方式.三是利用現(xiàn)在網(wǎng)絡(luò)上面提供的一些串口通訊控件進(jìn)行編寫(xiě)。這三種方法都沒(méi)有同Windows服務(wù)聯(lián)系起來(lái)。1.3研究目的及意義本文研發(fā)了一套基于USB接口的數(shù)據(jù)采集系統(tǒng),整個(gè)系統(tǒng)的設(shè)計(jì)涉及到硬件、設(shè)備固件(Firmware)、USB設(shè)備驅(qū)動(dòng)程序及客戶(hù)應(yīng)用軟件.傳統(tǒng)的數(shù)據(jù)采集系統(tǒng)大都采用標(biāo)準(zhǔn)的串行口和并行口作為數(shù)據(jù)傳輸接口,其局限性在于數(shù)據(jù)傳輸速率低、使用不方便。最新推出的USB2.0總線(xiàn)標(biāo)準(zhǔn)可以支持高達(dá)480Mbps的數(shù)據(jù)傳輸速率,并且具有支持即插即用、擴(kuò)展方便等優(yōu)點(diǎn),因此用于大數(shù)據(jù)量的數(shù)據(jù)采集系統(tǒng)十分合適。提出了一個(gè)基于Cypress公司USB2。0芯片的數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)方案,經(jīng)實(shí)驗(yàn),性能良好.第二章開(kāi)發(fā)技術(shù)簡(jiǎn)介2。1串行通信簡(jiǎn)介不同的獨(dú)立系統(tǒng)通過(guò)線(xiàn)路連接起來(lái)交換數(shù)據(jù),就是通信,而構(gòu)成整個(gè)通信的線(xiàn)路則稱(chēng)為網(wǎng)絡(luò)。有復(fù)雜的通信網(wǎng)絡(luò)如互連網(wǎng)、電信網(wǎng)、衛(wèi)星網(wǎng),還有簡(jiǎn)單的通信網(wǎng)絡(luò)如兩臺(tái)數(shù)據(jù)終端設(shè)備可通過(guò)串行接口如RS—232連接而成.RS-232C是美國(guó)電子工業(yè)協(xié)會(huì)(EIA)制定的關(guān)于數(shù)據(jù)終端通信裝置(如Modem)之間相互連接的標(biāo)準(zhǔn)接口,也是目前最常用的串行接口標(biāo)準(zhǔn)。RS-232串行接口總線(xiàn)適用范圍為通信設(shè)備之間距離不大于15m,傳輸速率最大為20KB/s。串行通信在發(fā)送時(shí),把CPU送來(lái)的并行碼轉(zhuǎn)換成串行碼,逐位依次發(fā)送出去;在接收時(shí),把發(fā)送過(guò)來(lái)的串行碼逐位接收,組裝成并行碼,并行地發(fā)送給CPU去處理。這種串行到并行的轉(zhuǎn)換功能當(dāng)然可以用軟件來(lái)實(shí)現(xiàn),但是這樣會(huì)占用CPU,所以常用硬件電路來(lái)實(shí)現(xiàn)這一功能,這種硬件電路叫做串行通信接口,即串口(SerialCommunicationPort)。PC機(jī)一般都有1個(gè)或2個(gè)串口,依次為COM1、COM2。這些串口提供了外部設(shè)備與計(jì)算機(jī)進(jìn)行數(shù)據(jù)傳輸和通信的通道。串口在系統(tǒng)控制的范疇中一直占有相當(dāng)重要的地位,不僅沒(méi)有因?yàn)闀r(shí)代的進(jìn)步而被淘汰,反而在規(guī)格和性能上越來(lái)越向極限挑戰(zhàn),成為每臺(tái)計(jì)算機(jī)上的必要配置之一。2.2vc++簡(jiǎn)介VC++是在Windows平臺(tái)下構(gòu)建_blank”32位應(yīng)用程序的強(qiáng)大而又復(fù)雜的開(kāi)發(fā)工具,是目前世界上使用最多的開(kāi)發(fā)工具之一。VC++的應(yīng)用非常廣泛,從桌面應(yīng)用程序到服務(wù)器端軟件,從系統(tǒng)軟件到應(yīng)用軟件,從單機(jī)程序到分布式應(yīng)用程序,從圖形圖像處理到游戲的開(kāi)發(fā),VC++無(wú)所不在。有一句關(guān)于VC++的話(huà)流傳甚廣,說(shuō)“偷懶的人學(xué)HYPERLINK”/view/3063。htm”\t”_blank”VB,聰明的人學(xué)Delphi,真正的程序員學(xué)VC”,其一方面說(shuō)明了VC應(yīng)用的廣泛,另一方面也說(shuō)明了學(xué)習(xí)VC是有一定難度的.[1]2004年,作者推出了一套講述VC++6.0編程的教學(xué)視頻,得到了廣大學(xué)員的熱烈反響,許多學(xué)員通過(guò)這套視頻走上了VC++開(kāi)發(fā)之路。有不少學(xué)員來(lái)信希望我能夠?qū)⒁曨l中的內(nèi)容著書(shū)出版,讓更多的人受益,然而由于自身瑣事較多,一直未能如愿。后來(lái)在博文視點(diǎn)公司郭立總編的介紹下,有幸結(jié)識(shí)了余安萍,并由她執(zhí)筆將視頻中的內(nèi)容整理出書(shū)。正是由于余安萍和郭立女士所付出的勞動(dòng),才有了本書(shū)的出版,在此向她們表示衷心的感謝。本書(shū)讀者本書(shū)讀者群包括:掌握了C語(yǔ)言,想進(jìn)一步學(xué)習(xí)Windows編程的讀者。學(xué)習(xí)VC++多年,但始終沒(méi)有真正入門(mén)的讀者。正在從事VC++開(kāi)發(fā)的初級(jí)程序員。有一定VC++開(kāi)發(fā)經(jīng)驗(yàn),想要系統(tǒng)地學(xué)習(xí)VC++的讀者。在本書(shū)的配套光盤(pán)中,提供了一套完整的VC++教學(xué)視頻,以幫助讀者更快、更好地掌握VC++編程.本書(shū)的內(nèi)容組織本書(shū)在內(nèi)容的組織上循序漸進(jìn)、由淺入深;在知識(shí)的介紹上,從內(nèi)到外、從原理到實(shí)踐。第1章幫助讀者掌握Windows平臺(tái)下程序運(yùn)行的內(nèi)部機(jī)制.第2章幫助讀者復(fù)習(xí)C++中的重要知識(shí),為后續(xù)知識(shí)的學(xué)習(xí)打下良好的基礎(chǔ)。第3章重點(diǎn)剖析MFC框架程序的運(yùn)行脈絡(luò),并與第1章的知識(shí)做對(duì)照,為讀者徹底掃清學(xué)習(xí)MFC的迷霧。相信通過(guò)這章的學(xué)習(xí),很多以前學(xué)過(guò)MFC的讀者都會(huì)有一種恍然大悟的感覺(jué)。前三章可以歸為基礎(chǔ)部分,從第4章開(kāi)始就是實(shí)際應(yīng)用開(kāi)發(fā)的講解了,包括繪圖、文本、菜單、對(duì)話(huà)框、定制程序外觀(guān)、圖形保存和重繪、文件和注冊(cè)表例子。本書(shū)的講解理論結(jié)合實(shí)際,選用的例子和代碼具有相當(dāng)?shù)拇硇院蛯?shí)用價(jià)值,我和我的學(xué)員曾經(jīng)在實(shí)際開(kāi)發(fā)項(xiàng)目的過(guò)程中就直接使用過(guò)很多書(shū)中的代碼。本書(shū)的實(shí)例程序作者在編寫(xiě)本書(shū)時(shí),使用的操作系統(tǒng)是Windows2000ServicePack4,開(kāi)發(fā)工具是VC++6。0SP5,HYPERLINK”/view/24472。htm”\t”_blank"MSDN是2001年1月版的(提示:與VC++6。0匹配的MSDN截止到2001年10月版,之后的版本都與。NET匹配,可能與本書(shū)使用的版本有所不同)。本書(shū)所有的實(shí)例程序都在上述環(huán)境中運(yùn)行正常。提示:由于QQ運(yùn)行時(shí)占用了多個(gè)端口,可能與本書(shū)例子中的網(wǎng)絡(luò)程序使用的端口沖突,在運(yùn)行本書(shū)例子中的網(wǎng)絡(luò)程序時(shí),如果出錯(cuò),請(qǐng)更換程序中的端口號(hào),或者關(guān)閉QQ后再運(yùn)行程序。學(xué)習(xí)建議配套光盤(pán)提供的視頻課數(shù)與本書(shū)的章數(shù)是一一對(duì)應(yīng)的,建議讀者先看視頻,有一個(gè)初步印象后再看相應(yīng)的章節(jié),這樣能夠更快、更好地掌握VC++編程。在學(xué)習(xí)本書(shū)時(shí),建議讀者多動(dòng)腦(想想為什么),多動(dòng)手(將知識(shí)轉(zhuǎn)換為自己的).在理解的前提下,獨(dú)立地編寫(xiě)出書(shū)中每章的例子程序,可以作為是否掌握本章內(nèi)容的一個(gè)考核。由于作者的水平有限,錯(cuò)誤和疏漏之處在所難免,歡迎廣大技術(shù)專(zhuān)家和讀者指正。信、ActiveX控件、動(dòng)態(tài)鏈接庫(kù)、HOOK編程等多個(gè)主題,并且每一章都有一個(gè)完整的操作、網(wǎng)絡(luò)編程、多線(xiàn)程、進(jìn)程間通2.3USB接口技術(shù)簡(jiǎn)介USB的全稱(chēng)為UniversalSearialBus,即通用串行總線(xiàn)。與RS—232類(lèi)似,USB總線(xiàn)也是一種串行外圍設(shè)備連接的總線(xiàn)形式,它是1995年由Microsoft、Compaq、IBM等公司聯(lián)合制定的一種新的PC串行通信協(xié)議,從推出之日起就得到了各大廠(chǎng)商的廣泛支持,得以不斷完善和發(fā)展,目前USB協(xié)議的最新版本已經(jīng)達(dá)到了2.0。USB總線(xiàn)作為一種新的串行總線(xiàn),不僅在傳輸速度上得到了極大的提高,同時(shí)還具有接口簡(jiǎn)單、真正的即插即用、傳輸線(xiàn)供電、多設(shè)備級(jí)聯(lián)等特性。USB總線(xiàn)的成功推出,對(duì)外設(shè)的接口產(chǎn)生了廣泛的影響,目前使用USB總線(xiàn)接口的如鍵盤(pán)、鼠標(biāo)、閃存、攝像頭等外圍設(shè)備在市場(chǎng)上已廣泛存在。2。4USB通信參考模型實(shí)現(xiàn)USB設(shè)備與USB主機(jī)之間的通信主要有兩種方法:一種是USB設(shè)備利用簡(jiǎn)單的點(diǎn)對(duì)點(diǎn)串行連接與主機(jī)的應(yīng)用程序進(jìn)行通信;另一種是USB主機(jī)上的應(yīng)用程序通過(guò)驅(qū)動(dòng)程序與USB設(shè)備進(jìn)行通信。USB通信參考模型分為3層,如圖所示。最底層為總線(xiàn)接口層,提供主機(jī)與設(shè)備之間物理、信號(hào)和包級(jí)的連接;中間為設(shè)備層,提供USB系統(tǒng)軟件執(zhí)行通用的USB操作;最上層為功能層,通過(guò)匹配的應(yīng)用軟件實(shí)現(xiàn)設(shè)備的具體功能.一般而言,每個(gè)USB設(shè)備可以有一個(gè)或多個(gè)配置(configuration),設(shè)備的每個(gè)配置中都含有一個(gè)或更多的接口(interface),接口指出軟件應(yīng)該怎樣訪(fǎng)問(wèn)硬件,另外,接口一般都有替換設(shè)置(alternatesetting)以適應(yīng)不同的帶寬要求。設(shè)備的接口又包含一個(gè)或多個(gè)端點(diǎn)(endpoint),端點(diǎn)是作為通信管道(pipe)的一個(gè)終點(diǎn)。端點(diǎn)類(lèi)型直接影響著USB數(shù)據(jù)的傳輸類(lèi)型,它有四種:控制(Control)、批量(Bulk)、中斷(Interrupt)和同步(Isochronous),給定類(lèi)型的端點(diǎn)總是使用對(duì)應(yīng)類(lèi)型的傳輸方式。端點(diǎn)和管道的區(qū)別:從用戶(hù)角度看,端點(diǎn)是可以直接進(jìn)行IO數(shù)據(jù)流操作的設(shè)備中的基本單位,它是一個(gè)USB設(shè)備唯一可以確認(rèn)的部分,是主機(jī)和設(shè)備之間通信流的終點(diǎn).管道是一個(gè)端點(diǎn)與主機(jī)客戶(hù)程序進(jìn)行IO操作時(shí)使用的中介,也可以說(shuō)它是主機(jī)和一個(gè)設(shè)備端點(diǎn)之間的信息連接,是數(shù)據(jù)流動(dòng)的路徑。管道和端點(diǎn)是一一對(duì)應(yīng)的。端點(diǎn)側(cè)重于靜態(tài)的概念,而管道則側(cè)重于動(dòng)態(tài)的概念.USB總線(xiàn)接口包括USB主控制器和根集線(xiàn)器,其中USB主控制器負(fù)責(zé)處理主機(jī)與設(shè)備之間電氣和協(xié)議層的互連,根集線(xiàn)器則提供USB設(shè)備連接點(diǎn)。USB系統(tǒng)使用USB主控制器來(lái)管理主機(jī)和USB設(shè)備之間的數(shù)據(jù)傳輸,另外它也負(fù)責(zé)管理USB資源,如帶寬等。應(yīng)用軟件是不能直接訪(fǎng)問(wèn)USB設(shè)備硬件的,而是通過(guò)USB系統(tǒng)軟件和USB總線(xiàn)接口與USB設(shè)備進(jìn)行交互。2。5USB接口的通訊原理2。5.1USB設(shè)備的接入U(xiǎn)SB接口中的+5V電源不但可以為外接設(shè)置提供小電流供應(yīng),并且還起著檢測(cè)功能。當(dāng)USB設(shè)置插入U(xiǎn)SB接口后,主機(jī)的+5V電源就會(huì)通過(guò)USB邊線(xiàn)與USB設(shè)備相通。USB外設(shè)的控制芯片會(huì)通過(guò)兩只10K的電阻來(lái)檢查USB設(shè)備是否接入了主機(jī)的USB端口。如果這兩個(gè)引腳一個(gè)為高電平,一個(gè)為低電平時(shí)就表示USB外設(shè)已經(jīng)正常確連入U(xiǎn)SB接口,這時(shí)外設(shè)的控制芯片開(kāi)始工作,并通過(guò)DATA+,DATA-向外送出數(shù)據(jù)。這時(shí)主機(jī)接收數(shù)據(jù)后,就會(huì)提示發(fā)現(xiàn)新硬件,并開(kāi)始安裝新硬件驅(qū)動(dòng)。2。5.2USB設(shè)備的識(shí)別在USB外設(shè)向外送出數(shù)據(jù)時(shí),其中就包括設(shè)備自身的設(shè)備名及型號(hào)等相關(guān)參數(shù),主機(jī)就是根據(jù)這些信息在顯示器上顯示出所發(fā)現(xiàn)的新硬件的名稱(chēng)型號(hào)的。多說(shuō)一點(diǎn):如果現(xiàn)在閃存的價(jià)格降得更低時(shí),我們就可以把掃描儀,打印機(jī),數(shù)碼相機(jī)的驅(qū)動(dòng)程序存在設(shè)備內(nèi)部.當(dāng)主機(jī)需要驅(qū)動(dòng)程序時(shí),直接從設(shè)備內(nèi)部讀取就可以了,也就不再需要驅(qū)動(dòng)光盤(pán)和安裝驅(qū)動(dòng)等繁瑣手續(xù)了。2。6功能需求2。6.1服務(wù)器端串口服務(wù)器上的串口通信服務(wù)打開(kāi)一個(gè)固定的端口,監(jiān)聽(tīng)客戶(hù)端的Socket連接。若檢測(cè)到客戶(hù)端的連接則為客戶(hù)端分配一個(gè)串口,供客戶(hù)端發(fā)送數(shù)據(jù)。客戶(hù)端同服務(wù)器協(xié)商好串口的配置信息,則客戶(hù)端發(fā)送的數(shù)據(jù)服務(wù)器直接發(fā)送到串口,通過(guò)串口發(fā)送除去.若服務(wù)器檢測(cè)到串口接受到數(shù)據(jù),者直接把接收到的數(shù)據(jù)發(fā)送到客戶(hù)端。即服務(wù)器中轉(zhuǎn)串口和客戶(hù)端的數(shù)據(jù)。這樣一來(lái)客戶(hù)端就好像直接鏈接到串口服務(wù)器上的串口,與服務(wù)器串口相連接的外設(shè)進(jìn)行通信。串口服務(wù)器具有很多個(gè)串口形成一個(gè)串口池。串口池中的串口連接著不通或相同的外設(shè),客戶(hù)通過(guò)Internet聯(lián)網(wǎng)的方式鏈接到服務(wù)器,同服務(wù)器的外設(shè)通信。2.6.2串口通信串口通信服務(wù)管理整個(gè)串口池。服務(wù)程序?qū)Υ诔剡M(jìn)行合理管理和分配到客戶(hù)端的連接請(qǐng)求,服務(wù)器會(huì)從串口池中選取一個(gè)串口供客戶(hù)端使用.當(dāng)客戶(hù)端通信完畢,斷開(kāi)同服務(wù)器的鏈接時(shí),服務(wù)器端回收這個(gè)串口,以供其他客戶(hù)端使用.在分配串口的時(shí)候不能讓不同用戶(hù)使用同一串口,讓每一個(gè)客戶(hù)端獨(dú)立的使用某一個(gè)串口.當(dāng)客戶(hù)端鏈接上服務(wù)器后,服務(wù)器為客戶(hù)端分配一個(gè)串口供客戶(hù)端使用。這時(shí)候串口通信需要被實(shí)現(xiàn)。包括串口的打開(kāi),串口參數(shù)設(shè)置,讀寫(xiě)數(shù)據(jù)到串口以及關(guān)閉串口。,服務(wù)器端接收2。6.3客戶(hù)端客戶(hù)端的需求相對(duì)簡(jiǎn)單。連接服務(wù)器的客戶(hù)端通過(guò)指定服務(wù)器地址和端口號(hào)連接到服務(wù)器,設(shè)置串口的通信參數(shù),同服務(wù)器通信??梢园l(fā)送數(shù)據(jù)到服務(wù)器和接受服務(wù)器發(fā)送回來(lái)的數(shù)據(jù),并顯示接收到的數(shù)據(jù)。通信完畢時(shí)斷開(kāi)通服務(wù)器的連接.2.7設(shè)計(jì)方案2.7.1服務(wù)器端服務(wù)器端使用WindowsNT服務(wù)來(lái)提供服務(wù),此服務(wù)監(jiān)聽(tīng)某一端口,等待客戶(hù)端的鏈接。為客戶(hù)端提供服務(wù).使用WindowsAPI自己定義服務(wù)的行為.服務(wù)管理串口池,服務(wù)啟動(dòng)初始化時(shí),檢測(cè)服務(wù)器的串口,串口統(tǒng)一進(jìn)入一個(gè)全局安全隊(duì)列。當(dāng)客戶(hù)端發(fā)起連接請(qǐng)求時(shí),服務(wù)器開(kāi)啟一個(gè)線(xiàn)程來(lái)處理該客戶(hù)的請(qǐng)求,直到客戶(hù)端斷開(kāi)連接,線(xiàn)程退出執(zhí)行。在線(xiàn)程中,從安全隊(duì)列的隊(duì)頭出隊(duì)列一個(gè)串口,該串口分配給該客戶(hù)使用,客戶(hù)端首先設(shè)置該串口的通信參數(shù),否則按照默認(rèn)串口通信參數(shù)進(jìn)行通信。如果有多個(gè)客戶(hù)同時(shí)連接服務(wù)器則服務(wù)器同時(shí)開(kāi)啟多個(gè)線(xiàn)程來(lái)處理多個(gè)用戶(hù)的連接請(qǐng)求。分配給客戶(hù)端使用的串口接收外設(shè)發(fā)來(lái)數(shù)據(jù)時(shí),服務(wù)器通過(guò)連接的Socket發(fā)送到客戶(hù)端,客戶(hù)端處理接收到的數(shù)據(jù)。服務(wù)器端接收到客戶(hù)端發(fā)來(lái)的數(shù)據(jù)時(shí),把接收到的數(shù)據(jù)發(fā)送到分配給這個(gè)客戶(hù)端的串口,通過(guò)串口發(fā)送到外設(shè),外設(shè)處理接收到的數(shù)據(jù)從而做出反應(yīng),完成通信。2。7。2串口通信使用WindowsAPI的串口操作函數(shù),封裝成串口類(lèi),來(lái)處理串口通信。此串口類(lèi)統(tǒng)一操作串口池里的串口,根據(jù)不同的串口號(hào)來(lái)操作這些串口.從而達(dá)到每一個(gè)客戶(hù)的使用一個(gè)串口,每個(gè)串口都是相同的操作??梢愿鶕?jù)不同的通信設(shè)備為不同的串口設(shè)置不同的通信參數(shù)。串口通信負(fù)責(zé)處理串口的參數(shù)設(shè)置,串口的打開(kāi)和關(guān)閉,數(shù)據(jù)的讀和寫(xiě),即寫(xiě)數(shù)據(jù)到串口和從串口讀數(shù)據(jù)。打開(kāi)串口時(shí),服務(wù)處理此客戶(hù)的線(xiàn)程開(kāi)啟另一線(xiàn)程監(jiān)聽(tīng)串口是否有數(shù)據(jù)接收,當(dāng)發(fā)現(xiàn)有數(shù)據(jù)來(lái)的時(shí)候,串口讀出該數(shù)據(jù)通過(guò)Socket發(fā)送到客戶(hù)端.2.7。3客戶(hù)端客戶(hù)端使用MFC編程創(chuàng)建基于對(duì)話(huà)框的應(yīng)用程序。該程序使用WindowsSocket建立同指定服務(wù)器的數(shù)據(jù)連接。當(dāng)建立好HTTP鏈接后,可設(shè)置串口的通信參數(shù),如:波特率,數(shù)據(jù)位,奇偶校驗(yàn),停止位等。設(shè)置好串口的通信參數(shù)后就可以同服務(wù)器分配給的串口鏈接的外設(shè)通信了。發(fā)送數(shù)據(jù)到服務(wù)器的串口,和接收服務(wù)器發(fā)送回來(lái)的數(shù)據(jù)。第三章系統(tǒng)程序設(shè)計(jì)通信是指不同的獨(dú)立系統(tǒng)利用線(xiàn)路互相交換數(shù)據(jù),它的主要目的是將數(shù)據(jù)從一端傳送到另一端,實(shí)現(xiàn)數(shù)據(jù)的交換。在現(xiàn)代工業(yè)控制中,通常采用計(jì)算機(jī)作為上位機(jī)與下層的實(shí)時(shí)控制與監(jiān)測(cè)設(shè)備進(jìn)行通訊?,F(xiàn)場(chǎng)數(shù)據(jù)必須通過(guò)一個(gè)數(shù)據(jù)收集器傳給上位機(jī),同樣上位機(jī)向現(xiàn)場(chǎng)設(shè)備發(fā)命令也必須通過(guò)數(shù)據(jù)收集器。串行通信因其結(jié)構(gòu)簡(jiǎn)單、執(zhí)行速度快、抗干擾能力強(qiáng)等優(yōu)點(diǎn),已被廣泛應(yīng)用于數(shù)據(jù)采集和過(guò)程控制等領(lǐng)域.在我們?cè)O(shè)計(jì)的整個(gè)系統(tǒng)的工作過(guò)程中,計(jì)算機(jī)要向步進(jìn)電機(jī)系統(tǒng)發(fā)送數(shù)據(jù)和指令,這就需要通訊系統(tǒng)負(fù)責(zé)計(jì)算機(jī)和步進(jìn)驅(qū)動(dòng)系統(tǒng)的通信,即計(jì)算機(jī)與單片機(jī)之間的通訊。我們?cè)O(shè)計(jì)的這套通信系統(tǒng)包括發(fā)送端、接收端、轉(zhuǎn)換數(shù)據(jù)的接口及傳送數(shù)據(jù)的通道.在軟件設(shè)計(jì)中,采用匯編和C++分別對(duì)單片機(jī)和計(jì)算機(jī)進(jìn)行編程。匯編語(yǔ)言可直接應(yīng)用CPU的硬件特性進(jìn)行編程,它具有程序設(shè)計(jì)快、可讀性好、代碼轉(zhuǎn)換質(zhì)量高等特點(diǎn),我們將其用于單片機(jī)的編程;而采用C++Builder編寫(xiě)上位機(jī)界面軟件具有界面友好,可多任務(wù)運(yùn)行的優(yōu)點(diǎn),并且可以有選擇地單獨(dú)向某下位機(jī)發(fā)送信息。串口通訊的選擇串行通訊的標(biāo)準(zhǔn)接口存在多種,如RS-232,RS-485,USB接口,IEEE—1394等,它們各有特點(diǎn),應(yīng)用的領(lǐng)域也各有側(cè)重.RS-485在傳輸數(shù)據(jù)時(shí)抗噪聲干擾的能力比較強(qiáng),常用于工業(yè)生產(chǎn)領(lǐng)域;USB接口和IEEE-1394傳輸速度較快,但有些計(jì)算機(jī)和操作系統(tǒng)不支持這樣的接口;RS-232是PC機(jī)與通信工業(yè)中應(yīng)用最廣泛的一種串行接口;RS—232被定義為一種在低速率串行通訊中增加通訊距離的單端標(biāo)準(zhǔn)。綜合其性能、價(jià)格和實(shí)用性,對(duì)該系統(tǒng)而言,利用RS—232進(jìn)行端口通訊最為合適。RS—232是現(xiàn)代計(jì)算機(jī)必備的接口,通常含有COM1和COM2兩個(gè)端口,一般計(jì)算機(jī)將COM1口以9引腳的接頭接出。新一代的計(jì)算機(jī)均以9引腳的接頭(DB9)接出所有的RS—232通信端口。為了實(shí)現(xiàn)系統(tǒng)的可靠實(shí)時(shí)性傳輸,本系統(tǒng)在設(shè)計(jì)的過(guò)程中采用了三線(xiàn)制接法,即僅采用RS-232端口的地端、接收數(shù)據(jù)和發(fā)送數(shù)據(jù)三引腳與外部相連,接線(xiàn)如圖3。1所示。 圖3.1RS—232端接口3。1串口通訊的程序設(shè)計(jì)串行通信程序設(shè)計(jì)包括3方面,一方面是單片機(jī)的通信程序,另一方面為計(jì)算機(jī)的通信程序,此外為了保證通信數(shù)據(jù)的可靠性,在編寫(xiě)程序之前,還要為其雙方制定通信協(xié)議.3.2通信協(xié)議(1)串行通信端口設(shè)置為1,波特率設(shè)置為2400bps,數(shù)據(jù)位數(shù)為8位.(2)如果單片機(jī)正在采集數(shù)據(jù),收到數(shù)據(jù)中第一個(gè)字節(jié)為48或49,則進(jìn)行數(shù)據(jù)分配,否則判定數(shù)據(jù)流是不是為“STOP”,若是則向電機(jī)發(fā)送停止指令。(3)計(jì)算機(jī)發(fā)送給單片機(jī)的數(shù)據(jù)包大小為6個(gè)字節(jié),第一個(gè)字節(jié)表示轉(zhuǎn)向,當(dāng)計(jì)算機(jī)發(fā)送“1”時(shí),電機(jī)正轉(zhuǎn),發(fā)送“0”時(shí)電機(jī)反轉(zhuǎn)。第二、三、四字節(jié)表示轉(zhuǎn)速,輸入數(shù)據(jù)范圍為0~16777215.后2個(gè)字節(jié)表示旋轉(zhuǎn)角度,輸入數(shù)據(jù)范圍為0~65535。數(shù)據(jù)格式如圖3.2所示.(4)數(shù)據(jù)接收完畢,單片機(jī)退出中斷,并向計(jì)算機(jī)發(fā)送字符“1”圖3。2數(shù)據(jù)傳送格式第四章系統(tǒng)程序的主要功能4。1程序功能4.1。1參數(shù)設(shè)置功能設(shè)置和修改串口通信參數(shù),包括端口,波特率,奇偶校驗(yàn)位,數(shù)據(jù)位,停止位.4.1。2參數(shù)顯示功能 顯示當(dāng)前串口通信參數(shù),包括端口號(hào),波特率,奇偶校驗(yàn)位,數(shù)據(jù)位,停止位.4.1。3打開(kāi)串口功能參數(shù)設(shè)置后,才能打開(kāi)串口,實(shí)現(xiàn)通信。4。1.4關(guān)閉串口功能關(guān)閉串口,停止通信。4.1.5接收數(shù)據(jù)功能能夠進(jìn)行單個(gè)或多個(gè)數(shù)據(jù)的接收和顯示。4.1。6發(fā)送數(shù)據(jù)功能能夠進(jìn)行單個(gè)或多個(gè)數(shù)據(jù)的發(fā)送。4。1。7清空數(shù)據(jù)接收區(qū)功能刪除接收區(qū)所有數(shù)據(jù)。4。1.8清空數(shù)據(jù)發(fā)送區(qū)功能清除發(fā)送區(qū)內(nèi)所有數(shù)據(jù)。4。1.9自動(dòng)發(fā)送功能能把發(fā)送區(qū)內(nèi)的數(shù)據(jù)每2s自動(dòng)發(fā)送。4。1.10十六進(jìn)制顯示功能在接收區(qū)只顯示十六進(jìn)制數(shù),每?jī)蓚€(gè)字符一個(gè)空格。4。1.11十六進(jìn)制發(fā)送功能只能發(fā)送十六進(jìn)制數(shù),不能發(fā)送非十六進(jìn)制數(shù).4。2程序運(yùn)行平臺(tái)Visualstudio2008具體操作如下:(1)新建MSComm項(xiàng)目,選擇MFC應(yīng)用程序,應(yīng)用程序類(lèi)型選擇“基于對(duì)話(huà)框”,生成的類(lèi)中選擇“CMSCommDlg”;(2)為MSComm項(xiàng)目添加新建一個(gè)Dialog設(shè)置對(duì)話(huà)框;(3)加載MSComm控件,添加相應(yīng)的源程序,加載必要的控件;(4)編寫(xiě)程序代碼,再編譯,鏈接,調(diào)試,執(zhí)行等,生成應(yīng)用程序。主函數(shù)參數(shù)設(shè)置和顯示打開(kāi)和關(guān)閉串口發(fā)送數(shù)據(jù)接收數(shù)據(jù)清空接收區(qū)清空發(fā)送區(qū)4.3總體設(shè)計(jì)主函數(shù)參數(shù)設(shè)置和顯示打開(kāi)和關(guān)閉串口發(fā)送數(shù)據(jù)接收數(shù)據(jù)清空接收區(qū)清空發(fā)送區(qū)4.4程序類(lèi)的說(shuō)明classCMSCommDlg:publicCDialog{//構(gòu)造public: CMSCommDlg(CWnd*pParent=NULL); //標(biāo)準(zhǔn)構(gòu)造函數(shù)//對(duì)話(huà)框數(shù)據(jù) intOnCreate(LPCREATESTRUCTlpCreateStruct); intString2Hex(CStringstr,CByteArray&senddata); charConvertHexChar(charch); enum{IDD=IDD_MSCOMM_DIALOG}; protected: virtualvoidDoDataExchange(CDataExchange*pDX); //DDX/DDV支持//實(shí)現(xiàn)protected: HICONm_hIcon; //生成的消息映射函數(shù) virtualBOOLOnInitDialog(); afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam); afx_msgvoidOnPaint(); afx_msgHCURSOROnQueryDragIcon(); DECLARE_MESSAGE_MAP()public: CMSCommm_mscom; //聲明m_mscomm變量為CMSComm類(lèi)型 CStringm_recv; //接收區(qū) CStringm_send; //發(fā)送區(qū) CSetupDlgmySetupDlg; //聲明設(shè)置對(duì)話(huà)框 BYTEmyCom; //串口號(hào)碼 CStringmyParity; //奇偶校驗(yàn)類(lèi)型 CStringmyBaudRate; //通信波特率 CStringmyData; //數(shù)據(jù)位 CStringmyStop; //停止位 DECLARE_EVENTSINK_MAP() voidOnCommMscomm1(); afx_msgvoidOnBnClickedSendbutton(); afx_msgvoidOnBnClickedClearsend(); afx_msgvoidOnBnClickedClearRecv(); afx_msgvoidOnBnClickedSetupcom(); afx_msgvoidOnBnClickedOpencom(); afx_msgvoidOnBnClickedClosecom(); afx_msgvoidOnTimer(UINT_PTRnIDEvent); afx_msgvoidOnBnClickedCheckAutosend(); CButtonm_Opencom; //打開(kāi)串口按鈕 CButtonm_Closecom; //關(guān)閉串口按鈕 CButtonm_Setupcom; //設(shè)置按鈕 CStringm_Para; //通信參數(shù)顯示 CButtonm_ClearRecv; //清空接收按鈕 CButtonm_ClearSend; //清空發(fā)送按鈕 CButtonm_SendText; //發(fā)送按鈕 CButtonm_ctrlHexSend; //十六進(jìn)制發(fā)送 CButtonm_ctrlHexDisplay; //十六進(jìn)制顯示 BOOLm_bAutoSend; //自動(dòng)發(fā)送};4.5模塊分析4.5。1參數(shù)設(shè)置和顯示模塊單擊主界面中的【設(shè)置】按鈕,將彈出“設(shè)置"對(duì)話(huà)框,如圖7。1所示,可以在該對(duì)話(huà)框中設(shè)置串口的通信參數(shù)。該命令的代碼如下:voidCMSCommDlg::OnBnClickedSetupcom(){ //TODO:在此添加控件通知處理程序代碼 m_Opencom.EnableWindow(TRUE); AfxMessageBox(_T(”請(qǐng)?jiān)O(shè)置通信參數(shù)并打開(kāi)串口以實(shí)現(xiàn)通信!")); CStringstrStatus,strTemp; doubledblBaund; intmdata,mstop; if(mySetupDlg.DoModal()==IDOK) { myCom=mySetupDlg.m_com+1; //求取串口編號(hào) if(mySetupDlg.m_BaudRate〈8) { dblBaund=pow(2,(double)mySetupDlg。m_BaudRate); //求取波特率 dblBaund=300*dblBaund; } else { switch(mySetupDlg。m_BaudRate) { case8: dblBaund=43000; break; case9: dblBaund=56000; break; case10: dblBaund=57600; break; case11: dblBaund=115200; break; case12: dblBaund=128000; break; case13: dblBaund=256000; break; } } strStatus。Format(_T("%。0f"),dblBaund); myBaudRate=strStatus; switch(mySetupDlg。m_Parity) //求取奇偶校驗(yàn)位 { case0: { myParity="E”; break; } case1: { myParity="M”; break; } case2: { myParity="N"; break; } case3: { myParity=”O(jiān)"; break; } case4: { myParity=”S”; break; } } mdata=4+mySetupDlg。m_Data; //求取數(shù)據(jù)位 strStatus。Format(_T(”%d”),mdata); myData=strStatus; mstop=1+mySetupDlg。m_Stop; //求取停止位 strStatus。Format(_T("%d"),mstop); myStop=strStatus; strStatus="COM”; strTemp.Format(_T("%d"),myCom); strStatus+=strTemp; strStatus+=”,”; strStatus+=myBaudRate; strStatus+=”bit/s,"; strStatus+=myParity; strStatus+=","; strStatus+=myData; strStatus+=","; strStatus+=myStop; m_Para=strStatus; //求取靜態(tài)文本顯示內(nèi)容 UpdateData(false); }}4.5.2打開(kāi)串口模塊單擊主界面中的【打開(kāi)串口】按鈕,如果參數(shù)已設(shè)置好,將打開(kāi)指定的串口,提示“串口打開(kāi)成功!”,如圖7。2所示,該命令的代碼如下:voidCMSCommDlg::OnBnClickedOpencom(){ //TODO:在此添加控件通知處理程序代碼 CStringstrPara; //串口參數(shù) m_mscom.put_CommPort(myCom); //指定串口號(hào)mycom strPara=myBaudRate; strPara+=","; strPara+=myParity; strPara+=","; strPara+=myData; strPara+=",”; strPara+=myStop; //AfxMessageBox(strPara); m_mscom。put_Settings(strPara); //通信參數(shù)設(shè)置 m_mscom。put_InBufferSize(1024); //指定接收緩沖區(qū)大小 m_mscom.put_InBufferCount(0); //清空接收緩沖區(qū) m_mscom.put_InputMode(1); //設(shè)置數(shù)據(jù)獲取方式 m_mscom。put_InputLen(0); //設(shè)置每次讀取長(zhǎng)度 m_mscom.put_RThreshold(1); //oncomm事件門(mén)限值 m_mscom。put_PortOpen(1); //打開(kāi)串口 m_Opencom。EnableWindow(false); //使打開(kāi)串口按鈕無(wú)效 m_Closecom。EnableWindow(true); //使關(guān)閉串口按鈕生效 m_SendText.EnableWindow(true); m_Setupcom。EnableWindow(false); //使設(shè)置按鈕無(wú)效 AfxMessageBox(_T("串口打開(kāi)成功!"));}4。5。3發(fā)送數(shù)據(jù)模塊單擊主界面中的【發(fā)送】按鈕,將把發(fā)送區(qū)的內(nèi)容發(fā)送到串口調(diào)試助手的接收區(qū),如果【十六進(jìn)制發(fā)送】選中,則只能發(fā)送0~F,如圖7.3(a)(b)所示,該命令的代碼如下:voidCMSCommDlg::OnBnClickedSendbutton(){ //TODO:在此添加控件通知處理程序代碼 UpdateData(true); if(m_ctrlHexSend.GetCheck()) { CByteArrayhexdata; intlen=String2Hex(m_send,hexdata);//此處返回的len可以用于計(jì)算發(fā)送了多少個(gè)十六進(jìn)制數(shù) m_mscom。put_Output(COleVariant(hexdata));//發(fā)送十六進(jìn)制數(shù)據(jù) } else { CByteArraysendArr; WORDwLength; wLength=m_send.GetLength(); sendArr.SetSize(wLength); for(inti=0;i<wLength;i++) { sendArr.SetAt(i,m_send。GetAt(i)); } m_mscom。put_Output(COleVariant(m_send)); }}4。5.4自動(dòng)發(fā)送模塊當(dāng)【自動(dòng)發(fā)送】選中時(shí),系統(tǒng)將自動(dòng)每隔2s發(fā)送一次數(shù)據(jù),如圖7。4(a)(b)所示,程序代碼如下:voidCMSCommDlg::OnTimer(UINT_PTRnIDEvent){ //TODO:在此添加消息處理程序代碼和/或調(diào)用默認(rèn)值 OnBnClickedSendbutton(); CDialog::OnTimer(nIDEvent);}voidCMSCommDlg::OnBnClickedCheckAutosend(){ //TODO:在此添加控件通知處理程序代碼 m_bAutoSend=!m_bAutoSend; if(m_bAutoSend) { SetTimer(1,2000,NULL);//時(shí)間為毫秒 } else {KillTimer(1);//取消定時(shí)}}4。5。5接收數(shù)據(jù)模塊發(fā)送方發(fā)送數(shù)據(jù)后,在接受區(qū)顯示對(duì)方的發(fā)送內(nèi)容,如果【十六進(jìn)制顯示】選中,則將只顯示十六進(jìn)制數(shù)0~F,如圖7.5(a)(b)所示,該命令的代碼如下:voidCMSCommDlg::OnCommMscomm1(){ //TODO:在此處添加消息處理程序代碼 UpdateData(true); VARIANTvariant_inp; COleSafeArraysafearray_inp; longi=0; intlen; charrxdata[2048]; CStringtmp; switch(m_mscom。get_CommEvent()) { case2: //表示接收緩沖區(qū)內(nèi)有字符 { variant_inp=m_mscom.get_Input(); safearray_inp=variant_inp; len=safearray_inp。GetOneDimSize(); for(i=0;i<len;i++) safearray_inp.GetElement(&i,&rxdata[i]);//轉(zhuǎn)換為BYTE型數(shù)組 for(i=0;i〈len;i++) ///將數(shù)組轉(zhuǎn)換為Cstring型變量 { BYTEbt=*(char*)(rxdata+i);//字符型 if(m_ctrlHexDisplay。GetCheck()) { tmp。Format(_T(”%02X”),bt);//將字符以十六進(jìn)制方式送入臨時(shí)變量tmp存放,注意這里加入一個(gè)空隔 m_recv+=tmp;//加入接收編輯框?qū)?yīng)字符串 } } if(!m_ctrlHexDisplay。GetCheck()) rxdata[i]='\0'; } if(!m_ctrlHexDisplay.GetCheck())m_recv+=rxdata; UpdateData(false); break; default: break; }}4。5.6清空接收區(qū)模塊單擊主界面中的【清空接收區(qū)】按鈕,將清空接收區(qū)內(nèi)容,提示“清空接收區(qū)內(nèi)容!"如圖7。6所示,該命令的代碼如下:voidCMSCommDlg::OnBnClickedClearRecv(){ //TODO:在此添加控件通知處理程序代碼 m_recv=”"; UpdateData(FALSE); AfxMessageBox(_T("清空接收區(qū)成功!"));}4。5。7清空發(fā)送區(qū)模塊單擊主界面中的【清空發(fā)送區(qū)】按鈕,將清空發(fā)送區(qū)內(nèi)容,提示“清空發(fā)送區(qū)內(nèi)容!”如圖7。7所示,該命令的代碼如下:voidCMSCommDlg::OnBnClickedClearsend(){ //TODO:在此添加控件通知處理程序代碼 m_send="”; UpdateData(FALSE); AfxMessageBox(_T("清空發(fā)送區(qū)成功!"));}4.5.8關(guān)閉串口模塊單擊主界面中的【關(guān)閉串口】按鈕,將關(guān)閉串口,提示“串口關(guān)閉成功!”,如圖7.8所示,該命令的代碼如下:voidCMSCommDlg::OnBnClickedClosecom(){ //TODO:在此添加控件通知處理程序代碼 m_mscom。put_PortOpen(0); //關(guān)閉串口 AfxMessageBox(_T(”串口關(guān)閉成功!")); m_Opencom.EnableWindow(true); //使打開(kāi)串口按鈕生效 m_Closecom。EnableWindow(false); //使關(guān)閉串口按鈕無(wú)效 m_Setupcom。EnableWindow(true); //使設(shè)置按鈕生第五章系統(tǒng)測(cè)試5.1系統(tǒng)測(cè)試程序編寫(xiě)出來(lái)并不是軟件開(kāi)發(fā)的結(jié)束,因?yàn)?一個(gè)可靠的程序必須經(jīng)得住考驗(yàn),這就是調(diào)試與測(cè)試得工作了。不可否認(rèn)的是,這一步是軟件開(kāi)發(fā)的最后一步,也是重要的一步。測(cè)試不僅包括,系統(tǒng)調(diào)試與測(cè)試,同時(shí)還包含后期的系統(tǒng)維護(hù),當(dāng)然,考慮到這是畢業(yè)設(shè)計(jì)的內(nèi)容,因此,系統(tǒng)維護(hù)可以暫時(shí)不計(jì)算在內(nèi),單這不能影響測(cè)試在本系統(tǒng)開(kāi)發(fā)中的重要地位。5。2測(cè)試目的測(cè)試是一個(gè)為了尋找錯(cuò)誤而運(yùn)行程序的過(guò)程,它的目的就是找出盡可能多的程序漏洞,對(duì)系統(tǒng)進(jìn)行改善,以便客戶(hù)運(yùn)行時(shí)得以順利進(jìn)行,而不發(fā)生故障。一個(gè)好的測(cè)試的標(biāo)準(zhǔn)就是
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 印刷企業(yè)市場(chǎng)調(diào)研方法考核試卷
- 家庭裝飾畫(huà)框批發(fā)考核試卷
- 園藝陶瓷的公共空間裝飾效果考核試卷
- 印刷設(shè)備生產(chǎn)過(guò)程的智能化技術(shù)應(yīng)用案例考核試卷
- 圖書(shū)出租業(yè)務(wù)的服務(wù)標(biāo)準(zhǔn)化培訓(xùn)考核試卷
- 影視錄放設(shè)備的智能鏡頭切換考核試卷
- 暖氣施工合同范本
- 簽訂重大銷(xiāo)售合同范本
- 口腔消毒培訓(xùn)課件
- 電商行業(yè)產(chǎn)品描述免責(zé)協(xié)議承諾書(shū)
- 高中數(shù)學(xué)《立體幾何》教材分析及教學(xué)建議
- 八年級(jí)英語(yǔ)初中英語(yǔ)閱讀理解閱讀專(zhuān)項(xiàng)練習(xí)試卷附答案
- 固定資產(chǎn)清查盤(pán)點(diǎn)明細(xì)表
- 人教版八年級(jí)數(shù)學(xué)下冊(cè)課件【全冊(cè)】
- 物聯(lián)網(wǎng)管理平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)
- 1例妊娠糖尿病的個(gè)案護(hù)理
- 光伏發(fā)電職業(yè)病危害預(yù)評(píng)價(jià)方案方案
- 財(cái)務(wù)報(bào)表涉稅分析
- 立式單軸木工銑床安全操作規(guī)程
- 重癥患者識(shí)別課件
- 《計(jì)算機(jī)組成原理》全冊(cè)詳解優(yōu)秀課件
評(píng)論
0/150
提交評(píng)論