焦敬波 王昆 謝榮燦 孟祥波
(中國(guó)中鐵工程裝備集團(tuán)有限公司 河南省鄭州市 450016)
伴隨著我國(guó)經(jīng)濟(jì)快速高質(zhì)量的發(fā)展,隧道施工工程在全國(guó)得到了大規(guī)模的開(kāi)發(fā)和推廣,越來(lái)越多的大型隧道工程開(kāi)工建設(shè),盾構(gòu)機(jī)被廣泛應(yīng)用在當(dāng)前各種隧道工程中。在盾構(gòu)施工過(guò)程中,無(wú)論是施工單位(業(yè)主)還是項(xiàng)目監(jiān)理或者是開(kāi)發(fā)商他們都非常關(guān)注盾構(gòu)掘進(jìn)過(guò)程中的所有掘進(jìn)狀態(tài),如實(shí)時(shí)的監(jiān)控各項(xiàng)指標(biāo)、跟蹤工程進(jìn)度、查詢(xún)歷史記錄、實(shí)時(shí)預(yù)警等相關(guān)信息。由于盾構(gòu)掘進(jìn)監(jiān)控系統(tǒng)有著眾多的字段信息,施工單位在不同的時(shí)刻所關(guān)心的字段信息并不完全相同,他們都非常渴望在主操作界面能夠靈活配置相關(guān)字段信息并將繁蕪復(fù)雜的數(shù)據(jù)條理化、形象化,同時(shí)將產(chǎn)生的數(shù)據(jù)存檔以便對(duì)后續(xù)的施工積累經(jīng)驗(yàn)。目前比較著名的國(guó)內(nèi)外盾構(gòu)機(jī)生產(chǎn)商(上海隧道、海瑞克、羅威特等)都有自主研發(fā)的盾構(gòu)掘進(jìn)管理監(jiān)控系統(tǒng),文獻(xiàn)[1]所開(kāi)發(fā)的盾構(gòu)監(jiān)控系統(tǒng),其研究的重點(diǎn)在于用算法優(yōu)化相關(guān)施工數(shù)據(jù)。文獻(xiàn)[2]介紹的盾構(gòu)監(jiān)控系統(tǒng),其獲取數(shù)據(jù)是從采集板卡得到并且需要依賴(lài)SimaticNE,成本較高且操作部署較為繁瑣。文獻(xiàn)[3]是基于組態(tài)軟件開(kāi)發(fā)的盾構(gòu)監(jiān)控系統(tǒng),該系統(tǒng)在安裝、調(diào)試、以及后期維護(hù)擴(kuò)展都比較繁瑣。文獻(xiàn)[4-6]介紹了基于互聯(lián)網(wǎng)的盾構(gòu)遠(yuǎn)程實(shí)時(shí)監(jiān)控系統(tǒng),其部署較為繁瑣,后期維護(hù)也較為繁雜且界面配置不夠靈活。文獻(xiàn)[7]所代表的盾構(gòu)監(jiān)控系統(tǒng)在界面配置依然不夠靈活,而且在獲取PLC 數(shù)據(jù)時(shí)需要依賴(lài)SimaticNE。盾構(gòu)機(jī)作為一種大型的機(jī)械設(shè)備產(chǎn)品,其研發(fā)制造不是一蹴而就的,需要長(zhǎng)期積累。在盾構(gòu)施工過(guò)程中如何最大化的滿(mǎn)足施工者要求且能實(shí)時(shí)獲取施工信息進(jìn)度成為必要。
本文盾構(gòu)掘進(jìn)管理監(jiān)控系統(tǒng)(IRIS)的設(shè)計(jì)分成了地下數(shù)據(jù)采集服務(wù)模塊、以及地上數(shù)據(jù)展示模塊為主的兩大模塊進(jìn)行開(kāi)發(fā),開(kāi)發(fā)該系統(tǒng)主要目的是為了在與PLC 通信時(shí)能夠脫離SimaticNE,使其方便安裝部署以及后期維護(hù)擴(kuò)展,同時(shí)支持按照時(shí)間、環(huán)號(hào)、位移、里程四種維度查詢(xún)。該系統(tǒng)能夠滿(mǎn)足用戶(hù)差異化需求,提高使用者或者施工者對(duì)盾構(gòu)掘進(jìn)中的各項(xiàng)指標(biāo)的實(shí)時(shí)監(jiān)控水平,如圖1所示功能模塊示意圖。
整個(gè)系統(tǒng)主要圍繞著地下采集CollectSys 系統(tǒng)和地上監(jiān)控MonitorSys 系統(tǒng)來(lái)設(shè)計(jì),通過(guò)中間件WebSocket 的推送方式實(shí)現(xiàn)兩個(gè)系統(tǒng)的信息通信,具體的系統(tǒng)流程圖如圖2所示。
圖1:功能模塊示意圖
CollectSys 和MontiorSys 既可以部署在同一臺(tái)電腦上,也可以安裝在不同的電腦上。CollectSys 使用Snap7 方式與PLC 通信,并將讀取的PLC 數(shù)據(jù)按照一定邏輯進(jìn)行數(shù)據(jù)存儲(chǔ)。CollectSys 通過(guò)WebSocket 方式把從PLC 采集來(lái)的各項(xiàng)數(shù)據(jù),如推進(jìn)位移、環(huán)號(hào)、掘進(jìn)里程等序列化后推送給MontiorSys。MontiorSys 根據(jù)預(yù)先定義好的配置信息,進(jìn)行數(shù)據(jù)分析和數(shù)據(jù)篩選,最終展示到圖形展示模塊上。
(1)Windows Service:一種能夠創(chuàng)建在它們自己的 Windows會(huì)話中并且可長(zhǎng)時(shí)間運(yùn)行的可執(zhí)行應(yīng)用程序。采集系統(tǒng)做成windows service 方式,通過(guò)Snap7 與PLC 通信,從而避免傳統(tǒng)的監(jiān)控軟件需要安裝SimaticNE,極大簡(jiǎn)化開(kāi)發(fā)者和技服工作人員部署安裝流程。
(2)SqlServer: Microsoft 公司推出的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)。該數(shù)據(jù)庫(kù)具有使用方便可伸縮性好與相關(guān)軟件集成程度高等優(yōu)點(diǎn)。
(3)WPF: Windows Presentation Foundation 是Microsoft 公司推出基于Vista 的用戶(hù)界面框架。該框架具有硬件加速技術(shù)、聲明式編程、與分辨率無(wú)關(guān)、統(tǒng)一的編程模型等優(yōu)點(diǎn),同時(shí)做到了分離前端界面與后端開(kāi)發(fā)人員的工作。
圖2:系統(tǒng)流程框圖
圖3:主界面展示
監(jiān)控系統(tǒng)如果采用組態(tài)軟件開(kāi)發(fā)較為困難,且后期維護(hù)及不方便。目前在軟件行業(yè)中存在兩大軟件體系結(jié)構(gòu):C/S、B/S,其中C/S 想比較于B/S 能夠更好的滿(mǎn)足用戶(hù)差異化需求。在軟件設(shè)計(jì)中,面向?qū)ο箝_(kāi)發(fā)為現(xiàn)階段主流趨勢(shì),其中C#語(yǔ)言具有跨平臺(tái)使用、面向?qū)ο?、?lèi)型安全、版本控制、代碼安全管理等優(yōu)點(diǎn)。結(jié)合上述所述及實(shí)際工程需要,我們使用開(kāi)發(fā)語(yǔ)言C#及系統(tǒng)架構(gòu)C/S。
采集系統(tǒng)以Windows 服務(wù)方式運(yùn)行,主要涉及數(shù)據(jù)采集、數(shù)數(shù)據(jù)推送以及數(shù)據(jù)存儲(chǔ)三部分。
采集系統(tǒng)啟動(dòng)時(shí)讀取所屬盾構(gòu)機(jī)的相關(guān)xml 文件,同時(shí)動(dòng)態(tài)序列化每個(gè)字段對(duì)象。系統(tǒng)每隔1 秒讀取PLC 數(shù)據(jù),將采集到的數(shù)據(jù)通過(guò)Websocket 方式實(shí)時(shí)推送到監(jiān)控系統(tǒng)用于實(shí)時(shí)顯示數(shù)據(jù),同時(shí)根據(jù)序列化出來(lái)的字段對(duì)象動(dòng)態(tài)寫(xiě)入數(shù)據(jù)庫(kù)結(jié)構(gòu)里,寫(xiě)入操作與推送客戶(hù)端操作是單獨(dú)分開(kāi)的線程處理,彼此之間互不影響。采集系統(tǒng)使用Snap7 方式讀取PLC 數(shù)據(jù),有效避免傳統(tǒng)的盾構(gòu)監(jiān)控系統(tǒng)與PLC 通信時(shí)需要依賴(lài)SimaticNE 方式,使其部署大大簡(jiǎn)化。
采集系統(tǒng)和監(jiān)控端采用Websocket 的通信方式,實(shí)現(xiàn)了服務(wù)器與客戶(hù)端之間的物理連接,并進(jìn)行數(shù)據(jù)傳輸。該通信方式保證了數(shù)據(jù)的傳輸效率、穩(wěn)定性、準(zhǔn)確性以及安全性;面向連接的協(xié)議,穩(wěn)定可靠,當(dāng)客戶(hù)和服務(wù)器彼此交換數(shù)據(jù)前,必須先在雙方之間建立一個(gè)連接,之后才能傳輸數(shù)據(jù)。
數(shù)據(jù)庫(kù)存儲(chǔ)是采集系統(tǒng)模塊的核心設(shè)計(jì),根據(jù)序列化的字段對(duì)象動(dòng)態(tài)生成每天的詳情結(jié)構(gòu)、掘進(jìn)里程、推進(jìn)位移以及環(huán)號(hào)詳情的表結(jié)構(gòu)。數(shù)據(jù)詳情表每天生成一張新的表結(jié)構(gòu),掘進(jìn)里程、推進(jìn)位移、環(huán)號(hào)詳情每個(gè)月生成一張新的表結(jié)構(gòu),其中環(huán)號(hào)詳情表中每一份表結(jié)構(gòu)包含三張統(tǒng)計(jì)數(shù)據(jù)表,包括最大值、最小值以及平均值。由于盾構(gòu)機(jī)所涉及的PLC 字段對(duì)象較多,在數(shù)據(jù)庫(kù)存儲(chǔ)中需要牽涉到分表處理,同時(shí)為了降低系統(tǒng)CPU 資源利用率,在數(shù)據(jù)庫(kù)存儲(chǔ)時(shí)采用緩存隊(duì)列,將每秒讀到的PLC 數(shù)據(jù)緩存到隊(duì)列,每隔一分鐘存儲(chǔ)一次。數(shù)據(jù)庫(kù)表結(jié)構(gòu)及存儲(chǔ)過(guò)程設(shè)計(jì)如表1所示。
表1:數(shù)據(jù)庫(kù)表名及存儲(chǔ)過(guò)程
圖4:系統(tǒng)報(bào)警界面
(1)采用websocket 通信方式建立長(zhǎng)連接,實(shí)時(shí)推送數(shù)據(jù),該通信協(xié)議鑒于持久化的協(xié)議,傳輸數(shù)據(jù)量比較小,傳輸時(shí)間短,這樣就大大提高了服務(wù)端與客戶(hù)端的傳輸效率。
(2)采用多線程的方式,把數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)推送分別建立在不同的線程上,這樣二者之間互不影響,從一定程度上也提高了數(shù)據(jù)的傳輸效率。
圖5:歷史曲線界面
圖6:時(shí)間維度查詢(xún)
(3)如果發(fā)生鏈接斷開(kāi)或者數(shù)據(jù)讀取不到的情況,程序會(huì)自動(dòng)把上一秒的數(shù)據(jù)推送給客戶(hù)端以及存儲(chǔ)到數(shù)據(jù)庫(kù)里。該策略保證了數(shù)據(jù)的完整性與準(zhǔn)確性。
(4)數(shù)據(jù)庫(kù)表結(jié)構(gòu)創(chuàng)建,在創(chuàng)建當(dāng)天數(shù)據(jù)詳情的時(shí)候,會(huì)自動(dòng)為前一天的數(shù)據(jù)詳情表添加索引,這樣就大大提高了數(shù)據(jù)的查詢(xún)效率,當(dāng)天的表結(jié)構(gòu)不加索引,這樣保證了數(shù)據(jù)寫(xiě)入效率。
(5)開(kāi)發(fā)框架采用dapper,該框架是.Net 中比較流行的輕量級(jí)的開(kāi)源ORM 框架,占用內(nèi)存資源小,提高開(kāi)發(fā)效率,降低開(kāi)發(fā)成本,使開(kāi)發(fā)更加對(duì)象化,操作更加靈活多變,易于維護(hù)擴(kuò)展。
(6)采集系統(tǒng)采用windows 服務(wù)的方式運(yùn)行,可以手動(dòng)進(jìn)行安裝及卸載,安裝之后程序自動(dòng)運(yùn)行,實(shí)時(shí)推送以及存儲(chǔ)數(shù)據(jù)。
(7)經(jīng)過(guò)測(cè)試,服務(wù)器端對(duì)本機(jī)的CPU、內(nèi)存以及其它資源占用比較小,不會(huì)對(duì)本機(jī)系統(tǒng)造成卡頓情況。
盾構(gòu)系統(tǒng)有多達(dá)2000 多個(gè)數(shù)據(jù)字段信息,且系統(tǒng)顯示的有效字段一般多達(dá)700 個(gè),具有顯示字段多,字段展示形式多樣,如:數(shù)值展示、圖表展示、數(shù)據(jù)導(dǎo)出、PDF 打印等。對(duì)于多字段、多形式數(shù)據(jù)展示的客戶(hù)端,采用Microsoft 的WPF 客戶(hù)端框架具有很大優(yōu)勢(shì)。MVVM(Model-View-Model)框架的由來(lái)便是MVP 模式與WPF 結(jié)合的應(yīng)用方式時(shí)發(fā)展演變過(guò)來(lái)的一種新型架構(gòu)框架。MVVM 具有雙向通知的特性,ViewModel 的屬性變更時(shí)能夠及時(shí)通知更新界面顯示,而且界面的操作的變化也能即時(shí)通知變更ViewModel 數(shù)據(jù)的改變。主界面如圖3所示。
DynamicDataDisplay 是.Net 下開(kāi)源的圖表庫(kù),可實(shí)現(xiàn)折線圖、梯形圖、條形圖、散點(diǎn)圖。對(duì)于折線圖、梯形圖、散點(diǎn)圖DynamicDataDisplay 采用基本元素繪制線和點(diǎn),具有較高的效率,條形圖采用繪制矩形和色彩渲染,效率相對(duì)低。圖表同時(shí)還實(shí)現(xiàn)了游標(biāo)線經(jīng)過(guò)的點(diǎn)的數(shù)據(jù)動(dòng)態(tài)顯示。利用DynamicDataDisplay,實(shí)現(xiàn)了圖表的x 軸縮放及y 軸多個(gè)標(biāo)尺分段的特性。
MigraDoc 是.Net 版本的 PDF 生成庫(kù),利用MigraDoc 實(shí)現(xiàn)了環(huán)數(shù)據(jù)、環(huán)圖表PDF 文件的預(yù)覽和生成。MigraDoc 具有較完善的PDF 控件,對(duì)整體生成一個(gè)PDF 有較全面的框架結(jié)構(gòu)。
(1)MVVM 模式下采用動(dòng)態(tài)類(lèi)型作為ViewModel 的實(shí)例實(shí)現(xiàn)了UI 界面的雙向綁定。但動(dòng)態(tài)類(lèi)型Dynamic 或ExpandoObject 通過(guò)反射查找屬性,效率較低。對(duì)于Dynamic 或ExpandoObject 類(lèi)型,其實(shí)質(zhì)基于IDictionart
(2)盾構(gòu)機(jī)有效字段一般多達(dá)700 多個(gè),如果全部綁定在一個(gè)ViewModel 上,相較于一個(gè)ViewModel 具有較少屬性的情況,前者太耗費(fèi)資源,并且不便于于系統(tǒng)的靈活擴(kuò)展。我們采用后者,每個(gè)字段對(duì)應(yīng)一個(gè)ViewModel,如此依賴(lài),700 多個(gè)字段將產(chǎn)生700 多個(gè)ViewModel。每次更新數(shù)據(jù),分別更新所有ViewModel,但執(zhí)行效率相較于前者更高。
(3)對(duì)數(shù)據(jù)因PLC 讀取超時(shí)而造成缺失的緩沖機(jī)制。采用等間隔時(shí)鐘通知數(shù)據(jù)采集,保證穩(wěn)定的間隔頻率。正常情況下從數(shù)據(jù)采集到推送時(shí)間不超過(guò)1 秒,如果超過(guò)900ms 數(shù)據(jù)未返回,將采用上一次的數(shù)據(jù)做為當(dāng)前秒時(shí)刻的數(shù)據(jù),并標(biāo)記放棄此次推送回的數(shù)據(jù)。時(shí)鐘到下一秒,繼續(xù)進(jìn)行正常的通知和等待數(shù)據(jù)推送回來(lái)。
(4)使用MigraDoc 生成PDF 效率較低,但由于MigraDoc 具有較完善的PDF 控件采用DynamicDataDisplay 生成圖表圖片后加載進(jìn)MigraDoc 生成的PDF 文件里,大大提升了生成效率,而且保證了生成圖表的樣式和美觀。
任何一款監(jiān)控系統(tǒng)軟件中都應(yīng)包含報(bào)警功能,有效的報(bào)警信息能夠幫助施工人員及時(shí)發(fā)現(xiàn)故障信息、減少財(cái)產(chǎn)損失。報(bào)警界面如圖4所示。
歷史曲線界面根據(jù)所選擇的日期及字段可以直觀顯示數(shù)據(jù)歷史趨勢(shì),曲線界面如圖5所示。
本次設(shè)計(jì)的另一大創(chuàng)新點(diǎn)是查詢(xún)數(shù)據(jù)時(shí)除了可以按照時(shí)間查詢(xún)還可以按照推進(jìn)位移、環(huán)號(hào)、掘進(jìn)里程查詢(xún),同時(shí)可以將查詢(xún)結(jié)果形象化展示,圖6 為按照時(shí)間查詢(xún)界面示意。其他統(tǒng)計(jì)分析界面如系統(tǒng)參數(shù)設(shè)置、報(bào)表、數(shù)據(jù)維護(hù)、數(shù)據(jù)導(dǎo)出、PDF 打印以及查詢(xún)數(shù)據(jù)按照環(huán)號(hào)、掘進(jìn)里程、推進(jìn)位移等限于篇幅,不再贅述。
該系統(tǒng)結(jié)合計(jì)算機(jī)控制技術(shù)、通信技術(shù)、圖形顯示技術(shù)包含數(shù)據(jù)采集軟件和數(shù)據(jù)監(jiān)視軟件兩大部分,并將兩部分在形式上采取了相互獨(dú)立的方式,做到了采集存儲(chǔ)和界面顯示分離。用戶(hù)可以根據(jù)自己所關(guān)心的字段信息靈活配置界面,同時(shí)該系統(tǒng)以Snap7 方式與PLC 通信脫離SimaticNE,使部署更加靈活。結(jié)合分布式系統(tǒng)思想,在結(jié)構(gòu)上將數(shù)據(jù)監(jiān)控、實(shí)時(shí)預(yù)警、數(shù)據(jù)存儲(chǔ)等模塊微服務(wù)化,再通過(guò)通信中間件技術(shù)將不同的服務(wù)連接起來(lái),組成一個(gè)整體。既可以實(shí)現(xiàn)單機(jī)一對(duì)一部署,又能夠分布式同時(shí)部署多臺(tái)計(jì)算機(jī),具有良好的應(yīng)用推廣價(jià)值。目前存在的主要問(wèn)題,對(duì)于大盾構(gòu)中如果超過(guò)1000 個(gè)字段,由于字段信息較多每隔1 秒采集一次PLC 數(shù)據(jù),會(huì)導(dǎo)致讀取PLC 數(shù)據(jù)不穩(wěn)定,這有待進(jìn)一步的研究和討論。