【正文】
串行通信編程的ActiveX控件,為應(yīng)用程序提供了通過(guò)串行口收發(fā)數(shù)據(jù)的簡(jiǎn)便方法。MSComm控件在編程時(shí)比較方便,程序員不必去花時(shí)間了解較為復(fù)雜的API函數(shù)。它提供一系列標(biāo)準(zhǔn)通信命令的使用接口,利用它可以建立與串口的連接,并可以通過(guò)串口連接到其他通信設(shè)備,發(fā)送命令,交換數(shù)據(jù)以及監(jiān)視和響應(yīng)串行連接中發(fā)生的事件和錯(cuò)誤。在本設(shè)計(jì)中,便使用了MSComm控件進(jìn)行串口編程。下面就程序中使用的MSComm控件的主要屬性作以說(shuō)明。1) CommPort屬性功能:設(shè)置并返回端口號(hào)說(shuō)明:串口號(hào)設(shè)置返回范圍從1到16。2) RThreshold屬性功能:在MSComm控件設(shè)置CommEvent屬性為ComEvRecevie并產(chǎn)生OnComm事件之前,設(shè)置并返回要接受的字符數(shù)。說(shuō)明:接收緩沖區(qū)接收到指定字符時(shí)差生OnComm事件。當(dāng)指定字符設(shè)置為零,不產(chǎn)生OnComm事件。3) Settings屬性功能:設(shè)置返回波特率、奇偶校驗(yàn)、數(shù)據(jù)位、停止位參數(shù)。說(shuō)明:設(shè)置時(shí)以字符串常量或字符串指針傳遞參數(shù)。格式為“BBB,P,D,S”BBBB為波特率,P為奇偶校驗(yàn),D為數(shù)據(jù)位數(shù),S為停止位數(shù)。4) InPut屬性功能:從接受區(qū)內(nèi)讀取數(shù)據(jù)。說(shuō)明:返回?cái)?shù)據(jù)類型為VARIANT型變量,該屬性在串口沒(méi)有打開(kāi)時(shí)不能用,在運(yùn)行時(shí)只讀。當(dāng)InputMode屬性為0時(shí),變量中含有String型數(shù)據(jù);當(dāng)InputMode屬性為1時(shí),變量中含有Byte型數(shù)據(jù);5) OutPut屬性功能:想緩沖區(qū)寫數(shù)據(jù),發(fā)送緩沖區(qū)當(dāng)前數(shù)據(jù)。說(shuō)明:寫入緩沖區(qū)變量類型為VARIANT。發(fā)送二進(jìn)制數(shù)據(jù)時(shí),將Byte型數(shù)據(jù)放入VARIANT型變量中。6) PortOpen屬性功能:打開(kāi)或關(guān)閉串口,或者返回串口開(kāi)、關(guān)狀態(tài)說(shuō)明:傳入?yún)?shù)為BOOL行,為TRUE時(shí),打開(kāi)串口;為FALSE時(shí)關(guān)閉串口。串口的使用需要初始化,一般初始化需要以下幾個(gè)步驟:1) 選擇串口號(hào)2) 選擇輸入方式3) 設(shè)置輸入輸出緩沖區(qū)大小4) 設(shè)置波特率、奇偶校驗(yàn)、數(shù)據(jù)位數(shù)、停止位數(shù)參數(shù)5) 打開(kāi)串口6) 設(shè)置接收緩沖區(qū)接收多少數(shù)據(jù)響應(yīng)OnComm事件7) 設(shè)置當(dāng)前接受區(qū)長(zhǎng)度8) 先預(yù)讀緩沖區(qū)以清除殘留數(shù)據(jù)在串口初始化完成根據(jù)設(shè)置響應(yīng)OnComm事件,在OnComm事件處理函數(shù)中對(duì)數(shù)據(jù)進(jìn)行相應(yīng)的處理。在此次上位機(jī)軟件中OnComm事件處理的思路是這樣的:由于采用的是主從式通信方式,在某個(gè)功能按鈕按下后,上位機(jī)使用SetOutPut函數(shù)發(fā)送指令,等待系統(tǒng)設(shè)備的響應(yīng),待接收到設(shè)備響應(yīng)時(shí),響應(yīng)OnComm事件,根據(jù)返回的指令設(shè)置下一次響應(yīng)OnComm事件的字符數(shù)或發(fā)送相應(yīng)的數(shù)據(jù)。這樣設(shè)計(jì)的優(yōu)點(diǎn)是結(jié)合系統(tǒng)軟件的設(shè)計(jì),在沒(méi)有奇偶校驗(yàn)等差錯(cuò)控制的情況下,盡量保證發(fā)送、接收數(shù)據(jù)的完整性。避免因系統(tǒng)在數(shù)據(jù)處理時(shí)的數(shù)據(jù)丟失。經(jīng)實(shí)踐證明,這樣的辦法是可行的。 上位機(jī)軟件中的數(shù)據(jù)處理由于MFC下的編程設(shè)計(jì)許多不同的類,不同類中的成員變量與成員函數(shù)參數(shù)的類型不盡相同,因此在實(shí)現(xiàn)某些參數(shù)傳遞的過(guò)程中不免需要參數(shù)類型的轉(zhuǎn)換。這也是此次上位機(jī)軟件設(shè)計(jì)的難點(diǎn)之一。在軟件的編寫過(guò)程中設(shè)計(jì)了以下幾個(gè)類或參數(shù)類型:CString類:CString是一種很有用的數(shù)據(jù)類型。它們很大程度上簡(jiǎn)化了MFC中的許多操作,使得MFC在做字符串操作的時(shí)候方便了很多。在軟件中,CString主要用來(lái)可視化輸出。Byte類型:Byte是字節(jié)類型,由于通信過(guò)程中有大量的二進(jìn)制數(shù)據(jù)傳輸,因此Byte類型是必不可少的。VARIANT類型:使用MSComm控件,在發(fā)送和接收數(shù)據(jù)時(shí),都要用到VARIANT數(shù)據(jù)類型,VARIANT實(shí)際上是一種共用體,它由各種類型的的數(shù)據(jù)成員構(gòu)成。Byte轉(zhuǎn)CString:CString中保存的是字符的ASKII碼,如果直接將Byte強(qiáng)制轉(zhuǎn)換為CString是不行的,因?yàn)锽yte保存的是二進(jìn)制數(shù)據(jù)。強(qiáng)制轉(zhuǎn)換的結(jié)果在顯示時(shí)將出現(xiàn)亂碼。因此需要自行構(gòu)造轉(zhuǎn)換函數(shù)。由于設(shè)備系統(tǒng)軟件中處理傳輸?shù)臄?shù)據(jù)為壓縮BCD碼,因此,采用移位+48地方法將Byte轉(zhuǎn)換為CString。Byte轉(zhuǎn)VARIANT:Byte不能直接轉(zhuǎn)換為VARIANT以字符串形式發(fā)送數(shù)據(jù)。這里引入CbyteArray類與COleVariant類間接進(jìn)行轉(zhuǎn)換,首先使用CbyteArry的成員函數(shù)Add()將Byte依次連接成CbyteArray字符串,使用ColeVariant類將CbyteArray強(qiáng)制轉(zhuǎn)換為VARIANT,進(jìn)行串行發(fā)送。VARIANT轉(zhuǎn)Byte:同樣,二者之間不能直接轉(zhuǎn)換,需要引入COleSafeArray類間接進(jìn)行轉(zhuǎn)換?,F(xiàn)將VARIANT強(qiáng)制轉(zhuǎn)換為COleSafeArray,再使用COleSafeArray的GetElement成員函數(shù)將數(shù)據(jù)轉(zhuǎn)換為Byte類型。這種轉(zhuǎn)換在接收數(shù)據(jù)時(shí)出現(xiàn)。解決了類型的轉(zhuǎn)換問(wèn)題,在發(fā)送、接收、數(shù)據(jù)顯示、數(shù)據(jù)運(yùn)算等方面便可根據(jù)需要使用相應(yīng)的數(shù)據(jù)類型了。結(jié)論與展望此次歷時(shí)一學(xué)期的設(shè)計(jì)研究工作,我受益匪淺。查閱了大量的中英文資料,做了許多驗(yàn)證性試驗(yàn),為最終設(shè)計(jì)的完成打下了堅(jiān)實(shí)的基礎(chǔ)。設(shè)計(jì)研究的過(guò)程也是一個(gè)學(xué)習(xí)的過(guò)程,其中使用的許多知識(shí)、技術(shù)是大學(xué)課程中未涉及的,這就需要在短時(shí)間內(nèi)將這些知識(shí)、技術(shù)學(xué)以致用。在這里,我將此次設(shè)計(jì)中值得注意的地方加以總結(jié)。以單片機(jī)為基礎(chǔ)的應(yīng)用系統(tǒng)的開(kāi)發(fā)是一個(gè)有序的過(guò)程,同時(shí)也是一個(gè)經(jīng)驗(yàn)積累的過(guò)程。一個(gè)有豐富開(kāi)發(fā)經(jīng)驗(yàn)的開(kāi)發(fā)人員在硬件方案討論,電路設(shè)計(jì),軟件設(shè)計(jì)及調(diào)試的過(guò)程中能夠合理有效的開(kāi)展各個(gè)階段的工作,減少錯(cuò)誤的發(fā)生,縮短研發(fā)周期。因此,多看、多做能夠積累工程人員的經(jīng)驗(yàn),提高技能,在產(chǎn)品研發(fā)的過(guò)程中能夠有所突破,有所創(chuàng)新。電子技術(shù)應(yīng)用廣,設(shè)計(jì)領(lǐng)域多。在熟悉本職的技術(shù)工作外,開(kāi)發(fā)設(shè)計(jì)人員還需對(duì)其他各個(gè)行業(yè)有所了解,這樣才能使產(chǎn)品的功能更貼近實(shí)際,更合理,更行之有效。技術(shù)的革新日新月異,為了保證開(kāi)發(fā)產(chǎn)品成本更低、性能更強(qiáng),開(kāi)發(fā)更容易,周期更短,電子電路設(shè)計(jì)開(kāi)發(fā)人員需要不斷地學(xué)習(xí)掌握新技術(shù),與時(shí)俱進(jìn)。液位測(cè)量監(jiān)控系統(tǒng)的設(shè)計(jì)的基本功能的實(shí)現(xiàn),說(shuō)明設(shè)計(jì)思路的可行性。然而,在本次設(shè)計(jì)中仍有許多不足。由于時(shí)間和精力有限,在上位機(jī)軟件設(shè)計(jì)上,未對(duì)數(shù)據(jù)處理模塊進(jìn)行進(jìn)一步的實(shí)現(xiàn)與討論。由于專業(yè)知識(shí)有限,在此僅提出自己一些淺薄的看法。先假設(shè)已有5項(xiàng)接收的數(shù)據(jù),如:設(shè)水箱上下液位間容積為V,水泵單位時(shí)間供水量恒定為m。設(shè)5項(xiàng)數(shù)據(jù)相鄰兩項(xiàng)間間隔時(shí)間為,,第一項(xiàng)至第五項(xiàng)總時(shí)間為T。m,V為已知量,t1~t4以及T可通過(guò)獲得的數(shù)據(jù)計(jì)算得到。設(shè)某段時(shí)間內(nèi)平均耗水量為,水泵啟動(dòng)期間時(shí)平均耗水量為,水泵停止期間平均耗水量為。 通過(guò)記錄的數(shù)據(jù),經(jīng)過(guò)計(jì)算,便可獲得單位時(shí)間內(nèi)平均耗水量。大量的數(shù)據(jù),結(jié)合相應(yīng)的理論算法,重中可以提取出有價(jià)值的分析與推測(cè)。與此同時(shí),根據(jù)以上舉例數(shù)據(jù)使用Matlab繪制圖形(這個(gè)工作使用VC++編程繪制亦可以完整)如圖51:圖51 Matlab繪制圖形通過(guò)圖形,我們可以觀察直線的斜率,直觀的觀察出某一時(shí)間段耗水的快慢程度。當(dāng)然,這僅僅是一個(gè)十分簡(jiǎn)單的舉例,計(jì)算、繪圖方法不一定科學(xué)有效,僅起啟發(fā)思維的作用。在復(fù)雜的計(jì)算分析中,僅在水泵狀態(tài)變化時(shí)記錄數(shù)據(jù)往往是不夠的,一項(xiàng)數(shù)據(jù)的內(nèi)容也不夠豐富。我們可在系統(tǒng)程序中,多增加若干個(gè)數(shù)據(jù)記錄點(diǎn)記錄數(shù)據(jù)。同時(shí)可增加實(shí)時(shí)高低液位間容積數(shù)據(jù)等內(nèi)容,完善數(shù)據(jù)結(jié)構(gòu)。盡管系統(tǒng)設(shè)計(jì)在始終工作地情況下,沒(méi)有考慮現(xiàn)實(shí)中萬(wàn)一掉電的數(shù)據(jù)保護(hù)問(wèn)題,解決這個(gè)方法可以擴(kuò)展大容量FLASH存儲(chǔ)器,即使掉電,已經(jīng)保存的數(shù)據(jù)也不會(huì)丟失。本設(shè)計(jì)中沒(méi)有加入系統(tǒng)冗余設(shè)計(jì),結(jié)合實(shí)際情況,可增加看門狗電路,或使用單片機(jī)內(nèi)部看門狗,防止程序跑飛。人多水少,水資源時(shí)空分布不均,水土資源與經(jīng)濟(jì)社會(huì)發(fā)展布局不相匹配,是我國(guó)的基本水情。宏觀上講,通過(guò)對(duì)液位變化的分析,統(tǒng)計(jì)某一地區(qū)用水量,對(duì)水資源的統(tǒng)籌調(diào)配是有意義的。微觀上說(shuō),根據(jù)統(tǒng)計(jì)出數(shù)據(jù)計(jì)算某一水箱在一定得統(tǒng)計(jì)規(guī)律中最佳的高低警戒線位置,從而減少水泵啟動(dòng)次數(shù),降低能源消耗,延長(zhǎng)水泵受用壽命。在“十二五”期間,水利政策正在進(jìn)一步完善,水利基礎(chǔ)建設(shè)正在逐步走向現(xiàn)代化。在我黨科學(xué)發(fā)展觀的指導(dǎo)下,新型、環(huán)保、具有可持續(xù)發(fā)展設(shè)計(jì)思想的設(shè)備儀器正逐步被人們重視。致 謝本論文是在高文根老師的悉心指導(dǎo)下完成的。導(dǎo)師淵博的專業(yè)知識(shí),嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度,精益求精的工作作風(fēng),誨人不倦的高尚師德,嚴(yán)以律己、寬以待人的崇高風(fēng)范,樸實(shí)無(wú)華、平易近人的人格魅力對(duì)我影響深遠(yuǎn)。本論文從選題到完成,每一步都是在導(dǎo)師的指導(dǎo)下完成的,傾注了導(dǎo)師大量的心血。在此,謹(jǐn)向?qū)煴硎境绺叩木匆夂椭孕牡母兄x!本論文的順利完成,離不開(kāi)各位老師、同學(xué)和朋友的關(guān)心和幫助。在此表示深深的感謝! 作者: 2011 年 06 月 15 日參考文獻(xiàn)[1]張毅剛,彭喜元,[M].北京:高等教育出版社,2003.[2]李書旗,[J].計(jì)算機(jī)測(cè)量與控制,2009,17(11):21312133.[3]鄭偉建,夏揚(yáng),[J].計(jì)算機(jī)仿真,2009,26(10):190193.[4][J].現(xiàn)代電子技術(shù),2009,32(2):5153.[5][J].儀器儀表用戶,2007,14(4):4445.[6]陳霞,[J].武漢理工大學(xué)學(xué)報(bào),2007,29(3):35.[7]陳新昌,王萬(wàn)章,[J].中國(guó)科技信息,2006,(24):8990,94.[8]蘇曉龍,[J].儀表技術(shù)與傳感器,2007,(12).[9] VIEW的液位監(jiān)控系統(tǒng)[D].哈爾濱:哈爾濱工業(yè)大學(xué),2007.[10][D].北京:北方工業(yè)大學(xué),2010.[11]任開(kāi)春,[J].工業(yè)儀表與自動(dòng)化裝置,2003,(5):1216.[12]柳軍,[J].中國(guó)醫(yī)療設(shè)備,2009,24(12):2730.[13][J].安陽(yáng)師范學(xué)院學(xué)報(bào),2005(2):7173.[14]:Protel 99SE入門與提高[M].北京:人民郵電出版社,2007.[15][M].西安:西安電子科技大學(xué)出版社,2003.[16][M].北京:電子工業(yè)出版社,2003.[17]劉鯤,[M].北京:人民郵電出版社,2008.[18]姚振東,[J].傳感器世界,2000,(9):47.[19] Maurice Wilkes. Progress in Computers [J]. IEEE Trans on PE, Feb 2004,():470472. [20] Jae Hyeong Seo, Cang Ho Choi. A new simplified SpaceVector PWM Method for ThreelevelInverters [J].IEEE Trans on PE, July 2001, ():545550.附 錄 A 系統(tǒng)電路原理圖附 錄 B 外文文獻(xiàn)及譯文Progress in ComputersPrestige Lecture delivered to IEE, Cambridge, on 5 February 2004Maurice WilkesComputer LaboratoryUniversity of CambridgeThe first stored program puters began to work around 1950. The one we built in Cambridge, the EDSAC was first used in the summer of 1949.These early experimental puters were built by people like myself with varying backgrounds. We all had extensive experience in electronic engineering and were confident that that experience would stand us in good stead. This proved true, although we had some new things to learn. The most important of these was that transients must be treated correctly。 what would cause a harmless flash on the screen of a television set could lead to a serious error in a puter.As far as puting circuits were concerned, we found ourselves with an embarass de richess. For example, we could use vacuum tube diodes for gates as we did in the EDSAC or pentodes with control signals on both grids, a system widely used elsewhere. This sort of choice persisted and the term families of logic came into use. Those who have worked in the puter field will remember TTL, ECL and CMOS. Of these, CMOS has now bee dominant.In those early