P/T数字转台监控软件设计

2016-02-06 11:50龙治斌
关键词:纵轴横轴板卡

龙治斌

(澳大利亚新南威尔士大学 工程学院电气工程系,澳大利亚 悉尼 2052)

P/T数字转台监控软件设计

龙治斌

(澳大利亚新南威尔士大学 工程学院电气工程系,澳大利亚 悉尼 2052)

以固高公司生产的P/T数字转台为原型,在VC++6.0环境下,运用与其有着紧密接口的 OpenGL软件包,开发一个转台监控软件。该软件能够实现实时采集转台工作参数的功能,把参数以三维图像的形式直观地显示出来,并且可以通过改变参数从而实现对转台的控制,当采集的转台参数出现异常时,该软件将给予提示。

P/T数字转台;监控系统;VC++6.0;OpenGL;三维

随着高科技的发展,各种形式的转台的应用越来越多。在军事方面:各种火炮、坦克的瞄准系统都离不开转台;在工业方面:各种机床、机器也都与各种形式的转台密切相连。总之,转台运用无处不在。在一些环境恶劣或长时间无人值守的情况下,转台的运行状况和当前位置的坐标不能直接获得,可能会带来不可预测的后果。该课题的开发背景是为各种转台或其它的硬件设备提供三维软件仿真,该软件的作用是对硬件设备进行监视,如对转台运行状况的监视等,该软件的主要部分是三维绘图,对实物进行三维模拟。

1 数字转台监控软件原理

该设计利用固高公司的P/T数字转台控制系统作为开发平台,运用VC++ 6.0编程软件,设计开发了一整套P/T数字转台监控软件,其原理如图1所示。

图1 P/T数字转台监控软件原理

由图1可以看出,该系统由两个部分组成,一部分为软件部分,该部分主要的功能就是给硬件转台输出指令,使转台实现相应的功能,同时获取转台运行的状况,并对所获取的信息进行相应的处理;另一部分为硬件部分,该部分主要是一个P/T数字转台,该转台可控制横轴、纵轴和摄像头,这部分主要是获取上位机的指令并对这些指令做出相应的动作,同时为上位机提供运行的各种参数。

2 P/T数字转台监控软件设计

2.1 软件开发环境

运用控制器提供的 C 语言函数库和 Windows 动态连接库,实现复杂的控制功能。用户能够将这些控制函数与用户自身的控制系统所需要的数据处理、界面显示、用户接口等应用程序模块集成在一起。在硬件控制器的基础上,设计开发一个监控软件。

2.2 系统功能模块划分

该设计要实现的是通过VC设计一个软件操作界面,通过该软件界面可以控制硬件P/T数字转台,同时能够对硬件转台的各种数据进行采集。这些数据包括:二维坐标、横轴、纵轴的转速、加速度、是否到达转台的转动极点坐标、摄像头采集的图像信息等等。对采集到的数据进行处理,利用采集到的转台的信息来控制模拟的三维转台,从而让操作者对转台的运行状况一目了然。同时,该系统能对转台运行的具体坐标进行实时地显示,并且当转台工作在非正常状况下时,该系统能以声音和图像的形式进行报警,其控制流程如图2所示。

图2 P/T数字监控软件整体流程

该软件界面可分为六块,在总控制台区域有4个按钮,如图3所示。4个按钮分别为打开卡、转台位置复位、设定参考点和演示。

图3 总控制台区域

总控制台区域的控制流程如图4所示。第一个打开板卡按钮的功能为当按下此按钮后转台的板卡启动,各个控制按钮能对转台进行控制,并且此按钮显示为关闭板卡,其实现函数为:void MyDlgOpenGL::OnButtonOpenCard();该函数的实现方法是当按下打开板卡按钮后触发该函数,此函数调用固高公司提供的GT_Open()函数,GT_Open()函数为一个BOOL型函数,当该函数返回值为“真”时,表示板卡打开成功,反之则表示失败。当板卡打开成功后,打开所有的控制键,可以通过控制按钮对转台进行控制,同时打开卡按钮上的文字变为关闭卡,意思就是当再按下此按钮时就关闭板卡。关闭板卡的函数为GT_Close()函数,该函数也是一个BOOL型函数,当返回真值的时候,调用Close_Motion_Card()函数关闭板卡,从而关闭转台控制键对转台的控制,同时该按钮显示为打开板卡。

第二个按钮为归零按钮,此按钮的功能为无论转台运行在什么状态下,转台都要回到原点(x坐标为0,y坐标为0),此函数为:void CMyDlgOpenGLDlg::OnButtonHome();实现方法为调用转台运动函数库中的函数:

GT_Axis(i); 当i的值为1时表示选择横轴,对横轴进行控制

GT_ClrSts(); 选择控制方式为单步控制方式

GT_PrflT();设置运动模式为梯形模式

GT_SetPos(8 000 000); 设置目标位置为运行8 000 000脉冲

GT_SetVel(35); 设置该轴的转动速度为35GT_SetAcc(0.2); 设置该轴电机的转动加速度为0.2

GT_Update(); 启动该设置(开始运行)

图4 总控制台区域的控制流程

第三个按钮为演示按钮,其实现函数为:void CMyDlgOpenGLDlg::OnButtonClrSts();实现方法:定时对转台信息进行采集,对采集到的转台信息进行判断,判别转台是否转动到了端点位置,当运行到端点位置时,转台运行方向改变。

第四个按钮为设置当前状态为参考点,此时x(横轴)坐标为0,y(纵轴)为0,实现函数为:void CMyDlgOpenGLDlg::OnButtonClrSts();使用OpenGL图形库进行图形应用开发。首先,要获得RC;然后,要将其设置为“当前RC”,后面所有的绘制工作都是在“当前RC”下进行的,直到“当前RC”无效。其主要程序为:

CPaintDC dc(this);

hdc=::GetDC(m_hWnd);

hglrc=wglCreateContext(hdc);

wglMakeCurrent(hdc,hglrc);

该部分的程序功能主要是获取画图设备DC,创建一个OpenGL绘制描述表RC,再把他们联系起来。

3 绘制背景及调试

3.1 三维图形背景

绘制背景就是在程序的初始化中通过绘制描述表RC进行如下语句的绘制:glClearColor(0.5f,0.5f,0.5f,0.3f);该语句的功能就是绘制界面的背景,并且规定其深度值为0.3f,为了使这个界面更逼真,该界面添加了一个雾化效果,其实现函数为:

glEnable(GL_FOG);

{

glFogi(GL_FOG_MODE,GL_LINEAR);

glFogf(GL_FOG_START,3.0);

glFogf(GL_FOG_END,60.0);

glHint(GL_FOG_HINT,GL_DONT_CARE);

glClearColor(0.5f,0.5f,0.5f,0.5f);

glClearDepth(2.2);

}

该函数的功能是启动雾化、设定雾化距离、设定雾化属性。通过此函数,可以实现当转台的距离远时,转台将越来越模糊。

绘制三维转台:是在OpenGL类的OnPaint函数下绘制的,该函数的功能是绘图,该函数的循环机制是不停的重新绘制图形。要绘制此三维转台,先把转台分成五大块:第一块是绘制转台的不动部分,包括绘制底座,绘制放底座的面,绘制三维转台的柱子;第二块是画横轴;第三块是画转台的纵轴;第四块为影藏,这块就是界面的左上角和右上角的两个控制区,两个控制区都是通过滑轮来控制转台的,左边是控制转台的横轴顺时针和逆时针旋转,右边是控制转台的纵轴;第五块是转台两侧的两个表盘。

第一块:绘制转台的不动部分,如图5所示,其实现函数为:void COpenGL::drawdi(void)。其绘制过程为:①绘制底座:通过绘制底座的8个顶点从而绘制底座的6个面,这6个面的颜色不相同,在底座的最上面的一个面采用的是纹理贴图,该图是从真实转台的图片拍摄过来的;②绘制放底座的面:该面有4个定点,为了使该转台更逼真,该面的绘制是通过纹理贴图来实现的,该图是通过数码相机在实验室拍摄的实验室地面图片,通过对图片的处理,把该图片进行点对点的贴到该面上;③绘制转台的柱子:柱子的画法主要运用的是画圆柱的方法,通过循环取圆柱两个底面圆上的相近两点,可以使上下两个面上的4个点构成一个面,如此循环的画一周就可以画出一个圆柱体的侧面,由于这4个点的颜色是不断变化的,因此该圆柱看上去就是一个彩色的圆柱。

图5 转台的不动部分

第二块:绘制转台的横轴,如图6所示,其实现函数为: void COpenGL::drawzhu(VOID),其绘制过程可以通过片头按钮看到。通过绘点先画出最下面的长方体和两侧的长方体,再通过画圆柱体的方法,取圆柱体的两底面圆上的4点组成一个面,通过循环把圆柱绘制出来,图中的两个扇形圆柱和两个半圆柱都是通过此方法绘制出的。

图6 转台的横轴

第三块:绘制转台的纵轴,如图7 所示。转台的纵轴画法包括圆柱、圆柱上的两个面、下面的U形体、摄像头的画法。U形体是由3个长方体构成的,其画法都是通过描点后使画面组成一个体。摄像头的画法就是画一个圆柱体,摄像头的闪动效果是通过不断画白色的三角形而得到的,该三角形的其中一点在圆心,另外两点在圆上,通过不断改变圆的半径就能达到这个效果。图中半透明彩色的环形圈代表的是摄像头的方向,这使摄像头的方向感更强。其中使用了融合技术,其融合的函数为:

glEnable(GL_BLEND);

glBegin(GL_QUADS);

glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA;

glHint(GL_LINE_SMOOTH_HINT,GL_DONT_CARE);

图7 转台的纵轴

第四块:转台的控制区。转台的控制区实现的方法为,通过MOUSEMOVE消息,鼠标移动到指定的区域,OpenGL类将绘制该控制区,该控制区为一个半透明白色的长方形。当在该区域时,滑轮才能使用;当在右上角时,滑轮控制转台的横轴;当在左上角时,滑轮控制转台的纵轴。该功能的实现运用了三个触发消息和两个画图函数。三个触发消息为:

void COpenGL::OnMouseMove(UINT nFlags,CPoint point)BOOL CMyDlgOpenGLDlg::OnMouseWheel(UINT nFlags,short zDelta,CPoint pt)

BOOL CMyDlgOpenGLDlg::PreTranslateMessage(MSG* pMsg)

两个画图函数为:

void COpenGL::drawkongzhiqu1()

void COpenGL::drawkongzhiqu2()

第五块:转台的两个表盘,如图8所示。其画法就是通过描点、纹理贴图和让指针饶法向量按一定角度旋转,其绕法向量旋转的函数为:glRotatef(bb,0.0f,0.28f,1.0f);其中bb代表旋转的角度,后面的值代表法向量。

图8 转台的两个表盘

3.2 转台转动及视口变换

转台转动分为横轴转动和纵轴转动。横轴转动和纵轴转动的角度为两个全局变量,其角度的大小通过运动控制库中的函数获取得到的转台实际转动的角度大小,其转动原理是通过一个转动函数实现的,该函数为:glRotatef(bb,1.0f,0.0f,0.0f);其中bb为转动角度,后面为转动的法向量。

视口变换就是改变视口的位置,如图9 所示。通过拖动鼠标可以改变视图窗口的大小,其实现的方法为:如果鼠标在视图窗口内,当鼠标左键按下时,可以获取鼠标的坐标,并且响应MOUSEMOVE触发函数,实时获取移动的差量并将此差量转变为视口的横坐标和纵坐标的移动量。完成此功能需要4个触发消息,其函数分别为:

void COpenGL::OnMouseMove(UINT nFlags,CPoint point)

BOOL CMyDlgOpenGLDlg::PreTranslateMessage(MSG* pMsg)

其中第二个函数包括所有鼠标的触发消息。通过鼠标滑轮可以改变视口的观察距离,其实现方法为:如果鼠标在视图窗口内,且不在左上角和右上角的两个控制区,可以通过鼠标滑轮来控制视口的远近距离。其实现函数为:BOOL CMyDlgOpenGLDlg::OnMouseWheel(UINT nFlags,short zDelta,CPoint pt)。

图9 三维转台显示区

4 结 论

该P/T数字转台监控软件的实时监控性好、界面友好、操作简洁方便。由于可以快速直观地观察转台的运行情况和比较方便地操作转台,因此可以将该监控软件用在一些不方便观察转台运行状态的情况下。该软件的设计支持任何的操作系统,而且软件占用内存小,也可以用在对所有转台的监控上。

由于该设计采用了比较大众型的VC++开发软件,因此程序的可读性、灵活性和适应性强,便于系统的改进和升级,可以在此基础上添加所需要的功能。在军事运用上,可以通过修改界面,联合其他的火控系统和导弹发射系统配合作战。所以,该监控软件无论是在日常生活中还是在军事方面都能有广泛的应用,如果投入生产使用会有较大的商业价值和社会效益。

[1]Dave Shreiner.OpenGL编程指南[M].李 军,译.北京:机械工业出版社,2014.

[2]Richard S.Wright,Jr.Nicholas Haemel,Graham Sellers Benjamin Lipchak .OpenGL超级宝典[M].5版.付 飞,李艳辉,译.北京:人民邮电出版社,2012.

[3]徐文鹏.计算机图形学基础(OpenGL版)[M].北京:清华大学出版社,2014.

[4]刘志铭,李 贺,高 茹.Visual C++程序开发范例宝典[M].北京:人民邮电出版社,2015.

[5]霍尔顿.Visual C++ 2013入门经典[M].北京:清华大学出版社,2015.

(责任编辑 魏静敏 校对 张 凯)

Supervisory Control System Design of P/T Figure Revolving Stage

LONG Zhi-bin

(Department of Electrical Engineering,Faculty of Engineering,University of New South Wales,Sydney 2052,Australia)

A P/T figure revolving stage supervisory control system was developed applying OpenGL that had intense interface with the revolving stage in VC++ 6.0 environment on the basis of the prototype produced by Googoltech Company.The system can realize the revolving stage working parameters real time acquisition and demonstrate the parameters with three-dimension image form and can realize the revolving stage controlling by changing the parameters.The system can also give an alarm while the revolving stage parameters are abnormal.

P/T figure revolving stage;Supervisory control system;VC++ 6.0;OpenGL;Three-dimension

2016-09-18

龙治斌(1992-),男,辽宁沈阳人,硕士研究生。

10.13888/j.cnki.jsie(ns).2016.04.016

TP277

A

1673-1603(2016)04-0362-05

猜你喜欢
纵轴横轴板卡
请您诊断
请您诊断
底横轴翻板闸门安装施工工艺分析
巧解“一横多纵多线”坐标图地理试题
基于PCI9054的多总线通信板卡的研制
基于FPGA的多通道模拟量采集/输出PCI板卡的研制
请您诊断 病例126
流动管理:一种班级管理的实践模式
纵轴曝气氧化沟在城镇污水处理中的应用
一种基于光纤数据传输的多板卡软件程序烧写技术