龍治斌
(澳大利亞新南威爾士大學 工程學院電氣工程系,澳大利亞 悉尼 2052)
P/T數(shù)字轉臺監(jiān)控軟件設計
龍治斌
(澳大利亞新南威爾士大學 工程學院電氣工程系,澳大利亞 悉尼 2052)
以固高公司生產的P/T數(shù)字轉臺為原型,在VC++6.0環(huán)境下,運用與其有著緊密接口的 OpenGL軟件包,開發(fā)一個轉臺監(jiān)控軟件。該軟件能夠實現(xiàn)實時采集轉臺工作參數(shù)的功能,把參數(shù)以三維圖像的形式直觀地顯示出來,并且可以通過改變參數(shù)從而實現(xiàn)對轉臺的控制,當采集的轉臺參數(shù)出現(xiàn)異常時,該軟件將給予提示。
P/T數(shù)字轉臺;監(jiān)控系統(tǒng);VC++6.0;OpenGL;三維
隨著高科技的發(fā)展,各種形式的轉臺的應用越來越多。在軍事方面:各種火炮、坦克的瞄準系統(tǒng)都離不開轉臺;在工業(yè)方面:各種機床、機器也都與各種形式的轉臺密切相連。總之,轉臺運用無處不在。在一些環(huán)境惡劣或長時間無人值守的情況下,轉臺的運行狀況和當前位置的坐標不能直接獲得,可能會帶來不可預測的后果。該課題的開發(fā)背景是為各種轉臺或其它的硬件設備提供三維軟件仿真,該軟件的作用是對硬件設備進行監(jiān)視,如對轉臺運行狀況的監(jiān)視等,該軟件的主要部分是三維繪圖,對實物進行三維模擬。
該設計利用固高公司的P/T數(shù)字轉臺控制系統(tǒng)作為開發(fā)平臺,運用VC++ 6.0編程軟件,設計開發(fā)了一整套P/T數(shù)字轉臺監(jiān)控軟件,其原理如圖1所示。
圖1 P/T數(shù)字轉臺監(jiān)控軟件原理
由圖1可以看出,該系統(tǒng)由兩個部分組成,一部分為軟件部分,該部分主要的功能就是給硬件轉臺輸出指令,使轉臺實現(xiàn)相應的功能,同時獲取轉臺運行的狀況,并對所獲取的信息進行相應的處理;另一部分為硬件部分,該部分主要是一個P/T數(shù)字轉臺,該轉臺可控制橫軸、縱軸和攝像頭,這部分主要是獲取上位機的指令并對這些指令做出相應的動作,同時為上位機提供運行的各種參數(shù)。
2.1 軟件開發(fā)環(huán)境
運用控制器提供的 C 語言函數(shù)庫和 Windows 動態(tài)連接庫,實現(xiàn)復雜的控制功能。用戶能夠將這些控制函數(shù)與用戶自身的控制系統(tǒng)所需要的數(shù)據(jù)處理、界面顯示、用戶接口等應用程序模塊集成在一起。在硬件控制器的基礎上,設計開發(fā)一個監(jiān)控軟件。
2.2 系統(tǒng)功能模塊劃分
該設計要實現(xiàn)的是通過VC設計一個軟件操作界面,通過該軟件界面可以控制硬件P/T數(shù)字轉臺,同時能夠對硬件轉臺的各種數(shù)據(jù)進行采集。這些數(shù)據(jù)包括:二維坐標、橫軸、縱軸的轉速、加速度、是否到達轉臺的轉動極點坐標、攝像頭采集的圖像信息等等。對采集到的數(shù)據(jù)進行處理,利用采集到的轉臺的信息來控制模擬的三維轉臺,從而讓操作者對轉臺的運行狀況一目了然。同時,該系統(tǒng)能對轉臺運行的具體坐標進行實時地顯示,并且當轉臺工作在非正常狀況下時,該系統(tǒng)能以聲音和圖像的形式進行報警,其控制流程如圖2所示。
圖2 P/T數(shù)字監(jiān)控軟件整體流程
該軟件界面可分為六塊,在總控制臺區(qū)域有4個按鈕,如圖3所示。4個按鈕分別為打開卡、轉臺位置復位、設定參考點和演示。
圖3 總控制臺區(qū)域
總控制臺區(qū)域的控制流程如圖4所示。第一個打開板卡按鈕的功能為當按下此按鈕后轉臺的板卡啟動,各個控制按鈕能對轉臺進行控制,并且此按鈕顯示為關閉板卡,其實現(xiàn)函數(shù)為:void MyDlgOpenGL::OnButtonOpenCard();該函數(shù)的實現(xiàn)方法是當按下打開板卡按鈕后觸發(fā)該函數(shù),此函數(shù)調用固高公司提供的GT_Open()函數(shù),GT_Open()函數(shù)為一個BOOL型函數(shù),當該函數(shù)返回值為“真”時,表示板卡打開成功,反之則表示失敗。當板卡打開成功后,打開所有的控制鍵,可以通過控制按鈕對轉臺進行控制,同時打開卡按鈕上的文字變?yōu)殛P閉卡,意思就是當再按下此按鈕時就關閉板卡。關閉板卡的函數(shù)為GT_Close()函數(shù),該函數(shù)也是一個BOOL型函數(shù),當返回真值的時候,調用Close_Motion_Card()函數(shù)關閉板卡,從而關閉轉臺控制鍵對轉臺的控制,同時該按鈕顯示為打開板卡。
第二個按鈕為歸零按鈕,此按鈕的功能為無論轉臺運行在什么狀態(tài)下,轉臺都要回到原點(x坐標為0,y坐標為0),此函數(shù)為:void CMyDlgOpenGLDlg::OnButtonHome();實現(xiàn)方法為調用轉臺運動函數(shù)庫中的函數(shù):
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 總控制臺區(qū)域的控制流程
第三個按鈕為演示按鈕,其實現(xiàn)函數(shù)為:void CMyDlgOpenGLDlg::OnButtonClrSts();實現(xiàn)方法:定時對轉臺信息進行采集,對采集到的轉臺信息進行判斷,判別轉臺是否轉動到了端點位置,當運行到端點位置時,轉臺運行方向改變。
第四個按鈕為設置當前狀態(tài)為參考點,此時x(橫軸)坐標為0,y(縱軸)為0,實現(xiàn)函數(shù)為:void CMyDlgOpenGLDlg::OnButtonClrSts();使用OpenGL圖形庫進行圖形應用開發(fā)。首先,要獲得RC;然后,要將其設置為“當前RC”,后面所有的繪制工作都是在“當前RC”下進行的,直到“當前RC”無效。其主要程序為:
CPaintDC dc(this);
hdc=::GetDC(m_hWnd);
hglrc=wglCreateContext(hdc);
wglMakeCurrent(hdc,hglrc);
該部分的程序功能主要是獲取畫圖設備DC,創(chuàng)建一個OpenGL繪制描述表RC,再把他們聯(lián)系起來。
3.1 三維圖形背景
繪制背景就是在程序的初始化中通過繪制描述表RC進行如下語句的繪制:glClearColor(0.5f,0.5f,0.5f,0.3f);該語句的功能就是繪制界面的背景,并且規(guī)定其深度值為0.3f,為了使這個界面更逼真,該界面添加了一個霧化效果,其實現(xiàn)函數(shù)為:
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);
}
該函數(shù)的功能是啟動霧化、設定霧化距離、設定霧化屬性。通過此函數(shù),可以實現(xiàn)當轉臺的距離遠時,轉臺將越來越模糊。
繪制三維轉臺:是在OpenGL類的OnPaint函數(shù)下繪制的,該函數(shù)的功能是繪圖,該函數(shù)的循環(huán)機制是不停的重新繪制圖形。要繪制此三維轉臺,先把轉臺分成五大塊:第一塊是繪制轉臺的不動部分,包括繪制底座,繪制放底座的面,繪制三維轉臺的柱子;第二塊是畫橫軸;第三塊是畫轉臺的縱軸;第四塊為影藏,這塊就是界面的左上角和右上角的兩個控制區(qū),兩個控制區(qū)都是通過滑輪來控制轉臺的,左邊是控制轉臺的橫軸順時針和逆時針旋轉,右邊是控制轉臺的縱軸;第五塊是轉臺兩側的兩個表盤。
第一塊:繪制轉臺的不動部分,如圖5所示,其實現(xiàn)函數(shù)為:void COpenGL::drawdi(void)。其繪制過程為:①繪制底座:通過繪制底座的8個頂點從而繪制底座的6個面,這6個面的顏色不相同,在底座的最上面的一個面采用的是紋理貼圖,該圖是從真實轉臺的圖片拍攝過來的;②繪制放底座的面:該面有4個定點,為了使該轉臺更逼真,該面的繪制是通過紋理貼圖來實現(xiàn)的,該圖是通過數(shù)碼相機在實驗室拍攝的實驗室地面圖片,通過對圖片的處理,把該圖片進行點對點的貼到該面上;③繪制轉臺的柱子:柱子的畫法主要運用的是畫圓柱的方法,通過循環(huán)取圓柱兩個底面圓上的相近兩點,可以使上下兩個面上的4個點構成一個面,如此循環(huán)的畫一周就可以畫出一個圓柱體的側面,由于這4個點的顏色是不斷變化的,因此該圓柱看上去就是一個彩色的圓柱。
圖5 轉臺的不動部分
第二塊:繪制轉臺的橫軸,如圖6所示,其實現(xiàn)函數(shù)為: void COpenGL::drawzhu(VOID),其繪制過程可以通過片頭按鈕看到。通過繪點先畫出最下面的長方體和兩側的長方體,再通過畫圓柱體的方法,取圓柱體的兩底面圓上的4點組成一個面,通過循環(huán)把圓柱繪制出來,圖中的兩個扇形圓柱和兩個半圓柱都是通過此方法繪制出的。
圖6 轉臺的橫軸
第三塊:繪制轉臺的縱軸,如圖7 所示。轉臺的縱軸畫法包括圓柱、圓柱上的兩個面、下面的U形體、攝像頭的畫法。U形體是由3個長方體構成的,其畫法都是通過描點后使畫面組成一個體。攝像頭的畫法就是畫一個圓柱體,攝像頭的閃動效果是通過不斷畫白色的三角形而得到的,該三角形的其中一點在圓心,另外兩點在圓上,通過不斷改變圓的半徑就能達到這個效果。圖中半透明彩色的環(huán)形圈代表的是攝像頭的方向,這使攝像頭的方向感更強。其中使用了融合技術,其融合的函數(shù)為:
glEnable(GL_BLEND);
glBegin(GL_QUADS);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA;
glHint(GL_LINE_SMOOTH_HINT,GL_DONT_CARE);
圖7 轉臺的縱軸
第四塊:轉臺的控制區(qū)。轉臺的控制區(qū)實現(xiàn)的方法為,通過MOUSEMOVE消息,鼠標移動到指定的區(qū)域,OpenGL類將繪制該控制區(qū),該控制區(qū)為一個半透明白色的長方形。當在該區(qū)域時,滑輪才能使用;當在右上角時,滑輪控制轉臺的橫軸;當在左上角時,滑輪控制轉臺的縱軸。該功能的實現(xiàn)運用了三個觸發(fā)消息和兩個畫圖函數(shù)。三個觸發(fā)消息為:
void COpenGL::OnMouseMove(UINT nFlags,CPoint point)BOOL CMyDlgOpenGLDlg::OnMouseWheel(UINT nFlags,short zDelta,CPoint pt)
BOOL CMyDlgOpenGLDlg::PreTranslateMessage(MSG* pMsg)
兩個畫圖函數(shù)為:
void COpenGL::drawkongzhiqu1()
void COpenGL::drawkongzhiqu2()
第五塊:轉臺的兩個表盤,如圖8所示。其畫法就是通過描點、紋理貼圖和讓指針饒法向量按一定角度旋轉,其繞法向量旋轉的函數(shù)為:glRotatef(bb,0.0f,0.28f,1.0f);其中bb代表旋轉的角度,后面的值代表法向量。
圖8 轉臺的兩個表盤
3.2 轉臺轉動及視口變換
轉臺轉動分為橫軸轉動和縱軸轉動。橫軸轉動和縱軸轉動的角度為兩個全局變量,其角度的大小通過運動控制庫中的函數(shù)獲取得到的轉臺實際轉動的角度大小,其轉動原理是通過一個轉動函數(shù)實現(xiàn)的,該函數(shù)為:glRotatef(bb,1.0f,0.0f,0.0f);其中bb為轉動角度,后面為轉動的法向量。
視口變換就是改變視口的位置,如圖9 所示。通過拖動鼠標可以改變視圖窗口的大小,其實現(xiàn)的方法為:如果鼠標在視圖窗口內,當鼠標左鍵按下時,可以獲取鼠標的坐標,并且響應MOUSEMOVE觸發(fā)函數(shù),實時獲取移動的差量并將此差量轉變?yōu)橐暱诘臋M坐標和縱坐標的移動量。完成此功能需要4個觸發(fā)消息,其函數(shù)分別為:
void COpenGL::OnMouseMove(UINT nFlags,CPoint point)
BOOL CMyDlgOpenGLDlg::PreTranslateMessage(MSG* pMsg)
其中第二個函數(shù)包括所有鼠標的觸發(fā)消息。通過鼠標滑輪可以改變視口的觀察距離,其實現(xiàn)方法為:如果鼠標在視圖窗口內,且不在左上角和右上角的兩個控制區(qū),可以通過鼠標滑輪來控制視口的遠近距離。其實現(xiàn)函數(shù)為:BOOL CMyDlgOpenGLDlg::OnMouseWheel(UINT nFlags,short zDelta,CPoint pt)。
圖9 三維轉臺顯示區(qū)
該P/T數(shù)字轉臺監(jiān)控軟件的實時監(jiān)控性好、界面友好、操作簡潔方便。由于可以快速直觀地觀察轉臺的運行情況和比較方便地操作轉臺,因此可以將該監(jiān)控軟件用在一些不方便觀察轉臺運行狀態(tài)的情況下。該軟件的設計支持任何的操作系統(tǒng),而且軟件占用內存小,也可以用在對所有轉臺的監(jiān)控上。
由于該設計采用了比較大眾型的VC++開發(fā)軟件,因此程序的可讀性、靈活性和適應性強,便于系統(tǒng)的改進和升級,可以在此基礎上添加所需要的功能。在軍事運用上,可以通過修改界面,聯(lián)合其他的火控系統(tǒng)和導彈發(fā)射系統(tǒng)配合作戰(zhàn)。所以,該監(jiān)控軟件無論是在日常生活中還是在軍事方面都能有廣泛的應用,如果投入生產使用會有較大的商業(yè)價值和社會效益。
[1]Dave Shreiner.OpenGL編程指南[M].李 軍,譯.北京:機械工業(yè)出版社,2014.
[2]Richard S.Wright,Jr.Nicholas Haemel,Graham Sellers Benjamin Lipchak .OpenGL超級寶典[M].5版.付 飛,李艷輝,譯.北京:人民郵電出版社,2012.
[3]徐文鵬.計算機圖形學基礎(OpenGL版)[M].北京:清華大學出版社,2014.
[4]劉志銘,李 賀,高 茹.Visual C++程序開發(fā)范例寶典[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