汽車尾氣余熱熱電轉(zhuǎn)換監(jiān)控軟件設(shè)計(jì)與開(kāi)發(fā)——畢業(yè)論文_第1頁(yè)
已閱讀1頁(yè),還剩55頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  1 緒論</b></p><p><b>  1.1 引言</b></p><p>  汽車尾氣余熱發(fā)電是一種汽車?yán)梦矚庥酂徇M(jìn)行發(fā)電的技術(shù),屬于汽車部件制造技術(shù)領(lǐng)域,在后排氣管上安裝有能量轉(zhuǎn)換器,能量轉(zhuǎn)換器的電量輸出端通過(guò)連接器連接汽車電池的輸入端。汽車發(fā)動(dòng)機(jī)工作時(shí),通過(guò)后排氣管排放高熱量的尾氣,能量轉(zhuǎn)換器吸收熱能

2、并轉(zhuǎn)換成電能,向電池充電。該技術(shù)有效地回收、利用了汽車殘余能量,大大地提高了能源使用效率,有利于環(huán)境保護(hù),性能可靠。</p><p>  在尾氣余熱發(fā)電裝置內(nèi)由兩種金屬組成的回路中,如果兩個(gè)接觸點(diǎn)之間產(chǎn)生溫度差,金屬電子的狀態(tài)會(huì)發(fā)生變化形成電流,這種熱電轉(zhuǎn)換現(xiàn)象即為熱電效應(yīng)。尾氣余熱發(fā)電原理就是利用不同金屬間的溫度差進(jìn)行發(fā)電,將尾氣中含有的熱量轉(zhuǎn)化為汽車動(dòng)力來(lái)源,采用這種裝置后,預(yù)計(jì)可將汽車燃油經(jīng)濟(jì)性提高10%,

3、而且還可以減少二氧化碳等有害廢氣的排放。根據(jù)研究,汽油燃燒產(chǎn)生的能量中有70%通過(guò)尾氣排放等形式散失到大氣之中,最多只有30%的能量轉(zhuǎn)化為機(jī)械能,其中還有一些由于齒輪、輪胎的機(jī)械摩擦、蓄電池工作等原因而被消耗掉,最后只有20%左右轉(zhuǎn)化為驅(qū)動(dòng)行駛的動(dòng)力。</p><p>  開(kāi)發(fā)中的尾氣余熱發(fā)電系統(tǒng)主要采用熱電轉(zhuǎn)換技術(shù),由不同的金屬和半導(dǎo)體成對(duì)組合,可以安裝在汽車下部的催化轉(zhuǎn)化器和消聲器之間,利用高溫尾氣和低溫冷卻

4、水之間的溫度差發(fā)電,充分利用和回收熱量,提高熱效率。 </p><p>  熱電轉(zhuǎn)換模塊是整個(gè)汽車尾氣余熱發(fā)電系統(tǒng)的核心環(huán)節(jié),利用熱電效應(yīng)將尾氣余熱轉(zhuǎn)換為電能。汽車尾氣余熱發(fā)電裝置的中心環(huán)節(jié)是熱電轉(zhuǎn)換,該模塊將汽車所排放的高溫尾氣所攜帶的熱量轉(zhuǎn)換為低壓電能,發(fā)出的電能一般都為低電壓、小電流的小功率電能,不能直接應(yīng)用,需要經(jīng)過(guò)DC—DC升壓、儲(chǔ)能處理后才能正常利用。并將各小的熱電轉(zhuǎn)換模塊進(jìn)行并聯(lián),以達(dá)到所需電壓及功

5、率。</p><p><b>  1.2 研究意義</b></p><p>  隨著人們生活水平的提高,人們?cè)诮煌ǔ鲂猩蠈?duì)汽車的依賴程度越來(lái)越大,而全球汽車數(shù)量的不斷增加,給世界環(huán)境帶來(lái)的危害也越來(lái)越嚴(yán)重。將熱電轉(zhuǎn)換技術(shù)運(yùn)用到汽車尾氣排放系統(tǒng),將極大地減少汽車尾氣排放對(duì)環(huán)境造成的危害,并且能夠節(jié)約不可再生能源,將廢氣轉(zhuǎn)換為可再生清潔能源,可謂是一舉三得。</p&

6、gt;<p>  在汽車尾氣余熱發(fā)電系統(tǒng)的研發(fā)階段,需要對(duì)系統(tǒng)的各功能模塊進(jìn)行實(shí)時(shí)監(jiān)測(cè),并采集各路信號(hào)的參數(shù),傳至上位機(jī)供設(shè)計(jì)人員進(jìn)行分析優(yōu)化,因此,就必須有一個(gè)完善的監(jiān)控系統(tǒng)軟件,來(lái)完成各功能模塊和上位機(jī)之間的通信。</p><p>  首先需要上位機(jī)通過(guò)監(jiān)控軟件向系統(tǒng)模塊發(fā)出指令,然后系統(tǒng)各模塊響應(yīng)上位機(jī)的指令開(kāi)始運(yùn)行,同時(shí)將運(yùn)行中各路信號(hào)進(jìn)行采集并傳輸至上位機(jī),實(shí)時(shí)顯示在監(jiān)控界面上,這樣研究人

7、員表可以清楚的看到整個(gè)系統(tǒng)的運(yùn)行狀況,根據(jù)異常信號(hào)分析故障、完善系統(tǒng)。</p><p><b>  1.3 發(fā)展現(xiàn)狀</b></p><p>  1.3.1 余熱發(fā)電技術(shù)發(fā)展現(xiàn)狀</p><p>  余熱發(fā)電的關(guān)鍵技術(shù)是熱電轉(zhuǎn)換技術(shù),利用的是熱電效應(yīng)。所謂的熱電效應(yīng),是當(dāng)受熱物體中的電子,因隨著溫度梯度由高溫區(qū)往低溫區(qū)移動(dòng)時(shí),所產(chǎn)生電流或電荷堆

8、積的一種現(xiàn)象。而這個(gè)效應(yīng)的大小,則是用參數(shù)Q來(lái)測(cè)量,其定義為Q=E/-dT(E為因電荷堆積產(chǎn)生的電場(chǎng),dT則是溫度梯度)。兩種不同成份的導(dǎo)體兩端接合成回路,當(dāng)接合點(diǎn)的溫度不同時(shí),在回路中就會(huì)產(chǎn)生電動(dòng)勢(shì),這種現(xiàn)象稱為熱電效應(yīng),而這種電動(dòng)勢(shì)稱為熱電勢(shì)。</p><p>  這項(xiàng)技術(shù)由起步到如今也經(jīng)歷了漫長(zhǎng)的發(fā)展階段。熱電轉(zhuǎn)換技術(shù)發(fā)展至今已有半個(gè)多世紀(jì)的歷史了,而且正隨著現(xiàn)代科學(xué)技術(shù)的不斷進(jìn)步而逐漸走入我們?nèi)粘I睢?

9、lt;/p><p>  十九世紀(jì)六十年代,人類便開(kāi)始了征服太空的計(jì)劃。從1969年的登月計(jì)劃到2001年的火星探測(cè),幾十年中取得了很大的飛躍,這其中也有熱電轉(zhuǎn)換技術(shù)的一份功勞。利用熱電轉(zhuǎn)換技術(shù),一枚硬幣大小的放射性同位素?zé)嵩淳湍軌蛱峁╅L(zhǎng)達(dá)二十年以上的連續(xù)不斷的電能,這是其它任何一種能源技術(shù)所不能比擬的。美國(guó)登月計(jì)劃中“阿波羅”17號(hào)飛船就是使用了熱電轉(zhuǎn)換技術(shù)提供的電源從月球表面向地球成功地傳送了數(shù)據(jù),中央部分就是使用

10、放射性同位素為熱源的熱電發(fā)電裝置。到1990年為止,熱電轉(zhuǎn)換技術(shù)已成功應(yīng)用于美國(guó)國(guó)家宇航局的二十多次太空飛行任務(wù)中,均取得了良好的效果,其中最長(zhǎng)的工作時(shí)間超過(guò)了15年。</p><p>  美國(guó)熱電直接轉(zhuǎn)換方面處于世界的領(lǐng)先地位,美國(guó)能源部、國(guó)防部及宇航局共同負(fù)責(zé)熱電轉(zhuǎn)換方面的研究發(fā)展工作。熱電偶轉(zhuǎn)換、熱離子轉(zhuǎn)換、磁流體發(fā)電、鐵電轉(zhuǎn)換和熱磁轉(zhuǎn)換是目前五種基本的熱電轉(zhuǎn)換方式。</p><p>

11、;  熱電偶是最早的熱電轉(zhuǎn)換裝置,將兩種不同材料的物質(zhì)(通常是金屬絲)連接起來(lái),加熱結(jié)點(diǎn),在另兩端就能得到電動(dòng)勢(shì)。這種效應(yīng)是1821年發(fā)現(xiàn)的。但金屬和合金的熱電轉(zhuǎn)換效率太低,因此直到發(fā)現(xiàn)更好的熱電轉(zhuǎn)換材料半導(dǎo)體后熱電偶電源才投入使用,今天使用的半導(dǎo)體熱電偶電源已進(jìn)入商業(yè)市場(chǎng)。</p><p>  另一種熱電轉(zhuǎn)換裝置是熱離子轉(zhuǎn)換器。它利用的是熱離子發(fā)射原理,當(dāng)金屬溫度很高時(shí),電子將從金屬表面被蒸發(fā)出來(lái)。最簡(jiǎn)單的熱離

12、子轉(zhuǎn)換器是由兩片靠的很近的金屬板構(gòu)成,當(dāng)然熱離子轉(zhuǎn)換器用于外層空間時(shí),熱源可以使用太陽(yáng)能、放射同位素的衰變能或核反應(yīng)堆內(nèi)的裂變能??紤]到其余熱必須以輻射方式排除,而熱離子轉(zhuǎn)換器可以在比熱電偶電源或動(dòng)力發(fā)電設(shè)備高得多的溫度下運(yùn)行,因此只需要較小的輻射轉(zhuǎn)換器即可(熱輻射正比于絕對(duì)溫度的四次方)。體積小,相對(duì)可靠的熱離子轉(zhuǎn)換器已在空間運(yùn)行器上使用。</p><p>  鐵電轉(zhuǎn)換和熱磁轉(zhuǎn)換都利用物質(zhì)受熱后物理性質(zhì)發(fā)生的重

13、大改變來(lái)進(jìn)行熱電轉(zhuǎn)換,相應(yīng)的轉(zhuǎn)換裝置是真正的熱機(jī)。在這些裝置中,既不用氣體工質(zhì)也不用電子流,而是利用原子和分子在周期性受熱時(shí),不斷重新排列以達(dá)到發(fā)電的目的。這種金屬內(nèi)部分子重新排列或晶體結(jié)構(gòu)改變的現(xiàn)象稱為二階轉(zhuǎn)變。鐵電轉(zhuǎn)變利用了介電物質(zhì)的介電常數(shù)隨溫度變化的特殊性質(zhì)(介電物質(zhì)為半導(dǎo)體,置于電容兩極之間以增加電容量)。</p><p>  熱磁轉(zhuǎn)換能與鐵電轉(zhuǎn)換能有某些相似之處,不同的是用感應(yīng)電場(chǎng)能代替了靜電場(chǎng)能。&

14、lt;/p><p>  因?yàn)闊犭娹D(zhuǎn)換有巨大的實(shí)用價(jià)值,已有的幾種熱電轉(zhuǎn)換裝置的性能和價(jià)格還不能滿足要求,所以科技人員仍在不斷努力的尋找更有效更簡(jiǎn)便的熱電轉(zhuǎn)換裝置。</p><p>  目前世界上較為先進(jìn)的是一種堿金屬轉(zhuǎn)換元件AMTEC元件。將堿金屬高溫?zé)峁芎凸腆w電解質(zhì)導(dǎo)電技術(shù)結(jié)合在一起的AMTEC元件具有熱電效率高,結(jié)構(gòu)簡(jiǎn)單和運(yùn)行可靠等優(yōu)點(diǎn),效率可達(dá)30%。</p><p&

15、gt;  1.3.2 監(jiān)控軟件發(fā)展現(xiàn)狀</p><p>  監(jiān)控軟件經(jīng)過(guò)長(zhǎng)期的發(fā)展,目前主要有VB、VC、組態(tài)王、Lab VIEW等。其中VB和VC++因簡(jiǎn)便熟悉而較廣泛使用,另外兩種是集成化的監(jiān)控軟件。</p><p>  組態(tài)王開(kāi)發(fā)監(jiān)控系統(tǒng)軟件,是新型的工業(yè)自動(dòng)控制系統(tǒng)以標(biāo)準(zhǔn)的工業(yè)計(jì)算機(jī)軟、硬件平臺(tái)構(gòu)成的集成系統(tǒng)取代傳統(tǒng)的封閉式系統(tǒng)。</p><p>  它具有

16、適應(yīng)性強(qiáng)、開(kāi)放性好、易于擴(kuò)展、經(jīng)濟(jì)、開(kāi)發(fā)周期短等優(yōu)點(diǎn)。通常可以把這樣的系統(tǒng)劃分為控制層、監(jiān)控層、管理層三個(gè)層次結(jié)構(gòu)。其中監(jiān)控層對(duì)下連接控制層,對(duì)上連接管理層,它不但實(shí)現(xiàn)對(duì)現(xiàn)場(chǎng)的實(shí)時(shí)監(jiān)測(cè)與控制,且在自動(dòng)控制系統(tǒng)中完成上傳下達(dá)、組態(tài)開(kāi)發(fā)的重要作用。尤其考慮三方面問(wèn)題:畫面、數(shù)據(jù)、動(dòng)畫。通過(guò)對(duì)監(jiān)控系統(tǒng)要求及實(shí)現(xiàn)功能的分析,采用組態(tài)王對(duì)監(jiān)控系統(tǒng)進(jìn)行設(shè)計(jì)。組態(tài)軟件也為試驗(yàn)者提供了可視化監(jiān)控畫面,有利于試驗(yàn)者實(shí)時(shí)現(xiàn)場(chǎng)監(jiān)控。而且,它能充分利用Wind

17、ows的圖形編輯功能,方便地構(gòu)成監(jiān)控畫面,并以動(dòng)畫方式顯示控制設(shè)備的狀態(tài),具有報(bào)警窗口、實(shí)時(shí)趨勢(shì)曲線等,可便利的生成各種報(bào)表。它還具有豐富的設(shè)備驅(qū)動(dòng)程序和靈活的組態(tài)方式、數(shù)據(jù)鏈接功能。</p><p>  Lab VIEW是一種程序開(kāi)發(fā)環(huán)境,由美國(guó)國(guó)家儀器(NI)公司研制開(kāi)發(fā)的,類似于C和BASIC開(kāi)發(fā)環(huán)境,但是LabVIEW與其他計(jì)算機(jī)語(yǔ)言的顯著區(qū)別是:其他計(jì)算機(jī)語(yǔ)言都是采用基于文本的語(yǔ)言產(chǎn)生代碼,而LabVI

18、EW使用的是圖形化編輯語(yǔ)言G編寫程序,產(chǎn)生的程序是框圖的形式。 </p><p>  與C和BASIC一樣,LabVIEW也是通用的編程系統(tǒng),有一個(gè)完成任何編程任務(wù)的龐大函數(shù)庫(kù)。LabVIEW的函數(shù)庫(kù)包括數(shù)據(jù)采集、GPIB、串口控制、數(shù)據(jù)分析、數(shù)據(jù)顯示及數(shù)據(jù)存儲(chǔ),等等。LabVIEW也有傳統(tǒng)的程序調(diào)試工具,如設(shè)置斷點(diǎn)、以動(dòng)畫方式顯示數(shù)據(jù)及其子程序(子VI)的結(jié)果、單步執(zhí)行等等,便于程序的調(diào)試。 </p>

19、;<p>  LabVIEW(Laboratory Virtual instrument Engineering Workbench)是一種圖形化的編程語(yǔ)言的開(kāi)發(fā)環(huán)境,它廣泛地被工業(yè)界、學(xué)術(shù)界和研究實(shí)驗(yàn)室所接受,視為一個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)采集和儀器控制軟件。LabVIEW集成了與滿足GPIB、VXI、RS-232和RS-485協(xié)議的硬件及數(shù)據(jù)采集卡通訊的全部功能。它還內(nèi)置了便于應(yīng)用TCP/IP、ActiveX等軟件標(biāo)準(zhǔn)的庫(kù)函數(shù)。這

20、是一個(gè)功能強(qiáng)大且靈活的軟件。利用它可以方便地建立自己的虛擬儀器,其圖形化的界面使得編程及使用過(guò)程都生動(dòng)有趣。 </p><p>  圖形化的程序語(yǔ)言,又稱為“G”語(yǔ)言。使用這種語(yǔ)言編程時(shí),基本上不寫程序代碼,取而代之的是流程圖或框圖。它盡可能利用了技術(shù)人員、科學(xué)家、工程師所熟悉的術(shù)語(yǔ)、圖標(biāo)和概念,因此,LabVIEW是一個(gè)面向最終用戶的工具。它可以增強(qiáng)你構(gòu)建自己的科學(xué)和工程系統(tǒng)的能力,提供了實(shí)現(xiàn)儀器編程和數(shù)據(jù)采集

21、系統(tǒng)的便捷途徑。使用它進(jìn)行原理研究、設(shè)計(jì)、測(cè)試并實(shí)現(xiàn)儀器系統(tǒng)時(shí),可以大大提高工作效率。 </p><p>  利用LabVIEW,可產(chǎn)生獨(dú)立運(yùn)行的可執(zhí)行文件,它是一個(gè)真正的32位編譯器。像許多重要的軟件一樣,LabVIEW提供了Windows、UNIX、Linux、Macintosh的多種版本。 </p><p>  它主要的方便就是,一個(gè)硬件的情況下,可以通過(guò)改變軟件,就可以實(shí)現(xiàn)不同的儀

22、器儀表的功能,非常方便,是相當(dāng)于軟件即硬件。現(xiàn)在的圖形化主要是上層的系統(tǒng),國(guó)內(nèi)現(xiàn)在已經(jīng)開(kāi)發(fā)出圖形化的單片機(jī)編程系統(tǒng)。</p><p>  1.3.3 界面設(shè)計(jì)方法發(fā)展現(xiàn)狀</p><p>  界面的說(shuō)法以往常見(jiàn)的是在人機(jī)工程學(xué)中。“人機(jī)界面”是指人機(jī)間相互施加影響的區(qū)域,凡參與人機(jī)信息交流的一切領(lǐng)域都屬于人機(jī)界面。界面設(shè)計(jì)存在于人與物的信息交流[1]?!叭恕笔窃O(shè)計(jì)界面的一個(gè)方面,是認(rèn)識(shí)的主

23、體和設(shè)計(jì)服務(wù)的對(duì)象,而作為對(duì)象的“物”則是設(shè)計(jì)界面的另一個(gè)方面。它是包含著對(duì)象實(shí)體、環(huán)境及信息的綜合體。</p><p>  功能性設(shè)計(jì)界面,接受物的功能信息,操縱與控制物,同時(shí)也包括與生產(chǎn)的接口,即材料運(yùn)用、科學(xué)技術(shù)的應(yīng)用等等。這一界面反映著設(shè)計(jì)與人造物的協(xié)調(diào)作用。功能性界面設(shè)計(jì)要建立在符號(hào)學(xué)的基礎(chǔ)上。設(shè)計(jì)功能界面,不可避免地要讓使用者明白功能操作。每一操作對(duì)人來(lái)說(shuō)應(yīng)是符合思維邏輯的,是人性的,而對(duì)機(jī)械、電子來(lái)

24、說(shuō)則應(yīng)是準(zhǔn)確的、確定無(wú)疑的,這雙方的信息傳遞是功能界面的核心內(nèi)涵[2]。</p><p>  監(jiān)控界面的設(shè)計(jì)屬于功能性界面設(shè)計(jì),本文一下研究功能性界面設(shè)計(jì)的方法。首先要明確界面設(shè)計(jì)要完成的功能性任務(wù),任務(wù)分析采用的技術(shù)主要有:逐步求精技術(shù),把任務(wù)不斷劃分為子任務(wù),直至對(duì)每個(gè)任務(wù)的表達(dá)都十分清楚;面向?qū)ο蠓治黾夹g(shù),識(shí)別出與應(yīng)用有關(guān)的所有客觀的對(duì)象以及與對(duì)象關(guān)聯(lián)的動(dòng)作[3]。</p><p>

25、  在界面設(shè)計(jì)過(guò)程中,要經(jīng)過(guò)下面幾個(gè)步驟:</p><p>  步驟一:建立任務(wù)的目標(biāo)和意圖;</p><p>  步驟二:為每個(gè)目標(biāo)和意圖制定特定的動(dòng)作序列;</p><p>  步驟三:按在界面上執(zhí)行的方式對(duì)動(dòng)作序列進(jìn)行規(guī)約;</p><p>  步驟四:指明系統(tǒng)狀態(tài),即執(zhí)行動(dòng)作時(shí)的界面表現(xiàn);</p><p>  

26、步驟五:定義控制機(jī)制,即用戶可用的改變系統(tǒng)狀態(tài)的設(shè)備和動(dòng)作;</p><p>  步驟六:指明控制機(jī)制如何影響系統(tǒng)狀態(tài);</p><p>  步驟七:指明用戶如何通過(guò)界面上的信息解釋系統(tǒng)狀態(tài)。</p><p>  在界面設(shè)計(jì)過(guò)程中,必須遵循界面設(shè)計(jì)的一般應(yīng)原則[4],其主要原則主要包括以下五點(diǎn):</p><p><b>  1)向?qū)?/p>

27、使用原則</b></p><p>  對(duì)于應(yīng)用中某些部分的處理流程是固定的,用戶必須按照指定的順序輸入操作信息,為了使用戶操作得到必要的引用應(yīng)該使用向?qū)В褂脩羰褂霉δ軙r(shí)比較輕松明了,但是向?qū)П仨氂迷诠潭ㄌ幚砹鞒讨?,并且處理流程?yīng)該不少于3個(gè)處理步驟。</p><p><b>  2)響應(yīng)時(shí)間原則</b></p><p>  系統(tǒng)響

28、應(yīng)時(shí)間包括兩個(gè)方面:時(shí)間長(zhǎng)度和時(shí)間的易變性。用戶響應(yīng)時(shí)間應(yīng)該適中,系統(tǒng)響應(yīng)時(shí)間不應(yīng)過(guò)長(zhǎng)或過(guò)短,系統(tǒng)響應(yīng)時(shí)間的易變性是指相對(duì)于平均響應(yīng)時(shí)間的偏差。即使響應(yīng)時(shí)間比較長(zhǎng),低的響應(yīng)時(shí)間易變性也有助于建立穩(wěn)定的節(jié)奏?! ?</p><p><b>  3)一致性原則</b></p><p>  在界面設(shè)計(jì)中應(yīng)該保持界面的一致性。一致性既包括使用標(biāo)準(zhǔn)的控件,也指使用相同的信息表現(xiàn)

29、方法,如在字體、標(biāo)簽風(fēng)格、顏色、術(shù)語(yǔ)、顯示錯(cuò)誤信息等方面確保一致。在同一個(gè)應(yīng)用中,這些信息的表現(xiàn)方式不一致,會(huì)影響這一操作人員的使用,因此應(yīng)當(dāng)注重在同一界面系統(tǒng)中表現(xiàn)形式的一致性?! ?lt;/p><p><b>  4)布局合理化原則</b></p><p>  應(yīng)注重在一個(gè)窗口內(nèi)部所有控件的布局和信息組織的藝術(shù)性,使得用戶界面美觀。在一個(gè)窗口中按tab鍵,移動(dòng)聚焦的順

30、序不能雜亂無(wú)章,tab 的順序是先從上至下,再?gòu)淖笾劣摇R黄林惺紫葢?yīng)輸入的和重要信息的控件在tab順序中應(yīng)當(dāng)靠前,位置也應(yīng)放在窗口上較醒目的位置。布局力求簡(jiǎn)潔、有序、易于操作。</p><p>  5)鼠標(biāo)與鍵盤對(duì)應(yīng)原則</p><p>  應(yīng)遵循的是可不用鼠標(biāo)的原則:應(yīng)用中的功能只用鍵盤也應(yīng)當(dāng)可以完成,即設(shè)計(jì)的應(yīng)用中還應(yīng)加入一些必要的按鈕和菜單項(xiàng)。但是,許多鼠標(biāo)的操作,如雙擊、拖動(dòng)對(duì)象等

31、,并不能簡(jiǎn)單地用鍵盤來(lái)模擬即可實(shí)現(xiàn)。例如在一個(gè)列表框中用鼠標(biāo)雙擊其中一項(xiàng)可以表示選中該項(xiàng)內(nèi)容。為了用鍵盤也能實(shí)現(xiàn)這一功能,必須在窗口中定義一個(gè)表示選中的按鈕,以作為實(shí)現(xiàn)雙擊功能的替代(或其它方式)。又如在一個(gè)窗口中有兩個(gè)數(shù)據(jù)窗口,可以用鼠標(biāo)從一個(gè)數(shù)據(jù)窗口中將一項(xiàng)拖出然后放到另一個(gè)中。假如只用鍵盤,就應(yīng)當(dāng)在菜單中設(shè)置拷貝或移動(dòng)的菜單項(xiàng)?!?lt;/p><p>  1.4 本設(shè)計(jì)研究?jī)?nèi)容</p><p

32、>  本設(shè)計(jì)要求完成汽車尾氣余熱熱電轉(zhuǎn)換監(jiān)控軟件的設(shè)計(jì)。汽車尾氣余熱發(fā)電裝置的中心環(huán)節(jié)是熱電轉(zhuǎn)換,該模塊將汽車所排放的高溫尾氣所攜帶的熱量轉(zhuǎn)換為低壓電能,發(fā)出的電能一般都為低電壓、小電流的小功率電能,不能直接應(yīng)用,需要經(jīng)過(guò)DC—DC升壓、儲(chǔ)能處理后才能正常利用。并將各小的熱電轉(zhuǎn)換模塊進(jìn)行并聯(lián),以達(dá)到所需電壓及功率。</p><p>  本次設(shè)計(jì)主要針對(duì)汽車尾氣余熱發(fā)電系統(tǒng)的各個(gè)模塊,設(shè)計(jì)各模塊信號(hào)采集及顯示

33、的監(jiān)控軟件。在對(duì)軟件設(shè)計(jì)的基本概念及原則有一定了解的基礎(chǔ)上,本設(shè)計(jì)要仔細(xì)分析監(jiān)控系統(tǒng)設(shè)計(jì)需求,選擇合適的設(shè)計(jì)方案來(lái)完成監(jiān)控軟件顯示及通信的功能。經(jīng)比較分析選擇采用VC++串口通信來(lái)實(shí)現(xiàn)通信顯示功能,采用多線程技術(shù)來(lái)實(shí)現(xiàn)多路信號(hào)同時(shí)采集。</p><p>  監(jiān)控系統(tǒng)分為三個(gè)界面,主界面軟件提供監(jiān)測(cè)與設(shè)置兩種選擇,但只有先對(duì)系統(tǒng)進(jìn)行正確的設(shè)置才能正確的監(jiān)測(cè)各模塊信號(hào)。系統(tǒng)設(shè)置子界面主要完成對(duì)通信口、數(shù)據(jù)格式及波特率

34、的設(shè)置,以保證上位機(jī)與模塊之間通信的正常進(jìn)行。系統(tǒng)檢測(cè)子界面則是執(zhí)行通信顯示的任務(wù),將下位機(jī)的數(shù)據(jù)傳送至上位機(jī)并顯示于界面上。</p><p>  為了驗(yàn)證軟件能否實(shí)現(xiàn)預(yù)定功能,要對(duì)軟件進(jìn)行模擬調(diào)試,在設(shè)計(jì)的最后是模擬調(diào)試。使用輔助調(diào)試軟件可以方便快捷的幫助實(shí)現(xiàn)調(diào)試目的。</p><p><b>  2設(shè)計(jì)方案論證</b></p><p>  

35、2.1軟件設(shè)計(jì)方案論證</p><p>  對(duì)于監(jiān)控軟件的設(shè)計(jì),Win32下的面向?qū)ο蠊ぞ遃isual Basic和C ++能開(kāi)發(fā)出又保證功能,實(shí)時(shí)性又好的監(jiān)控軟件。因此,本設(shè)計(jì)對(duì)這兩種開(kāi)發(fā)語(yǔ)言進(jìn)行比較研究。</p><p>  2.1.1 Visual Basic程序設(shè)計(jì)研究</p><p>  Visual Basic集成開(kāi)發(fā)環(huán)境帶有一個(gè)標(biāo)準(zhǔn)的控件箱,此外Vis

36、ual Basic還提供一個(gè)巨大的控件庫(kù),這個(gè)控件庫(kù)可以滿足絕大多數(shù)常規(guī)程序開(kāi)發(fā)的需要。但由于控實(shí)驗(yàn)軟件的特殊性,仍然有一些需要的控件是現(xiàn)有的控件庫(kù)中不曾提供的。Visual Basic可以幫助用戶設(shè)計(jì)自己的控件,這種控件稱為用戶控件[5]。用戶控件以獨(dú)特的方式實(shí)現(xiàn)了對(duì)已有控件的繼承。利用這一特性可在已有控件(如Visual Basic的標(biāo)準(zhǔn)控件)的基礎(chǔ)上“添加”用戶所需的特殊功能得到用戶自己的控件,本軟件中需要設(shè)計(jì)兩種用戶控件。<

37、;/p><p>  Visual Basic還支持豐富的數(shù)據(jù)類型和強(qiáng)大的運(yùn)算能力,支持面向?qū)ο蟮某绦蛟O(shè)計(jì),并具有與其它語(yǔ)言和環(huán)境的良好接口。</p><p>  與基于命令行的應(yīng)用程序相比,圖形化的軟件通常有形象生動(dòng)的界面和易于理解的操作方式[6]。控制軟件在保證實(shí)時(shí)性的前提下向圖形化界面靠攏,Visual Basic開(kāi)發(fā)圖形化和拖放操作的應(yīng)用程序極其方便,是一種優(yōu)秀的界面開(kāi)發(fā)工具。</

38、p><p>  但Visual Basic的不足之處在于它的硬件訪問(wèn)能力較弱,對(duì)硬件配置要求和操作系統(tǒng)的依賴性較強(qiáng),這是限制它在控制領(lǐng)域應(yīng)用的重要原因。</p><p>  2.1.2 C++程序設(shè)計(jì)研究</p><p>  C++語(yǔ)言是一種優(yōu)秀的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言,它在C語(yǔ)言的基礎(chǔ)上發(fā)展而來(lái),但它比C語(yǔ)言更容易為人們學(xué)習(xí)和掌握。C++以其獨(dú)特的語(yǔ)言機(jī)制在計(jì)算機(jī)科學(xué)的

39、各個(gè)領(lǐng)域中得到了廣泛的應(yīng)用[7]。面向?qū)ο蟮脑O(shè)計(jì)思想是在原來(lái)結(jié)構(gòu)化程序設(shè)計(jì)方法基礎(chǔ)上的一個(gè)質(zhì)的飛躍,C++完美地體現(xiàn)了面向?qū)ο蟮母鞣N特性。 </p><p>  C++的設(shè)計(jì)目標(biāo),就是要讓C++既具有適合于系統(tǒng)程序設(shè)計(jì)的C語(yǔ)言所具有的可適應(yīng)性和高效性,又能在其程序組織結(jié)構(gòu)方面具有面向?qū)ο蟪绦蛟O(shè)計(jì)風(fēng)格。C++所提供的抽象機(jī)制能夠被應(yīng)用于那些對(duì)效率和可適應(yīng)性具有極高要求的程序設(shè)計(jì)任務(wù)之中。</p>&l

40、t;p>  C++的設(shè)計(jì)規(guī)則被分為基本規(guī)則、基于設(shè)計(jì)的規(guī)則、語(yǔ)言的技術(shù)性規(guī)則以及基于低層次程序設(shè)計(jì)的規(guī)則四個(gè)方面。</p><p>  基本規(guī)則強(qiáng)調(diào)適用于真實(shí)世界中各種應(yīng)用的便捷工具,并充分考慮程序員的技術(shù)和取向。從一開(kāi)始,C++面向的就是那些要做實(shí)際項(xiàng)目的程序員。在語(yǔ)言的演化過(guò)程中,來(lái)自用戶的反饋和語(yǔ)言實(shí)現(xiàn)者們積累的經(jīng)驗(yàn)才是最為重要的。</p><p>  由基于設(shè)計(jì)的規(guī)則,C++

41、的一個(gè)目標(biāo)就是提供更易用并具有一定承受能力的設(shè)計(jì)思想和程序設(shè)計(jì)技術(shù),進(jìn)一步提高程序的質(zhì)量。然而,C++的設(shè)計(jì)目標(biāo)總還是在于要支持一定范圍內(nèi)的各種程序設(shè)計(jì)風(fēng)格和設(shè)計(jì)思想。</p><p>  語(yǔ)言的技術(shù)性規(guī)則要具體結(jié)合更多關(guān)于基本目標(biāo)的上下文環(huán)境來(lái)考慮。在維護(hù)一個(gè)較龐大的程序時(shí),一個(gè)程序員不可避免的會(huì)基于某些不完整的知識(shí)來(lái)對(duì)程序作一些修改,只關(guān)注全部程序代碼中的一小部分?;诖?,C++提供了class、namesp

42、ace和訪問(wèn)控制,使設(shè)計(jì)決策的各異化成為可能。</p><p>  由基于低層次程序設(shè)計(jì)的規(guī)則,在C++的設(shè)計(jì)中只要在不嚴(yán)重影響其對(duì)強(qiáng)型別檢查的支持的地方,都盡量做到與C的“source-link”方式相兼容。C++與C的兼容性使得C++程序員立刻就能有一個(gè)完整的語(yǔ)言和工具集可用。還有兩點(diǎn)也很重要,一是有大量關(guān)于C的高質(zhì)量的教學(xué)素材已經(jīng)存在,二是C++程序員可以利用C++與C的兼容性而直接并有效的使用大量現(xiàn)成的程

43、序庫(kù)[8]。</p><p>  C++是一種傳統(tǒng)的編程語(yǔ)言。編寫的程序具有代碼精煉、執(zhí)行效率高的優(yōu)點(diǎn),同時(shí)它提供了豐富的硬件數(shù)據(jù)訪問(wèn)能力。如開(kāi)發(fā)數(shù)據(jù)采集、定時(shí)控制等功能,C++是理想的選擇。</p><p>  關(guān)于C++與Visual Basic集成的問(wèn)題,這兩種語(yǔ)言不能混合編程,C++代碼不能直接嵌入到Visual Basic,反之亦然。</p><p>  

44、2.1.3 軟件設(shè)計(jì)方案選擇</p><p>  由于本次設(shè)計(jì)要求對(duì)汽車尾氣余熱發(fā)電系統(tǒng)的各路信號(hào)進(jìn)行采集并處理,但Visual Basic的硬件訪問(wèn)能力較弱,對(duì)硬件配置要求和操作系統(tǒng)的依賴性較強(qiáng),不適合作為本次設(shè)計(jì)的編程語(yǔ)言。而C++編寫的程序具有代碼精煉、執(zhí)行效率高的優(yōu)點(diǎn),同時(shí)它提供了豐富的硬件數(shù)據(jù)訪問(wèn)能力。對(duì)于本次數(shù)據(jù)采集顯示類型的界面設(shè)計(jì),C++是理想的選擇。故選擇C++作為本次設(shè)計(jì)的界面編程語(yǔ)言。<

45、;/p><p>  2.2 通信方式論證</p><p>  與外界的信息交換稱為通信,基本的通信方式有并行通信和串行通信兩種。</p><p>  一條信息的各位數(shù)據(jù)被同時(shí)傳送的通信方式稱為并行通信。并行通信的特點(diǎn)是:各數(shù)據(jù)位同時(shí)傳送,傳送速度快、效率高,但有多少數(shù)據(jù)位就需多少根數(shù)據(jù)線,因此傳送成本高,且只適用于近距離(相距數(shù)米)的通信。</p><

46、;p>  在監(jiān)控系統(tǒng)中,上位機(jī)要同時(shí)接收下位機(jī)的多路信號(hào),采用并行通信是行不通的。</p><p>  本設(shè)計(jì)采用另一種通信方式,即串行通信方式。一條信息的各位數(shù)據(jù)被逐位按順序傳送的通信方式稱為串行通信。串行通信的特點(diǎn)是:數(shù)據(jù)位傳送,按位順序進(jìn)行,最少只需一根傳輸線即可完成,成本低但傳送速度慢。串行通訊的距離可以從幾米到幾千米。本設(shè)計(jì)著重研究串行通信方式。異步串行通信示如圖1 所示:</p>

47、<p>  圖1 異步串行通信示意圖</p><p>  2.2.1 串行通信基本概念</p><p>  根據(jù)信息的傳送方向,串行通訊可以進(jìn)一步分為單工、半雙工和全雙工三種。信息只能單向傳送為單工;信息能雙向傳送但不能同時(shí)雙向傳送稱為半雙工;信息能夠同時(shí)雙向傳送則稱為全雙工[9]。如圖2所示:</p><p>  圖2 單工、半雙工和全雙工示意圖<

48、/p><p>  監(jiān)控系統(tǒng)一方面要求上位機(jī)接收下位機(jī)的數(shù)據(jù),另一方面也要求上位機(jī)可以向下位機(jī)發(fā)送命令,但二者不是同時(shí)進(jìn)行的,因此,屬于半雙工的工作方式。</p><p>  所謂“串行通信”是指外設(shè)和計(jì)算機(jī)間使用一根數(shù)據(jù)信號(hào)線(另外需要地線,可能還需要控制線),數(shù)據(jù)在一根數(shù)據(jù)信號(hào)線上一位一位地進(jìn)行傳輸,每一位數(shù)據(jù)都占據(jù)一個(gè)固定的時(shí)間長(zhǎng)度。如圖3所示:</p><p> 

49、 圖3 串行通信示意圖</p><p>  同步是數(shù)據(jù)通信中必需解決的一個(gè)重要問(wèn)題。所謂同步就是要求數(shù)據(jù)的收發(fā)雙方在時(shí)間基準(zhǔn)上保持一致。在串行通信中,“異步”是同步收發(fā)雙發(fā)通信的重要方式。在異步串行通信中,每個(gè)字符作為一個(gè)獨(dú)立的整體進(jìn)行發(fā)送,字符之間的時(shí)間間隔可以是任意的。為了實(shí)現(xiàn)同步,需要在每個(gè)字符的第一位前加1位起始位(邏輯1),并在字符的最后一位后加1位、1.5位或2位停止位(邏輯0)。</p>

50、<p>  2.2.2 串行通信接口標(biāo)準(zhǔn)</p><p>  常用的串行通信接口標(biāo)準(zhǔn)包括RS-232、RS-449、V.24、V.35等。其中RS-232是最常用的串行通信標(biāo)準(zhǔn)之一。個(gè)人計(jì)算機(jī)及終端系統(tǒng)中配備的串行接口幾乎都符合RS-232標(biāo)準(zhǔn)。因此,對(duì)于監(jiān)控系統(tǒng)的串行通信接口本設(shè)計(jì)也采用RS-232標(biāo)準(zhǔn)[10]。</p><p>  在數(shù)據(jù)通信中,通常將數(shù)據(jù)終端設(shè)備簡(jiǎn)稱為D

51、TE(Data Terminal Equipment),而將數(shù)據(jù)通信設(shè)備簡(jiǎn)稱為DCE(Data Circuit Equipment)。DTE是具有一定數(shù)據(jù)處理能力及發(fā)送和接收數(shù)據(jù)能力的設(shè)備,而DCE的主要作用是在DTE和傳輸線路之間提供信號(hào)變換和實(shí)現(xiàn)編碼功能,并且負(fù)責(zé)建立、保持和釋放數(shù)據(jù)鏈路的連接。DTE可以是計(jì)算機(jī)或終端,也可以是各種I/O設(shè)備。RS-232的主要內(nèi)容就是定義DTE和DCE之間的接口標(biāo)準(zhǔn)。</p><

52、;p>  RS-232使用的連接器包括DB-25、D-15和DB-9等幾種類型,不同類型連接器使用的引腳定義也各不相同。目前,個(gè)人計(jì)算機(jī)配備的RS-232連接器通常為DB-9,它提供異步串行通信所需要的9個(gè)信號(hào),其引腳的排列和信號(hào)名稱如圖4所示:</p><p>  圖4 RS-232在使用DB-9作為連接器時(shí)的引腳排列和信號(hào)名稱</p><p>  RS-232采用負(fù)邏輯,邏輯0相

53、當(dāng)于對(duì)信號(hào)地有+3~+15V的電壓,邏輯1相當(dāng)于對(duì)信號(hào)地有-3~-15V的電壓。在-3V~+3V的過(guò)渡區(qū),邏輯狀態(tài)不定。RS-232串行口信號(hào)分為傳送信號(hào)、聯(lián)絡(luò)信號(hào)和信號(hào)地3類。傳送信號(hào)包括TxD(發(fā)送數(shù)據(jù))和RxD(接收數(shù)據(jù)),它們是經(jīng)由TxD傳送和RxD接收的信息比特流。一個(gè)傳送單位由起始位、數(shù)據(jù)位和停止位(有時(shí)還包含奇偶校驗(yàn)位)組成。</p><p>  2.2.3 串口通信的傳輸格式</p>

54、<p>  串行通信中,線路空閑時(shí),線路的TTL電平總是高,經(jīng)反向RS232的電平總是低。一個(gè)數(shù)據(jù)的開(kāi)始RS232線路為高電平,結(jié)束時(shí)RS232為低電平。數(shù)據(jù)總是從低位向高位一位一位的傳輸。 </p><p>  例如,對(duì)于16進(jìn)制數(shù)據(jù)55aaH,當(dāng)采用8位數(shù)據(jù)位、1位停止位傳輸時(shí):</p><p>  55H=01010101B,加入一個(gè)起始位1,一個(gè)停止位0,55H的數(shù)據(jù)格

55、式為1010101010B;</p><p>  aaH=10101010B,加入一個(gè)起始位1,一個(gè)停止位0,aaH的數(shù)據(jù)格式為1101010100B。</p><p>  2.2.4串口通信的接收過(guò)程</p><p>  對(duì)于異步通信,接收器和發(fā)送器有各自的時(shí)鐘;對(duì)于同步通信,發(fā)送器和接收器由同一個(gè)時(shí)鐘源控制[11]。RS232是異步通信,通信過(guò)程如下:</

56、p><p>  1)開(kāi)始通信時(shí),信號(hào)線為空閑(邏輯1),當(dāng)檢測(cè)到由1到0的跳變時(shí),開(kāi)始對(duì)“接收時(shí)鐘”計(jì)數(shù)?!?lt;/p><p>  2)當(dāng)計(jì)到8個(gè)時(shí)鐘時(shí),對(duì)輸入信號(hào)進(jìn)行檢測(cè),若仍為低電平,則確認(rèn)這是“起始位”,而不是干擾信號(hào)。</p><p>  3)接收端檢測(cè)到起始位后,隔16個(gè)接收時(shí)鐘,對(duì)輸入信號(hào)檢測(cè)一次,把對(duì)應(yīng)的值作為D0位數(shù)據(jù)。若為邏輯1, 作為數(shù)據(jù)位1;若為邏輯

57、0,作為數(shù)據(jù)位0。</p><p>  4)再隔16個(gè)接收時(shí)鐘,對(duì)輸入信號(hào)檢測(cè)一次,把對(duì)應(yīng)的值作為D1位數(shù)據(jù)。如此,直到全部數(shù)據(jù)位都輸入。</p><p>  5)檢測(cè)校驗(yàn)位P(如果有的話)。</p><p>  6)接收到規(guī)定的數(shù)據(jù)位個(gè)數(shù)和校驗(yàn)位后,通信接口電路希望收到停止位S(邏輯1),若此時(shí)未收到邏輯1,說(shuō)明出現(xiàn)了錯(cuò)誤,在狀態(tài)寄存器中置“幀錯(cuò)誤”標(biāo)志。若沒(méi)有錯(cuò)

58、誤,對(duì)全部數(shù)據(jù)位進(jìn)行奇偶校驗(yàn),無(wú)校驗(yàn)錯(cuò)時(shí),把數(shù)據(jù)位從移位寄存器中送數(shù)據(jù)輸入寄存器。若校驗(yàn)錯(cuò),在狀態(tài)寄存器中置奇偶錯(cuò)標(biāo)志。</p><p>  7)本幀信息全部接收完,把線路上出現(xiàn)的高電平作為空閑位。</p><p>  8)當(dāng)信號(hào)再次變?yōu)榈蜁r(shí),開(kāi)始進(jìn)入下一幀的檢測(cè)。</p><p>  2.3 串行通信方案論證</p><p>  在Wind

59、ows平臺(tái)下的串行通信,用Visual C++ 設(shè)計(jì)串行通信程序有三種方法。 </p><p>  在汽車尾氣余熱發(fā)電系統(tǒng)中,需要串口進(jìn)行計(jì)算機(jī)與外部模塊之間的數(shù)據(jù)傳輸。依據(jù)不同的條件實(shí)現(xiàn)對(duì)串口的靈活編程控制是我們所需要的。此外,上位機(jī)需要同時(shí)向不同模塊的下位機(jī)采集數(shù)據(jù),在選擇方案時(shí)要充分保證這一點(diǎn)。</p><p>  Windows下串行通信與以往DOS下串行通信程序不同的是,Wind

60、ows不提倡應(yīng)用程序直接控制硬件,而是通過(guò)Windows操作系統(tǒng)提供的設(shè)備驅(qū)動(dòng)程序來(lái)進(jìn)行數(shù)據(jù)傳遞。串行口在Win 32中是作為文件來(lái)進(jìn)行處理的,而不是直接對(duì)端口進(jìn)行操作,對(duì)于串行通信,Win 32 提供了相應(yīng)的文件I/O函數(shù)與通信函數(shù),通過(guò)了解這些函數(shù)的使用,可以編制出符合不同需要的通信程序。與通信設(shè)備相關(guān)的結(jié)構(gòu)有COMMCONFIG ,COMMPROP,COMMTIMEOUTS,COMSTAT,DCB,MODEMDEVCAPS,MOD

61、EMSETTINGS共7個(gè),與通信有關(guān)的Windows API函數(shù)共有26個(gè),詳細(xì)說(shuō)明可參考MSDN幫助文件。以下是實(shí)現(xiàn)串行通信的三種方法。</p><p>  2.3.1使用VC++提供的串行通信控件MSComm</p><p>  首先,在對(duì)話框中創(chuàng)建通信控件,若Control工具欄中缺少該控件,可通過(guò)菜單Project --> Add to Project --> Com

62、ponents and Control插入即可,再將該控件從工具箱中拉到對(duì)話框中。此時(shí),你只需要關(guān)心控件提供的對(duì) Windows 通訊驅(qū)動(dòng)程序的 API 函數(shù)的接口。換句話說(shuō),只需要設(shè)置和監(jiān)視MSComm控件的屬性和事件。</p><p>  在ClassWizard中為新創(chuàng)建的通信控件定義成員對(duì)象(CMSComm m_Serial),通過(guò)該對(duì)象便可以對(duì)串口屬性進(jìn)行設(shè)置。打開(kāi)所需串口后,需要考慮串口通信的時(shí)機(jī)。在

63、接收或發(fā)送數(shù)據(jù)過(guò)程中,可能需要監(jiān)視并響應(yīng)一些事件和錯(cuò)誤,所以事件驅(qū)動(dòng)是處理串行端口交互作用的一種非常有效的方法。</p><p>  2.3.2 在單線程中實(shí)現(xiàn)自定義的串口通信類</p><p>  控件簡(jiǎn)單易用,但由于必須拿到對(duì)話框中使用,在一些需要在線程中實(shí)現(xiàn)通信的應(yīng)用場(chǎng)合,控件的使用顯得捉襟見(jiàn)肘。此時(shí),若能夠按不同需要定制靈活的串口通信類將彌補(bǔ)控件的不足。該通信類CSimpleCom

64、m需手動(dòng)加入頭文件與源文件,其基類為CObject,大致建立步驟如下:</p><p>  1) 打開(kāi)串口,獲取串口資源句柄</p><p>  通信程序從CreateFile處指定串口設(shè)備及相關(guān)的操作屬性。再返回一個(gè)句柄,該句柄將被用于后續(xù)的通信操作,并貫穿整個(gè)通信過(guò)程。對(duì)于dwFlagAndAttribute參數(shù),對(duì)串口有意義的值是FILE_FLAG_OVERLAPPED,該標(biāo)志表明串

65、口采用異步通信模式,可進(jìn)行重疊操作;若值為NULL,則為同步通信方式,在同步方式下,應(yīng)用程序?qū)⑹冀K控制程序流,直到程序結(jié)束,若遭遇通信故障等因素,將導(dǎo)致應(yīng)用程序的永久等待,所以一般多采用異步通信。</p><p><b>  2)串口設(shè)置</b></p><p>  串口打開(kāi)后,其屬性被設(shè)置為默認(rèn)值,根據(jù)具體需要,讀取當(dāng)前串口設(shè)備控制塊DCB設(shè)置,修改后將其寫入。再需

66、注意異步讀寫的超時(shí)控制設(shè)置,通過(guò)COMMTIMEOUTS結(jié)構(gòu)設(shè)置超時(shí),調(diào)用SetCommTimeouts(hComm,&timeouts)將結(jié)果寫入。</p><p><b>  3)串口讀寫操作</b></p><p>  主要運(yùn)用ReadFile()與WriteFile()API函數(shù),若為異步通信方式,兩函數(shù)中最后一個(gè)參數(shù)為指向OVERLAPPED結(jié)構(gòu)的非

67、空指針,在讀寫函數(shù)返回值為FALSE的情況下,調(diào)用GetLastError()函數(shù),返回值為ERROR_IO_PENDING,表明I/O操作懸掛,即操作轉(zhuǎn)入后臺(tái)繼續(xù)執(zhí)。</p><p>  定義全局變量m_Serial作為新建通信類CSimpleComm的對(duì)象,通過(guò)調(diào)用類的成員函數(shù)即可實(shí)現(xiàn)所需串行通信功能。與上一方法相比,這種方法賦予串行通信程序設(shè)計(jì)較大的靈活性,端口的讀寫可選擇較簡(jiǎn)單的查詢式,或通過(guò)設(shè)置與外設(shè)數(shù)

68、據(jù)發(fā)送時(shí)間間隔TimeCycle相同的定時(shí)器:SetTimer (1,TimeCycle,NULL),進(jìn)行定時(shí)讀取或發(fā)送。</p><p>  2.3.3 多線程下實(shí)現(xiàn)串行通信</p><p>  前兩種方法適用于單線程通信。在很多工業(yè)控制系統(tǒng)中,常通過(guò)擴(kuò)展串口連接多個(gè)外設(shè),各外設(shè)發(fā)送數(shù)據(jù)的重復(fù)頻率不同,要求后臺(tái)實(shí)時(shí)無(wú)差錯(cuò)捕捉,采集,處理,記錄各端口數(shù)據(jù),這就需要在自定義的串行通信類中創(chuàng)建

69、端口監(jiān)視線程,以便在指定的事件發(fā)生時(shí)向相關(guān)的窗口發(fā)送通知消息。</p><p>  線程是程序執(zhí)行流的最小單元。一個(gè)標(biāo)準(zhǔn)的線程由線程ID,當(dāng)前指令指針(PC),寄存器集合和堆棧組成。另外,線程是進(jìn)程中的一個(gè)實(shí)體,是被系統(tǒng)獨(dú)立調(diào)度和分派的基本單位,線程自己不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中必不可少的資源,但它可與同屬一個(gè)進(jìn)程的其它線程共享進(jìn)程所擁有的全部資源。一個(gè)線程可以創(chuàng)建和撤消另一個(gè)線程,同一進(jìn)程中的多個(gè)線程之

70、間可以并發(fā)執(zhí)行。 線程是程序中一個(gè)單一的順序控制流程。在單個(gè)程序中同時(shí)運(yùn)行多個(gè)線程完成不同的工作,稱為多線程。</p><p>  Windows內(nèi)部的搶先調(diào)度程序在活動(dòng)的線程之間分配CPU時(shí)間,Win 32 區(qū)分兩種不同類型的線程,一種是用戶界面線程UI,它包含消息循環(huán)或消息泵,用于處理接收到的消息;另一種是工作線程,它沒(méi)有消息循環(huán),用于執(zhí)行后臺(tái)任務(wù)。用于監(jiān)視串口事件的線程即為工作線程。</p>

71、<p>  多線程通信類的編寫在端口的配置,連接部分與單線程通信類相同,在端口配置完畢后,最重要的是根據(jù)實(shí)際情況,建立多線程之間的同步對(duì)象。</p><p>  用PostMessage()向指定窗口的消息隊(duì)列發(fā)送通知消息,相應(yīng)地,需要在該窗口建立消息與成員函數(shù)間的映射,用ON_MESSAGE將消息與成員函數(shù)名關(guān)聯(lián)。</p><p>  BEGIN_MESSAGE_MAP (CS

72、ampleView, CView)//{{AFX_MSG_MAP(CSampleView)</p><p>  ON_MESSAGE(ID_COM1_DATA, OnProcessCom1Data)</p><p>  ON_MESSAGE(ID_COM2_DATA, OnProcessCom2Data)</p><p><b>  .....</b

73、></p><p>  //}}AFX_MSG_MAP</p><p>  END_MESSAGE_MAP()</p><p>  然后在各成員函數(shù)中完成對(duì)各串口數(shù)據(jù)的接收處理,但必須保證在下一次監(jiān)測(cè)到有數(shù)據(jù)到來(lái)之前,能夠完成所有的中間處理工作。否則將造成數(shù)據(jù)的捕捉錯(cuò)誤。</p><p>  多線程的實(shí)現(xiàn)可以使得各端口獨(dú)立,準(zhǔn)確地實(shí)現(xiàn)串

74、行通信,使串口通信具有更廣泛的靈活性與嚴(yán)格性,且充分利用了CPU時(shí)間。</p><p>  2.3.4串行通信方案選擇</p><p>  綜上所述,以VC++ 6.0 為工具,實(shí)現(xiàn)串行通信的三種方法各有利弊??丶绞诫m簡(jiǎn)單易用,但由于必須拿到對(duì)話框中使用,限制了其應(yīng)用性,在本次設(shè)計(jì)中不能完成多模塊數(shù)據(jù)接收功能;在單線程中實(shí)現(xiàn)自定義的串口通信類雖然較控件方式靈活,但仍只是用于單線程通信;汽

75、車尾氣余熱發(fā)電系統(tǒng)的監(jiān)控界面要求同時(shí)采集四個(gè)模塊的數(shù)據(jù)(包括電壓巡檢模塊、溫度檢測(cè)模塊、熱電轉(zhuǎn)換模塊、DC\DC模塊),因此多線程下的串行通信方式是最佳選擇方案。</p><p><b>  3監(jiān)控軟件設(shè)計(jì)</b></p><p>  3.1 主監(jiān)控系統(tǒng)設(shè)計(jì)</p><p>  要完成監(jiān)控軟件設(shè)計(jì)的任務(wù),首先考慮界面設(shè)計(jì)。Visual C++是

76、一種可視化設(shè)計(jì)工具,用所見(jiàn)即所得的方式設(shè)計(jì)軟件的界面。在Visual C++集成開(kāi)發(fā)環(huán)境中新建一個(gè)標(biāo)準(zhǔn)EXE項(xiàng)目,向環(huán)境提供的空白窗體中添加ActiveX控件并調(diào)整它們的外觀位置和屬性就能完成界面設(shè)計(jì)。不過(guò)這時(shí)完成的界面是一種靜止界面,不能對(duì)各種事件做出合理的反應(yīng),因而無(wú)法正常工作,讓程序工作起來(lái)是代碼設(shè)計(jì)的任務(wù)。</p><p>  對(duì)事件進(jìn)行相應(yīng)處理是Visual C++代碼設(shè)計(jì)的主要內(nèi)容。如果說(shuō)窗體設(shè)計(jì)考慮

77、的是“程序看起來(lái)是什么樣子”,代碼設(shè)計(jì)時(shí)考慮的就是“發(fā)生某事件后程序該怎么辦”。 Visual C++激活的事件類型非常豐富,包括各種鍵盤、時(shí)鐘、鼠標(biāo)、系統(tǒng)等事件,代碼的任務(wù)是為這些事件規(guī)定計(jì)算機(jī)應(yīng)執(zhí)行的動(dòng)作,以滿足控制的需要。</p><p>  3.1.1 外觀設(shè)計(jì)</p><p>  主界面要求顯示供選擇的控件,點(diǎn)擊其一是完成對(duì)上位機(jī)與下位機(jī)通信的相關(guān)參數(shù)設(shè)置,點(diǎn)擊另一個(gè)是進(jìn)入監(jiān)控子

78、界面。</p><p>  選擇File→New,彈出“New”對(duì)話框。在“工程”下選擇“MFC AppWizard[exe]”,工程</p><p><b>  圖5 新建工程</b></p><p>  名命為“Converse”。如圖5示。</p><p>  點(diǎn)擊確定后在第一步中選擇“一般對(duì)話框”,點(diǎn)擊“完成”則

79、建立了一個(gè)對(duì)話框。如圖6所示:</p><p><b>  圖6 建立對(duì)話框</b></p><p>  右鍵點(diǎn)擊對(duì)話框,在屬性設(shè)置中將對(duì)話框明名為“汽車尾氣余熱熱電轉(zhuǎn)換監(jiān)控系統(tǒng)”。如圖7所示:</p><p>  圖7 對(duì)話框?qū)傩栽O(shè)置</p><p>  向?qū)υ捒蛑刑砑影粹o,分別命名為“測(cè)試界面”和“系統(tǒng)設(shè)置”。如此,

80、則完成了主界面的外觀設(shè)計(jì)。如圖8示:</p><p><b>  圖8主界面對(duì)話框</b></p><p>  3.1.2 程序設(shè)計(jì)</p><p>  雙擊“測(cè)試界面”按鈕,則轉(zhuǎn)入程序設(shè)計(jì),我們需要將此按鈕與監(jiān)控界面對(duì)話框聯(lián)系,并打開(kāi)串口。雙擊“系統(tǒng)測(cè)試”按鈕,則轉(zhuǎn)入系統(tǒng)設(shè)置子界面,須將此按鈕與系統(tǒng)設(shè)置對(duì)話框相聯(lián)系。要完成此功能,具體程序見(jiàn)附

81、錄。</p><p>  其中,當(dāng)點(diǎn)擊“測(cè)試界面”時(shí),將運(yùn)行的主要程序如下[12]:</p><p>  void CConverseDlg::OnButtonMonitor() </p><p><b>  {</b></p><p>  // TODO: Add your control notification h

82、andler code here</p><p>  CString strPort;</p><p>  strPort.Format("COM%d",m_port);</p><p>  hCom=CreateFile(</p><p><b>  strPort,</b></p>

83、<p>  GENERIC_READ|GENERIC_WRITE,</p><p><b>  0,</b></p><p><b>  NULL,</b></p><p>  OPEN_EXISTING,</p><p>  0,//FILE_FLAG_OVERLAPPED,</p

84、><p>  NULL); //打開(kāi)一個(gè)通訊端口</p><p>  if(hCom==INVALID_HANDLE_VALUE)</p><p><b>  {</b></p><p>  MessageBox("串口不存在或被其它應(yīng)用程序占用!","提示",MB_OK)

85、;</p><p><b>  return;</b></p><p><b>  } </b></p><p><b>  //最小化主窗口</b></p><p>  //ShowWindow(SW_MINIMIZE);</p><p><b&

86、gt;  //創(chuàng)建監(jiān)控窗口</b></p><p>  CMonitorDlg dlg;</p><p>  dlg.DoModal();</p><p><b>  }</b></p><p>  當(dāng)點(diǎn)擊“系統(tǒng)設(shè)置”時(shí),運(yùn)行的主要程序如下:</p><p>  {void CConv

87、erseDlg::OnButtonSet() </p><p>  // TODO: Add your control notification handler code here</p><p>  CSetDlg m_dlg;</p><p>  m_dlg.DoModal();</p><p><b>  }</b&g

88、t;</p><p>  3.2 系統(tǒng)設(shè)置子系統(tǒng)設(shè)計(jì)</p><p>  3.2.1 外觀設(shè)計(jì)</p><p>  上位機(jī)要與下位機(jī)之間進(jìn)行異步通信,必須要有共同的通信協(xié)議,包括串口選擇、波特率和幀格式等。因此,在界面的外觀上必須包含以上參數(shù)對(duì)象,其中,串口選擇以單選按鈕的形式供四選一,波特率和幀格式以組合框的形式供用戶選擇。當(dāng)設(shè)定這些值后,須確認(rèn)以保存并發(fā)送。除此

89、之外,還要有編輯框形式的提示語(yǔ)句,以提示用戶。</p><p>  在左側(cè)的Converse Resources的Dialog中單擊鼠標(biāo)右鍵,添加Dialog,則添加進(jìn)一個(gè)對(duì)話框。如圖9所示:</p><p><b>  圖9 新建對(duì)話框</b></p><p>  將單選框、組合框、文本框、編輯框、按鈕從控件欄中拖到對(duì)話框中,如圖10所示:&

90、lt;/p><p><b>  圖10 添加控件</b></p><p>  設(shè)置屬性將其分別命名,完成后界面外觀如圖11所示:</p><p>  圖11 系統(tǒng)設(shè)置子界面對(duì)話框</p><p>  3.2.2 程序設(shè)計(jì)</p><p>  通訊口選擇要求用戶從四個(gè)串口中選擇一個(gè),并將結(jié)果賦予主界面程

91、序中的初始值。具體程序見(jiàn)附錄。</p><p>  每個(gè)通信口對(duì)應(yīng)的變量相關(guān)性設(shè)置程序?yàn)椋?lt;/p><p>  void CSetDlg::OnRadioButton1() </p><p><b>  {</b></p><p>  // TODO: Add your control notification hand

92、ler code here</p><p><b>  setcom=1;</b></p><p>  m_com1.SetCheck(1);</p><p>  m_com2.SetCheck(0);</p><p>  m_com3.SetCheck(0);</p><p>  m_com4.

93、SetCheck(0);</p><p>  GetDlgItem(IDC_EDIT_INTRO)->SetWindowText("選擇串口1作為接收熱電轉(zhuǎn)換電壓和溫度的通訊口");</p><p><b>  }</b></p><p>  void CSetDlg::OnRadioButton2() </p&

94、gt;<p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p><b>  setcom=2;</b></p><p>  m_com1.SetCheck(0);</p>

95、<p>  m_com2.SetCheck(1);</p><p>  m_com3.SetCheck(0);</p><p>  m_com4.SetCheck(0);</p><p>  GetDlgItem(IDC_EDIT_INTRO)->SetWindowText("選擇串口2作為接收熱電轉(zhuǎn)換電壓和溫度的通訊口");&l

96、t;/p><p><b>  }</b></p><p>  void CSetDlg::OnRadioButton3() </p><p><b>  {</b></p><p>  // TODO: Add your control notification handler code here<

97、;/p><p><b>  setcom=3;</b></p><p>  m_com1.SetCheck(0);</p><p>  m_com2.SetCheck(0);</p><p>  m_com3.SetCheck(1);</p><p>  m_com4.SetCheck(0);<

98、/p><p>  GetDlgItem(IDC_EDIT_INTRO)->SetWindowText("選擇串口3作為接收熱電轉(zhuǎn)換電壓和溫度的通訊口");</p><p><b>  }</b></p><p>  void CSetDlg::OnRadioButton4() </p><p>&l

99、t;b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p><b>  setcom=4;</b></p><p>  m_com1.SetCheck(0);</p><p>  m_com

100、2.SetCheck(0);</p><p>  m_com3.SetCheck(0);</p><p>  m_com4.SetCheck(1);</p><p>  GetDlgItem(IDC_EDIT_INTRO)->SetWindowText("選擇串口4作為接收熱電轉(zhuǎn)換電壓和溫度的通訊口");</p><p&

101、gt;<b>  }</b></p><p>  選擇通信串口時(shí),若未進(jìn)行人為選擇,則默認(rèn)選擇串口四,相應(yīng)輸出為“0001”。對(duì)輸入進(jìn)行查詢,若選擇COM1,則相應(yīng)輸出為“1000”,以此相同的方式依次進(jìn)行查詢。程序流程圖如圖12所示:</p><p>  圖12 串口選擇程序流程圖</p><p>  當(dāng)光標(biāo)位于波特率設(shè)置組合框上時(shí),須向用戶

102、提供提示信息:</p><p>  void CSetDlg::OnSetfocusComboBps() </p><p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  GetDlgItem

103、(IDC_EDIT_INTRO)->SetWindowText("選擇接收數(shù)據(jù)的波特率,必須與下位機(jī)發(fā)送數(shù)據(jù)的波特率相同,否則無(wú)法正常接收,甚至?xí)斐蓛?nèi)存錯(cuò)誤");</p><p><b>  }</b></p><p>  當(dāng)光標(biāo)位于幀設(shè)置組合框上時(shí),須向用戶提供提示信息:</p><p>  void CSetDl

104、g::OnSetfocusComboFrame() </p><p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  GetDlgItem(IDC_EDIT_INTRO)->SetWindowText(&quo

105、t;選擇接收數(shù)據(jù)的禎格式");</p><p><b>  }</b></p><p>  當(dāng)串口、波特率和幀格式設(shè)置完畢以后,確認(rèn)按鈕要完成保存設(shè)置的功能,具體程序如下:</p><p>  void CSetDlg::OnOK() </p><p><b>  {</b></p

106、><p>  // TODO: Add extra validation here</p><p>  UpdateData(TRUE);</p><p>  CConverseDlg *m_dlg=(CConverseDlg*)AfxGetMainWnd();</p><p>  CString str_bps;</p><

107、p><b>  //端口</b></p><p>  m_dlg->m_port=setcom;</p><p><b>  //協(xié)議信息</b></p><p>  if(m_ctrlframe.GetCurSel()==0)</p><p>  m_dlg->m_protoc

108、al.Format("45字節(jié)格式");</p><p><b>  else</b></p><p>  m_dlg->m_protocal.Format("19字節(jié)格式");</p><p><b>  //波特率信息</b></p><p>  

109、m_ctrlbps.GetLBText(m_ctrlbps.GetCurSel(),str_bps);</p><p>  CDialog::OnOK();</p><p><b>  }</b></p><p><b>  }</b></p><p>  當(dāng)點(diǎn)擊“恢復(fù)默認(rèn)值”時(shí)對(duì)參數(shù)選擇默認(rèn)參數(shù),

110、程序如下:</p><p>  void CSetDlg::OnButtonReset() </p><p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p><b>  setcom=1

111、;</b></p><p>  m_com1.SetCheck(1);</p><p>  m_com2.SetCheck(0);</p><p>  m_com3.SetCheck(0);</p><p>  m_com4.SetCheck(0);</p><p>  m_ctrlbps.SetCurSe

112、l(1);</p><p>  m_ctrlframe.SetCurSel(1);</p><p>  UpdateData(FALSE);</p><p>  GetDlgItem(IDC_EDIT_INTRO)->SetWindowText("已恢復(fù)為默認(rèn)值");</p><p><b>  }<

113、/b></p><p>  3.3 系統(tǒng)監(jiān)控子系統(tǒng)設(shè)計(jì)</p><p>  3.3.1 外觀設(shè)計(jì)</p><p>  系統(tǒng)監(jiān)控子界面要求對(duì)28路熱電小模塊轉(zhuǎn)換電壓進(jìn)行巡檢,對(duì)傳輸線路的6個(gè)溫度點(diǎn)進(jìn)行測(cè)試采樣并顯示,還要整個(gè)對(duì)熱電模塊的總的輸出電壓和電流進(jìn)行檢測(cè)并顯示、對(duì)DC\DC轉(zhuǎn)換的輸出電壓和電流進(jìn)行檢測(cè)并顯示。點(diǎn)擊檢測(cè)按鈕,則下位機(jī)開(kāi)始將各路信號(hào)數(shù)據(jù)傳送給

溫馨提示

  • 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論