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