999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于VC++的汽車虛擬儀表設計與應用

2017-08-12 12:22:06
計算機應用與軟件 2017年8期
關鍵詞:汽車檢測設計

余 燕 娟

(漳州職業技術學院 福建 漳州 363000)

?

基于VC++的汽車虛擬儀表設計與應用

余 燕 娟

(漳州職業技術學院 福建 漳州 363000)

虛擬儀表技術是計算機技術與儀表技術結合的新興技術,其低成本、高效率的特點在瞬息萬變的汽車監測行業體現出了獨特的優勢。設計基于VC++的開發設計平臺,利用MFC可視化、框架結構設計特點,采取面向對象的C++語言結合圖形處理軟件PlotLab。該設計具有通用性高、可擴展性好的特點,已成功通過測試并且運行穩定。

虛擬儀表 VC++ 面向對象 PlotLab

0 引 言

汽車儀表作為人與汽車的溝通平臺,其精準性與穩定性關乎行車人員安全以及對于運行的判斷。隨著國內外汽車行業的迅猛發展,汽車種類也跟著層出不窮,不同型號的汽車中使用的儀表及指示器的結構、數量、工作原理各不相同。因此汽車儀表的檢測工作就常暴露出以下幾個問題:同一車輛不同儀表需分開進行測試;不同車輛的儀表型號區別導致硬件檢測平臺也要相應更換;檢測儀表設備價格昂貴、故障率較高。汽車儀表檢測呈現出檢測成本高、通用性差、檢測操作復雜等缺點[1,6-9]。

目前汽車儀表逐步向數字化、智能化、網絡化、微型化發展[1]。計算機技術和儀表儀器技術的完美結合誕生了虛擬儀表,汽車虛擬儀器設計也應運而生。相對汽車常規儀表,軟件虛擬儀表具備其獨特的優勢,其性能高、故障率低、成本低,同時用戶可根據需求輕松更改調試項目,因此汽車虛擬儀表更能適應當前瞬息萬變的汽車市場[2-14]。

1 面向對象完成虛擬儀表類的設計

1.1 面向對象技術設計優勢及虛擬儀表類設計

傳統汽車檢測的虛擬仿制常使用Matlab工具,此方式只能觀測到數據曲線,對汽車的儀表的真實情況及制動過程和方法不得而知,對于儀表測試人員而言,這種用戶體驗并非最佳狀態[2]。為提高用戶測試的可視性,本文的設計構建在窗口化界面基礎之上,利用VC++的圖形繪制的優勢,完成汽車儀表的真實模擬。

本設計在VS2010開發環境下,基于MFC結構化窗體設計模式,采用面向對象的設計方式,利用封裝、繼承、多態等特性,實現通過儀表類的設計。面向對象的設計方式將客觀事物的共性形成集合類,對象可根據自身特性和運行規律對類進行派生和繼承,子類可增加對象的特性函數,保證了共有特點的繼承和本身獨有特點。這種方式具有結構清晰、可重復性好[3]。本文根據實際儀表測試特點設計了可供用戶調用的基礎儀表類,用戶根據需求可調用本設計的儀表類,完成測試軟件的編程,從而縮短開發時間。基于本文虛擬儀表的軟件設計在開發效率、穩定性及可靠性上顯示出了優勢[4]。

汽車儀表檢測平臺常測試的項目包括汽車發動機轉速表、里程速度表、汽油表、發動機水溫表、制動及報警等。為了降低代碼冗余,保證代碼可重復性和使用效率,程序將各儀表測試內容分裝成了類:CCarMeter、CCarGauge、CAlarm等。其中,用戶可選擇CCarMeter類實現圓形儀表設計,如發動機轉速表、里程速度表,也可以選擇CCarGauge類可完成汽油表和水溫表的測試的顯示。為了保證用戶對于數據變化的掌握,本設計還引入了PlotLab曲線設計,用戶根據曲率變化可以更好了解掌握當前檢測狀態,這在制動檢測過程中顯得尤為重要。

1.2 虛擬表盤CCarMerter與柱表CCarGauge設計

基于C++面向對象具有繼承性和封裝性的特點,軟件把虛擬儀表常有的特性及操作設計成通用的儀表類。儀表繪制是采用Visual C++提供的CDC類,通過LineTo()(直線)、 Ellipse()(橢圓)、Arc()(弧形)等函數共同繪制。部分程序如下所示:

pDC->FillRect(rect, &m_brushBack);

//繪制背景

pDC->Rectangle(rect);//繪制一個邊框

CRect arcAngle(……);//畫外圈圓弧

pDC->Arc(&arcAngle, ptStart, ptEnd);

//畫刻度

pDC->MoveTo(……);

pDC->LineTo(……);

……

pDC->TextOut(……);

虛擬儀表類包含m_BackColor(背景顏色)、m_dMaxValue(表量最大值)、m_nTicks(量程刻度)等,其中通用屬性可以通過接口函數,如SetCurrentValue()、SetMeterBackColor()、SetTicks()等來進行設置,完成效果如圖1所示。

圖1 虛擬表盤與虛擬柱表

1.3 解決圖形閃爍的雙緩存技術

MFC窗體結構化設計中圖形繪制和更新是由消息響應WM_PAINT完成,在進行復雜的圖形處理時,重繪的圖形會因過度的刷新引起閃爍現象。為了解決圖形閃爍的問題,程序中自行設計了內存變量類CDiscMemDC,形成雙緩存。在繪圖刷新函數OnPaint()中通過中間變量先對圖形處理形成過渡,將復雜的圖形的操作轉入后臺處理,繪制完成后再顯示,以此來解決儀表圖形閃爍問題。代碼部分如下:

CBitmap m_bitmapMeterPlate;

//內存中承載臨時圖形的位圖

CBitmap *m_pbitmapOldMeterPlate;

//內存中承載臨時圖形的位圖指針

……

void CCarMeter::OnPaint()

{

CPaintDC dc(this);

//繪圖設備

GetClientRect (&m_rectCtrl);

// 獲得控件區域

CDiscMemDC memDC(&dc, &m_rectCtrl);

//緩存內存設備DC

……

m_dcMeterPlate.CreateCompatibleDC(&dc);

//依附窗口DC創建兼容內存DC

m_bitmapMeterPlate.CreateCompatibleBitmap(……) ;

//創建兼容位圖

DrawMeterBackground(……);

//繪制背景

……

memDC.BitBlt(……);

//后臺中間變量拷貝到前臺顯示

DrawNeedle(&memDC);

//繪制指針

DrawValue(&memDC);

//顯示值

}

1.4 立體效果設計

為了突出儀表立體效果,設計采用三色三重錯位繪制的方式繪制圖形,三種顏色分別繪制粗線、細線及陰影線,如下所示,使圖形更具立體感。

pDC->SelectObject(&penThick);

//繪制實線,顏色RGB(172, 168, 153)

pDC->MoveTo(rectScale.left, rectScale.bottom);

……

pDC->SelectObject(&penThin);

//繪制細線,顏色RGB(113, 111, 110)

pDC->MoveTo(rectScale.left + 1, rectScale.bottom);

……

pDC->SelectObject(&penShadow);

//繪制陰影線,顏色RGB(255, 255, 255)

pDC->MoveTo(rectScale.right - 1, rectScale.top + 1);

1.5 嵌入式PlotLab實現波形顯示

由Mitov公司設計的PlotLab軟件,包含可實現信號繪制和可視化的VCL控件,控件具備點狀圖、波形圖及柱狀圖等多種圖形模式,它可嵌入應用到Visual C++中,并且具備有多線程處理能力。

嵌入式PlotLab設計需先安裝PlotLab_VC軟件到開發系統中,然后將PlotLab_VC包含的庫添加到開發環境庫中。設計時在開發工程中進行庫調用命令如下所示:

#include

增加波形變量CTSLScope Scope1。在資源中添加一個STATIC控件作為圖形繪制的畫布,添加該Static變量m_ScopeSpeed。將波形變量與該控件關聯,指定STATIC畫布大小為波形繪制的載體,即可調用PlotLab軟件中關于波形處理的方法,通過接口函數完成波形設置。

Scope1.Open( m_ScopeSpeed.m_hWnd );

//關聯控件與波形類;

Scope1.Channels.Add(1);

//添加兩條曲線

Scope1.Title.Text=″里程速度值與發動機轉速波形圖″;

//這個曲線圖名稱

Scope1.Channels[ 0 ].Name = ″里程速度值″;

//添加波形曲線變量名1

Scope1.Channels[ 1 ].Name = ″發動機轉速″;

//添加波形曲線變量名2

Scope1.SizeLimit =201;

/////////////Y軸初始化/////

Scope1.YAxis.AxisLabel.Text = ″速度值(KM/H)″;

//Y軸坐標名字;

Scope1.YAxis.Max.Value = 8000.00;

//默認Y軸最大值

Scope1.YAxis.Min.Value = 0.00;

//默認Y軸最小值

Scope1.YAxis.Max.AutoScale = true;

//Y軸可根據動態數據變化坐標軸

……

開啟定時器SetTimer(0,100,NULL),定時器每隔100毫秒更新一次波形。當接收到新數據后,首先對數據進行處理,然后等定時器時間一到就在消息響應函數OnTimer()中自動調用波形顯示函數Scope1.Channels[0].Data.AddYPoint(Value),并將0通道的數值Value顯示在波形中。

1.6 多線程通信技術

軟件與測試平臺采用串口通信方式,VC++具有兩種串口編程方式,分別為MSComm控件調用和Windows的API函數。為了提高通信的效率及可拓展性,本設計的串口通信類采用API串口通信。通信設置有中斷重連機制,保證了通信可靠性,在串口網絡通信編程中,引入多線程技術可同時完成接收發送數據,改善吞吐量,避免阻塞,并利用自定義監視線程完成串口網絡通信的監督。串口監視線程方式如下:

UINT CSerialPort::CommThread(LPVOID pParam)

{

switch (dwError = GetLastError())

//通信狀態監測,錯誤停止通信線程

{ case ERROR_IO_PENDING: {//break;}

case 87: {//不處理,繼續break; }

default: {//繼續等待通信線程

port->ProcessErrorMessage("WaitCommEvent()");

break;}

}

……

Event = WaitForMultipleObjects(3, port->m_hEventArray, FALSE, INFINITE);

switch (Event)

{case 0://終止線程,關閉事件

{ port->m_bThreadAlive = FALSE;

return 0;break;}

case 1: //讀數據動作

{ ReceiveChar(port, comstat); break;}

case 2: //寫數據動作

{WriteChar(port);break;}

return 0;}

}

2 汽車電子平臺下虛擬儀表開發

2.1 虛擬儀表設計的平臺環境

汽車檢測平臺完成數據采集、信號處理、數據傳輸等一系列工作,其中數據獲取由傳感器實現,結構如圖2所示。DSP獲取有效數據并對數據進行格式處理,然后將數據上傳。上位計算機虛擬儀表軟件接收DSP上傳的數據然后進行數據處理、儀表顯示、波形顯示最后將數據存儲。其中,傳感器包括液位傳感器、轉速傳感器、溫度傳感器、制動傳感器[5,9]。

圖2 汽車虛擬儀表檢測平臺結構圖

為優化虛擬儀表上層測試軟件的可擴展性及通過性,本文對軟件設計的需求進行層次結構劃分,形成虛擬儀表測試軟件結構圖,如圖3所示。軟件需求設計及層次結構與軟件框架結構密切相關,編程技巧和設計風格也同軟件框架優劣有關系。本系統的軟件框架結構分成五個部分:用戶交互層、系統交互層、邏輯操作層、數據管理層及通用模塊。用戶交互層完成用戶的圖形繪制及數據顯示;系統交互層是軟件程序與開發系統的通信交互接口; 邏輯操作層是整個系統真正實現控制操作的部分,同時根據操作對象的不同,邏輯操作層又可劃分成數據處理、數據傳送等;數據管理層負責完成數據存儲。

圖3 汽車虛擬儀表測試軟件結構圖

2.2 虛擬儀表軟件設計

該系統采用的是MFC框架窗口設計模式。程序設計根據需求在軟件中添加測試需要的儀表類,并在工程頭文件中添加類頭文件:如添加CCarMerter類,需先在工程中添加#include ″CarMerter.h″。軟件在資源中添加STATIC控件,為該控件定義一個CCarMerter類型變量m_SpeedMerter,完成了STATIC控件與CCarMerter類關聯。根據儀表本身差異進行初始化設置,代碼如下所示:

/////設置速度表的基本特性

m_SpeedMeter.SetMeterBackColor(RGB( 0, 0, 255));

//背景顏色設置

m_SpeedMeter.SetRange(0.00,220.0);

//設置表盤的最小值和最大值

m_SpeedMeter.SetSubTicks(5);

//在兩個數據間分幾隔,默認是5隔

m_SpeedMeter.SetTicks(10);

//在最大數據與最小數據間分幾隔,默認是5

m_SpeedMeter.SetUnits(″KM/h″);

//設置儀表的單位

虛擬儀表檢測界面設有:CCarMeter車速儀表,用來顯示實時車速;CCarMeter發動機轉速表,顯示發動機轉速;設有CCarGauge柱狀類,用于顯示汽油量及溫度值。軟件設計有四個數字表,分別顯示實時行駛速度、發動機轉速、油泵值及溫度值,同時引入了波形顯示用于顯示測試值的曲線變化。檢測軟件設置有測試項目的選項,用戶可以根據測試的需求選擇要測試的項目。其中各儀表類之間繼承關系如圖4所示。

圖4 汽車虛擬儀表軟件中類調用情況

2.3 測試平臺與虛擬儀表交互

選擇大眾POLO 排量1.4L車型進行測試,測試平臺每40 ms接收一組信號,在測試軟件的串口消息響應函數中接收串口通信的數據。通過數據處理函數ProcessData()對數據進行截取和轉換,根據設計要求將數據分別在儀表中顯示、保存以及波形處理,并對出現故障的數據進行分析,將異常情況在提示欄中顯示。汽車虛擬儀表檢測軟件如圖5所示。

圖5 汽車虛擬儀表檢測軟件

在搭建好汽車儀表的硬件檢測環境后,開啟汽車虛擬儀表檢測軟件,檢測項目可在軟件左部進行選擇,并點擊啟動測試。汽車的常用儀表數據都可在軟件平臺中直觀的獲取,并可通過波形圖了解到數據變化的更多特性。本軟件只關心數據接收、處理、傳遞的正確性,軟件的結構、排版等所以與系統硬件無關,保證了檢測的穩定性。通過多次實驗測試汽車虛擬儀表發軟件性能穩定、數據準確、可視性強。

3 結 語

軟件采用面向對象的C++為開發語言,在MFC開發平臺上結合PlotLab完成汽車檢測虛擬儀表設計。利用面向對象繼承和派生的特點設計好了基礎的儀表類。虛擬儀表測試軟只需組合利用此儀表類就可以進行開發設計,因此該系統具有可擴展性、可重復強等優點,這樣大大縮短了開發的流程及周期。設計擁有可視化、仿真實的圖形化界面,使用直觀方便,用戶體驗良好。該軟件已在汽車儀表檢測平臺順利完成測試,并且運行良好,測試取得較好的效果。通過后期用戶的要求及不斷的完善改進,此軟件會具有更強的的實用性和廣闊的應用前景。

[1] 黃磊.基于LabWindowns-CVI虛擬汽車儀表設計[D].西北師范大學,2008.

[2] 金作軍,李銀國,姜虹.基于虛擬儀表的汽車ABS綜合檢測平臺的研究與實現[J].重慶工學院學報,2007,21(11):19-23.

[3] 金作軍,李銀國,姜虹.基于汽車電子檢測平臺的虛擬儀表的設計與應用[J].微計算機信息,2007,23(32):275-277.

[4] 史永勝,李秀靜.基于單元要素的虛擬儀表平臺設計方法[J].計算機工程與設計,2015(8):2287-2290,2302.

[5] 周桂成,秦貴和,陳筠翰,等.通用汽車儀表檢測平臺的設計與實現[J].計算機工程,2012,38(20):228-231.

[6] 陳旭東.汽車模擬駕駛虛擬場景設計與研究[D].西南交通大學,2016.

[7] 王韜,郭玲,史迎春,等.基于OpenGVS的虛擬儀表實現[J].計算機仿真,2006,23(3):275-278.

[8] Ian Graham.Object-Oriented Methods Principles & Practice[J].Simulation,1998,70(6):359-368.

[9] 曾秀云.基于虛擬儀器的信號采集與控制系統開發[D].電子科技大學,2010.

[10] 周友波.汽車綜合性能檢測技術現狀與發展趨勢研究[J].沿海企業與科技,2010(4):29-31.

[11] 朱則剛.談汽車的檢測及其發展方向[J].汽車與安全,2007,117(9):60-65.

[12] 任洪濤,彭憶強,謝江浩.基于Qt的汽車虛擬儀表系統設計[J].西華大學學報(自然科學版),2016(6):64-67.

[13] 黃劍.虛擬儀器技術及應用綜述[J].計量與測試技術,2010,37(4):42-43.

[14] 劉善坤,竇立謙,宗群,等.車載虛擬儀表及診斷系統的設計與實現[J].計算機應用與軟件,2016,33(8):229-223.

DESIGNANDAPPLICATIONOFAUTOMOBILEVIRTUALINSTRUMENTBASEDONVC++

Yu Yanjuan
(ZhangzhouInstituteofTechnology,Zhangzhou363000,Fujian,China)

Virtual instrument technology is a new developing technology that combines computer technology with instrumentation technology. Its low-cost, high-efficiency features reflects a unique advantage in the rapidly changing automotive monitoring industry. The design of this paper is based on VC++ development and design platform, using MFC visualization, frame structure design features, and the design uses object-oriented C++ language combined with graphics processing software PlotLab. The design has a high versatility and good scalability, and it has been successfully tested and run stable.

Virtual instrument VC++ Object-oriented PlotLab

2017-01-09。余燕娟,碩士,主研領域:家電與儀表自動化。

TP391.9

A

10.3969/j.issn.1000-386x.2017.08.023

猜你喜歡
汽車檢測設計
“不等式”檢測題
“一元一次不等式”檢測題
“一元一次不等式組”檢測題
瞞天過海——仿生設計萌到家
藝術啟蒙(2018年7期)2018-08-23 09:14:18
汽車的“出賣”
設計秀
海峽姐妹(2017年7期)2017-07-31 19:08:17
有種設計叫而專
Coco薇(2017年5期)2017-06-05 08:53:16
小波變換在PCB缺陷檢測中的應用
汽車們的喜怒哀樂
3D 打印汽車等
決策探索(2014年21期)2014-11-25 12:29:50
主站蜘蛛池模板: 狠狠色香婷婷久久亚洲精品| 亚洲国产一成久久精品国产成人综合| 欧美成a人片在线观看| 午夜国产大片免费观看| 91精品专区国产盗摄| 国产精品一线天| 国产精品一区二区在线播放| 精品伊人久久久久7777人| 99人体免费视频| 中文字幕亚洲精品2页| 国产尤物在线播放| 久久精品丝袜| 在线色国产| 无码高潮喷水专区久久| 天天躁狠狠躁| 国产一区二区三区在线精品专区| 国产视频a| 欧美性天天| 国产美女丝袜高潮| 91福利国产成人精品导航| av一区二区无码在线| 91精品国产福利| 成人国产三级在线播放| 亚洲丝袜第一页| 在线观看国产黄色| 亚洲一区免费看| 国产精品主播| 午夜国产精品视频| 香蕉久久国产精品免| 91娇喘视频| 青青草国产免费国产| 免费观看亚洲人成网站| 一级毛片在线直接观看| 孕妇高潮太爽了在线观看免费| 国产免费自拍视频| 色偷偷av男人的天堂不卡| 中国一级特黄视频| 久久久久九九精品影院| 亚洲日韩精品无码专区97| 好久久免费视频高清| 久热精品免费| 欧美怡红院视频一区二区三区| 一级毛片中文字幕| av免费在线观看美女叉开腿| 色综合a怡红院怡红院首页| 又粗又大又爽又紧免费视频| 婷婷综合色| 精品一区二区三区水蜜桃| 日韩AV无码免费一二三区| 国产高清无码第一十页在线观看| 99视频精品全国免费品| 久久久久亚洲精品无码网站| 91精品最新国内在线播放| 美女无遮挡被啪啪到高潮免费| 99草精品视频| 国产成人禁片在线观看| 亚洲精品天堂自在久久77| 亚洲成av人无码综合在线观看 | 国产亚洲视频播放9000| 久热re国产手机在线观看| 91青青草视频| 亚洲丝袜第一页| 国产美女主播一级成人毛片| 午夜福利亚洲精品| 国产一区二区三区在线观看免费| 91精品网站| 国产高清精品在线91| 亚洲中文字幕无码mv| 99视频全部免费| 日本在线视频免费| 中文精品久久久久国产网址| 国产男人天堂| 国产理论最新国产精品视频| 国产激情无码一区二区三区免费| 午夜在线不卡| 性欧美久久| 国产极品美女在线播放| 亚洲国产欧洲精品路线久久| 亚洲天堂伊人| 伊人成人在线| 综合色亚洲| 亚洲成人黄色在线|