陳登峰,張 溫,耿建勤,劉 國,肖海燕
(1.西安建筑科技大學 建筑設(shè)備科學與工程學院,西安 710055;2.西安建筑科技大學 信息與控制工程學院,西安 710055)
隨著我國經(jīng)濟的快速發(fā)展與城市化的高速推進,“馬路拉鏈”、“蛛網(wǎng)線路”等“城市病”不斷加劇,城市地下綜合管廊(簡稱管廊)是重要解決手段之一[1]。管廊是位于城市地下的一個相對密閉的空間,在其運營過程中,會產(chǎn)生如CH4、CO等有害與易燃氣體[2],當CO氣體吸入過量,輕則使人頭暈惡心,重則會導致人死亡,故對管廊艙室CO指標實時監(jiān)測與預測十分重要,目前,國內(nèi)外綜合管廊運營維護中的巡檢等工作還以人工為主[3]。現(xiàn)有的將BIM(建筑信息建模技術(shù))用于管廊管理的可視化系統(tǒng)大多C/S架構(gòu),由于模型中所包含數(shù)據(jù)量較大、數(shù)據(jù)結(jié)構(gòu)較復雜且專業(yè)性較強[4],導致系統(tǒng)操作難度大、硬件要求高、不可跨平臺且缺少安全性預測功能。
文章提出基于Web的管廊可視化信息管理系統(tǒng),管廊運營者可通過移動端、電腦端瀏覽器以3D模型漫游管廊、查看管廊建筑數(shù)據(jù)、監(jiān)測實時環(huán)境數(shù)據(jù),并根據(jù)CO環(huán)境數(shù)據(jù)預測值、實時環(huán)境數(shù)據(jù)以及管廊輕量可視化實現(xiàn)危險早期處理。
管廊運營維護過程中,運維人員需通過不同終端進行管廊信息可視化查閱和管廊環(huán)境數(shù)據(jù)實時監(jiān)測,當監(jiān)測或預測到異常需快速定位故障艙室,并輔助給出解決方案?;谛枨蟠_定系統(tǒng)采用B/S架構(gòu)[5],并滿足以下功能需求:
1)BIM輕量化:將BIM幾何信息與建筑信息解耦,并將所需建筑信息存入數(shù)據(jù)庫;2)模型加載:將BIM幾何信息可視化在Web頁面并與建筑信息以及實時環(huán)境數(shù)據(jù)動態(tài)耦合;3)環(huán)境數(shù)據(jù)采集:系統(tǒng)后臺服務與終端節(jié)點建立通信并將其采集的環(huán)境數(shù)據(jù)存入數(shù)據(jù)庫;4)實時數(shù)據(jù)展示:將終端節(jié)點采集的環(huán)境數(shù)據(jù)以交互形式展示在瀏覽器前端模型及實時動態(tài)曲線;5)數(shù)據(jù)管理:歷史環(huán)境數(shù)據(jù)查詢、終端節(jié)點屬性信息查詢與更新;6)環(huán)境數(shù)據(jù)預測:以CO歷史數(shù)據(jù)作為訓練樣本,通過瀏覽器在線訓練LSTM預測模型并對遞增2小時CO數(shù)據(jù)在線預測并顯示和預警。
系統(tǒng)中使用管廊BIM模型Revit搭建。系統(tǒng)包括終端節(jié)點、服務軟件和前臺軟件組成,如圖1所示。
圖1 系統(tǒng)總體功能圖
終端節(jié)點由傳感器、控制器、無線模塊組成,部署在管廊艙室中。終端節(jié)點采用TCP通信方式,將采集的環(huán)境數(shù)據(jù)實時發(fā)送給服務軟件并存入數(shù)據(jù)庫中。
模型輕量化模塊將BIM模型解耦為幾何信息與建筑信息。該部分由C#整合Revit二次開發(fā)實現(xiàn),通過Revit的建筑模型Id建立管廊子模型與建筑信息的對應關(guān)系。
數(shù)據(jù)庫模塊分為數(shù)據(jù)視圖模塊與存儲過程模塊,其中數(shù)據(jù)視圖模塊用于建立數(shù)據(jù)庫表間邏輯關(guān)系,存儲過程模塊用于每日定時對數(shù)據(jù)庫實現(xiàn)特定功能。
后臺服務模塊為該系統(tǒng)提供整體依托,提供對數(shù)據(jù)庫查詢與更新、對終端節(jié)點采集的環(huán)境數(shù)據(jù)信息的獲取與存儲、響應前端頁面請求、對前端的數(shù)據(jù)以及其他服務支撐。
前端頁面模塊由模型加載模塊、動態(tài)刷新模塊以及其他Web元素構(gòu)成。模型加載模塊使用WebGL與Html5實現(xiàn)[6-7],動態(tài)刷新模塊使用Ajax技術(shù)與后臺服務模塊交互獲取實時環(huán)境數(shù)據(jù)。氣體數(shù)據(jù)預測模塊采用Tensorflow.js框架實現(xiàn)回歸預測,結(jié)合Javascript實現(xiàn)瀏覽器端對環(huán)境數(shù)據(jù)模型訓練與在線預測。通過瀏覽器在線訓練LSTM(長短期記憶網(wǎng)絡)CO(一氧化碳)預測模型實現(xiàn)對遞增時間節(jié)點指標數(shù)據(jù)的在線預測。當監(jiān)測或預測到某艙室異常,可向管廊運營者進行危險預警,給出異常狀況輔助解決方案,以減輕或避免危險的發(fā)生。
BIM在建筑幾何模型上附帶有施工過程的大量靜態(tài)屬性信息,導致存儲空間較大。如在Revit中繪制6面墻,所生成的項目文件大小為4.47 MB,而幾何數(shù)據(jù)僅占12.5 KB。故需將建筑模型加載在前端頁面,輕量化是必不可少的,系統(tǒng)使用文件為Obj文件,文件結(jié)構(gòu)見表1。
表1 Obj文件結(jié)構(gòu)表
使用C#與Revit二次開發(fā)API實現(xiàn)模型輕量化導出。結(jié)合Revit二次開發(fā)API解析建筑模型Rvt文件,將各Id對應幾何數(shù)據(jù)以O(shè)bj文件中g(shù)標識分割,通過文件流寫入Obj文件。
將屬性信息通過動態(tài)鏈接庫MySql.Data.dll以Id為索引寫入Mysql數(shù)據(jù)庫。目的是實現(xiàn)將建筑幾何數(shù)據(jù)與建筑屬性信息解耦以達到輕量化的效果。其中g(shù)中包含Id信息,g表示以下的幾何數(shù)據(jù)信息為該Id對應的建筑模型幾何數(shù)據(jù)。
由于不同艙室氣體環(huán)境有異,且艙室環(huán)境數(shù)目較多,為提高預測數(shù)據(jù)精度減輕服務端壓力,設(shè)計一種基于瀏覽器的分布式CO預測模塊。
該模塊將傳統(tǒng)基于PC服務端的模型訓練與預測移植到Web客戶端,采用google近期推出的tensorflow.js框架[8],訓練與數(shù)據(jù)預測的功能由瀏覽器支持實現(xiàn)而無需后臺支持,也不需要復雜的環(huán)境部署與庫文件調(diào)用過程,只需使用移動端或電腦端瀏覽器即可實現(xiàn)對環(huán)境數(shù)據(jù)的訓練與預測,將訓練和預測的流程由服務端移植到客戶端。不同管廊艙室可針對每個艙室的歷史數(shù)據(jù)給出個性化的預測結(jié)果,管廊內(nèi)部環(huán)境密閉,其中CO含量實際是等間隔連續(xù)的時間序列,LSTM(長短期記憶神經(jīng)網(wǎng)絡)深度神經(jīng)網(wǎng)絡對時間序列數(shù)據(jù)預測準確性較高[9],本模塊采用LSTM對CO數(shù)據(jù)進行預測。在線模型訓練流程如圖2所示。
圖2 在線模型訓練流程圖
基于瀏覽器的分布式CO預測模塊運行流程描述如下。
步驟一:登錄系統(tǒng)選擇某終端節(jié)點歷史表信息點擊查詢,查詢結(jié)果會作為樣本數(shù)據(jù)以Json形式存儲在公共變量中;
步驟二:將樣本數(shù)據(jù):
X={x1,x2,…,xn}
整合并做標準化操作,計算數(shù)據(jù)順序漲幅百分比:
步驟三:使用滑動窗口法初始化數(shù)據(jù),構(gòu)建訓練數(shù)據(jù),設(shè)置輸入維度,滑動步數(shù),以張量存儲;其中張量Tensor是一維或多維數(shù)組的結(jié)構(gòu),是Tensorflow.js的數(shù)據(jù)中心單位。
步驟四:設(shè)置少量訓練數(shù)據(jù)來作為測試數(shù)據(jù)對已訓練模型進行驗證,設(shè)置過程如下所示:
await model.fit(xs, ys, {validationSplit: 0.2});
設(shè)置參數(shù)為0.2,即80%數(shù)據(jù)用來訓練模型,剩余20%數(shù)據(jù)用來對模型進行測試驗證。
步驟五:優(yōu)化算法選擇RMSProp,損失函數(shù)使用MSE(均方誤差)。設(shè)當前收斂過程中迭代次數(shù)為t,RMSProp優(yōu)化算法描述如下:
sdw=βsdw+(1-β)dW2
sdb=βsdb+(1-β)db2
其中:sdw、sdb為上一輪迭代過程梯度動量,β為梯度累計指數(shù),W權(quán)重值,b為偏置值,ε取值10-8防止分母為0,發(fā)生異常。損失函數(shù)描述如下:
model.compile({optimizer: rmsprop,
loss: tf.losses.meanSquaredError});
步驟六:訓練LSTM模型并應用模型進行預測,預測部分代碼如下:
await model.predict(tf.tensor([input])).data();
步驟七:整合使用tfvis可視化框架對樣本數(shù)據(jù)、訓練過程以及預測信息可視化,如圖3所示。
圖3 訓練過程
其中l(wèi)oss指訓練集損失,val_loss指測試集損失。
設(shè)計的數(shù)據(jù)庫包括用戶信息表、終端節(jié)點信息表、環(huán)境數(shù)據(jù)表、歷史信息表。
用戶信息表用于支持用戶登陸系統(tǒng)校驗,其列信息包括用戶id、用戶名、密碼、用戶角色。用戶在前端頁面輸入用戶名、密碼以及角色后,該信息會與數(shù)據(jù)庫中存儲的用戶信息進行比對,如信息匹配,則用戶登陸成功,頁面展示對應角色的內(nèi)容,否則,提示登錄失敗。
終端節(jié)點信息表用于對終端節(jié)點信息查詢與更新,其列信息包括終端節(jié)點Id、終端節(jié)點名稱、終端節(jié)點在實際綜合管廊中所處的艙室信息、節(jié)點持續(xù)使用時長。管理員角色登陸系統(tǒng)后,可對終端節(jié)點信息進行更新與查詢,其中更新操作包括增、刪、改;艙室位置為語言描述,描述內(nèi)容為該節(jié)點所處管廊的艙室位置;使用時長為自動生成,自終端節(jié)點投入使用后算起。
環(huán)境數(shù)據(jù)表用于存儲終端節(jié)點采集的環(huán)境數(shù)據(jù),其列信息包括數(shù)據(jù)Id、時間戳、傳感器節(jié)點Id、溫度、濕度以及O2、CO、CH4、H2S濃度,結(jié)構(gòu)如表2所示。
表2 環(huán)境數(shù)據(jù)表結(jié)構(gòu)
SenId與終端節(jié)點信息表的Id對應,后臺服務端接收終端節(jié)點采集到的環(huán)境數(shù)據(jù)存入該表中,前端頁面中實時動態(tài)曲線通過Ajax定時從數(shù)據(jù)庫查詢獲取最新的數(shù)據(jù)。
歷史信息表用于存儲歷史環(huán)境數(shù)據(jù),該數(shù)據(jù)表為氣體環(huán)境預測模塊提供訓練樣本,同時可供系統(tǒng)使用者查看,其列信息包括Id、終端節(jié)點Id、當日日期(精確到小時)、平均溫度、平均濕度、平均O2含量、平均CO含量、平均CH4含量、平均H2S含量,所有平均值均為每日每1小時的平均值。其內(nèi)容更新由已編譯的存儲過程在每日零點定時進行。
系統(tǒng)前端使用JavaScript、CSS、Highcharts、EasyUI與Sim.js設(shè)計與開發(fā),可實現(xiàn)建筑信息模型輕量可視化、環(huán)境數(shù)據(jù)實時曲線、終端節(jié)點管理與歷史數(shù)據(jù)查詢的功能。實時數(shù)據(jù)展示中實時動態(tài)曲線使用Highcharts結(jié)合Ajax局部刷新技術(shù)實現(xiàn),每次單位時間查詢獲取數(shù)據(jù)庫中該終端節(jié)點采集的最新環(huán)境數(shù)據(jù),整體采用setInterval方法實現(xiàn)定時發(fā)送Ajax請求。在請求的過程中使用輕量級的Json作為數(shù)據(jù)傳輸?shù)母袷剑M面向?qū)ο蟮倪^程。系統(tǒng)使用WebGL繪圖協(xié)議的開源框架Three.js整合Sim.js將三維模型Obj文件加載在前端頁面中,模型加載過程部分代碼如下:
//創(chuàng)建Obj加載對象
var loader=new THREE.OBJMTLLoader();
loader.load('../model/pipe.obj','../model/pipe.mtl',function(object){
//遍歷Obj模型文件結(jié)構(gòu)
object.traverse(function(obj){
//按照Id依次將模型對象加入場景中
that.createmodel(obj,this.boxcount);});
this.focus();
this.count = 0; //模型計數(shù)器
this.createPlane();//創(chuàng)建地面}
其加載過程具體描述如下:
步驟一:使用ObjLoader.js中的Load方法對Obj文件進行解析;
步驟二:結(jié)合traverse方法,對每組幾何數(shù)據(jù)進行解析;
步驟三:結(jié)合面向?qū)ο蟮乃枷耄瑢⒛P虸d以及Mesh信息構(gòu)建幾何對象;
步驟四:遍歷上述對象,將對象加載在Scene中,最終通過render渲染在前端頁面。
文件加載采用面向?qū)ο蠓椒ǖ哪康氖欠奖銥槊總€子模型附加交互函數(shù)。
后臺服務為前端提供服務支持,采用Java開發(fā),使用SSM(Spring、SpringMVC與MyBatis)整合框架,應用MVC框架(Model、View、Controller),復雜邏輯實現(xiàn)于Controller控制器部分,View指前端界面,Model指數(shù)據(jù)的封裝部分[10]。該框架將前后臺程序分塊解耦,增加了代碼擴展性與復用性。
系統(tǒng)中,后臺服務模塊需要具備以下功能:1)實時數(shù)據(jù)采集:獲取終端節(jié)點的實時環(huán)境數(shù)據(jù)并存入數(shù)據(jù)庫;2)實時數(shù)據(jù)展示:數(shù)據(jù)展示的方式可分為用戶與管廊模型交互展示和實時動態(tài)曲線;3)數(shù)據(jù)查詢:可對歷史數(shù)據(jù)以及終端節(jié)點數(shù)據(jù)進行查詢;4)終端節(jié)點管理:當更新管廊終端節(jié)點后,同步更新傳感器節(jié)點數(shù)據(jù);5)角色控制:控制不同的角色登陸系統(tǒng)并展示不同功能,角色分為管理員與非管理員。
后臺服務模塊數(shù)據(jù)持久層采取MyBatis,它支持個性化Sql與存儲過程,該框架將JDBC細節(jié)掩蓋,將數(shù)據(jù)庫配置集成于xml文件。
出于安全性與數(shù)據(jù)完整性的考慮,系統(tǒng)中的后臺服務與終端節(jié)點采用TCP/IP通信協(xié)議交互。終端節(jié)點為通信客戶端。由于管廊中終端節(jié)點數(shù)量眾多,故在后臺構(gòu)建TCP服務端線程池,可以節(jié)省大量資源。線程池與終端節(jié)點交互并將終端節(jié)點Id以及采集到的環(huán)境數(shù)據(jù)存入環(huán)境數(shù)據(jù)表。
管廊可視化信息管理系統(tǒng)功能主要包括管廊場景漫游與交互、數(shù)據(jù)庫表維護以及基于Web的在線預測。
系統(tǒng)運行環(huán)境為Windows10、Cpu i5-7500、顯卡GTX-1060、內(nèi)存8 G,系統(tǒng)開發(fā)語言為Java,Ide為Myeclipse10,數(shù)據(jù)庫為Mysql,數(shù)據(jù)庫可視化工具選擇Navicat Premium 12,后臺服務使用SSM整合框架,前端使用jquery.js、tensorflow.js、hightcharts.js、three.js以及sim.js等開發(fā)實現(xiàn),項目依托tomcat7服務器部署。
管廊BIM模型輕量化解耦以及可視化頁面如圖4所示,其中(a)為二次開發(fā)導出并存儲在mysql中的建筑信息,(b)為revit中繪制的模型,(c)為輕量化后加載在前端頁面的效果圖。
圖4 輕量可視化
前端頁面加載輕量化后的管廊場景,可對場景漫游。當點擊左側(cè)菜單中的終端節(jié)點后會將相機視角調(diào)整至模型中對應終端節(jié)點的位置,主頁面左側(cè)會將節(jié)點附近的環(huán)境信息以及建筑屬性信息顯示出來。用戶也可點擊右上菜單選擇場景瀏覽模式,可進行鼠標查看場景或第一人稱漫游場景,用戶與場景中的建筑構(gòu)件交互,會將模型構(gòu)建信息展示在左側(cè)。
環(huán)境數(shù)據(jù)實時動態(tài)曲線如圖5所示。該頁面主要功能為將終端節(jié)點采集的環(huán)境數(shù)據(jù)以動態(tài)曲線展示,根據(jù)左側(cè)菜單選擇終端節(jié)點,主頁面將展示該終端節(jié)點監(jiān)測到的實時數(shù)據(jù),數(shù)據(jù)每十秒刷新一次。
圖5 環(huán)境數(shù)據(jù)實時動態(tài)曲線
數(shù)據(jù)庫維護包含對終端節(jié)點表、歷史信息表的查詢與更新。
終端節(jié)點表對建筑中的終端節(jié)點進行管理,如在實際建筑中更新(增、刪、改)節(jié)點,則管理員角色對該表進行更新,同時左側(cè)菜單欄也會相應更新。
歷史信息表存儲每日的歷史信息,可供管廊運維人員查看,同時提供數(shù)據(jù)用于Tensorflow.js模型訓練。每日零點,預先編譯的存儲過程會定時將每日平均兩小時環(huán)境數(shù)據(jù)進行均值處理,處理結(jié)果存入歷史信息表中,由于歷史信息表數(shù)據(jù)量不會很大,故該表僅提供查詢功能,可根據(jù)終端節(jié)點、起止日期對表進行查詢。
在線預測功能將歷史信息表4天內(nèi)每小時CO數(shù)據(jù)的均值作為訓練樣本,以實驗數(shù)據(jù)為例,最終預測結(jié)果如圖6所示。
文章設(shè)計實現(xiàn)了一種用于管廊運營維護的信息化系統(tǒng),具備以下特點與功能:
1)結(jié)合Revit二次開發(fā)將BIM模型幾何與屬性信息解耦,輕量化加載在Web頁面中,結(jié)合Spring、SpringMVC、MyBatis,實現(xiàn)管廊輕量化展示、管廊交互漫游、環(huán)境數(shù)據(jù)動態(tài)更新以及建筑信息管理, 基于B/S模式開發(fā),具有較強的跨平臺性,可以使用計算機或移動端瀏覽器。
2)環(huán)境數(shù)據(jù)實時顯示,通過交互的方式展示在前端加載的模型中,也可動態(tài)實時展示在曲線中;
3)CO數(shù)據(jù)預測性,基于LSTM對CO數(shù)據(jù)在線預測,不同艙室運營者可分布式在客戶端瀏覽訓練并預測不同艙室CO數(shù)據(jù)指標,提高了預測的精度,減輕了服務端的壓力,將模型訓練與預測功能由服務端分布實現(xiàn)在客戶端。同時也很大程度上提高了系統(tǒng)的實用性,安全性預警可以減少不必要的人員與設(shè)備損壞,提高了管廊運維的安全性與穩(wěn)定性。