1.山西省电力勘测设计院有限公司 太原 030024;2.中北大学 太原 030024;3.中国电信山西电信分公司 太原 030024
摘要:本文着重研究了三维可视化建模、基于OpenGL的三维可视化和基于OPC接口技术。并在Visual studio 2013平台上,结合OpenGL可视化技术、OPC接口技术、ActiveX控件开发技术,分析和研究了三维组态平台的设计理念和实现过程,其中着重介绍了图形绘制模块、OPC的通信接口的开发过程。
关键词:OpenGL;OPC技术;三维可视化;
Research on a Platform of Three Dimensional Visualization Configuration
DING Guang-ye1,ZHANG Xiao-juan2,YANG Li-long3,DING Guang-ye1
(Shanxi Electric Power Survey and Design Institute Co.,Ltd. Taiyuan,030024;
Taiyuan Institute of Technology. Taiyuan,030024;Chinese Telecom Taiyuan Telecom Branch. Shuozhou 030024)
Abstract:The paper proposed the study of 3D visualization modeling,3D visualization based on OpenGL and OPC interface technology. On the platform of Visual studio 2013,combined with OpenGL visualization technology,OPC interface technology and ActiveX control technology,analyzes and studies the design ideas and process of 3D visualization. In the paper,It mainly introduce the development process of the communication module based on OPC and three dimensional drawing control module.
Key words:OpenGL,OPC Technology,Three-dimensional visualization
引言
随着计算机和物联网技术的发展,采矿、电力、航天等工业控制领域对三维可视化的实时控制要求越来越高,而目前众多的管理系统都属于二维的,无法满足三维场景动态控制的要求。本文所研究的三维可视化平台,主要是基于OpenGL技术和OPC系统集成开发的,其设计思路和实现方法来源于已经申请的专利《基于物联网的煤矿生产三维可视化信息系统》201110262868.5。
OpenGL是一个图形接口函数库,它不依赖于硬件,可在构建数据模型的基础上,通过函数调用完成图形绘制。OPC,即用于过程控制的OLE,实质上是一个开放式的通信接口标准,读写规范。本文在Visual studio 2013平台上,结合OpenGL可视化技术、OPC接口技术、ActiveX控件开发技术,对三维可视化集成系统进行了研究。
1 三维场景建模
构建三维可视化平台,对场景对象进行三维动态操作,准确、真实的三维建模是其前提条件。现阶段,三维建模的方法一般采用图形渲染、图像建模和混合建模。为了减小复杂场景的计算量,又能满足人机交互的实时要求,本文三维可视化建模,综合考虑了图形渲染与图像建模的优势,扬长避短选取混合建模的方法[1]。混合建模流程如图1所示。
图1混合建模流程图
2 OpenGL可视化技术
2.1 OpenGL简介
OpenGL是一个包含了众多函数的库,这些函数,是一些绘图指令和函数调用的集合,允许用户对空间对象进行说明和动态控制。
OpenGL的功能有:绘制、观看三维物体,指定颜色模式,增强图像效果、人机交互,通过函数的调用,能够实现三维彩色场景构建,不仅可以绘制普通三维物体,还能完成复杂且交互要求高的动态场景的绘制。使用OpenGL对场景对象进行绘制的一般过程如下:首先在帧缓存之中定义一个窗口,然后在此窗口中分别调用图形绘制函数、变换函数、显示函数来完成图形的绘制、变换、显示等操作。其基本工作流程如图2所示。
图2 OpenGL的基本工作流程
2.2 基于OpenGL的三维可视化实现过程
利用混合建模的方法实现场景建模,即采用图片转换的图形建模和采用OpenGL数据文件的图形渲染建模。采用OpenGL数据文件的图形渲染建模则需要一个数学模型作为载体,因此三维数据建模必不可少。考虑到OpenGL的绘图只提供点、直线、多边形等基本图元绘制函数,本文采用TIN和ARTP混合数据建模的方法[2]。
基于TIN和ARTP的混合构模是使用多种面模型和体模型来实现对同一场景对象进行三维建模,三维场景的描述模型在外部表现为一个包含了几何属性的数据文件。其基本数据结构如下:
(l)结点的数据结构Class CNode{ }
(2)TIN边的数据结构Class CTin_Edge{ };
(3)ARTP棱数据结构Class CARTP_ Edge { };
(4)TIN面数据结构Class CTriAngle{ }
(5)侧面四边形数据结构Class CQuadRangle{ };
(6)ARTP体元数据结构Class CARTP{ };
利用这六种数据结构,就可以描述三维对象的空间关系,从而构建三维模型的数据结构。
通过前述内容,己经完成了场景几何模型的构建,再对其进行OpenGL纹理映射和渲染即可建立场景模型。运用OpenGL对场景模型进行渲染的过程,实质上是调用OpenGL库函数对已经建模的物体对象进行渲染现实的过程,场景模型渲染流程图如图3所示:
图3 场景模型渲染流程图
3 基于OPC技术系统集成的研究
系统集成的概念包括两个层面:网络级和接口级。本文所研究的对象,属于接口级集成范畴。OPC接口是一种与硬件分离的通讯方式,目前,许多煤矿企业开发的监控系统和组态软件都使用OPC接口,因此本文所研究的可视化系统也采用OPC接口技术。
3.1 OPC的框架与组件
OPC的访问架构为Client/Server模式,OPC Server通过在MFC类中编程,明确了数据Item的创建规则和读写方法,而Client对Server进行访问操作时,仅仅只需调用接口函数即可。OPC客户端通过OPC服务器,可以直接读出或者写入与其连接的下位机端口变量,但前提是下位机满足OPC通讯标准。
3.2 OPC服务器和接口客户端的设计
OPC Server的设计过程,实际上是在VS 2013的MFC类中对OPC Server工程通过编程添加Item对象和Group对象及其相关函数。本文所研究的OPC Server的设计是为三维平台的开发提供访问读写接口,将三维可视化组态平台视作OPC Server进行设计封装。
开发OPC服务器需经过以下的步骤:添加 OPC服务器注册表;组对象的设计和接口实现;OPC服务器与OPC组对象聚合。
OPC Client访问OPC Server的过程如图4所示:
图4 OPC Client访问OPC Server的过程
4 基于OPC的三维组态软件平台的研究与设计
4.1 开发三维组态平台的思路
本文所研究的可视化系统,其目的是实现三维图像组态,建模采用3DS浏览插件和OpenGL技术,通讯采用OPC技术的C/S模式,主要从以下方面入手:
(1)由于当前组态软件所建立的界面几乎都是二维图形,目前,还没有一个三维的组态平台进行快速三维场景构建。因此本文着重设计一个三维场景开发平台;
(2)为了实现快速的建立场景,单纯依靠OpenGL程序实现增加了开发难度,因此,利用ActiveX技术开发三维的浏览插件,通过该插件的模型调用功能快捷创建三维场景;
(3)OPC接口技术是不同软件系统之间数据通信的快捷方法,它将每一个访问者当着Client(客户端),将每一个被访问者当着Server(服务器),实现数据交互。
4.2 绘图模块构成及绘图过程
界面其实就像一个盛装图形和控件的容器,三维图形的组态过程,就是利用绘图模块所提供的三维操作,将三维场景在画面中进行组合的过程。因此三维绘图模块的设计和研究成为本文的关键,主要包括三维模型库(3DS格式文件集合)、OpenGL入口(*.gl文件链接控件)、ActiveX控件箱(控件工具箱)、OPC接口(数据交换接口)和三维空间盒(创建三维画面容器),然后在VS 2013平台上,将五个部分连接在一起,进行三维组态。绘图模块结构原理如图5所示:
图5 绘图模块结构原理图
下面,以显示控件的设计举例,简要阐述绘图模块绘图的过程:
(1)建立三维画面。
(2)依据场景对象,选取三维空间盒,并设置背景和颜色。
(3)添加图形控件。
(4)通过3DS文件入口从三维模型库中读取3DS图型模型,生成*gl格式文件以备程序调用。
(5)在画面中为每一个图形和操作空间添加脚本程序,将图形控件和三维图形通过脚本语言相关联,实现动态控制的功能,并配置OPC接口。
4.3 图形绘制模块的编程实现
(1)建立OpenGL和ActiveX技术绘图的程序构架
在VS 2013平台的MFC类中新建ActiveX控件,将三维图形的*.gl格式图形程序文件封装到MFC类中,以便随时调用。为了方便OpenGL编程,本文设计了极小化的编程模式,设置如下:
第一步:建立工程,利用MFC类提供的应用向导建立工程,建立控件的程序框架;
第二步:在VS 2013中设置OpenGL运行环境,添加OpenGL头文件和库;
第三步:在极小化OpenGL的绘图程序中设置消息响应,调用*.OCX控件消息响应函数。
第四步:利用OnDraw()函数调用DrawScene()函数完成图形绘制。
第五步:注册ActiveX控件。首先查找windows的注册表HKEY _CLASSES_ROOT项,找到Cube.OCX控件注册的唯一类标识CLSID。
第六步:在MFC中调用开发的三维ActiveX控件
利用VS 2013的插入功能,在菜单中选择Project/Add To Project/Component and Control,在选择要插入的控件,工程将会生成一个包含该控件所有方法和属性的定义文件。
(2)三维空间盒的设计
三维空间盒的设计与三维ActiveX控件的设计方法相类似,为了提高空间盒程序开发的效率,使程序开发人员只专注于编写绘图函数,采用OpenGL极小化模式,其过程如下:
首先,利用VS2013的MFC向导建立MySkyBox工程。
其次,建立OpenGL程序实现的极小化框架。
最后,编写 DrawScene()绘图函数,编程实现天空盒动态控制功能,使其最终变成一个能够自由盛放三维场景和操作控件的容器。
(3)3DS文件读取入口的程序设计,3DS文件浏览控件的开发过程如下:
第一阶段:使用3DS MAX建模软件画出模型,以3DS文件格式存储。
第二阶段:使用View3DS软件将三维模型3DS格式文件转换成OpenGL的 *.gl格式文件[3]。
第三阶段:建立OpenGL程序极小化模式框架。
第四阶段:引入工程,具体过程为,将View 3DS的 filename.h和filename.gl头文件复制到工程所定义的文件夹中,调用DrawScene()函数,编写应用程序。文件夹中将会自动生成GL3DS_initialize_filename()函数,在DrawScene()中再次中调用这个函数,即可实现三维展示。
4.4 基于OPC技术的通讯接口的设计与实现
由于OPC是一个通信快捷,应用广泛的数据通信规约,因此本文所研究的三维可视化平台,选取OPC作为数据交换的接口,通过OPC技术服务器与客户端的访问,将下位机设备与上位机软件系统在硬件上隔离开来,在软件上联系起来。
利用ATL COM AppWizard开发OPC服务器的编程流程如下:
第一步:在VS 2013平台上利用ATL COM建立一个新的Server工程。
第二步:设置OPC运行环境,打开MyOPCServer工程所在的文件夹,将opcda.h、opccomn.h、opcerrors.h、opcprops.h、opcquality.h 以及opcda_i.c、opccomn_i.c 文件全部添加到工程所在文件夹下,编辑Stdafx.h文件,添加标准库头文件 #include“opcda.h”,#include“opccomn.h”,并在MyOPCServer.cpp文件中加入:#include“opcda_i.c”,#include“opccomn_i.c”。
第三步:添加OPC Server对象。建立一个活动模板库(ATL),在活动模板库生成的对象所属的IDL描述中加入OPC服务器对象接口函[4]。
第四步:添加OPC Group对象。添加OPC Group对象与添加OPC Server对象的方法相类似,但无需系统注册,也无需类型库,因此需删除注册函数,仅仅只需要通过函数聚合实现接口的添加。
第五步:定义一个与数据Item相关的类,添加OPCItem,实现数据项的属性和方法。数据项对象是最小的通信单元,不需要添加接口的功能函数。
第六步:设计数据存储区和硬件驱动程序。数据存储区包含OPC Server程序定义的全部的数据项,所以要确定存储区缓存空间的大小,使每个数据项都有相应的存储空间。
5 总结
本文以三维可视化为研究对象,提出一种开发三维组态平台的研究方法。首先采用三维场景混合建模和三维数据模型集成建模的方法,结合各自的优势,取长补短,对场景对象进行建模。其次,对基于OpenGL可视化实现的过程和基于OPC系统集成的方法进行了深入分析。最后在VS2013平台上,设计了三维图像的组态化平台。
参考文献:
[1]魏森声,基于OpenGL和OPC技术的煤矿三维可视化信息系统的研究[D],山西太原:太原理工大学,2012.
[2]李海姣,任意多边形的裁剪算法及其在土建工程中的应用[D],江西南昌:华东交通大学,2005.
[3]黎华,肖伟.几种三维模型文件在OpenGL中的输入与处理[J].物探化探计算技术,2007(01):83-86.
[4]朱耀春,陆会明,张永庆.OPC数据服务器的开发与测试(Ⅱ)[J]. 现代电力,2004(01):60-65.