王志文, 錢松榮
(復旦大學 信息科學與工程學院, 上海 200433)
在我國現代化建設的過程中,基礎建設是很關鍵的一個部分。在基礎建設中,無論是高鐵、橋梁還是高架等大型建筑,都需要用到預應力預制構件。作為可以防止混凝土過早開裂的一項有效技術,雖然預應力構件早已在各類大型建筑中被廣泛使用,但是預應力構件內部應力會隨著時間增加而減小,這種被稱為應力松弛[1]的現象迄今為止還沒有一個很好的系統或軟件可以做到長期有效監控預應力的大小。文章[2]提供了一種很好的思路:在預制構件制作時加入一個無線無源傳感器,這樣就可以實現長期采集預應力數據。本文在這基礎上設計了一套預應力采集管理系統。
考慮到實際的運用場景:數據采集是需要在橋梁、高架等構件部署現場完成的,重點為軟件的簡易性、硬件便攜性;而傳感器的出場設置、傳感器管理、員工管理、以及預應力數據管理等可以在瀏覽器端完成。所以我們把整個采集管理系統分成3部分,如圖1所示。

圖1 系統整體架構圖
因為預應力數據是需要去實地采集的,為方便施工人員攜帶、操作,我們選用Surface Pro作為智能便攜終端,而WPF(Windows Presentation Foundation)作為微軟開發的運行于.NET Framework之上的語言[3],所設計的桌面程序在Windows系統的電腦上有很好的兼容性。
網頁前端需要實現除了采集數據之外的所有功能,我們不僅可以用它在進行傳感器、預應力的管理,更可以將它拓展為一個企業管理軟件。我們采用現在十分流行的Bootstrap框架。
服務器端我們采用Tomcat作為Web應用服務器,它輕量級、開源以及對Servlet/JSP良好的支持使得它在一些中小型系統中非常受歡迎[4]。 服務端的框架使用的是SpringMVC。
App端是使用WPF實現的。WPF是微軟新一代的圖形桌面API,它具有豐富的UI控件,為用戶界面、2D/3D圖形、文檔和媒體、動畫的開發帶來了極大的便利[5]。
2.1.1 功能分析
如圖2所示。

圖2 系統的功能模塊圖
App端要實現的功能有用戶(員工)的登陸,預應力采集(包括校驗和入庫)以及傳感器和預應力信息的查詢與展示。
App一共涉及到4個頁面:登陸界面、首頁、預應力采集界面、預應力展示界面。
其中首頁分為地址模塊、天氣模塊和信息模塊三個主要部分。地址模塊會根據用戶上網的IP地址大概得出用戶當前所在的位置;天氣模塊是去中國天氣網的公開API上獲取當前所在地的一周天氣信息并顯示。因為我們采集預應力是必須是室外,天氣因素對于室外作業影響還是很大的。信息模塊是通過公司服務器的接口獲取公司的通知、公告等信息并在界面輪播。
預應力采集頁面是App端最核心的部分,如圖3所示。
它的左邊實現了類似串口助手的模塊,用于讀取讀卡器獲得的預應力數據。右邊是分析存儲模塊,點擊分析數據就可以從數據庫獲取該ID的傳感器的基本信息并根據模型計算預應力大小。點擊保存數據就可以將最新的預應力數據可狀態保存至數據庫。
預應力展示界面提供了根據傳感器ID或者預制構件查詢預應力趨勢走向圖的功能。并根據回歸分析預測可能偏離的正常值范圍的傳感器以及時間,做到提前預警。
另外,由于App端是在室外通過無線網絡或者3G/4G網絡上網的,所以涉及到用戶賬號密碼以及其他一些敏感數據請求和傳輸需要加密。登陸流程如圖4所示。

圖3 預應力檢測界面
服務器隨機產生RSA密鑰對,登陸時App先從服務器獲取公鑰,然后將數據進行加密發送,服務器將加密的數據進行解密,然后再判斷密碼是否正確并返回結果。
2.1.2 插件與接口分析
天氣模塊使用的是中國天氣網提供的免費接口。訪問該API將返回Json格式的一周的天氣信息。
定位服務使用百度地圖開放平臺,百度地圖開發者平臺是國內最全面的地圖開發平臺之一,具有IP地位、精確坐標拾取、生成嵌入式小地圖等常用的開發功能。對于室外傳感器的定位、建筑定位有很好的幫助
預應力數據進行展示我們使用Visifire控件進行繪圖。Visifire是專為WPF、SliverLight開發人員定制的一套圖標控件,可以實現柱狀圖、點狀圖、雷達圖、餅狀圖、直方圖、K線圖等多種專業圖的繪制。
Bootstrap是現在非常流行的響應式的前端框架。所謂響應式就是指它會根據用戶行為以及所采用的硬件環境、分辨率自動調節頁面布局。所以不論是PC還是Pad,都可以有很好的前端展示。
2.2.1 功能分析
Web端是這個系統最核心的部分,需要實現除了信息采集以外所有的功能,如圖5所示。

圖4 登陸流程圖
如圖5中網頁采用Bootstrap左邊導航右邊顯示的經典風格,導航欄分為首頁、郵箱、個人管理、組織管理、傳感器管理、預應力管理6個基本功能。
2.2.2 插件和接口分析
包括員工管理和傳感器管理在內的系統中所有的列表我們都采用JQuery的DataTable表格插件,這是一個十分強大又簡單易用的插件。它具有自動分頁、即時數據過濾、數據排序以及數據類型自動檢測、自動處理列寬度、動態創建表格、可擴展等諸多優點。
網站中繪制各類圖表使用JQuery的Flot的插件,Flot是基于canvas進行圖表的繪制,可以在IE6+/Firefox2+/Safari3+/Opera9.5+/Chrome等主流瀏覽器上運行。如圖6所示。

圖5 Web首頁

圖6 預應力查詢、展示頁面
SpringMVC是在Spring框架的基礎上實現了MVC(Model-View-Controller)設計模式,這樣的架構可以幫助開發人員搭建結構清晰、可復用性好、維護方便的Web應用[6]。
服務器的總體工作流程是:當接受到一個來自App端或者Web端的請求時,根據不同請求調用controller相應的方法,然后在Service層完成業務邏輯處理,如果需要與數據庫交互則通過DAO層進行增刪查改。最后如果以JSP頁面或者Json字符串的形式將最終結果返回給用戶。
2.3.1 模型(Model)
Model層由POJO類組成,我們這個系統最重要的兩個對象分別是員工User和傳感器Sensor。
Public class UserPO{
private Integer employee_id;
private String employee_name;
private String employee_pwd;
private String gender;
private String phone;
private String birthday;
private String department;
private String email;
private String address;
private String lever;
//相應的getter、setter方法
}
Public class SensorPO{
private String sensor_id;
private String conver_radio;
private String railway_name;
private String sensor_location;
private String sensor_state;
private String stress_state;
private String stress_init;
private String stress_recent;
private Integer sensor_SN;
//相應的getter、setter方法
}
這里的私有變量分別對應數據庫相應的字段。
2.3.2 視圖(View)
View負責渲染模型數據。將最后的JSP或者HTML在瀏覽器端呈現出來就是View層要做的事。為了簡化開發,減少不必要的代碼重復,我們一般在配置文件中加入以下代碼:
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
這樣,在我們controller層有如下代碼時:
public String mainPage(){
return "mainPage";
}
Web容器回去自動尋找 "/WEB-INF/jsp/mainPage.jsp"文件并返回。
2.3.3 控制器(controller)
控制器負責從視圖讀取數據,控制用戶輸入,并向模型發送數據。
只要在配置文件中加入
通過如下方式定義對攔截下的不同的URL,分別調用不同的函數并返回響應結果。
@RequestMapping(value="/getInfo")
Public String yourMethod (Model model, HttpServletRequest request){
//…
return "userInfo";
}
在工業4.0和物聯網的概念逐漸成熟技術逐漸完善的基礎上,本文設計了一套大型預制構件預應力采集管理系統,用來對正在服役的大型預制構件進行長期有效的監控,并且提前預測報警,有效防止各類重要基礎構件的開裂或者出現其它安全事故。迄今為止尚沒有在預制構件鋼絞線中安裝傳感器并可以進行長期監控管理的系統。本文是對物聯網和互聯網技術融合的一個很好的嘗試,在物聯網快速發展以及我國基礎建設積極走出國外的今天又很廣闊的前景。