虚拟仪表在VC++中的一种应用实现
来源:岁月联盟
时间:2010-08-30
1 引言
随着机技术的日益成熟,计算机的应用已渗透到各个领域,各种车载装备也逐步向数字化、智能化方向。用数字化的虚拟仪表取代机械式传统仪表已成为实现车辆自动化的一个重要课题。在车辆中,驾驶员仪表面板是驾驶员获取各种工况数据的重要窗口。长期以来驾驶员仪表面板采用机械式传统仪表,这种传统仪表装置在车辆中占用了固定的空间、显示精度低、可读性差、不易扩展,而且效率十分低下。而采用虚拟仪表后,在驾驶员前方放置一台平板显示屏,为延续传统操作习惯,将原来驾驶员仪表盘的车况数据在显示屏上以模拟表形式显示,为方便读数,增加了数字表及棒图形式显示,而对越限工况及各种报警,在显示屏上以图形指示灯形式指示报警。显示屏可以在车辆不同的状态下显示不同的工况参数及报警信号,各个参数可以根据需要通过热键自由切换,采用虚拟仪表后,仪表的读数一目了然,可读性好,读数精度高,并且容易升级、扩展。因此,虚拟仪表是未来车辆的发展方向。2 虚拟仪表控件的组成原理
仪表解决方案采用完全开放的组织架构,将仪表创建切分为:仪表盘、指针、度量刻度以及背景几个部分,这些部分既相互关联,又充分独立,当创建新的仪表的时候,可以根据需要将其进行任意组合,例如圆盘仪表盘+圆盘刻度+指针,就可以构建如图1所示的仪表。
3 应用实例
首先建立一个工程文件命名为Meter,采用对话框格式,其余选择默认选项即可。添加一个新类CMeter,里面增加如下函数体[1]: void DrawNeedle(CDC *pDC);//画指针 void DrawMeterBackground(CDC *pDC, CRect &rect);//画仪表背景 void SetAngleRange(int nStartAngleDeg, int nEndAngle Deg); //表盘圆弧起始终止角度 void SetSubTicks(int nSubTicks); //设置每两个大刻度之间分为几个子刻度数 void SetTicks(int nTicks);//设置整个表盘分为几个大刻度数 void DrawValue(CDC *pDC);//表盘上的数值显示 void SetColorTick(BOOL bColorTick = FALSE);//设置刻度盘颜色 void SetValueDecimals(int nDecimals); // 设置数值显示精度(小数点后位数) void SetUnits(CString &strUnits);// 设置单位 void SetScaleDecimals(int nDecimals); // 设置刻度显示精度(小数点后位数) void SetRange(double dMin, double dMax); //设置可测量范围 void SetNeedleColor (COLORREF colorNeedle); //设置指针颜色 void UpdateNeedle(double dValue);//更新指针指向当前值 在对话框Dlg.cpp程序函数CMyMeterDlg::OnInitDialog()中添加m_myMeter.SetNeedleColor(m_ colorNeedle); //设置CMeter类变量m_myMeter指针的颜色 m_myMeter.SetColorTick(TRUE); // 设置CMeter类变量m_myMeter刻度盘的颜色 SetTimer(1,200,NULL);//使指针按照指定时间间隔转动
4
虚拟仪表的应用,使仪表的读数更加清晰、直观,信息量更多,智能化程度更高,因此具有广泛的应用前景。当然这一领域在我国尚处于起步阶段,要成为真正实用阶段还有很多工作要做,但随着技术的成熟,必将产生深远的影响。参考
[1]熊永华,吴敏,曹卫华.基于测量系统的虚拟仪表的设计与应用[J].机测量与控制,2006,14(4):435-436。[2]王韬,郭玲,史迎春.基于OpenGVS的虚拟仪表实现[J].计算机仿真,2006,23(3):257-258。[3]谭浩强.C程序设计[M].北京:北京清华大学出版社,1996.[4]张国峰.C++语言及其程序设计教程[M].北京:出版社,1997.[5]David Simon. Visual.C.6编程宝典[M].北京:电子工业出版社,2005上一篇:STL中map的用法剖析