劉旭,李占嶺,郭志濤
(河北省電力勘測(cè)設(shè)計(jì)研究院,石家莊市,050031)
目前架空輸電線路行業(yè)使用的塔型種類及導(dǎo)、地線布置方式越來(lái)越多,如雙回路與單回路、雙回路與四回路、六回路與雙回路、雙回路與架構(gòu)等。傳統(tǒng)的架空輸電線路線間距離計(jì)算精度低,計(jì)算效率已不能滿足現(xiàn)在的設(shè)計(jì)要求。為了提高架空輸電線路電氣距離計(jì)算精度和效率,開(kāi)發(fā)了輸電線路三維電氣校驗(yàn)程序,通過(guò)簡(jiǎn)化數(shù)據(jù)輸入,使用動(dòng)態(tài)交互設(shè)計(jì)修改鐵塔、絕緣子串等的參數(shù),提高了輸電線路線間電氣距離的計(jì)算精度,以三維的形式直觀地顯示輸電線路線間電氣距離等相關(guān)內(nèi)容,也可為施工提供精確的指導(dǎo)數(shù)據(jù)。
架空輸電線路中的導(dǎo)、地線是以桿塔為支撐物而懸掛起來(lái)的,其懸掛線可認(rèn)為是“懸鏈線”。在輸電線路三維電氣校驗(yàn)程序設(shè)計(jì)過(guò)程中,按照懸鏈線的計(jì)算公式[1]來(lái)計(jì)算導(dǎo)、地線。本計(jì)算選用坐標(biāo)點(diǎn)O點(diǎn)位于電線懸掛點(diǎn)A的懸鏈線方程式[1]來(lái)計(jì)算導(dǎo)線,如圖1所示。
圖1 懸鏈線示意圖Fig.1 Schematic diagram of catenary
按照文獻(xiàn)[1]中的風(fēng)偏公式計(jì)算風(fēng)偏角。
按照文獻(xiàn)[6]中的風(fēng)偏平面內(nèi)的參數(shù)計(jì)算公式得出風(fēng)偏參數(shù)與垂直平面內(nèi)各參數(shù)之間的關(guān)系。
將空間坐標(biāo)系中的xoy面作為地面,x軸正向指向屏幕外,z軸正向指向天空。采用右手坐標(biāo)系。將yoz平面作為懸鏈線旋轉(zhuǎn)平移前所在平面。已知懸鏈線兩端點(diǎn)的空間坐標(biāo)點(diǎn)的位置A'、B',計(jì)算方法如下:
(1)設(shè)A'在平面xoy平面中的投影為O',求得垂直于地面(即 xoy平面)的平面 A'O'B',根據(jù) A'、B'的坐標(biāo)點(diǎn)求得檔距L、高差h;
(2)根據(jù)L、h的值求得位于yoz平面內(nèi)右懸掛點(diǎn)B,左懸掛點(diǎn)A位于原點(diǎn),通過(guò)使用懸鏈線方程式(1)獲取位于yoz平面內(nèi)的懸鏈線L的取樣點(diǎn)。
(3)將懸鏈線L繞oz軸旋轉(zhuǎn)至與A'O'B'所在平面平行的平面內(nèi)得到旋轉(zhuǎn)之后的懸鏈線L';
(4)將L'所有取樣點(diǎn)平移至A'O'B'所在的平面內(nèi)即為所得到的最終懸鏈線L″。
對(duì)于有風(fēng)偏的工況,需要根據(jù)風(fēng)偏公式計(jì)算風(fēng)偏平面內(nèi)的檔距L、高差h、風(fēng)偏角,然后根據(jù)以上(2)~(4)求得懸鏈線L″,繞A'B'軸旋轉(zhuǎn)對(duì)應(yīng)的風(fēng)偏角得到最終的懸鏈線。
根據(jù)各懸鏈線的取樣點(diǎn)的空間坐標(biāo),計(jì)算出懸鏈線間最近距離及最近距離點(diǎn)坐標(biāo)并顯示出來(lái)。
2.1.1 OpenGL的三維空間變換
OpenGL圖形庫(kù)中包含平移、旋轉(zhuǎn)、縮放等操作的函數(shù)[7],使用這些函數(shù)可以看做在照相機(jī)位置不動(dòng)的情況下移動(dòng)物體位置。
void glTranslate*(TYPE x,TYPE y,TYPE z):平移函數(shù),其中x,y,z組成平移向量。
void glRotate*(TYPE angle,TYPE x,TYPE y,TYPE z):繞軸旋轉(zhuǎn)函數(shù),其中 x、y、z組成旋轉(zhuǎn)向量軸,angle為繞該旋轉(zhuǎn)軸旋轉(zhuǎn)的角度,該旋轉(zhuǎn)函數(shù)以逆時(shí)針?lè)较驗(yàn)檎较颉?/p>
2.1.2 對(duì)象操作
在添加任意對(duì)象的時(shí)候獲取唯一對(duì)象ID,該ID標(biāo)識(shí)用于對(duì)象查找、編輯、刪除等操作。詳細(xì)操作流程如圖2所示。
圖2 對(duì)象操作流程Fig.2 Operation procedure
OpenGL選擇對(duì)象函數(shù)[7]如下。
void glInitNames(void):初始化名字堆棧。
void glPushName(GLuint name):將當(dāng)前的name壓棧。
void glPopName(void):將之前壓棧的名字彈出。
void glLoadName(GLuint name):將當(dāng)前的name載入到名字堆棧的棧頂。
void glSelectBuffer(GLsizei size,GLuint*buffer):生成選擇緩沖區(qū),其中size為緩沖區(qū)大小,buffer為指定的緩沖區(qū)數(shù)組指針。
GLint glRenderMode(GLenum mode):選擇使用何種模式繪制場(chǎng)景,包括GL_RENDER(默認(rèn))、GL_SELECT(選擇)、GL_FEEDBACK(反饋)模式,返回值為選擇的記錄個(gè)數(shù)。
void gluPickMatrix(GLdouble x, GLdouble y,GLdouble width,GLdouble height,Glint viewport[4]):指定需要選取的區(qū)域,其中x、y為在窗口中被選擇區(qū)域的中心坐標(biāo),width、height為選擇區(qū)域大小,viewport為當(dāng)前的OpenGL窗口的顯示大小。
void gluPerspective(GLdouble fovy,Gldouble aspect,GLdouble near,GLdouble far):創(chuàng)建一個(gè)表示對(duì)稱透視視圖平截頭體的矩陣。
操作步驟如下:
(1)要實(shí)現(xiàn)選擇功能,需要對(duì)于每個(gè)繪制對(duì)象設(shè)置唯一ID,首先調(diào)用 glInitName初始化,然后調(diào)用glPushName壓入名字堆棧棧頂,在繪制時(shí)使用glLoadName載入該唯一ID至名字堆棧中;
(2)使用glSelectBuffer設(shè)定選擇緩沖區(qū);
(3)使用glRenderMode(GL_SELECT)設(shè)置當(dāng)前繪制場(chǎng)景模式為選擇模式;
(4)使用gluPickMatrix設(shè)定選擇的矩形區(qū)域,把當(dāng)前的投影矩陣與該選擇矩陣相乘;
(5)使用 gluPerspective(glOrtho、glFrustum)設(shè)置標(biāo)準(zhǔn)的投影矩陣;
(6)調(diào)用RenderScene()函數(shù)繪制場(chǎng)景;
(7)繪制完成之后再次調(diào)用glRenderMode(GL_RENDER),得到選擇的對(duì)象個(gè)數(shù),查詢選擇緩沖區(qū),對(duì)于選擇的結(jié)果有可能會(huì)有多個(gè),根據(jù)需要實(shí)現(xiàn)單選還是拖選。
2.1.3 使用顯示列表
由于在三維顯示界面中可以實(shí)時(shí)拖動(dòng)以不同的視角觀察物體,如果采用立即模式每次都重新計(jì)算物體位置再繪制,尤其是對(duì)于需要多次操作模型視圖矩陣的繪制會(huì)嚴(yán)重導(dǎo)致畫(huà)面刷新頻率下降。使用顯示列表,對(duì)于包含有多個(gè)矩陣操作、使用光源、材料屬性、光照模型的對(duì)象將只保存最終的計(jì)算結(jié)果,即只需要進(jìn)行1次操作就可以完成對(duì)象的繪制,可以提高繪制效率。顯示列表在生成之后無(wú)法修改,如要繪制的對(duì)象有變化需要修改顯示,則需要將顯示列表刪除之后重新創(chuàng)建。使用到的函數(shù)及功能如下。
GLuint glGenList(GLsizei range):創(chuàng)建顯示列表,其中range為顯示列表數(shù)量,返回值為連續(xù)分配的顯示列表中的第1個(gè)數(shù)。
void glNewList(GLuint list,GLenum mode):開(kāi)始顯示列表定義,list為 glGenList返回列表中的值,mode值為GL_COMPILE(只保存到顯示列表)和GL_COMPILE_AND_EXECUTE(立即執(zhí)行并保存到顯示列表)。
void glEndList(void):結(jié)束顯示列表定義。
void glCallList(GLuint list):調(diào)用顯示列表,其中l(wèi)ist為顯示列表值。
2.1.4 高質(zhì)量截圖
在實(shí)際的生產(chǎn)設(shè)計(jì)過(guò)程中,可能需要獲取比當(dāng)前窗口顯示圖像結(jié)果更精細(xì)的圖像效果以用于展示等。
實(shí)現(xiàn)原理:如圖3所示,在保持視點(diǎn)不變的情況下,改變視線的方向,按照順序?qū)⒁暰绑w依次定位到a、b、c、d區(qū)域并繪制場(chǎng)景到幀緩存對(duì)象(frame buffer object,F(xiàn)BO),讀取FBO中的繪制結(jié)果數(shù)據(jù)并將該結(jié)果保存到圖像文件中,最終生成高質(zhì)量圖片。
圖3 高質(zhì)量截圖原理Fig.3 Principle of high quality snapshot
鐵塔模型文件格式為dxf格式,該格式可以通過(guò)AutoCAD或其他的設(shè)計(jì)工具生成,具有較強(qiáng)的通用性,讀入的鐵塔模型使用圓柱體來(lái)模擬鐵塔框架連接。
絕緣子串使用圓錐組合而成,依據(jù)絕緣子串的長(zhǎng)度修改需要的圓錐的數(shù)量。
為使繪制的空間懸鏈線模型平滑,使用B樣條曲線模擬繪制出懸鏈線模型。
鐵塔與絕緣子串的三維模擬近景效果實(shí)例如圖4~5所示。
本文以既有設(shè)計(jì)規(guī)范為基礎(chǔ),經(jīng)過(guò)空間模型的算法分析,給出鐵塔、絕緣子串、懸鏈線的三維模擬,使用VC6、VS2008、OpenGL開(kāi)發(fā)庫(kù)開(kāi)發(fā)出了架空輸電線路三維電氣校驗(yàn)系統(tǒng),該系統(tǒng)解決了線路在不同工況(高溫、低溫、大風(fēng)、平均溫、覆冰等)檔距中任意1點(diǎn)導(dǎo)線與導(dǎo)線、導(dǎo)線與地線間的距離計(jì)算的問(wèn)題,計(jì)算結(jié)果精確,顯示效果直觀,具有良好的實(shí)用性和操作性。
[1]張殿生.電力工程高壓送電線路設(shè)計(jì)手冊(cè)[M].2版.北京:中國(guó)電力出版社,2002.
[2]DL/T 5217—2005 220 kV~500 kV緊湊型架空送電線路設(shè)計(jì)技術(shù)規(guī)定[S].北京:中國(guó)電力出版社,2005.
[3]DL/T 620—1997 交流電氣裝置的過(guò)電壓保護(hù)和絕緣配合[S].
[4]DL/T 5154—2002 架空送電線路桿塔結(jié)構(gòu)設(shè)計(jì)技術(shù)規(guī)定[S].北京:中國(guó)電力出版社,2002.
[5]GB 50545—2010 110~750 kV 架空輸電線路設(shè)計(jì)規(guī)范[S].北京:中國(guó)計(jì)劃出版社,2010.
[6]邵天曉.架空送電線路的電線力學(xué)計(jì)算[J].2版.北京:中國(guó)電力出版社,2003.
[7]Shreiner D.The Khronos OpenGL ARB Working Group.OpenGL 編程指南[M].7版.李軍,徐波,譯.北京:機(jī)械工業(yè)出版社,2010.
[8]朱鼎勛.空間解析幾何學(xué)[M].上海:上海科學(xué)技術(shù)出版社,1981.