基于VC++的汽車動(dòng)態(tài)稱重系統(tǒng)軟件設(shè)計(jì)與實(shí)現(xiàn)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
隨著我國(guó)經(jīng)濟(jì)的發(fā)展,作為國(guó)家經(jīng)濟(jì)命脈的公路運(yùn)輸量也急劇增加,而超重車輛所占的比例也與日俱增,這已對(duì)交通安全和公路壽命造成了嚴(yán)重威脅。在此情況下,由于傳統(tǒng)的靜態(tài)稱重存在效率低,占地面積大,移動(dòng)不方便等缺點(diǎn),已不能滿足發(fā)展的需要。于是車輛行駛稱重技術(shù)(Weigh in Motion,WIM)作為一種智能稱重技術(shù)已得到了廣泛研究和迅速發(fā)展。動(dòng)態(tài)稱重系統(tǒng)研發(fā)面臨的主要問(wèn)題是怎樣在保持高精度的情況下,提高車輛通過(guò)的速度并降低成本。解決方法有兩個(gè),一是引進(jìn)國(guó)外成套設(shè)備;二是自主研發(fā)。其中,引進(jìn)國(guó)外設(shè)備,因價(jià)格昂貴,維護(hù)不便等諸多因素,不能廣泛應(yīng)用;國(guó)內(nèi)對(duì)于動(dòng)態(tài)稱重系統(tǒng)的研究和生產(chǎn)較國(guó)外稍晚,但發(fā)展迅速并日趨成熟。目前,國(guó)內(nèi)較為流行的是軸重測(cè)量,即分別測(cè)出車輛各軸的軸重,再由稱重系統(tǒng)計(jì)算出整車重量。整個(gè)系統(tǒng)由傳感器、數(shù)據(jù)采集卡、應(yīng)用軟件、數(shù)據(jù)庫(kù)系統(tǒng)以及微處理器、LCD和打印機(jī)等組成。本文針對(duì)動(dòng)態(tài)稱重系統(tǒng)中數(shù)據(jù)采集、分析、處理、顯示、保存等環(huán)節(jié)的特點(diǎn),采用面向?qū)ο蟮脑O(shè)計(jì)思想,在VC++平臺(tái)下研發(fā)動(dòng)態(tài)稱重系統(tǒng)應(yīng)用軟件,該軟件具有實(shí)用性、可復(fù)用性、易擴(kuò)充及易維護(hù)等特點(diǎn)。
1 誤差分析及處理
動(dòng)態(tài)稱重系統(tǒng)的誤差來(lái)源包括動(dòng)態(tài)因素和靜態(tài)因素。動(dòng)態(tài)因素主要有汽車自身的振動(dòng)、稱重區(qū)路面的不平整,汽車經(jīng)過(guò)此區(qū)的速度及加速度。靜態(tài)因素主要體現(xiàn)在客觀環(huán)境的變化和硬件自身問(wèn)題,如:當(dāng)時(shí)系統(tǒng)所處溫度、傳感器是否運(yùn)行良好,模/數(shù)轉(zhuǎn)換的分辨率等。誤差的來(lái)源決定誤差的處理方式。一方面通過(guò)對(duì)檢測(cè)硬件條件和檢測(cè)方式的設(shè)定避免產(chǎn)生不必要的誤差,另一方面通過(guò)良好的數(shù)據(jù)處理方法提高軟件處理數(shù)據(jù)的精度,目前主要有以下幾種方法:ADV法、DV法、V法、位移積分法、補(bǔ)償法、專家系統(tǒng)、參數(shù)估計(jì)法、神經(jīng)網(wǎng)絡(luò)。在動(dòng)態(tài)稱重系統(tǒng)中濾波方法主要有:有限幅濾波、中值濾波、算術(shù)平均值、滑動(dòng)平均、加權(quán)平均濾波、復(fù)合濾波等方法。本軟件采用滑動(dòng)加權(quán)平均濾波,即設(shè)一個(gè)數(shù)據(jù)緩沖區(qū)依順序存放N次采樣數(shù)據(jù),每采進(jìn)一個(gè)新數(shù)據(jù),就將最先采集的數(shù)據(jù)丟掉,而后求包括新數(shù)據(jù)在內(nèi)的N個(gè)數(shù)據(jù)的加權(quán)平均值,便得到該次采樣的有效數(shù)據(jù)。
其中:
式中:Xn為第n次采樣經(jīng)濾波后的輸出;Xn-i為未經(jīng)濾波的第n-i次采樣值;N為滑動(dòng)平均項(xiàng)數(shù);Ci為加權(quán)。
2 應(yīng)用軟件的整體設(shè)計(jì)
2.1 系統(tǒng)結(jié)構(gòu)與主要模塊
本系統(tǒng)基于C/S三層架構(gòu),用戶接口層采用友好的GUI界面,主要是用戶相關(guān)操作的實(shí)現(xiàn)以及數(shù)據(jù)顯示;業(yè)務(wù)邏輯層進(jìn)行模塊化的設(shè)計(jì),包括參數(shù)設(shè)置、數(shù)據(jù)采集、傳輸和處理;數(shù)據(jù)庫(kù)服務(wù)器層對(duì)數(shù)據(jù)庫(kù)的操作進(jìn)行封裝,主要完成數(shù)據(jù)的保存與維護(hù)。整個(gè)軟件功能模塊圖如圖1所示,包含了數(shù)據(jù)傳輸、數(shù)據(jù)處理、輸入/輸出、數(shù)據(jù)顯示等四大模塊。以信號(hào)的處理與顯示為核心,信號(hào)的流向如圖2所示,首先在稱重區(qū)不斷得到重力傳感器所采集的電壓信號(hào),進(jìn)行濾波、放大、A/D轉(zhuǎn)換,并將所采集的數(shù)據(jù)根據(jù)上位機(jī)系統(tǒng)初始化形式,以串口或者網(wǎng)絡(luò)通信的方式傳輸,上位機(jī)對(duì)所接收的數(shù)據(jù)進(jìn)行判斷后,予以濾波、運(yùn)算、存儲(chǔ)、顯示,并將所得出的結(jié)果以委決書(shū)或發(fā)票回饋于車主。
2.2 類圖
通過(guò)此類圖完整顯示本汽車動(dòng)態(tài)稱重系統(tǒng)軟件的內(nèi)部靜態(tài)結(jié)構(gòu),如圖3所示。其中,CDatabase,CDis-pose,CDisplay,CTransport,CPrint,CQuery,CMotion-Line,CStaticLine分別表示數(shù)據(jù)庫(kù)連接類、數(shù)據(jù)處理類、數(shù)據(jù)顯示類、通信類、報(bào)表打印類、查詢類、動(dòng)態(tài)曲線和靜態(tài)曲線類。數(shù)據(jù)處理類對(duì)數(shù)據(jù)傳輸類具有依賴性。
3 軟件實(shí)現(xiàn)
3.1 傳輸實(shí)現(xiàn)
工控系統(tǒng)的數(shù)據(jù)通信一般以串口為主,但由于串口通信只能用于短距離通信,網(wǎng)絡(luò)通信也得到了一定的應(yīng)用。本系統(tǒng)在通用性的前提下實(shí)現(xiàn)串口和網(wǎng)絡(luò)通信兩種方式。考慮到汽車動(dòng)態(tài)稱重系統(tǒng)對(duì)數(shù)據(jù)的實(shí)時(shí)性、可靠性要求,通過(guò)對(duì)通信類采用多線程封裝,實(shí)現(xiàn)主動(dòng)發(fā)送串口和網(wǎng)絡(luò)監(jiān)聽(tīng)的實(shí)時(shí)數(shù)據(jù)采集,提高實(shí)時(shí)數(shù)據(jù)傳輸效率。用到的線程函數(shù)有兩個(gè),一個(gè)是監(jiān)聽(tīng)線程函數(shù)UINT ListenThread(LPVOID pParam),另一個(gè)是讀數(shù)據(jù)線程UINT ReadTread(LPVOID pParam)。由于本系統(tǒng)對(duì)同一串口的不同時(shí)讀寫(xiě),所以不存在同步操作,監(jiān)聽(tīng)線程在后臺(tái)通過(guò)對(duì)WaitCommEvent事件的監(jiān)聽(tīng)調(diào)用,讀取線程完成下位機(jī)數(shù)據(jù)的接收。
3.2 數(shù)據(jù)處理實(shí)現(xiàn)
由于動(dòng)態(tài)稱重過(guò)程中存在大量的動(dòng)態(tài)干擾因素,易造成傳輸模塊所傳數(shù)據(jù)存在較大誤差,所以首先選擇算法對(duì)接收數(shù)據(jù)濾波進(jìn)行預(yù)處理,然后進(jìn)行標(biāo)度轉(zhuǎn)換。數(shù)值計(jì)算求出軸重,而濾波是這部分的核心,下面給出加權(quán)滑動(dòng)平均濾波的主要實(shí)現(xiàn)代碼:
3.3 數(shù)據(jù)顯示
顯示模塊主要完成三方面內(nèi)容:采集所得實(shí)時(shí)數(shù)據(jù)的動(dòng)態(tài)曲線顯示,經(jīng)過(guò)處理后數(shù)據(jù)的靜態(tài)曲線顯示及整個(gè)軟件的界面顯示。動(dòng)態(tài)曲線和靜態(tài)曲線分別繼承類CDisplay,該類以虛函數(shù)的形式只提供接口,并未具體實(shí)現(xiàn);子類在繼承后根據(jù)自己的實(shí)際情況分別實(shí)現(xiàn)。顯示類的設(shè)計(jì)如下:
通過(guò)對(duì)CDrawItem類的封裝使軟件界面的顯示以Windows系統(tǒng)為標(biāo)準(zhǔn),堅(jiān)持置用戶與控制之下,減少用戶記憶負(fù)擔(dān),保持界面一致的原則。
3.4 數(shù)據(jù)庫(kù)類的設(shè)計(jì)
完成數(shù)據(jù)傳輸、處理以后,要對(duì)所得數(shù)據(jù)進(jìn)行存儲(chǔ),以便查詢、統(tǒng)計(jì)。通過(guò)對(duì)數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)的比較發(fā)現(xiàn),ADO數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)具有易于使用,速度快,內(nèi)存支出少等優(yōu)點(diǎn)。本系統(tǒng)選擇以MFC為基礎(chǔ),對(duì)其三個(gè)主要對(duì)象Connection,Command,Recordset的屬性和方法進(jìn)行封裝,并命名為CWimDataBase類。在任何要用到數(shù)據(jù)庫(kù)操作之處只需加入其頭文件“CWimData-Base.h”并聲明對(duì)象,則調(diào)用其公共屬性和方法即可進(jìn)行數(shù)據(jù)庫(kù)操作。
如:利用m_WimDb對(duì)象調(diào)用函數(shù)ConnectDb連接數(shù)據(jù)庫(kù)。
4 結(jié) 語(yǔ)
針對(duì)目前主流動(dòng)態(tài)稱重系統(tǒng)硬件結(jié)構(gòu)以及數(shù)據(jù)處理過(guò)程的特征,本應(yīng)用軟件采用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法進(jìn)行設(shè)計(jì)并予以實(shí)現(xiàn),充分利用了面向?qū)ο笾械睦^承、封裝及多態(tài)等特點(diǎn),實(shí)現(xiàn)了軟件的模塊化,達(dá)到了模塊之間高內(nèi)聚、低耦合。應(yīng)用測(cè)試表明,該軟件具有實(shí)用性、可復(fù)用性、易擴(kuò)充、易維護(hù)且界面友好,符合實(shí)際的應(yīng)用需要。