摘要:油田開發需要了解儲層動態,包括厚度、孔隙度、滲透率、含油飽和度、巖性及物性等參數,以制定有效的生產方案。鋼絲繩纜試井技術作為獲取這些信息的重要手段,其張力計算的準確性和預警功能的有效性直接關系到工程設計的合理性與施工安全的保障程度。該系統集成了張力計算、基于VTK的三維井徑顯示以及張力預警展示等關鍵功能,有效提升了施工安全水平,優化了生產方案,為鋼絲繩纜試井作業提供了強有力的技術支持。
關鍵詞:鋼纜試井;張力計算;工程預警;三維可視化;VTK;三維建模;軟件系統
中圖分類號:TP391 文獻標識碼:A
文章編號:1009-3044(2025)04-0017-05 開放科學(資源服務) 標識碼(OSID) :
0 引言
鋼絲繩纜試井技術是獲取地層動態信息的重要手段,對于掌握井下生產信息、地層參數變化及診斷油井工作狀態至關重要。
現行鋼絲試井技術主要由地面試井車(或鋼絲絞車) 、井口防噴裝置和井下試井工具串組成,可實現鋼絲/電纜的自動化控制和安全預警[1]。然而,現有的鋼絲試井技術在面對復雜井型(如三維彎曲和扭曲井筒) 時,暴露出一定局限性。井下試井工具串與井壁的相互作用會對鋼絲繩張力產生顯著影響,而傳統技術難以精確模擬和評估這種復雜情況。相比之下,三維可視化預警系統具有明顯優勢,能夠直觀呈現井筒和鋼絲繩的狀態,為復雜井筒的試井方案設計、風險評估以及安全評價提供更為精準和直觀的依據。
本文主要聚焦于基于VTK的鋼絲繩纜試井張力計算與預警三維可視化系統的研究。該系統是一個專門用于鋼絲繩纜張力計算與工程施工預警的專業軟件,其中包含電纜施工的張力計算模塊、計算與預警結果的可視化模塊。該軟件填補了現有技術在復雜井型應用中的不足。本文基于鋼絲繩纜線張力計算理論,重點闡述了軟件系統架構及三維可視化實現[2]。
1 基本原理
鋼絲繩—井下工具系統可視為柔性變長度懸繩提升系統。在分析過程中,主要采用經典力學研究框架,結合哈密頓原理建立鋼絲繩的動力學方程,采用變分法求解鋼絲繩在試井全程的張力。針對直井段(如圖1所示) ,分析方法一般是建立橫縱耦合振動方程,研究鋼絲繩的瞬態振動響應。
針對大曲率段,分析方法一般是建立曲率配合方程及工具串通過線性方程,研究鋼絲繩在彎曲狀態下的極端振動響應。在此過程中須對圖1進行坐標旋轉變換,其目的在于將原本基于直井段建立的坐標系轉換為適應大曲率段幾何形狀的坐標系,使方程能夠準確地描述鋼絲繩在大曲率段的力學行為。
針對水平井段,分析方法一般是建立經典力學框架下的振動方程,分析鋼絲繩的張力扭轉特性。在此過程中須將圖1進行90°坐標旋轉變換[3],通過旋轉變換坐標系,能夠使振動方程與水平井段的實際幾何布局相匹配,進而分析鋼絲繩在水平方向上的張力扭轉特性。
1.1 鋼絲繩張力分析
在實際計算過程中,需要忽略鋼絲繩與天輪之間的滑動位移。建立鋼絲繩的張力微分方程如下:
式中:L,T,ν,E,A 分別表示鋼絲繩的長度,張力,線速度,彈性模量和橫截面積,此外m 表示質量,H 是高度參數,ρ 表示鋼絲繩材料密度,α 表示阻尼系數,g表示重力加速度。
1.2 鋼絲繩橫向振動模型
將鋼絲繩簡化為沿軸向運動的變長度弦線[4],提升重物簡化為一個質量為m 的剛體懸掛于弦線下端,假設鋼絲繩上端存在水平方向外界激勵e1(t),以模擬鋼絞線的偏心旋轉或其他因素的影響,下端存在水平外界激勵e2(t),以模擬導向裝置或其他因素的影響,模型簡化示意圖2所示。
其中,弦線的線密度為ρ,橫截面積為A,彈性模量為E。以弦線上端為坐標原點O,x 軸垂直向下方向為正,y軸水平向左方向為正。在運動過程中記繩長為l ( ) t ,在繩子上x處橫向振動位移為y( ) x,t ,v = l ? (t)為柔性提升系統的垂直運動速度,“.”符號表示對時間t的微分,同理a = v . 為柔性提升系統的垂直運動加速度。
利用連續介質的有限形變理論可知[5],鋼絲繩上x處位移向量為:
r = x (t)i + y (x,t) j (2)
式中:r 表示鋼絲繩x處的位移向量,i 為沿x軸方向單位矢量;j 為沿y 軸方向單位矢量。
對式(2)兩邊對時間t 求導,可得鋼絲繩上x處的速度向量:
V = vi + [ y ] t (x,t) + vyx (x,t) j (3)
式中:y 的下標t、x 分別表示對t和x 的偏導數。
同理可知,提升重物的位移向量和速度向量分別為:
rc = l (t)i + y (l (t),t) j (4)
Vc = vi + yt (l (t),t) j (5)
根據動能計算公式E =1/2mv2,則由式(4) 和(5) 可知,系統的動能可表示為:
式中:Vc ? Vc| x = l (t)表示提升重物在x = l (t)處速度向量點積,即右邊第一項為提升重物的動能;∫0l (t)V表示鋼絲繩從0到l (t)位置的速度向量點積,即第二項為鋼絲繩的動能。系統勢能可表示為:
式中:右邊第1項為靜態張力引起的廣義勢能;第2、3項為彈性勢能;EA 和EI分別為鋼絲繩抗拉和抗彎剛度;P 為鋼絲繩在靜平衡狀態下的張緊力,如式(8) 所示,g = 9.8m s2 為重力加速度;ε 為鋼絲繩應變,如式(9) 所示。
2 軟件體系結構
本系統使用面向對象可視化的Visual C++ 2022 作為開發平臺。如圖3所示為整個軟件所用開發工具的層次結構,開發中主要使用微軟功能強大的MFC可視化編程框架,采用面向對象編程(OOP) 技術進行編程。軟件開發中除使用微軟的MFC庫外,二維圖形顯示部分選用了功能豐富且美觀的BCG圖表組件BCG?PChart;參數配置采用最流行的JSON數據格式,使用JsonCpp庫支持,避免了大量底層工作,顯著提高了開發效率,效果良好。
Microsoft Visual C++[6]是一個由微軟公司提供的免費開發工具,作為C語言、C++以及C++/CLI等編程語言的集成開發環境,其對面向對象編程的良好支持使其能夠高效開發復雜的軟件系統,滿足系統對性能和功能的要求。
BCGControlBar Pro for MFC是微軟操作系統的商業組件,是MFC擴展庫,可構建類似Microsoft Office、Visual Studio等產品的高級用戶界面,包括圖表、日歷等。其豐富的功能和美觀的效果能夠很好地滿足系統對圖表展示的多樣化需求,為用戶提供直觀、清晰的數據可視化呈現。
JsonCpp是一個開源的C++庫,用于解析和生成JSON數據。本系統用它存儲和訪問工程參數,其簡單易用的特性以及對標準JSON語法的支持,使得存儲和訪問工程參數變得輕松高效,有效避免了底層煩瑣的工作,提高了開發效率。
整個軟件主要包括井斜數據與工程參數處理模塊、張力計算與預警模塊、數據展示與交互模塊,系統按圖4所示的層次進行處理。
井斜數據與工程參數處理模塊:首先加載指定井的井斜數據以及相應的工程參數,通過對話框可以編輯修改這些工程參數,并保存以影響后續的計算與預警。這些數據從磁盤讀取后存放于內存空間中,供計算模塊使用。
張力計算與工程預警模塊:該模塊是系統的核心算法部分,根據本文第二部分的算法動態計算出對應井在不同深度點上的張力值,并根據安全施工規范做出工程預警判斷,給出提醒信息。
計算結果顯示與渲染模塊:本模塊可以以圖表、二維動畫和三維形式進行展示,本文主要闡述三維可視化部分。系統以三維方式進行井的空間顯示、張力顏色顯示和預警點標注。
3 系統處理流程
本軟件采用MFC應用程序結合圖表工具、三維顯示等底層庫設計。由于使用面向對象的可視化編程技術,應用程序啟動后,MFC的應用程序窗口等待用戶通過圖形用戶界面進行操作。用戶按照業務邏輯首先選擇待處理的井;然后設置和修改工程參數以確定初始條件;接著系統根據井斜和工程參數進行計算,并確定預警位置;最后系統以二維和三維方式展示計算結果(井的幾何形態、井上各點的張力、判定出的預警點位) 。
圖5表達了軟件系統的處理流程,該流程通過用戶在軟件界面上的交互來實現,圖中的循環也通過用戶的按鈕選擇以及在展示窗口上的各種交互操作來實現。
4 VTK 三維可視化實現過程
可視化工具包(VTK) 是一個開源平臺,適用于3D 計算機圖形建模、科學可視化和2D繪圖。本系統將VTK作為三維構建的基礎平臺,借助其在三維建模方面的簡易性優勢,提升軟件開發效率[7]。
在本系統中,VTK的可視化管線機制應用如下:首先構建可視化模型,并將各類原始數據處理對象(如本系統中的三維井斜數據、計算所得的張力數據和預警產生的報警數據信息) 輸入其中。這些原始數據經過過濾和映射處理,進而轉換為VTK管線能夠直接處理的圖形元素,如VTK數據集。隨后,通過圖形模型,運用用戶的圖形開發平臺和工具(如Windows操作系統、Visual C++編程環境、VTK、OpenGL) ,結合井纜張力建模等實際問題,獲取所需的圖形可視化結果,即三維圖形[8]。
4.1 建立“數據變換”的處理管線
首先要根據井徑數據與張力計算結果的原始數據確定合適的數據源(Sources) 對象。若井徑數據以特定格式文件(如CSV) 存儲,可選用vtkDelimitedTex?tReader類讀取數據作為數據源,通過設置文件路徑與分隔符等參數實現數據導入;若張力計算結果為程序運行生成的數組形式數據,則可借助vtkDataArray類存儲并作為數據源,以下是代碼示例。
// 讀取CSV格式井徑數據
vtkNewlt;vtkDelimitedTextReadergt; reader;
reader-gt;SetFileName(\"well_path.csv\");
reader-gt;SetFieldDelimiter(\",\");
reader-gt;Update();
而過濾器(Filters) 是對源數據進行進一步加工,生成新的數據集輸出。例如,若原始數據存在噪聲,可采用vtkSmoothPolyDataFilter類進行平滑處理,通過設置合適的平滑因子減少噪聲點;當需要進行坐標轉換等轉換操作時,可利用vtkTransformPolyDataFilter 類,結合vtkTransform類定義變換矩陣來實現;若原始數據量過大,可使用vtkDecimatePro類進行數據采樣,依據設置的采樣比例在保持數據基本形狀的前提下減少數據點數量,以下是代碼示例。
// 對數據進行平滑處理
vtkNewlt;vtkSmoothPolyDataFiltergt; smoother;
smoother-gt;SetInputConnection(reader-gt;GetOutput?Port());
smoother-gt;SetNumberOfIterations(10);
smoother-gt;Update();
映射器(Mappers) 主要是將數據轉換成圖形模型可以理解和描述的幾何數據,為后期的可視化做好準備,在原始數據與圖形數據之間搭建橋梁。常用的vt?kPolyDataMapper類可將vtkPolyData類型數據集(多為經過濾器處理后的數據) 轉換為圖形模型能理解的幾何數據,如將井徑數據處理后的三維點云數據(以vtk?PolyData存儲) 轉換為可渲染的幾何元素(如三角形面片等) 。在映射過程中,可運用vtkMapper類相關方法設置數據屬性映射,如將張力值映射到顏色屬性上,通過其屬性設置方法指定顏色映射規則與范圍,以下是示例代碼。
// 創建映射器
vtkNewlt;vtkPolyDataMappergt; mapper;
mapper -gt; SetInputConnection(smoother-gt;GetOut?putPort());
4.2 建立“數據表現”的處理管線
建立“數據表現”的處理管線是將“數據變換”后的結果,充分利用圖形模型中的幾種基本對象:角色(Actor) 、燈光(Light) 、照相機(Camera) 、屬性(Prop?erty) 、變換(Transform) 、渲染窗口(RenderWindow) 、渲染器(Renderer) 、窗口交互(RenderWindowInteractor) 等,通過設置這些基本對象的屬性并合理組合來實現的。
VTK提供了與這些對象相關的類:vtkActor、vtk?Light、vtkCamera、vtkProperty、vtkTransform、vtkRender?Window、vtkRender、vtkRenderWindowInteractor,這些類通過設置角色、光源、照相機、渲染特性、場景交互等屬性來控制場景中的圖形對象。
vtkActor類用于表示場景中的對象,可設置其位置、方向和縮放比例等屬性,如設置位置使用SetPosi?tion方法,設置方向使用SetOrientation方法。vtkLight 類用于創建燈光效果,能設置燈光類型(點光源、平行光源等) 、顏色、強度和位置等參數,如設置點光源用SetLightTypeToPoint方法,設置燈光顏色用SetColor方法。vtkCamera類用于控制場景視角,可設置位置、焦點、視角范圍等,如SetPosition設置位置,SetFocalPoint 設置焦點位置,SetViewUp設置相機上方向向量。vtk?Property類用于設置對象渲染屬性,如顏色、透明度、反射率等,可創建該類對象設置屬性后與vtkActor關聯。vtkTransform類用于對象變換操作,如平移、旋轉和縮放等,如Rotate方法可設置旋轉角度并應用于vt?kActor對象。vtkRenderWindow類創建渲染窗口,通過SetSize設置大小,SetWindowName設置名稱。vtkRen?derer類管理場景對象渲染,可將vtkActor等對象添加其中,如renderer-gt;AddActor2D(scalarBarActor)將標量值顏色條vtkActor 二維渲染,renderer-gt;AddActor(ac?torCone)將井口四棱臺vtkActor三維渲染。vtkRender?WindowInteractor 類實現用戶與渲染窗口交互,通過SetRenderWindow關聯渲染窗口,Start啟動交互,以下是代碼示例。
// 創建Actor
vtkNewlt;vtkActorgt; actor;
actor-gt;SetPosition(0, 0, 0);
actor-gt;SetOrientation(0, 0, 0);
actor-gt;SetScale(1, 1, 1);
// 創建燈光
vtkNewlt;vtkLightgt; light;
light-gt;SetLightTypeToPoint();
light-gt;SetColor(1, 1, 1);
light-gt;SetIntensity(1);
light-gt;SetPosition(0, 0, 10);
// 創建照相機
vtkNewlt;vtkCameragt; camera;
camera-gt;SetPosition(0, 0, 20);
camera-gt;SetFocalPoint(0, 0, 0);
camera-gt;SetViewUp(0, 1, 0);
// 創建渲染器并添加Actor和燈光
vtkNewlt;vtkRenderergt; renderer;
renderer-gt;AddActor(actor);
renderer-gt;AddLight(light);
// 創建渲染窗口并添加渲染器
vtkNewlt;vtkRenderWindowgt; renderWindow;
renderer-gt;AddRenderer(renderer);
renderWindow-gt;SetSize(800, 600);
renderWindow-gt;SetWindowName(\"3DVisualization\");
// 創建交互器并關聯渲染窗口
vtkNewrenderWin ?dowInteractor;
renderWindowInteractor-gt;SetRenderWindow(ren?derWindow);
renderWindowInteractor-gt;Start();
4.3 實現“數據的執行”
當可視化管線被構建好后,VTK管線機制發揮作用,分別按照第一步和第二步的設置,自動完成數據的處理(也稱為隱式執行) 。即使管線中的過程對象或數據對象發生變化,可視化管線的執行也會繼續保持同步操作。
VTK三維圖形繪制的偽代碼如下。
vtkNewlt;vtkRenderergt; renderer; //場景
//創建各種業務表達需要的數據集DataSet(角色) ,此處根據不同業務需求,可能利用如vtkPolyData 等類創建數據集,用于表示場景中的幾何形狀等數據
//創建上述數據集對應的Mapper對象(劇本) ,比如使用vtkPolyDataMapper類將數據集轉換為圖形數據,以便后續圖形模型處理
//由上述Mapper對象創建各種業務表達的Actor(演員) ,借助vtkActor類創建場景中的對象,每個Actor 對應一個可視化實體
//各個業務表達的演員Actor加入渲染器(演員加入場景)
renderer-gt;AddActor2D(scalarBarActor);
//將標量值顏色條對應的vtkActor添加到渲染器中,以二維形式渲染顯示
renderer-gt;AddActor(actorCone);
//將表示井口的四棱臺對應的vtkActor添加到渲染器,以三維形式渲染
renderer-gt;AddActor(tubeActor);
//將管子對應的vtkActor添加到渲染器,管子半徑與顏色會依數據變化而變化
for(n=0;nlt;nNumOfPoints;n++){ //預警點的標識
renderer-gt;AddActor(actorSphere);
//為每個預警點創建對應的圓球vtkActor并添加到渲染器
}
renderer-gt;AddActor(textActor);
// 將數據顯示文本對應的vtkActor添加到渲染器
renderer-gt;AddActor(cubeAxesActor);
// 將立方體坐標系對應的vtkActor添加到渲染器
renderer-gt;ResetCamera();
renderer-gt;SetBackground(backgroundColor.Get?Data());
// 設置渲染器的背景顏色,使其在渲染窗口中顯示相應背景
vtkNewlt;vtkRenderWindowgt; renderWindow; //舞臺
renderWindow-gt;AddRenderer(renderer);
// 將渲染器添加到渲染窗口,使場景能在窗口中顯示(場景加入舞臺)
renderWindow-gt;SetWindowName(\"三維井纜張力預警\");
renderWindow-gt;SetSize(800, 600);
//設置渲染窗口的名稱與初始尺寸
vtkNewlt;vtkRenderWindowInteractorgt;renderWin ?dowInteractor;
//攝像機--監控交互之用
renderWindowInteractor-gt;SetRenderWindow(ren?derWindow);
// 建立渲染窗口與交互器的關聯,以便實現交互功能
renderWindow-gt;Render();
// 執行渲染操作,將場景繪制到渲染窗口上
renderWindowInteractor-gt;Start();
// 啟動交互器,允許用戶與渲染窗口中的場景進行交互操作
圖7為某井鋼纜試井計算的數據展示圖,圖中彎曲的圓柱為井徑的空間軌跡;井上用顏色的變化表達這些井點上的張力大小,以三維方式展示水平井在空間的張力分布;井上不同顏色的小圓球為經過張力計算和預警處理后的工程預警提示點。
5 結論
本文成功開發了基于VTK的鋼絲繩纜試井張力計算與預警三維可視化系統,該系統已在中海油服相關部門的多口井中得到應用。系統的計算結果對試井施工的設計與工程施工前期過程均具有重要的指導作用,充分驗證了本文所提方法的正確可行性。
目前本系統主要采用離線工作方式,僅對施工前預警和提醒進行分析,未來研究將重點關注完善與優化的開發工作。首先,期望系統能接入工程施工過程中的實際動態數據,計劃構建與工程施工設備數據采集系統的專用接口。此接口將依據施工過程中數據的傳輸協議與格式要求進行定制開發,能夠與各類傳感器(如張力傳感器) 實時連接,確保準確、高效地獲取纜繩張力等實際動態數據。其次,實現施工動態過程中的異常預警。對于異常預警功能的實現,將基于先進的數據分析算法與模型,構建張力值正常范圍與異常模式的智能識別模型。當接入實測纜繩張力數據后,該模型能夠迅速將其實時張力值與正常范圍進行比對。一旦發現張力值偏離正常區間并符合預設的異常模式,系統將立即觸發異常預警機制,提示工程施工人員進行調整操作,避免施工中出現危險狀況而造成設備損壞與人員安全隱患,同時也可以提高施工效率,節約生產成本。
參考文獻:
[1] 韓易龍,吳迪,王海,等.水平井生產測井技術應用[J].測井技術,2003,27(4):320-324,355.
[2] 國家能源局.石油電纜測井作業技術規范:SY/T 5600—2016[S].北京:石油工業出版社,2016.
[3] 王定賢,殷亮,李穎,等.鋼絲繩的建模及動力學仿真分析[J]. 礦山機械,2010,38(8):20-23.
[4] 包繼虎,張鵬,朱昌明.變長度柔性提升系統鋼絲繩橫向振動建模及分析[J].上海交通大學學報,2012,46(3):341-345.
[5] 包繼虎,張鵬,朱昌明.變長度提升系統鋼絲繩縱向振動特性[J].振動與沖擊,2013,32(15):173-177.
[6] 李康滿,李浪.Visual C++面向對象程序設計[M].武漢:華中科技大學出版社,2019.
[7] 張曉東,羅火靈.VTK圖形圖像開發進階[M].北京:機械工業出版社,2015.
[8] SCHROEDER W,MARTIN K,LORENSEN B.The visualizationtoolkit:an object-oriented approach to 3D graphics[M].4th ed.New York:Kitware,2006.
【通聯編輯:謝媛媛】
基金項目:國家自然科學基金:地面旋轉導向鉆井新方法及其控制機理(項目編號:51974035) ;頁巖和致密油氣田高效開發建井基礎研究(項目編號:U1762214)