版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
湖南大學畢業(yè)設計(論文)HUNANUNIVERSITY畢業(yè)論文論文題目水質多參數(shù)采集系統(tǒng)軟件設計學生姓名學生學號專業(yè)班級電子信息工程1101學院名稱電氣與信息工程學院指導老師學院院長2015年05月25日I頁摘要隨著科學技術的進步,環(huán)境監(jiān)測由人工采樣和實驗室分析為主向自動化、智能化和網(wǎng)絡化為主的自動監(jiān)測方向發(fā)展。而隨著我國水資源短缺和水污染的日益嚴重,加強水環(huán)境的監(jiān)測勢在必行。而軟件設計是儀器自動化,智能化的關鍵。本文主要介紹了水質檢測的研究意義,基礎的軟硬件設計基礎以及系統(tǒng)的軟件設計和實現(xiàn)方法。首先介紹軟硬件通信基礎,數(shù)據(jù)庫使用基礎以及Vc++界面設計基礎,然后重點介紹主體的水質多參數(shù)采集集成系統(tǒng)的軟件設計以及相應的使用方式和結果分析,最后對整個設計過程進行總結分析以及對未來的展望。本設計主要應用了Vc++軟件平臺,RS232軟硬件通信協(xié)議,SQL基礎數(shù)據(jù)庫知識,具有一定的延展性和擴展性,適當修改也可用于其他參數(shù)檢測分析。關鍵詞:通信協(xié)議,軟件設計,MFC設計緒論1.1課題背景及意義水是生命之源,人類任何的生活和生產(chǎn)活動都離不開水。隨著工業(yè)革命的進行,各類工廠紛紛建立,而這些工廠所產(chǎn)生的廢棄物對環(huán)境造成了極大的污染,人類能使用的清潔水資源也隨之不斷減少。中國是一個水資源匱乏的國家。淡水資源總量達28000億立方米,占全球水資源的6%,居世界第四位,僅次于巴西、俄羅斯和加拿大,但人均只有2200立方米,僅為世界平均水平的1/4、美國的1/5,和其他許多國家一樣飽受水資源缺乏的困擾。近些年來,在國內(nèi)也不斷發(fā)生各類水污染事故,導致許多工廠停產(chǎn),農(nóng)業(yè)絕收甚至致人中毒。開發(fā)一款操作簡單,無二次污染的水質檢測軟件是十分有必要的。水資源是人類賴于生存與發(fā)展的重要環(huán)境資源,而水質檢測是實現(xiàn)水資源環(huán)境保護的必要技術手段之一。傳統(tǒng)測量檢測方法測量時間長,測量費用高,無法滿足環(huán)境監(jiān)測部門的需要。同時為適應在線水質檢測與預警網(wǎng)絡的技術要求,檢測參數(shù)正由單一參數(shù)檢測向多參數(shù)檢測發(fā)展,測試技術正由以手工采樣與實驗室分析向遠程、在線、網(wǎng)絡化檢測方向發(fā)展。小型化,集成化,多功能化成為檢測儀器的發(fā)展方向。我國的水環(huán)境監(jiān)測以人工采樣和實驗室分析為主,在線化,自動化,智能化,網(wǎng)絡化,系統(tǒng)化的水環(huán)境監(jiān)測儀還很缺乏。軟件設計是儀器集成化、智能化的關鍵。為適應水質檢測設備智能化,多功能和系統(tǒng)化的發(fā)展,需要設計滿足儀器應用要求的操作方便、界面友好、可靠性強的應用軟件。而本研究的目的即是設計一個水質多參數(shù)采集分析軟件,根據(jù)上傳的水體溫度、濁度、PH值、電導率等參數(shù),利用數(shù)據(jù)庫完成數(shù)據(jù)存儲、打印、曲線分析等功能,并能根據(jù)歷史數(shù)據(jù)進行回放,對參數(shù)進行規(guī)律總結,繼而進行趨勢分析和預測。1.2國內(nèi)外研究現(xiàn)狀隨著電子技術的不斷發(fā)展以及新技術,新材料的應用,集成電路的集成度也越來越高,單片機技術也廣泛應用于各類測試儀器,使得儀器儀表的功能越來越強,水質檢測儀也正往這個方向發(fā)展著。目前,國內(nèi)外水質檢測儀存在兩個發(fā)展趨勢:一是向著多參數(shù)、全自動、高精度方向發(fā)展;另一個是向著微型化、智能化、便攜化、低成本方向發(fā)展。歐美國家在水質檢測方面研究起步較早,且有許多專門廠家生產(chǎn)出成熟的產(chǎn)品,但這些裝置大都售價較高也難維護。而我國國內(nèi)具備一些常規(guī)的水質檢測儀器的生產(chǎn)研發(fā)能力,但由于起步較晚,許多技術尚不成熟,相應的軟件設計也并不多。一些國內(nèi)企業(yè)引進了國外的水質在線連續(xù)監(jiān)測設備,但價格昂貴,而且由于缺乏基礎研究,不能充分消化吸收相應的技術,加上缺乏配套的管理政策,使得監(jiān)測數(shù)據(jù)不能作為法定數(shù)據(jù)使用,污染企業(yè)和環(huán)境監(jiān)測部門都缺乏積極性。相應的軟件開發(fā)人員也并不多,軟件開發(fā)項目缺乏。隨著我國環(huán)境保護力度的不斷加強和國內(nèi)技術的日益成熟,國內(nèi)很多公司自行研制了水質檢測儀器,國內(nèi)的研制重點為檢測單項指標的儀器,技術水平已接近發(fā)達國家水平,可靠性比較高,然而對水質監(jiān)測系統(tǒng)的研究還比較落后研究開發(fā)適合我國國情的水質監(jiān)測系統(tǒng)迫在眉睫。1.3課題主要研究內(nèi)容針對水質多參數(shù)檢測軟件的設計要求,在充分研究串口通信,水質檢測方法的基礎上,以windows操作系統(tǒng)為軟件設計平臺,采用面向對象的C++編程方法,旨在設計出水質多參數(shù)檢測應用軟件,實現(xiàn)系統(tǒng)流程控制、測試分析、用戶軟件界面等功能。本文的主要研究內(nèi)容有:(1)水質多參數(shù)檢測主體軟件設計。該軟件基于VisualC++6.0軟件開發(fā)平臺,能對每次檢測進行數(shù)據(jù)處理和記錄,生成報表,提供歷史數(shù)據(jù)的查詢,并具備數(shù)據(jù)傳輸?shù)裙δ埽?)人機界面設計。同樣利用VisualC++6.0軟件開發(fā)平臺,設計具有親和力的,簡潔的操作界面,便于用戶操作。(3)軟硬件的通信方式設計。研究串口通信協(xié)議的細節(jié),實現(xiàn)計算機和控制模塊、數(shù)據(jù)采集卡之間以串行通信的方式進行通信。第二章課題涉及的關鍵技術2.1RS-232通信串行通訊要求通訊雙方都采用一個標準接口,使不同的設備可以連接起來進行通訊。RS-232串口通信協(xié)議就是其中一種,它是現(xiàn)在主流的串行通信接口之一。RS-232C是1969年美國電子工業(yè)協(xié)會(EIA)公布的串行接口標準。推薦標準(Recommendedstandard,RS)中,C表示修改次數(shù)。它規(guī)定連接電纜和機械、電氣特性、信號功能及傳送過程。常用物理標準還有有RS-232-C、RS-422-A、RS-423A、RS-485。
這里只介紹RS-232-C(簡稱232,RS232)。
例如,目前在IBM
PC機上的COM1、COM2接口,就是RS-232C接口。RS-232的電氣特性如下:RS-232被定義為一種在低速率串行通信中增加通信距離的單端標準。該標準規(guī)定采用一個25個腳的DB25連接器,對連接器的每個引腳的信號內(nèi)容加以規(guī)定,還對各種信號的電平加以規(guī)定。RS-232采取不平衡傳輸方式,即單端通信。收、發(fā)端的數(shù)據(jù)信號是相對于信號地,如從DTE設備發(fā)出的數(shù)據(jù)在使用DB25連接器時是2腳相對7腳信號地的電平。RS-232C是用正負電壓來表示邏輯狀態(tài),與TTL以高低電平表示邏輯狀態(tài)的規(guī)定不同。需要在RS-232C與TTL之間進行一個電平和邏輯關系的變換,這樣才能夠連接計算機接口或終端的TTL器件。RS-232是為點對點通信而設計的,其驅動器負載為3K~7K。由于其發(fā)送電平與接收電平的差僅為2V至3V左右,所以其共模抑制能力差,再考慮雙絞線上的分布電容,我們可以判斷它的最大傳送距離約為15米,最高速率能達到20kb/s。因此RS-232十分適合本地設備間的相互通信。RS-232-C標準,主要是數(shù)據(jù)終端設備(DTE)和數(shù)據(jù)通訊設備(DCE)之間的連接定義,其包括接口的電氣特性、機械特性等。該標準是根據(jù)DCE與DTE而制定的,并未考慮計算機的特性。RS-232-C接口連接器一般有9芯或25芯兩種標準,更多的為DB-25的25芯插頭座,其插頭在DCE端,插座在DTE端。RS-232-C串行標準接口信號定義如下所示:利用VC++提供的MSComm控件實現(xiàn)串行通信。MSComm是Microsofl公司提供的簡化Windows下串行通信編程的ActiveX控件,它為應用程序提供了通過串行接口收發(fā)數(shù)據(jù)的簡便方法。一、MSComm控件屬性要想運用MSComm控件,首先應為其準備一個“容器”,這里可以使用對話框來容納它。VC++中與控件相對應的CMSConim類提供了許多針對該控件的函數(shù)。而為實現(xiàn)本設計功能用到的屬性有:①PortOpen:設置并返回通信端口的狀態(tài)。也用來打開和關閉串口。②Settings:設置并返回串口的波特率、數(shù)據(jù)位、停止位等參數(shù)。③InputMode:設置或返回傳輸數(shù)據(jù)的類型。④InBufferSize/ OutBufferSize:設置或者返回輸入/輸出緩沖區(qū)的大小。⑤RTThreshold:通過該屬性設置接收緩沖區(qū).收到多少個字符才會激發(fā)OnComm 事件。⑥InputLen:設置并返回Input屈性從接收緩沖|x;-次讀取的字符個數(shù)。⑦Input:從接收緩沖區(qū)中讀出數(shù)掘。二、MSComm控件兩種處理通信的方法:事件驅動:每當有新字符到達,或端口狀態(tài)改變,或發(fā)生錯誤時,使用MSComm控件的OnComm事件捕獲和處理這些通信事件,之后再利用MSComm控件的CommEvent屬性可以獲知所發(fā)生的事件或錯誤,從而采取相應的操作。檢測屬性:在每執(zhí)行完一個串口操作后檢查CommEvent屬性的值來檢查執(zhí)行結果或者檢查某一事件是否發(fā)生。其中MSComm控件有很多重要的屬性,包括CommPort,RThreshold,CTSHolding
,SThreshold,CDHolding,DSRHolding
,Settings及InputLen。數(shù)據(jù)庫訪問技術將數(shù)據(jù)庫外部與其通信的過程抽象化,通過提供訪問接口,簡化了客戶端訪問數(shù)據(jù)庫的過程。一個好的數(shù)據(jù)庫訪問接口就好象程序代碼的放大鏡,如下圖所示:2.2.1數(shù)據(jù)庫操作語言SQLSQL是一個通用的、功能強大的關系數(shù)據(jù)庫操作語言,其主要特點有:(1)面向集合操作,一次針對一個集合進行查詢。(2)高度非過程化,用戶不必了解其具體的工作過程,只需知道做什么就可以(3)集數(shù)據(jù)定義、數(shù)據(jù)查詢和數(shù)據(jù)控制功能于一體。(4)統(tǒng)一語法結構的兩種使用方式,簡單易學。結構化查詢語言包含6個部分:一:數(shù)據(jù)查詢語言(DQL:DataQueryLanguage):也稱為“數(shù)據(jù)檢索語句”,主要用于從表中獲得數(shù)據(jù),并決定數(shù)據(jù)以怎樣的方式在應用程序給出。SELECT是一個典型的數(shù)據(jù)查詢保留字,它也是SQL中用的最多的一個動詞。其他常用DQL保留字還有WHERE,ORDERBY,GROUPBY和HAVING。一般我們會將這些DQL保留字與另外5種語言共同使用,以達到預期的設計目的二:數(shù)據(jù)操作語言(DML:DataManipulationLanguage):也稱為動作查詢語言,主要包括動詞INSERT(添加),UPDATE(修改)和DELETE(刪除)。這些都是對行進行的操作,同樣也是搭配其他語言同時使用。三:事務處理語言(TPL):利用該語言確保被動作查詢語句影響的表的所有行都能及時更新。它包括BEGINTRANSACTION,COMMIT和ROLLBACK三個語言。四:數(shù)據(jù)控制語言(DCL):通過GRANT或REVOKE獲得許可,以確定單個用戶或用戶組對數(shù)據(jù)庫對象的訪問。某些關系數(shù)據(jù)庫管理系統(tǒng)可用GRANT或REVOKE控制對整個表的單列進行訪問。五:數(shù)據(jù)定義語言(DDL):包括動詞CREATE和DROP。用以創(chuàng)建新表或刪除舊表,或者為表加入索引等。數(shù)據(jù)定義語言包括許多數(shù)據(jù)庫目錄中與數(shù)據(jù)有關的保留字。同時它也是動作查詢的一部分。六:指針控制語言(CCL):該語句例如DECLARECURSOR,F(xiàn)ETCHINTO和UPDATEWHERE等可用于對一或多個表的單獨一行的操作而不影響其他行。該語句能準確的對某一行或某幾行進行所需的操作。2.2.2常見的數(shù)據(jù)庫接口目前Windows系統(tǒng)上常見的數(shù)據(jù)庫接口包括:ODBC(OpenDatabaseConnectivity),開放數(shù)據(jù)庫互連。ODBC是上個世紀八十年代末九十年代初出現(xiàn)的技術,它為編寫關系數(shù)據(jù)庫的客戶軟件提供了一種統(tǒng)一的接口。ODBC提供一個單一的API,可用于處理不同數(shù)據(jù)庫的客戶應用程序。使用ODBCAPI的應用程序可以與任何具有ODBC驅動程序的關系數(shù)據(jù)庫進行通信。ODBCAPI有一個明顯的弱點,即在編程時要編寫大量的程序代碼。因此自MFC1.5版本起,就引入了ODBCAPI的封裝類,這些類封裝了大部分的ODBCAPI,而通過這些類的接口,大大簡化了編程過程,減少了開發(fā)人員的工作量。DAO(DataAccessObject),數(shù)據(jù)訪問對象。DAO就是一組MicrosoftAccess/Jet數(shù)據(jù)庫引擎的COM自動化接口。ODBC是面向C/C++程序員的,而DAO則并不一樣,它是Microsoft提供給VB開發(fā)人員的一種較為簡單的數(shù)據(jù)訪問方式,它一般被用作操縱Access數(shù)據(jù)庫。不過目前此技術有被OLEDB/ADO取代的趨勢,所以一般也不再用。RDO(RemoteDataObject),遠程數(shù)據(jù)對象。RDO直接調用了ODBCAPI而并不通過Jet引擎,因此其能為任何使用關系數(shù)據(jù)庫的應用提供更好的性能。不過和DAO同樣隨著技術的發(fā)展,已經(jīng)慢慢不再被使用。OLEDB,對象鏈接與嵌入數(shù)據(jù)庫。OLEDB是在ODBC進行擴展并升級而來的。主要在兩個方面進行了擴展:第一其為數(shù)據(jù)庫編程提供了一個COM接口;再是,其又提供了一個可用于關系型和非關系型數(shù)據(jù)源的接口。利用OLEDB的提供程序(Provider)和用戶程序(Consumer)即可進行程序設計。ADO(ActiveXDataObject),ActiveX數(shù)據(jù)對象,它是建立在OLEDB之上的另一種技術。而實際上ADO就是一個OLEDB用戶程序,任何用ADO的應用程序都要間接地使用到OLEDB。ADO的優(yōu)勢是,它簡化了OLEDB,并同時提供了自動化支持,令一些腳本語言也能夠通過這種方式訪問數(shù)據(jù)庫。而本設計采用的正是ADO技術。數(shù)據(jù)庫接口技術為我們訪問數(shù)據(jù)庫提供了一種更為簡便,系統(tǒng)的方式,通過這種方式大大減少了我們的重復性勞動,也節(jié)省了更多時間。但同時對于不同的設計選擇不同的技術也會對我們的工作效率產(chǎn)生很大影響。2.2.3常用的數(shù)據(jù)庫1.IBM的DB21997年,IBM完成了SystemR系統(tǒng)的原型,并在一年后開始提供集成的數(shù)據(jù)庫服務器System/38,之后又同樣推出了SQL/DSforVSE和VM。又過了兩年,DB2forMVSV1正式推出。它的簡單性,數(shù)據(jù)不相關性以及用戶生產(chǎn)率都如它所設計的一樣廣受好評。再過五年DB2forMVS為用戶提供了強大的在線事務處理支持。IBM仍致力于研發(fā)更強大的數(shù)據(jù)庫,而1989年和1993年遠程工作單元和分布式工作單元所支持的分布式數(shù)據(jù)庫也陸續(xù)推出。IBM作為關系數(shù)據(jù)庫領域的開拓者和領航人,最近又是推出了DB2UniversalDatabase6.1版本,這是通用數(shù)據(jù)庫的典范,而且它也是第一個具備網(wǎng)上功能的多媒體關系數(shù)據(jù)庫管理系統(tǒng),支持平臺眾多。2.OracleOracle作為SDL的前身,由三個編程人員在1977年創(chuàng)辦,一早就開發(fā)了自己的拳頭產(chǎn)品往市場上發(fā)售。兩年后,Oracle公司又引入了它的第一個商用SQL關系數(shù)據(jù)庫管理系統(tǒng)。Oracle作為開發(fā)關系數(shù)據(jù)庫的廠商的前輩,它的產(chǎn)品幾乎支持所有操作系統(tǒng),因而他在數(shù)據(jù)庫市場的地位十分高。3.SQLServerMicrosoftSQLServer是一個全面的數(shù)據(jù)庫平臺,它為我們提供了更為安全可靠的存儲功能,使關系型數(shù)據(jù)和結構化數(shù)據(jù)能夠更為穩(wěn)定的開發(fā)。同時我們可以設計可用性和體驗性更好的的數(shù)據(jù)庫應用程序。SQLServer更是一種具有豐富開發(fā)環(huán)境的關系數(shù)據(jù)庫系統(tǒng),其運行速度十分快,并能迅速響應任何系統(tǒng)要求,在提高用戶的操作速度的同時,也幫助用戶在多臺工作站時不會遇到并發(fā)操作時所遇到的數(shù)據(jù)損壞和壞死,優(yōu)化了系統(tǒng)結構,并提高了系統(tǒng)查詢效率。利用VC提供的ODBC接口,使用標準函數(shù)和結構化查詢語言(SQL)對數(shù)據(jù)庫進行操作,編制簡潔明了的界面來對數(shù)據(jù)庫的數(shù)據(jù)進行管理。主要擁有SQLServer2000,SQLServer2005,SQLServer2008及SQLServer2012等多個版本。2.3Vc++基礎知識及界面設計VC++是目前使用極為廣泛的可視化編程環(huán)境,對于開發(fā)Windows系統(tǒng)上的各種應用程序來說非常方便,它的語言功能非常強大,函數(shù)支持異常豐富,網(wǎng)絡支持好,且提供了功能強大的向導工具來簡化Windows應用程序的開發(fā),它的MFC類庫支持多線程應用程序的開發(fā)。利用其來開發(fā)基于SQLServer數(shù)據(jù)庫的系統(tǒng)軟件具有很高的實用價值。2.3.1MFC基礎介紹MFC(C++的圖形化界面語言),是微軟公司實現(xiàn)的一個c++類庫,主要封裝了大部分的windowsAPI函數(shù),并且包含一個應用程序框架,以減少應用程序開發(fā)人員的工作量。其中包含的類包含大量Windows句柄封裝類和很多Windows的內(nèi)建控件和組件的封裝類。MFC要編寫的程序在功能上是千差萬別的,但從本質上來講,都可以歸為用戶界面設計、對文件的操作、多媒體的使用、數(shù)據(jù)庫的訪問等一些最主要的方面。這正是微軟提供MFC類庫的嘴重要的原因,在這個類庫中包含了在一百多個程序開發(fā)過程中最常用到的對象。MFC充分利用了面向對象技術的優(yōu)點,才使得編程時極少需要關心對象方法實現(xiàn)細節(jié),從而使得開發(fā)人員的工作量大大減少。下面介紹幾個重要的MFC類:CWnd:窗口,Windows里幾乎所有看得見的東西都是一個窗口,窗口可以互相覆蓋。而一般的視圖CView、框架窗口CFrameWnd、工具條CToolBar(現(xiàn)為CMFCToolBar)、對話框CDialog、按鈕CButton等都是由窗口所派生出來的。CDocument:文檔,內(nèi)存數(shù)據(jù)與磁盤的交互工具。其中OnOpenDocument(讀取),OnSaveDocument(寫入),Serialize(序列化讀寫)都是該類的重要函數(shù)。通過調用函數(shù)可以完成對磁盤數(shù)據(jù)的操作CView:視圖,內(nèi)存數(shù)據(jù)與用戶的交互工具。數(shù)據(jù)的顯示、用戶操作的響應等都可以通過該類來進行操作。其中OnDraw(窗口重畫),用CWnd::Invalidate()來代替其本身的函數(shù)。而一般菜單、工具條、快捷鍵或者其他用戶消息也都是在這里調用函數(shù)來進行操作。CDC:設備文本。任何與畫圖有關的操作都與該類有關,而實際上打印或是顯示都是畫圖操作。而MFC則就將其抽象為CDC。CDC與其他GDI(圖形設備接口)一起,幫助我們完成各種文字和圖形、圖像的顯示工作。CDC就相當于一張白紙,每個窗口都有一個CDC相互聯(lián)系。而其中最常見的就是CDC的一個子類CClientDC,一般由其負責畫圖。CDialog:對話框。CWinApp:應用程序類。相當于C語言中的main函數(shù),是程序執(zhí)行的入口和管理者,所有程序建立、消滅以及各類文檔等的操作一般都由其控制。最常用函數(shù)InitInstance():初始化。2.3.2ActiveX控件安裝本次設計主要使用MSComm,NT-Graph和FlexGrid控件分別控制程序的串口通訊,動態(tài)曲線的繪制以及數(shù)據(jù)表格。這些ActiveX控件一般在安裝完VC++后會自動注冊到操作系統(tǒng)中,但有些時候某些控件并沒有被注冊,這時就需要我們自己去完成該控件的注冊。在Windows下完成ActiveX控件的注冊,有以下三種方式:①使用Regsvr32命令對控件進行注冊。按照“regsvr32+控件路徑”的格式輸入命令從而進行注冊。對于少量的控件注冊可以采用本方式,但對于多數(shù)量控件注冊,該方式操作麻煩且容易出現(xiàn)錯誤,解除注冊也需要手動解除,并不適合。②使用InstallShield等軟件可以制作安裝程序,然后在安裝程序中解決上述問題。與第一種方式相反,一般大型的應用軟件才考慮制作一個安裝程序,對中小型應用軟件,安裝程序會使程序顯得臃腫,因此也并不適用。③程序初始化時同時自動注冊。讓程序自身完成注冊,注冊結束后再開始運行。這種方式較適合一般的軟件開發(fā)。第三章系統(tǒng)需求分析及總體設計3.1需求分析本課題主要分為三個部分的設計:計算機與數(shù)據(jù)采集裝置之間的通信:通過串口向采集系統(tǒng)進行數(shù)據(jù)和命令的交換,用以收集系統(tǒng)的數(shù)據(jù),并能控制各個系統(tǒng)的工作狀態(tài)以及進行各項參數(shù)的設定。采集數(shù)據(jù)的存儲:對采集裝置采集的數(shù)據(jù)利用數(shù)據(jù)庫進行存儲,并能通過波形的方式進行顯示,以便于之后的數(shù)據(jù)讀取與各項分析。界面設計:設計具有親和力的,簡潔的操作界面,便于用戶操作。主要應包括主界面,信號參數(shù)處理及設置界面,圖形繪制界面,數(shù)據(jù)查詢界面等。水質多參數(shù)采集軟件水質多參數(shù)采集軟件人機交互實時控制數(shù)據(jù)管理窗口管理用戶操作數(shù)據(jù)顯示曲線顯示歷史報表歷史曲線數(shù)據(jù)存儲3.2MSComm控件編程利用MFC提供的MSComm控件對串口數(shù)據(jù)進行采集。使用MSComm進行通信的編程步驟主要有加載MSComm控件、初始化并打開串行端口、捕獲串行端口事件、串口端口數(shù)據(jù)讀寫以及關閉串行端口五個步驟。①加載MSComm控件首先,在對話框中創(chuàng)建通信控件,一般工具欄中沒有該控件,這時我們可以通過菜單工程-->添加到工程-->ComponentsandControl來插入,之后將該控件拉到對話框中就可以完成控件的添加。最后我們需要關注控件提供的對通訊驅動程序的API函數(shù)接口,也就是說需要設置并監(jiān)視MSComm控件的屬性和事件。②打開串口:if(m_ctrlComm.GetPortOpen())m_ctrlComm.SetPortOpen(FALSE);//判斷串口狀態(tài)index=((CComboBox*)GetDlgItem(lDC_COMB014))->GetCurSel();((CComboBox*)GetDlgItem(lDC_COMB014))->GetLBText(index,strl);strtempl=(char*)strl.GetBuffer(strl.GetLength());BT=atol(strtemp]);//波特率按照同樣的方法再依次獲得用戶選擇的數(shù)據(jù)位值、停止位值、校驗位值、串口號。m_ctrlComm.SetCommPort(5);//獲取用戶選擇的串口號并置為當前str6.Format("%s,%s,%s,%s",str2,str5,str3,slr4);m_ctrlComm.SetInputMode(]);//對MSComm控件迸行設置m_ctrlComm.SelJnBufferSi2e(]024);m_ctrlComm.SelOutBufferSize(]024);m_ctrlComm.SetSettings(str6);if(!m_ctrlComm.GetPortOpen())m_ctrlComm.SetPortOpen(TRUE);m_ctrlComm.SetRThreshold(l);m_ctrlComm.SetInputLen(0);m_ctrlComm.Getlnput();③串口數(shù)據(jù)發(fā)送:ADDCRC(string);//在一串字符后面加上CRC碼SendData(m—ADDCRCtemp);//以十六進制形式發(fā)送VOIDCSCOMMDlg::ADDCRC(CString311")//在一帶數(shù)據(jù)后而加上CRC值{if(pc[n]>='0'&&pc[n]<='9')pc[n]=pc[n]-48;//輸入的是數(shù)字elseif(pc[n]>=*a'&&pc[n]<=T)pc[n]=pc[n]-87;//輸入的是字temp[t]=pc[n]*16+pc[n+l];CRC16(temp,j);//計算CRCTXSTRING=ss+strtemp_crc;m_ADDCRCtemp=TXSTRING;}帶CRC的數(shù)據(jù)發(fā)送,涉及到自身測試,包含了串口通信測試功能。④串口數(shù)據(jù)讀?。簐oidCSCOMMDlg::OnComm(){if(m_ctrlComm.GetCommEvent()==2){variant_inp-m_ctrlComm.GeUnput()://原始數(shù)據(jù)的獲取Safearray_inp=variant_inp;len=safearray_inp.GetOneDimSize();for(k=0;k<len;k++)safearray_inp.GelElemenl(&k,rxdala+k);}m_strRDtemp=m_strEditRXData;初步數(shù)據(jù)寄存,為下面的專項數(shù)據(jù)處理做準備}由于有數(shù)據(jù)到來時就會響應OnComm()函數(shù),可以在此函數(shù)中對數(shù)據(jù)完成接收和初步的處理。以上介紹了利用MSComm控件對串口進行的一些簡單操作,以及在本設計中串口通信的具體實現(xiàn)程序,之后相似內(nèi)容不再贅述。3.2數(shù)據(jù)庫編程數(shù)據(jù)庫中的信息主要來自于用戶的交互輸入,對上述所有信息的存儲和管理,只需要一張數(shù)據(jù)庫表即可。創(chuàng)建Access2000數(shù)據(jù)庫info,然后,在該數(shù)據(jù)庫內(nèi)按照需求創(chuàng)建表info,表結構如下表所示:字段名稱數(shù)據(jù)類型字段屬性字段大小允許空字符索引是否主鍵序號自動編號長整型—有(無重復)是時間文本50否無否PH值文本50否無否溫度文本50否無否濁度文本50否無否表中的每一條記錄都是由該記錄的自動編號唯一確定,使用日期、編號對存儲數(shù)據(jù)進行檢索。在使用ADO對數(shù)據(jù)庫操作以前,同樣需要做一些準備工作,主要包括導入ADO動態(tài)鏈接庫、初始化OLE/COM環(huán)境一節(jié)連接數(shù)據(jù)庫等。3.2.1導入ADO動態(tài)鏈接庫在工程的頭文件中,用直接導入符號#import導入ADO庫文件,以使編譯器能正確的編譯,代碼如下:#import“C:\programfiles\commonfiles\system\ado\msado15.dl”\no_namespacerename(“EOF”,”adoEOF”)3.2.2初始化OLE/COM庫環(huán)境利用應用類的InitInstance成員函數(shù)里,直接使用AfxOleInit,在退出應用時,該函數(shù)也負責COM資源的釋放,將此函數(shù)添加在InitInstance中如下的位置:BOOLCWaterApp::InitInstance(){AfxEnableControlContainer();//初始化OLEDLLsIf(!AfxOleInit()){AfxMessageBox(“初始化OLEDLL失?。?“));ReturnFALSE;}...}3.2.3連接數(shù)據(jù)庫為應用類添加如下公有成員變量://Attributespublic://聲明一個指向要創(chuàng)建的ADO對象的智能指針_ConnectionPtrm_pConnection;使用類向導為應用類添加BOOL型成員函數(shù)ConnectionDb,該函數(shù)用于應用程序到數(shù)據(jù)庫的連接,代碼略。將此函數(shù)添加到InitInstance中相應的位置,并且通過調用SetWindowsText將主框架的標題更改為“水質多參數(shù)采集管理系統(tǒng)”。(4)將數(shù)據(jù)添加到數(shù)據(jù)庫:UpdateData(TRUE);//獲取用戶創(chuàng)建的數(shù)據(jù)庫名稱//打開數(shù)據(jù)庫m_pConnection.CreateInstance(_uuidof(ADODB::Connection));m_pConnection->Open(_bstr_t((LPCTSTR)DBName),"","",ADODB::adModeUnknown);m_pRecordset.CreateInstance(_uuidof(ADODB::Recordset));//寫入各字段值CStringm_CurTime=Time.Format("%Y-%m-%d%H:%M:%S");m_pRecordset->AddNew();m_pRecordset->PutCollect(“序號”,_variant_t((long)k));m_pRecordset->PutCollect(“日期”,_variant_t(m_CurTime));m_pRecordset->PutCollect(“水溫”,_variant_t(m_temperature));m_pRecordset->PutCollect(“PH值”,_variant_t(m_ph));m_pRecordset->PutCollect(“濁度”,_variant_t(m_zuo));m_pRecordset->Update();3.2.4常見的數(shù)據(jù)庫操作歷史數(shù)據(jù)表格化顯示:voidCSCOMMDlg::OnBtnVlEWdb()//査符數(shù)據(jù)庫函數(shù){ CDLG1dlg1;dlg1.m_dbname=m_dbName;dig1.m_tablename=rn_tableName;dlg1.DoModal();}voidCDLGl::OnVIEW(){//連接數(shù)據(jù)庫m_pConnection.CreateInstance(_uuidof(ADODB::Connection));m_pConnection->Open(_bstr_t(DBName),”","",ADODB::adModeUnknown);m_pRecordset.CreateInstance(_uuidof(ADODB::Recordset));m_pRecordset->CursorLocation=ADODB::adUseClient;ADODB::adOpenDynamic,ADODB::adLockOptimistic,ADODB::adCmdText);m_pRecordset->Open(_bstr_t(Tname),_variant_t((IDispatch*)m_pConnection);//初始化表格CStringHeadSt=_T(“序號|日期|水溫|PH值|濁度”);//將數(shù)據(jù)顯示到表格中for(longCurRow=1;CurRow<=RecordNum;CurRow++){m_DataGrid.SetRoAv(CurRow);m_DalaGrid.SelCol(CurCol);vstr=m_pRecordset->GetCollect(“序號”);m_DataGrid.SetText(str);m_DataGrid.SetCol(++CurCoI);vstr=m_pRecordse->GetCollect(“日期”);...vstr:m_pRecordset->GetCollect(“濁度”);m_pRecordset->MoveNext();m_DataGrid.Refresh();}3.3界面編程3.3.1工程建立及相關控件使用類向導創(chuàng)建名為“Water”的工程,旋選擇對話框創(chuàng)建。首先進行ActiveX控件的安裝。本設計采用讓程序自身完成注冊,注冊完成后再運行的方式。因此該方式要求在程序創(chuàng)建實例之后,界面形成之前,完成控件的注冊,也就是要在程序的實例類中的初始化函數(shù)InitlnstanceO中完成。該方法需要從VC++中提取出程序用到的ActiveX控件,把它們放到程序的第一層目錄下??梢允褂靡韵麓a實現(xiàn):LPCTSTRpszDllName;pszDllName="D:\\SCOMM_static\\MSCOMM32.ocx";HINSTANCEhLib=LoadLibrary(pszDllName);if(hLib<(HINSTANCE)HINSTANCE_ERROR){::MessageBox(NULL,“不能載入Dll文件!”,“結果”,MB_OK);returnFALSE;}FARPROCIpDllEntryPoint;lpDllEntryPoint=GetProcAddress(hLib,_T("DllRegisterServer"));完成各個控件的注冊后,進行主體代碼的編寫。監(jiān)測各參數(shù)的變化并用曲線動態(tài)表示,以直觀的方式顯示給用戶。利用NT-Graph控件進行編寫。//設置畫圖曲線的顏色等參數(shù)m_NTgraph.ClearGraph();m_NTgraph.SetElementLineColor(RGB(0,255,0));m_NTgraph.AddElement();m_NTgraph.SetElementLineColor(RGB(255,0,0));m_NTgraph.SetElementIdentify(FALSE);m_NTgraph.SelShowGrid(TRUE);m_NTgraph.SetXGridNumber(xnumber);//設置X軸等分點數(shù),m_NTgraph.SetYGridNumber(ynumber);//設置Y軸等分點數(shù)m_NTgraph.SetXLabel("時間/h”);//設置橫軸名稱m_NTgraph.SetYLabel(“PH值");//設置縱軸名稱m_NTgraph.SetRange(x0,x1,y0,y1);//設置橫軸和縱軸的范圍SetTimer(l,1500,NULL);3.3.2界面構思界面總體分為四個模塊:(1)串口通信界面:包括串口的打開,關閉,以及所連接的COM口號,波特率的顯示。創(chuàng)建兩個按鈕,打開串口與關閉串口,同時寫上相應的代碼控制。后兩個則使用選擇窗,顯示當前所選擇的具體內(nèi)容。(2)數(shù)據(jù)庫界面:該界面又同時包括兩個部分。第一個部分是創(chuàng)建數(shù)據(jù)庫和表按鈕,用以產(chǎn)生一個空的數(shù)據(jù)庫來存儲數(shù)據(jù);再加上顯示已創(chuàng)建的數(shù)據(jù)庫名稱窗口及數(shù)據(jù)庫中表的名稱,這兩個都使用編輯框處理顯示當前數(shù)據(jù)庫及表的名稱。第二部分是“將數(shù)據(jù)存入數(shù)據(jù)庫”復選框,在勾選時能夠將得到的數(shù)據(jù)存入數(shù)據(jù)庫中。(3)曲線顯示界面:利用NT-Gr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國端子臺短路片市場調查研究報告
- 2025至2031年中國靜電腕帶測量儀行業(yè)投資前景及策略咨詢研究報告
- 2025年度臨時彩鋼活動房租賃合同范本3篇
- 2024碎磚再利用工程采購合同書3篇
- 2024消防無人機系統(tǒng)采購合同
- 2025年度鮮蛋養(yǎng)殖戶互助合作供銷合同范本(2025版)3篇
- 二零二五年度航空物流樞紐建設與運營合同3篇
- 2025年度項目部承包智慧社區(qū)建設項目合同2篇
- 2024版工程勞務分包合同參考范本
- 2025便利店品牌升級商品采購合作協(xié)議3篇
- 2025年河北供水有限責任公司招聘筆試參考題庫含答案解析
- Unit3 Sports and fitness Discovering Useful Structures 說課稿-2024-2025學年高中英語人教版(2019)必修第一冊
- 農(nóng)發(fā)行案防知識培訓課件
- 社區(qū)醫(yī)療抗菌藥物分級管理方案
- NB/T 11536-2024煤礦帶壓開采底板井下注漿加固改造技術規(guī)范
- 2024年九年級上德育工作總結
- 2024年儲罐呼吸閥項目可行性研究報告
- 除氧器出水溶解氧不合格的原因有哪些
- 沖擊式機組水輪機安裝概述與流程
- 新加坡SM2數(shù)學試題
- 畢業(yè)論文-水利水電工程質量管理
評論
0/150
提交評論