虚拟仪表在VC++中的一种应用实现

(整期优先)网络出版时间:2019-06-20
/ 2
摘 要 虚拟仪表应用越来越广泛,本文根据VC开发虚拟仪表的流程和原理,从实际应用角度设计了一个虚拟指南针仪表的实例。

关键词 虚拟仪表;VC++面向对象;动态仿真


1 引言

随着计算机技术的日益成熟,计算机的应用已渗透到各个领域,各种车载装备也逐步向数字化、智能化方向发展。用数字化的虚拟仪表取代机械式传统仪表已成为实现车辆自动化的一个重要课题。

在车辆中,驾驶员仪表面板是驾驶员获取各种工况数据的重要窗口。长期以来驾驶员仪表面板采用机械式传统仪表,这种传统仪表装置在车辆中占用了固定的空间、显示精度低、可读性差、不易扩展,而且效率十分低下。而采用虚拟仪表后,在驾驶员前方放置一台平板显示屏,为延续传统操作习惯,将原来驾驶员仪表盘的车况数据在显示屏上以模拟表形式显示,为方便读数,增加了数字表及棒图形式显示,而对越限工况及各种报警,在显示屏上以图形指示灯形式指示报警。显示屏可以在车辆不同的状态下显示不同的工况参数及报警信号,各个参数可以根据需要通过热键自由切换,采用虚拟仪表后,仪表的读数一目了然,可读性好,读数精度高,并且容易升级、扩展。因此,虚拟仪表是未来车辆的发展方向。

2 虚拟仪表控件的组成原理

仪表解决方案采用完全开放的组织架构,将仪表创建切分为:仪表盘、指针、度量刻度以及背景几个部分,这些部分既相互关联,又充分独立,当创建新的仪表的时候,可以根据需要将其进行任意组合,例如圆盘仪表盘+圆盘刻度+指针,就可以构建如图1所示的仪表。

1448462464.jpg

图1 仪表框架原理

框架可以由三个基础类YPaintBase,YShapeBase和YFillBase组成。其中YFillBase是填充基础类(简称“填充”),它负责对颜色、图像的填充,边框等。YShapeBase是基本图形基础类(简称“形状”),由此类派生出简单的基本图形,如:圆、三角、五角星、特殊指针样式。YPaintBase是逻辑组合基础类(简称“逻辑”),由YPaintBase把YShapeBase和YFillBase进行组合,构建出复杂图形,而复杂图形可由YPaintBase的派生类再次组合。

框架也可由函数体来完成,分别定义一些画背景、刻度、指针的函数,即可完成上述功能,本文采用第二种方式来实现仪表框架的建立。

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);//使指针按照指定时间间隔转动

1448461640.jpg

图2 虚拟指南针

各个函数可以参考相关的VC资料很容易实现,本文主要讲解其实现的原理。并根据实际需要制作了如图2所示的虚拟指南针仪表。经过实验证明能够以非常高的精度和直观性满足实际应用需要,达到了很好的效果。

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