吳天華,閔 銳,吳恩啟,孫海力
(1.上海理工大學機械工程學院,上海 200093;2.上海隧道工程股份有限公司機械制造分公司,上海 200137)
近年來,我國對地鐵、隧道等基建項目的投入不斷增大,對盾構機設備產生了大量需求[1-3]。然而,盾構機在地下掘進過程中,盾殼承受了土體壓力等載荷,盾尾又是盾殼最薄弱的部分,最容易產生形變,引發漏漿現象,影響工程施工進程[4]。因此運用信息手段對盾尾形變狀況進行實時監測具有重要的現實意義。
傳統監測系統大多通過本地設備檢測盾構機。例如,Wu 等[5]開發了盾構機刀盤振動監測系統,采集施工過程中刀盤的振動信息并進行顯示。Lan 等[6]基于渦輪傳感器開發了一套盾構機檢測系統,能夠在線監測圓盤切割機的運行參數。Tang 等[7]結合氣體檢測、氣體提取和無線通信技術,提出了隧道掘進過程中生物氣體引發的瓦斯爆炸問題的預防和控制方法。然而,此類監測系統僅供用戶在工程現場進行實地監測,不便于數據存儲和轉移,靈活性較低。
隨著信息技術不斷發展,許多學者將互聯網技術應用于盾構機監測系統中。例如,孟祥波等[8]結合軟硬件設備實現了一套基于互聯網的盾構機遠程監控系統。黃惠群等[9]提出基于OPC 接口技術的監測系統,通過匯總不同品牌和類型的盾構機信息,實現了多臺盾構機設備的集群監測。肖敏等[10]采用B/S 架構,通過ASP.NET 技術實現了遠程實時動態監控。趙炯等[11]為了解決B/S 模式負載、網頁延遲過大的問題,使用Redis 技術使系統具有高效的數據處理能力。孫振川等[12]通過建立行業Hadoop 集群生態架構,利用大數據技術解決了傳統隧道掘進工程信息化平臺兼容性和擴展性較弱的問題。然而,此類監測系統大多通過盾構機設備接口,利用軟件技術將設備數據上傳至互聯網平臺上實現遠程在線監測,僅局限性于只收集盾構機設備的本地信息,無法采集挖掘過程中的結構性形變數據,并且系統框架構結構復雜、成本較高。
為此,本文以盾構機盾尾變的形變程度為研究對象,針對隧道掘進工程引起的數據傳輸、數據處理及數據可視化等難題,結合現場實際監測狀況,利用多線程設計、云服務器、Python 可視化等技術[13-15],基于B/S 模式搭建了一套盾構機盾尾形變遠程監測系統。經過長時期的實驗測試和工程檢驗表明,系統耦合性低、靈活性強、運行高效、穩定,提供了良好的可視化交互界面,彌補了傳統監測界面單調、異地通訊困難的不足,提升了信息傳輸速率。
盾構機盾尾形變遠程監測系統根據實際工程需求分為數據采集模塊、云計算中心和可視化模塊3 個子系統,如圖1 所示。具體的,數據采集模塊主要由應變傳感器、應變采集儀和本地PC 機構成。其中,應變傳感器用來測量盾尾表面各測點處的應變值;應變采集儀收集各測點的測量數值,然后通過光纖將數據發送至工程現場PC 機;本地PC 機上自主開發的TCP 通訊程序能夠將應變采集數據發送至云計算中心。云計算中心負責數據的濾波去噪、數值計算和結構存儲等數據處理操作。可視化層中的Web應用通過數據庫接口動態獲取實時數據,并可視化實時顯示盾尾的形變數據,提供歷史查詢、預警等功能。

Fig.1 System framework圖1 系統框架
為實現現場數據與云計算中心的實時通訊,通過Socket 網絡接口建立TCP 連接。TCP 連接具有超時重傳和有序傳輸的特點,適合穩定交互工程數據。Socket 在通信機制中被稱為套接字,由IP 地址和端口號組成,通過Sock?et 建立服務器和客戶端的TCP 網絡連接,整個連接過程被稱為“三次握手”[16],如圖2 所示。在連接建立后,通過數據采集模塊將現場采集的原始數據傳送至云計算中心。

Fig.2 Socket communication process圖2 Socket通訊流程
由于工程現場通常存在多個需要同時進行數據交互的監測點,傳統阻塞式服務器程序以隊列方式依次排隊處理數據,效率較低。多線程的并發服務器充分利用了系統的計算、讀寫和網絡傳輸性能,能夠大幅度提升數據吞吐量和處理效率。多線程技術設計并發式服務器的具體結構如圖3所示。

Fig.3 Parallel server process structure圖3 并發式服務器進程結構
由圖3 可見,在主服務器進程綁定套接字后,可為每一個新申請的連接創建從線程,多個從線程能夠相對單獨地執行相同業務。并且,由于Python 是一種具有良好兼容性和跨平臺性的腳本語言,提供了Socket 和Socketserver 兩個模塊開發網絡服務器。其中,Socket模塊是單線程設計,適用于單點連接;Socketserver 模塊則適用于多線程多連接。本文選擇Python 的Socketserver 網絡模塊結合Thread?ing 多線程模塊開發服務器程序,以提供快速、有效地多線程通信管道。
出于對工程數據安全性的考慮,需要對整個數據傳輸過程進行加密。首先,上位機向服務器發送指定的ID 驗證信息,服務器程序在確認ID 有效后建立連接。然后,服務器讀取現場PC 機傳輸的字節流形式的原始數據。最后,對數據進行處理得到盾尾測點的有效形變數值,并將其保存至數據庫的相應字段中。為了避免頻繁的數據交互而造成端口數據通道擁堵的情況,在每次循環結束前使用time()函數設置30s 的系統延遲。服務器程序流程如圖4所示。

Fig.4 Server program flow圖4 服務器程序流程
在實際測量過程中,由于盾尾形變數據的時間跨度較長,短時間內不顯著。本文在數據處理過程中采用逐段數據平均法進行預處理。具體的,取固定時間段(通常為1min)作為樣本周期,將連續時間段內的數據按小段時間等分為一組子序列,然而實際測量的數據樣本通常存在數值極大的粗差,因此采用中值濾波法對序列進行處理。該方法既縮小了數據規模,又對數據進行了一定程度的濾波,提升了數據處理效率。
由于MySQL 是目前最主流的關系型數據庫管理系統,具有體積小、速度快、成本低等優點[17]。系統采用開源型數據庫MySQL 存儲數據。其中,數據采集模塊上傳的原始數據存儲在原始表中,內容主要包括測點編號、傳感器方位、采集設備編號、盾尾應變數據、記錄時間等,相關字段如表1所示。
為滿足系統的實時性要求,Web 會以較高頻率刷新數據,通過數據接口與數據庫進行頻繁交互,若數據庫結構設計不合理,則會在一定程度上增加查詢時間。例如,當讀取原始表時,由于MySQL 數據庫的自身特性,表格冗余信息較多會降低數據的搜索速度。為此,在設計查詢表結構時以固定間隔的時間戳屬性為表格主鍵,并與計算處理后得到的n個測點的形變數值組成二級查詢表(見表2),以提升數據查詢效率。
由表2 可知,根據測點編號和時間戳可確定某一時刻的盾構機盾尾被監測位置的形變情況,并且每隔一定時間間隔,Web前端會更新最新數據,達到實時監測目的。
系統基于B/S 模式,采用Python 語言的開源框架Dash開發了Web 系統,Dash 使用Python 語言構建了高度自定義的數據可視化應用程序,融合了Flask、Plotly.js 和React.js技術。其中,Flask 是基于工具箱Werkzeug 的輕量級Web應用框架[18];Plotly.js 提供了強大的圖表庫,適合大規模數據展示;React.js 提供網頁的UI 設計規范,采用聲明式設計,具有靈活、高效的優點。
Dash 應用流程如圖5所示,具體流程為:
(1)利用Dash 的Layout 組件進行網頁整體布局,DIV、IMG、Table等html標簽由React進行動態渲染。

Table 1 Original table storage structure表1 原始表存儲結構

Table 2 Secondary query table structure表2 二級查詢表結構

Fig.5 Dash application process圖5 Dash應用流程
(2)編寫回調函數(Callback)對圖表進行個性化設置,回調函數與html標簽通過關鍵字ID 進行關聯。
(3)通過MySQL 數據庫API 接口獲取各圖、表所需的初始數據。
(4)通過HTTP 請求傳遞JSON 格式的數據包至瀏覽器,利用Plotly.js和CSS文件進行圖形渲染。
網站構建完成后,為了使外部網絡瀏覽到監測界面,需要將Dash 部署到云服務器上。本文采用Nginx 作為HTTP 代理服務器,WSGI 協議作為服務器網關接口,Web應用程序會分配視圖函數一個URL。當用戶通過瀏覽器訪問時,首先對該域名進行DNS 解析,再將函數返回值顯示至瀏覽器上,整個通信過程基于HTTP 協議[19],具體工作原理如圖6所示。

Fig.6 Working principle of HTTP protocol圖6 HTTP協議工作原理
以溫州市甌江口隧道工程為例,在盾構機盾尾處的某一縱向觀測斷面設置7 處監測點進行數據采樣,截面近似圓形,7 處測量點等間隔分布在圓周上。2020 年7 月14日,對系統監測狀況進行測試,Dash 搭建的盾尾形變可視化主界面如圖7所示。

Fig.7 Overall interface圖7 總體界面
由圖7 可見,系統可直觀顯示監測點的形變量位置信息、形變量實時折線圖、形變量直方圖及歷史數據表格等實時信息和統計數據。其中,頁面左上角為實時形變監測圖,設置了下拉框便于用戶檢測7 個監測點的實時數據,根據盾尾20min 內的形變數據繪制了實時波形和三次樣條擬合曲線,以便于用戶直觀觀察盾尾形變值的變化趨勢;頁面右上角的互動插件可將當前時刻的曲線圖保存到本地,圖中還標出了安全預警線,當超過安全預警線時,后臺程序會自動發送郵件提醒工作人員及時進行處理;頁面右側提供了形變數據的直方圖統計報告和測點方位指示器,設置了滑動方式的頁面交互控件,測點方位指示器顯示了該測量點在盾尾截面所處的方位,歷史數據查詢功能設計為表單形式,在選定日期、時間后即可在滑動表格中查看所有測點的具體形變數值。
利用Python 的Socket 模塊定義TCP 請求函數,模擬客戶端向服務器發起連接操作,測試單線程和多線程網絡模型的性能差異,設置請求總數從5~100 次不等,實驗結果如圖8所示。

Fig.8 Comparison of network model optimization圖8 網絡模型優化比較
由圖8 實驗結果可見,多線程網絡模型完成100 次連接請求的總耗時為72ms,相較于單線程網絡模型約提升了10倍。
為檢驗網站在短時間內應對大量用戶同時進行訪問的并發性能,使用Web 壓力測試工具對網站進行壓力測試,模擬100 個用戶并發進行訪問,在3s 內向網站持續發送Get請求,測試結果如圖9所示。

Fig.9 Response time histogram圖9 響應時間直方圖
由圖9 可見,網站在高負載下,仍然保持通信穩定,信息傳遞的延遲較低,服務器后臺平均每秒可處理649 次請求,平均響應時間為150ms。
針對盾構法施工過程中的實際需求,提出一種盾構機盾尾形變遠程監測系統。實踐結果表明,該系統不僅實現了對盾尾形變數據進行傳輸、存儲、處理、顯示等功能,還通過Dash 框架的可視化技術搭建了Web 平臺,實現了數據的可視化交互。
在經過網絡壓力測試和實際工程中的長期檢驗表明,系統通信穩定,延遲較低,能夠滿足用戶快速、直觀地了解盾尾形變狀況,滿足了跨地域、跨終端的日常監測需求。
此外,由于本文采用了解耦設計,后續可根據實際需求,靈活定制盾尾變形監測系統的迭代功能,以便于將系統應用于數據分析、參數優化、故障預警等方面。