劉旭,李占嶺,郭志濤
(河北省電力勘測設計研究院,石家莊市,050031)
目前架空輸電線路行業使用的塔型種類及導、地線布置方式越來越多,如雙回路與單回路、雙回路與四回路、六回路與雙回路、雙回路與架構等。傳統的架空輸電線路線間距離計算精度低,計算效率已不能滿足現在的設計要求。為了提高架空輸電線路電氣距離計算精度和效率,開發了輸電線路三維電氣校驗程序,通過簡化數據輸入,使用動態交互設計修改鐵塔、絕緣子串等的參數,提高了輸電線路線間電氣距離的計算精度,以三維的形式直觀地顯示輸電線路線間電氣距離等相關內容,也可為施工提供精確的指導數據。
架空輸電線路中的導、地線是以桿塔為支撐物而懸掛起來的,其懸掛線可認為是“懸鏈線”。在輸電線路三維電氣校驗程序設計過程中,按照懸鏈線的計算公式[1]來計算導、地線。本計算選用坐標點O點位于電線懸掛點A的懸鏈線方程式[1]來計算導線,如圖1所示。


圖1 懸鏈線示意圖Fig.1 Schematic diagram of catenary
按照文獻[1]中的風偏公式計算風偏角。
按照文獻[6]中的風偏平面內的參數計算公式得出風偏參數與垂直平面內各參數之間的關系。
將空間坐標系中的xoy面作為地面,x軸正向指向屏幕外,z軸正向指向天空。采用右手坐標系。將yoz平面作為懸鏈線旋轉平移前所在平面。已知懸鏈線兩端點的空間坐標點的位置A'、B',計算方法如下:
(1)設A'在平面xoy平面中的投影為O',求得垂直于地面(即 xoy平面)的平面 A'O'B',根據 A'、B'的坐標點求得檔距L、高差h;
(2)根據L、h的值求得位于yoz平面內右懸掛點B,左懸掛點A位于原點,通過使用懸鏈線方程式(1)獲取位于yoz平面內的懸鏈線L的取樣點。
(3)將懸鏈線L繞oz軸旋轉至與A'O'B'所在平面平行的平面內得到旋轉之后的懸鏈線L';
(4)將L'所有取樣點平移至A'O'B'所在的平面內即為所得到的最終懸鏈線L″。
對于有風偏的工況,需要根據風偏公式計算風偏平面內的檔距L、高差h、風偏角,然后根據以上(2)~(4)求得懸鏈線L″,繞A'B'軸旋轉對應的風偏角得到最終的懸鏈線。
根據各懸鏈線的取樣點的空間坐標,計算出懸鏈線間最近距離及最近距離點坐標并顯示出來。
2.1.1 OpenGL的三維空間變換
OpenGL圖形庫中包含平移、旋轉、縮放等操作的函數[7],使用這些函數可以看做在照相機位置不動的情況下移動物體位置。
void glTranslate*(TYPE x,TYPE y,TYPE z):平移函數,其中x,y,z組成平移向量。
void glRotate*(TYPE angle,TYPE x,TYPE y,TYPE z):繞軸旋轉函數,其中 x、y、z組成旋轉向量軸,angle為繞該旋轉軸旋轉的角度,該旋轉函數以逆時針方向為正方向。
2.1.2 對象操作
在添加任意對象的時候獲取唯一對象ID,該ID標識用于對象查找、編輯、刪除等操作。詳細操作流程如圖2所示。

圖2 對象操作流程Fig.2 Operation procedure
OpenGL選擇對象函數[7]如下。
void glInitNames(void):初始化名字堆棧。
void glPushName(GLuint name):將當前的name壓棧。
void glPopName(void):將之前壓棧的名字彈出。
void glLoadName(GLuint name):將當前的name載入到名字堆棧的棧頂。
void glSelectBuffer(GLsizei size,GLuint*buffer):生成選擇緩沖區,其中size為緩沖區大小,buffer為指定的緩沖區數組指針。
GLint glRenderMode(GLenum mode):選擇使用何種模式繪制場景,包括GL_RENDER(默認)、GL_SELECT(選擇)、GL_FEEDBACK(反饋)模式,返回值為選擇的記錄個數。
void gluPickMatrix(GLdouble x, GLdouble y,GLdouble width,GLdouble height,Glint viewport[4]):指定需要選取的區域,其中x、y為在窗口中被選擇區域的中心坐標,width、height為選擇區域大小,viewport為當前的OpenGL窗口的顯示大小。
void gluPerspective(GLdouble fovy,Gldouble aspect,GLdouble near,GLdouble far):創建一個表示對稱透視視圖平截頭體的矩陣。
操作步驟如下:
(1)要實現選擇功能,需要對于每個繪制對象設置唯一ID,首先調用 glInitName初始化,然后調用glPushName壓入名字堆棧棧頂,在繪制時使用glLoadName載入該唯一ID至名字堆棧中;
(2)使用glSelectBuffer設定選擇緩沖區;
(3)使用glRenderMode(GL_SELECT)設置當前繪制場景模式為選擇模式;
(4)使用gluPickMatrix設定選擇的矩形區域,把當前的投影矩陣與該選擇矩陣相乘;
(5)使用 gluPerspective(glOrtho、glFrustum)設置標準的投影矩陣;
(6)調用RenderScene()函數繪制場景;
(7)繪制完成之后再次調用glRenderMode(GL_RENDER),得到選擇的對象個數,查詢選擇緩沖區,對于選擇的結果有可能會有多個,根據需要實現單選還是拖選。
2.1.3 使用顯示列表
由于在三維顯示界面中可以實時拖動以不同的視角觀察物體,如果采用立即模式每次都重新計算物體位置再繪制,尤其是對于需要多次操作模型視圖矩陣的繪制會嚴重導致畫面刷新頻率下降。使用顯示列表,對于包含有多個矩陣操作、使用光源、材料屬性、光照模型的對象將只保存最終的計算結果,即只需要進行1次操作就可以完成對象的繪制,可以提高繪制效率。顯示列表在生成之后無法修改,如要繪制的對象有變化需要修改顯示,則需要將顯示列表刪除之后重新創建。使用到的函數及功能如下。
GLuint glGenList(GLsizei range):創建顯示列表,其中range為顯示列表數量,返回值為連續分配的顯示列表中的第1個數。
void glNewList(GLuint list,GLenum mode):開始顯示列表定義,list為 glGenList返回列表中的值,mode值為GL_COMPILE(只保存到顯示列表)和GL_COMPILE_AND_EXECUTE(立即執行并保存到顯示列表)。
void glEndList(void):結束顯示列表定義。
void glCallList(GLuint list):調用顯示列表,其中list為顯示列表值。
2.1.4 高質量截圖
在實際的生產設計過程中,可能需要獲取比當前窗口顯示圖像結果更精細的圖像效果以用于展示等。
實現原理:如圖3所示,在保持視點不變的情況下,改變視線的方向,按照順序將視景體依次定位到a、b、c、d區域并繪制場景到幀緩存對象(frame buffer object,FBO),讀取FBO中的繪制結果數據并將該結果保存到圖像文件中,最終生成高質量圖片。

圖3 高質量截圖原理Fig.3 Principle of high quality snapshot
鐵塔模型文件格式為dxf格式,該格式可以通過AutoCAD或其他的設計工具生成,具有較強的通用性,讀入的鐵塔模型使用圓柱體來模擬鐵塔框架連接。
絕緣子串使用圓錐組合而成,依據絕緣子串的長度修改需要的圓錐的數量。
為使繪制的空間懸鏈線模型平滑,使用B樣條曲線模擬繪制出懸鏈線模型。
鐵塔與絕緣子串的三維模擬近景效果實例如圖4~5所示。


本文以既有設計規范為基礎,經過空間模型的算法分析,給出鐵塔、絕緣子串、懸鏈線的三維模擬,使用VC6、VS2008、OpenGL開發庫開發出了架空輸電線路三維電氣校驗系統,該系統解決了線路在不同工況(高溫、低溫、大風、平均溫、覆冰等)檔距中任意1點導線與導線、導線與地線間的距離計算的問題,計算結果精確,顯示效果直觀,具有良好的實用性和操作性。
[1]張殿生.電力工程高壓送電線路設計手冊[M].2版.北京:中國電力出版社,2002.
[2]DL/T 5217—2005 220 kV~500 kV緊湊型架空送電線路設計技術規定[S].北京:中國電力出版社,2005.
[3]DL/T 620—1997 交流電氣裝置的過電壓保護和絕緣配合[S].
[4]DL/T 5154—2002 架空送電線路桿塔結構設計技術規定[S].北京:中國電力出版社,2002.
[5]GB 50545—2010 110~750 kV 架空輸電線路設計規范[S].北京:中國計劃出版社,2010.
[6]邵天曉.架空送電線路的電線力學計算[J].2版.北京:中國電力出版社,2003.
[7]Shreiner D.The Khronos OpenGL ARB Working Group.OpenGL 編程指南[M].7版.李軍,徐波,譯.北京:機械工業出版社,2010.
[8]朱鼎勛.空間解析幾何學[M].上海:上海科學技術出版社,1981.