【正文】
串行通信編程的ActiveX控件,為應(yīng)用程序提供了通過串行口收發(fā)數(shù)據(jù)的簡便方法。MSComm控件在編程時比較方便,程序員不必去花時間了解較為復(fù)雜的API函數(shù)。它提供一系列標(biāo)準(zhǔn)通信命令的使用接口,利用它可以建立與串口的連接,并可以通過串口連接到其他通信設(shè)備,發(fā)送命令,交換數(shù)據(jù)以及監(jiān)視和響應(yīng)串行連接中發(fā)生的事件和錯誤。在本設(shè)計中,便使用了MSComm控件進(jìn)行串口編程。下面就程序中使用的MSComm控件的主要屬性作以說明。1) CommPort屬性功能:設(shè)置并返回端口號說明:串口號設(shè)置返回范圍從1到16。2) RThreshold屬性功能:在MSComm控件設(shè)置CommEvent屬性為ComEvRecevie并產(chǎn)生OnComm事件之前,設(shè)置并返回要接受的字符數(shù)。說明:接收緩沖區(qū)接收到指定字符時差生OnComm事件。當(dāng)指定字符設(shè)置為零,不產(chǎn)生OnComm事件。3) Settings屬性功能:設(shè)置返回波特率、奇偶校驗、數(shù)據(jù)位、停止位參數(shù)。說明:設(shè)置時以字符串常量或字符串指針傳遞參數(shù)。格式為“BBB,P,D,S”BBBB為波特率,P為奇偶校驗,D為數(shù)據(jù)位數(shù),S為停止位數(shù)。4) InPut屬性功能:從接受區(qū)內(nèi)讀取數(shù)據(jù)。說明:返回數(shù)據(jù)類型為VARIANT型變量,該屬性在串口沒有打開時不能用,在運行時只讀。當(dāng)InputMode屬性為0時,變量中含有String型數(shù)據(jù);當(dāng)InputMode屬性為1時,變量中含有Byte型數(shù)據(jù);5) OutPut屬性功能:想緩沖區(qū)寫數(shù)據(jù),發(fā)送緩沖區(qū)當(dāng)前數(shù)據(jù)。說明:寫入緩沖區(qū)變量類型為VARIANT。發(fā)送二進(jìn)制數(shù)據(jù)時,將Byte型數(shù)據(jù)放入VARIANT型變量中。6) PortOpen屬性功能:打開或關(guān)閉串口,或者返回串口開、關(guān)狀態(tài)說明:傳入?yún)?shù)為BOOL行,為TRUE時,打開串口;為FALSE時關(guān)閉串口。串口的使用需要初始化,一般初始化需要以下幾個步驟:1) 選擇串口號2) 選擇輸入方式3) 設(shè)置輸入輸出緩沖區(qū)大小4) 設(shè)置波特率、奇偶校驗、數(shù)據(jù)位數(shù)、停止位數(shù)參數(shù)5) 打開串口6) 設(shè)置接收緩沖區(qū)接收多少數(shù)據(jù)響應(yīng)OnComm事件7) 設(shè)置當(dāng)前接受區(qū)長度8) 先預(yù)讀緩沖區(qū)以清除殘留數(shù)據(jù)在串口初始化完成根據(jù)設(shè)置響應(yīng)OnComm事件,在OnComm事件處理函數(shù)中對數(shù)據(jù)進(jìn)行相應(yīng)的處理。在此次上位機軟件中OnComm事件處理的思路是這樣的:由于采用的是主從式通信方式,在某個功能按鈕按下后,上位機使用SetOutPut函數(shù)發(fā)送指令,等待系統(tǒng)設(shè)備的響應(yīng),待接收到設(shè)備響應(yīng)時,響應(yīng)OnComm事件,根據(jù)返回的指令設(shè)置下一次響應(yīng)OnComm事件的字符數(shù)或發(fā)送相應(yīng)的數(shù)據(jù)。這樣設(shè)計的優(yōu)點是結(jié)合系統(tǒng)軟件的設(shè)計,在沒有奇偶校驗等差錯控制的情況下,盡量保證發(fā)送、接收數(shù)據(jù)的完整性。避免因系統(tǒng)在數(shù)據(jù)處理時的數(shù)據(jù)丟失。經(jīng)實踐證明,這樣的辦法是可行的。 上位機軟件中的數(shù)據(jù)處理由于MFC下的編程設(shè)計許多不同的類,不同類中的成員變量與成員函數(shù)參數(shù)的類型不盡相同,因此在實現(xiàn)某些參數(shù)傳遞的過程中不免需要參數(shù)類型的轉(zhuǎn)換。這也是此次上位機軟件設(shè)計的難點之一。在軟件的編寫過程中設(shè)計了以下幾個類或參數(shù)類型:CString類:CString是一種很有用的數(shù)據(jù)類型。它們很大程度上簡化了MFC中的許多操作,使得MFC在做字符串操作的時候方便了很多。在軟件中,CString主要用來可視化輸出。Byte類型:Byte是字節(jié)類型,由于通信過程中有大量的二進(jìn)制數(shù)據(jù)傳輸,因此Byte類型是必不可少的。VARIANT類型:使用MSComm控件,在發(fā)送和接收數(shù)據(jù)時,都要用到VARIANT數(shù)據(jù)類型,VARIANT實際上是一種共用體,它由各種類型的的數(shù)據(jù)成員構(gòu)成。Byte轉(zhuǎn)CString:CString中保存的是字符的ASKII碼,如果直接將Byte強制轉(zhuǎn)換為CString是不行的,因為Byte保存的是二進(jìn)制數(shù)據(jù)。強制轉(zhuǎn)換的結(jié)果在顯示時將出現(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強制轉(zhuǎn)換為VARIANT,進(jìn)行串行發(fā)送。VARIANT轉(zhuǎn)Byte:同樣,二者之間不能直接轉(zhuǎn)換,需要引入COleSafeArray類間接進(jìn)行轉(zhuǎn)換?,F(xiàn)將VARIANT強制轉(zhuǎn)換為COleSafeArray,再使用COleSafeArray的GetElement成員函數(shù)將數(shù)據(jù)轉(zhuǎn)換為Byte類型。這種轉(zhuǎn)換在接收數(shù)據(jù)時出現(xiàn)。解決了類型的轉(zhuǎn)換問題,在發(fā)送、接收、數(shù)據(jù)顯示、數(shù)據(jù)運算等方面便可根據(jù)需要使用相應(yīng)的數(shù)據(jù)類型了。結(jié)論與展望此次歷時一學(xué)期的設(shè)計研究工作,我受益匪淺。查閱了大量的中英文資料,做了許多驗證性試驗,為最終設(shè)計的完成打下了堅實的基礎(chǔ)。設(shè)計研究的過程也是一個學(xué)習(xí)的過程,其中使用的許多知識、技術(shù)是大學(xué)課程中未涉及的,這就需要在短時間內(nèi)將這些知識、技術(shù)學(xué)以致用。在這里,我將此次設(shè)計中值得注意的地方加以總結(jié)。以單片機為基礎(chǔ)的應(yīng)用系統(tǒng)的開發(fā)是一個有序的過程,同時也是一個經(jīng)驗積累的過程。一個有豐富開發(fā)經(jīng)驗的開發(fā)人員在硬件方案討論,電路設(shè)計,軟件設(shè)計及調(diào)試的過程中能夠合理有效的開展各個階段的工作,減少錯誤的發(fā)生,縮短研發(fā)周期。因此,多看、多做能夠積累工程人員的經(jīng)驗,提高技能,在產(chǎn)品研發(fā)的過程中能夠有所突破,有所創(chuàng)新。電子技術(shù)應(yīng)用廣,設(shè)計領(lǐng)域多。在熟悉本職的技術(shù)工作外,開發(fā)設(shè)計人員還需對其他各個行業(yè)有所了解,這樣才能使產(chǎn)品的功能更貼近實際,更合理,更行之有效。技術(shù)的革新日新月異,為了保證開發(fā)產(chǎn)品成本更低、性能更強,開發(fā)更容易,周期更短,電子電路設(shè)計開發(fā)人員需要不斷地學(xué)習(xí)掌握新技術(shù),與時俱進(jìn)。液位測量監(jiān)控系統(tǒng)的設(shè)計的基本功能的實現(xiàn),說明設(shè)計思路的可行性。然而,在本次設(shè)計中仍有許多不足。由于時間和精力有限,在上位機軟件設(shè)計上,未對數(shù)據(jù)處理模塊進(jìn)行進(jìn)一步的實現(xiàn)與討論。由于專業(yè)知識有限,在此僅提出自己一些淺薄的看法。先假設(shè)已有5項接收的數(shù)據(jù),如:設(shè)水箱上下液位間容積為V,水泵單位時間供水量恒定為m。設(shè)5項數(shù)據(jù)相鄰兩項間間隔時間為,,第一項至第五項總時間為T。m,V為已知量,t1~t4以及T可通過獲得的數(shù)據(jù)計算得到。設(shè)某段時間內(nèi)平均耗水量為,水泵啟動期間時平均耗水量為,水泵停止期間平均耗水量為。 通過記錄的數(shù)據(jù),經(jīng)過計算,便可獲得單位時間內(nèi)平均耗水量。大量的數(shù)據(jù),結(jié)合相應(yīng)的理論算法,重中可以提取出有價值的分析與推測。與此同時,根據(jù)以上舉例數(shù)據(jù)使用Matlab繪制圖形(這個工作使用VC++編程繪制亦可以完整)如圖51:圖51 Matlab繪制圖形通過圖形,我們可以觀察直線的斜率,直觀的觀察出某一時間段耗水的快慢程度。當(dāng)然,這僅僅是一個十分簡單的舉例,計算、繪圖方法不一定科學(xué)有效,僅起啟發(fā)思維的作用。在復(fù)雜的計算分析中,僅在水泵狀態(tài)變化時記錄數(shù)據(jù)往往是不夠的,一項數(shù)據(jù)的內(nèi)容也不夠豐富。我們可在系統(tǒng)程序中,多增加若干個數(shù)據(jù)記錄點記錄數(shù)據(jù)。同時可增加實時高低液位間容積數(shù)據(jù)等內(nèi)容,完善數(shù)據(jù)結(jié)構(gòu)。盡管系統(tǒng)設(shè)計在始終工作地情況下,沒有考慮現(xiàn)實中萬一掉電的數(shù)據(jù)保護(hù)問題,解決這個方法可以擴展大容量FLASH存儲器,即使掉電,已經(jīng)保存的數(shù)據(jù)也不會丟失。本設(shè)計中沒有加入系統(tǒng)冗余設(shè)計,結(jié)合實際情況,可增加看門狗電路,或使用單片機內(nèi)部看門狗,防止程序跑飛。人多水少,水資源時空分布不均,水土資源與經(jīng)濟社會發(fā)展布局不相匹配,是我國的基本水情。宏觀上講,通過對液位變化的分析,統(tǒng)計某一地區(qū)用水量,對水資源的統(tǒng)籌調(diào)配是有意義的。微觀上說,根據(jù)統(tǒng)計出數(shù)據(jù)計算某一水箱在一定得統(tǒng)計規(guī)律中最佳的高低警戒線位置,從而減少水泵啟動次數(shù),降低能源消耗,延長水泵受用壽命。在“十二五”期間,水利政策正在進(jìn)一步完善,水利基礎(chǔ)建設(shè)正在逐步走向現(xiàn)代化。在我黨科學(xué)發(fā)展觀的指導(dǎo)下,新型、環(huán)保、具有可持續(xù)發(fā)展設(shè)計思想的設(shè)備儀器正逐步被人們重視。致 謝本論文是在高文根老師的悉心指導(dǎo)下完成的。導(dǎo)師淵博的專業(yè)知識,嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度,精益求精的工作作風(fēng),誨人不倦的高尚師德,嚴(yán)以律己、寬以待人的崇高風(fēng)范,樸實無華、平易近人的人格魅力對我影響深遠(yuǎn)。本論文從選題到完成,每一步都是在導(dǎo)師的指導(dǎo)下完成的,傾注了導(dǎo)師大量的心血。在此,謹(jǐn)向?qū)煴硎境绺叩木匆夂椭孕牡母兄x!本論文的順利完成,離不開各位老師、同學(xué)和朋友的關(guān)心和幫助。在此表示深深的感謝! 作者: 2011 年 06 月 15 日參考文獻(xiàn)[1]張毅剛,彭喜元,[M].北京:高等教育出版社,2003.[2]李書旗,[J].計算機測量與控制,2009,17(11):21312133.[3]鄭偉建,夏揚,[J].計算機仿真,2009,26(10):190193.[4][J].現(xiàn)代電子技術(shù),2009,32(2):5153.[5][J].儀器儀表用戶,2007,14(4):4445.[6]陳霞,[J].武漢理工大學(xué)學(xué)報,2007,29(3):35.[7]陳新昌,王萬章,[J].中國科技信息,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]任開春,[J].工業(yè)儀表與自動化裝置,2003,(5):1216.[12]柳軍,[J].中國醫(yī)療設(shè)備,2009,24(12):2730.[13][J].安陽師范學(xué)院學(xué)報,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