基于COM技术的虚拟仪表ActiveX控件开发*

2013-09-12 01:50郭淑霞
微处理机 2013年6期
关键词:指针控件仪表

高 颖,葛 飞,刘 宁,郭淑霞

(1.西北工业大学航海学院,西安 710072;2.西北工业大学无人机特种技术国防重点实验室,西安 710065)

1 引言

随着科学技术的迅猛发展,越来越多的高技术武器装备被应用到部队中。目前在工控系统、科学研究及军事仿真等领域,随着信息量不断扩大,各种操作面板愈来愈庞大,增大了制造成本与维护难度。运用虚拟现实技术对武器装备进行仿真,是弥补部队操作和维修训练的有效途径[1]。通过计算机仿真技术实现虚拟仿真界面能够大大降低研发和制造成本,使系统易于更改和维护,且能给人以逼真的视觉感受。

从某发动机测试系统虚拟仪表控件的实际应用的角度,提出了仪表建模和仿真实体控制的具体方法,并以此理论开发基于COM技术的虚拟仪表ActiveX控件,旨在从应用角度提供一种设备训练仿真建模和实施手段,以用于军事仿真、计算机辅助训练等领域。

2 COM技术

组件对象模型(Component Object Model,COM)是一种以组件为发布单元的对象模型,这种模型使各软件组件可以用一种统一的方式进行交互。COM提供了组件之间进行交互的规范,也提供了实现交互的环境[2]。这种交互使得一种语言编写的程序能调用另一种语言编写的软件组件,实现了与编程语言无关的软件重用。调用端被称为客户,被调用端是组件对象,两者的相互作用建立在简单客户/服务器模型机制基础之上。组件对象以动态链接的可执行软件单位作为载体,接口提供了客户与组件之间进行通信的协议或规范。

COM组件具有如下特点和功能:

(1)语言无关性和易学易用性。因为COM规范的定义不依赖于语言,所以组件对象所使用的语言与客户程序所使用的语言可以不同,只要它们都能够生成符合COM规范的可执行代码即可。COM对象不同于一般的面向对象语言(如C++语言)中的对象概念,它是建立在二进制可执行代码、而不是源代码基础上的,因而COM对象与语言无关。COM的语言无关性为跨语言合作开发提供了一致的标准。

(2)接口与实现分离。COM对象接口与实现分离的特性使得COM组件非常容易完成替换。当虚拟仪表类型需要改变时,只要改变组件、重建组件并发布新组件即可。由于更新是局部的,程序中出错的机会也就仅限于这个局部。开发COM组件时,通常是先开发组件接口,保证一切能顺利配合,然后再实现接口的要求。而且只要接口设计完成,就可以将其分布到几个程序中,组件功能的实现可以并行进行,从而实现并行开发。

(3)重用性极强。可重用性是任何对象模型的实现目标。COM客户程序可通过接口使用对象所提供的服务,而并不需要知道对象内部的实现过程。它使复杂的系统简化为一些简单的对象模块,高度体现了面向对象的思想。组件其实就是一个软件块,用于完成特定工作,任何程序都可以使用组件。由于组件是自给自足的,可以很容易地进行替换,并且可以一次编写,到处使用。以后只更新或替换这个组件就可以纠正或改进该组件的功能。

(4)可跨进程、跨平台移植并实现分布式应用。采用COM组件完全可以实现二进制可执行代码级基础上的跨进程、跨操作系统移植。

3 仪表控件开发方法

3.1 VC+OpenGL底层开发法

利用VC+OpenGL从底层进行开发,优点是能够实现用户的个性化需求,满足计算机通讯的实时性,适用于对实时性有严格要求的工控软件系统。缺点是要求用户掌握较深的编程知识,系统开发周期长,代码重用性低,仿真界面的真实感一般。

3.2 LabView虚拟仪器软件

利用以美国国家仪器公司(NI)的LabView为代表的虚拟仪器软件进行开发,其优点是用户经简单培训可快速掌握其交互式的编程设计环境,软件自身具有大量虚拟仪器面板设计用的开关、按钮、旋钮、表头等面板组件,还具有数据采集、仪器通信等用途,用户可自定义仿真系统,满足不同需求。缺点是成本较高,开放性较差,不适用于真实性要求较高的场合。

3.3 GL Studio和VAPS专业虚拟仿真软件

利用以GL Studio和VAPS为代表的专业级虚拟仿真软件,用户可通过熟悉的绘图习惯编制虚拟仿真应用程序,其优点是开发周期短,仿真界面的真实感较强,生成的C(C++)代码可移植性高,并借助VC++等编译环境实现了计算机实时性的通讯需求,应用前景广阔。

4 利用GL Studio的ActiveX组件方式开发实例

由于VC++等开发环境提供的控件(如按钮等)过于Windows风格化,导致所开发的界面千篇一律,虽然可利用许多二次开发的“皮肤”为程序“换肤”,但不能解决根本性问题。以MSVC 6.0的按钮控件为例,采用位图按钮虽能解决按钮的美观问题,但编程时需要对按钮的样式重新进行绘制,且不能给形状不规则的按钮配置不规则的位图,故无法满足需求。

而GL Studio自身支持含通道信息的PNG格式,利用Photo-Shop等图像编辑软件,可按需要绘制任意形状的按钮,赋予在GL Studio环境中生成的部件后,即可生成美观的自定义按钮[3]。除了上述按钮控件外,如果用户想要制作高级控件,例如飞行仿真中的表盘等,利用GL Studio便更能体现出优势。

在为“发动机测试系统”设计软件系统时,由于软件界面层次及逻辑性复杂,采集并显示的运行状态参数较多,操作员对界面真实感及软件的人机交互友好程度要求较高,所以采用了GL Studio作为开发工具,结合已有的VC++开发仪表技术,不但满足了实时性和交互性要求,还增强了软件构成的灵活性。其设计流程如图1所示。设计中启动这个对象时,图形表面的指针必须移除。抽取指针四周的区域,并复制到指针的位置之上。

图1 仪表设计框架图

(5)一旦图像处理好了,将其保存到图层中。这样从最初的面板中移除的任何物体都位于它们各自的图层中。图层文件以*.png形式使用保留透明区保存。如果使用PhotoShop的*.psd文件,则可以直接利用*.psd文件而不必转换成*.png文件。

由此框图设计的三维仪表控件,打破了传统仪器由厂家定义,用户无法根据自己的要求而改变其相应功能的工作模式,使得用户可以根据自己的需求轻易地改变ActiveX控件提供的接口参数,设计自己的仪表系统,在虚拟测试系统和仪表设计中尽量用软件代替硬件,充分利用计算机技术来实现和扩展传统测试系统和仪表的功能。下面以软件中的一种虚拟仪表控件为例,介绍具体的开发流程。

4.1 安装 GL Studio

将GL Studio安装完毕,即在MSVC 6.0新建菜单中出现三个新项目,其中第一项为主要介绍基于COM技术的ActiveX控件项目开发。在选择该项后,按常用的VC生成项目的方法完成初始化设置,进入编程状态,并生成GL Studio开发文件。

4.2 形成用户定制组件

4.2.1 处理纹理文件

先采用Photoshop对仪表图像素材进行处理,并根据分部抽象实例化技术将面板中能动的部件单独处理,生成纹理文件,如指针、按键、旋钮等。以图2所示的圆形指针仪表为例,纹理制作包含以下几个重要步骤:

(1)首先创建图形的像素定为360×370。重新定位画布上焦点的图象,以便于为指针腾出显示表面板以外的空间。值得注意的是,在不阻挡图像其他部分的前提下,应尽可能多地利用画的固定部分。

(2)为图像建立一个新的不可见图层,同时切掉背景区域。

(3)复制指针并粘贴到一个单独图层。旋转图层以使得靠近背景面板的指针在结构中水平放置。

(4)如果已经完成好指针,则可以选择整理仪表的外观。实际上仪表外观是比较脏乱的。可以选择保持原样让仪表看起来更真实些。另一种做法是采用图解的画法,先做出外观的一块干净地方并把它复制到脏乱的区域。不管怎样,一旦在GL Studio

图2 仪表纹理制作效果图

(6)针对虚拟仪表仿真类型多、参数变化大的特点,有时需要对纹理文件进行再加工处理以满足用户对量程、字体、颜色、起始角度等要求,比如抠出刻度及量程标识数字,提供仪表控件更丰富的接口内容。

4.2.2 设计组件

双击自动生成的GL Studio开发文件,进入GL Studio编辑环境。利用直线、曲线、矩形等图形工具可直接设计仿真界面相关部件的线条形状,而后将相关部件进行类似于CAD中的组合等操作,并赋予材质和纹理,形成用户自己定制的组件,如图3所示。

图3 仪表制作效果图

4.2.3 加入控制算法

本例中仪表的刻度范围在圆周方向上均匀分布,并且刻度范围可以由用户通过接口改变,在计算好指针的每一等份所对应的角度之后,利用GL Studio强大的 API函数库[4],以表体的圆周中心为中心,构造旋转所需的算法如下:

为了实现按钮开关控制参数图片的实时更新,在相应位置添加回调函数,形成外部控制所用的接口函数,代码如下:

4.2.4 生成控件源代码

通过GL Studio中主面板Generation选项,选择Component,利用代码生成器自动编译生成ActiveX控件所需的代码,返回至MSVC 6.0编译环境,在控件代码中扩展属性和方法所需的代码,然后编译生成GL Studio所形成的ActiveX控件[5]。

4.2.5 形成ActiveX控件

(1)根据“发动机测试系统”虚拟仪表仿真界面的设计要求,需要提供一系列关于仪表控件可调的接口。在此结合VC++底层开发画出刻度标识及刻度线,以便添加控件量程、背景色、前景色、字体等属性,如图4所示。

图4 仪表刻度效果图

(2)通过引用GL Studio生成的控件内部所提供的“m_glsComponent”指针变量在程序中添加用户自定义控制各虚拟仿真部件的方法,预留控件与用户程序间的接口。当主程序调用GL Studio生成的控件时,由于其接口函数是预先定义的,所以即使在调用时控件方法在代码上表现为不透明,但这里仍可在主程序中调用,方便实现了外部对内部的驱动。以下代码实现表盘外观风格的变化:

最终实现的控件接口属性如图5所示。

图5 仪表属性图

4.3 与仿真主程序有机结合

采用GL Studio开发出独立运行程序或者开发出与VC++结合的Windows框架程序均能实现上述要求,但界面整体灵活性受到很大限制。而采用GL Studio所支持的COM组件技术后,由ActiveX组件构成界面,灵活性高,可扩展性强。

5 结 束 语

利用GL Studio所开发的程序框架丰富,在采用COM开发技术后,其扩展性和可移植性得到了极大提升,并在军事仿真等方面都有着广阔的应用前景。所述的仿真程序经测试,系统稳定,界面友好,真实感强,为仪表测试系统提供了强有力的技术支持和保障。

[1]刘颖,朱元昌,张天辉,等.虚拟测量工具的构造与实现[J].系统仿真学报,2005,17(7):1779 -1781.

[2]朱东方,苏群星,刘鹏远,佟德飞.虚拟仪表响应模块行为实现[J].信息技术,2011(1):65-69.

[3]樊世友,邸彦强,朱元昌.GL Studio软件在视景仿真建模中的应用[J].计算机工程,2002(3):260-261.

[4]许颖慧,杨峰.GL Studio在仪表仿真开发中的关键技术研究[J].仪器仪表与检测技术,2008(10):76-78.

[5]高颖,邵亚楠,郑涛,黄建国.GL Studio在飞行座舱模拟器中的仿真研究[J].弹箭与制导学报,2008,28(1):257-260.

猜你喜欢
指针控件仪表
◆ 仪表
仪表
基于.net的用户定义验证控件的应用分析
垂悬指针检测与防御方法*
热工仪表自动化安装探讨的认识
关于.net控件数组的探讨
为什么表的指针都按照顺时针方向转动
奔驰E260车行驶过程中仪表灯熄灭
浅析C语言指针
基于嵌入式MINIGUI控件子类化技术的深入研究与应用