快速、 準(zhǔn)確地采集和監(jiān)控到工地上塔式起重機(jī)(簡(jiǎn)稱塔機(jī))的工作數(shù)據(jù)信息在建筑工程領(lǐng)域極為重要。但是, 由于受到現(xiàn)場(chǎng)環(huán)境的影響以及測(cè)量工具的限制, 明顯存在數(shù)據(jù)信息傳遞速度慢、 準(zhǔn)確度低和補(bǔ)救措施實(shí)施慢等缺點(diǎn), 很容易造成緊急事件處理的延誤。因此, 工作人員希望對(duì)塔機(jī)的工作數(shù)據(jù)進(jìn)行更為方便的遠(yuǎn)程監(jiān)控, 如基于通用分組無(wú)線服務(wù)技術(shù)(General Packet Radio Service, GPRS)、 網(wǎng)頁(yè)和個(gè)人計(jì)算機(jī)(Personal Computer, PC)客戶端的塔機(jī)監(jiān)控技術(shù)手段。然而這種監(jiān)控方式也讓工作人員的工作地點(diǎn)僅僅局限在辦公室等室內(nèi)有計(jì)算機(jī)的地方。本文設(shè)計(jì)了一種基于 Android 操作系統(tǒng)的智能移動(dòng)終端信息監(jiān)控系統(tǒng), 充分利用手機(jī)的便利性, 只要能上網(wǎng), 就能隨時(shí)隨地觀測(cè)到全國(guó)各地每臺(tái)塔機(jī)的工作數(shù)據(jù)。
1.監(jiān)控系統(tǒng)方案設(shè)計(jì)
便攜式塔機(jī)監(jiān)控系統(tǒng)基于硬件的數(shù)據(jù)采集功能,其工作步驟是:先將裝有傳感器的采集電路板采集到的各個(gè)數(shù)據(jù)信息(高度、 幅度、 角度和載重等)發(fā)送到處理器 ARM9 中;然后將這些數(shù)據(jù)從 ARM9 處理器通過(guò)串口發(fā)送到 GPRS 模塊, 通過(guò)這個(gè)模塊將數(shù)據(jù)發(fā)送到服務(wù)器的數(shù)據(jù)庫(kù)(MySQL)中;最后在網(wǎng)頁(yè)和 Android 操作系統(tǒng)界面上可以方便地觀測(cè)采集到的數(shù)據(jù)信息。便攜式塔機(jī)監(jiān)控系統(tǒng)的總體框架如圖 1 所示。
2.硬件基礎(chǔ)綜述
在便攜式塔機(jī)監(jiān)控系統(tǒng)中,硬件部分主要負(fù)責(zé)數(shù)據(jù)的采集和發(fā)送,其核心模塊包括:處理器模塊、各個(gè)參數(shù)的數(shù)據(jù)采集模塊和GPRS模塊。其中,處理器芯片采用三星公司精簡(jiǎn)指令集微處理器(Advanced RISC Ma-chines, ARM9)系列中的S3C2440 微處理器,該芯片不僅能夠嵌入相關(guān)操作系統(tǒng),對(duì)控制起到管理的作用,并且具有較高的工作頻率和獨(dú)立的硬件資源。
數(shù)據(jù)采集模塊市場(chǎng)上有很多種,基本原理都是利用傳感器來(lái)進(jìn)行模擬/數(shù)字(A/D)轉(zhuǎn)換, 將采集到的模擬信號(hào)轉(zhuǎn)化成數(shù)字信號(hào),發(fā)送給ARM9微處理器,對(duì)于這些傳感器的選擇,重點(diǎn)參考其性價(jià)比和精確度。
在整個(gè)監(jiān)控系統(tǒng)的硬件部分,GPRS模塊是最關(guān)鍵的,因?yàn)樗鼪Q定著數(shù)據(jù)在網(wǎng)絡(luò)上傳輸?shù)男?。本系統(tǒng)選擇西門子MC37i 雙頻GSM/GPRS模塊,它具有重量輕、功耗低等特點(diǎn), 并且是目前市場(chǎng)上尺寸最小的雙頻GSM/GPRS模塊,其優(yōu)勢(shì)在于永久在線連接、快速數(shù)據(jù)存儲(chǔ)和更快的數(shù)據(jù)下載速度。在軟件方面,通過(guò)AT指令控制GPRS模塊MC37i。AT指令一般用于終端設(shè)備與PC應(yīng)用之間的連接和通信,它是從終端設(shè)備或數(shù)據(jù)終端設(shè)備、向終端適配器或數(shù)據(jù)電路終端設(shè)備發(fā)送的。
此外,通過(guò)PPP協(xié)議實(shí)現(xiàn)GPRS模塊與GPRS網(wǎng)絡(luò)的連接,這種連接方式方便將來(lái)與 Internet相連并將數(shù)據(jù)發(fā)送到PC服務(wù)器端的數(shù)據(jù)庫(kù)MySQL中,這樣,既可以將數(shù)據(jù)庫(kù)中的數(shù)據(jù)在網(wǎng)站的顯示界面上監(jiān)控,也可以在 Android 操作系統(tǒng)平臺(tái)終端的界面上進(jìn)行觀測(cè)。網(wǎng)頁(yè)上的監(jiān)控?cái)?shù)據(jù)界面如圖2 所示,下面,針對(duì)后者各部分設(shè)計(jì)原理及流程進(jìn)行詳細(xì)介紹。
要想實(shí)現(xiàn)本系統(tǒng)在 Android 操作系統(tǒng)平臺(tái)終端上的應(yīng)用,總體上可分Web服務(wù)器端的架構(gòu)搭建和Android 操作系統(tǒng)平臺(tái)客戶端應(yīng)用軟件的設(shè)計(jì)。其中服務(wù)器端負(fù)責(zé)數(shù)據(jù)接收和存儲(chǔ),客戶端軟件(即智能手機(jī))負(fù)責(zé)信息的接收以及界面顯示。
3.服務(wù)器端設(shè)計(jì)
3.1 SSH 整合框架概念
塔機(jī)監(jiān)控系統(tǒng)中的服務(wù)器端Web 架構(gòu)使用了SSH整合框架。所謂SSH整合框架就是:Web 層最成熟穩(wěn)定的技術(shù)Struts +業(yè)務(wù)層框架Spring+存取數(shù)據(jù)庫(kù)的解決方案Hibernate。本系統(tǒng)中SSH整合框架為:Hibernate +Struts2 +Spring,其中2指產(chǎn)品的版本代號(hào)。下面闡述各個(gè)框架的概念以及整合的特點(diǎn)。
(1)Hibernate 框架
Hibernate 是一個(gè)功能強(qiáng)大的開源對(duì)象關(guān)系映射(Object Relational Mapping,ORM)框架工具,允許開發(fā)者使用常見的Java 語(yǔ)言特性實(shí)現(xiàn)對(duì)象模型到關(guān)系數(shù)據(jù)庫(kù)的映射,它利用反射機(jī)制在運(yùn)行時(shí)實(shí)現(xiàn)持久化一個(gè)對(duì)象的各種操作,保證了源碼的簡(jiǎn)練和完全地面向?qū)ο箫L(fēng)格。同時(shí),Hibernate也是一個(gè)非常流行的、開源的、易于配置和運(yùn)行的且基于 Java 數(shù)據(jù)庫(kù)連接標(biāo)準(zhǔn)(Java DataBase Connectivity Standard,JDBC)的對(duì)象- 關(guān)系映射(JORM)引擎,支持 Oracle、DB2、SQL Server 和MySQL 等主流數(shù)據(jù)庫(kù)系統(tǒng)。此外,Hibernate可以用在任何需要將Java對(duì)象和數(shù)據(jù)庫(kù)表格中的數(shù)據(jù)進(jìn)行操作的Java應(yīng)用中。
Hibernate包括兩類配置文件。第一類配置文件為hibernate.cfg.xml。在服務(wù)器啟動(dòng)時(shí),Hibernate 查詢第一類配置文件里面的屬性來(lái)進(jìn)行操作,例如數(shù)據(jù)庫(kù)連接字符串和密碼第二類配置文件是映射描述文件(文件擴(kuò)展名為* . hbm. xml),它將告訴 Hibernate如何將特定的Java類和一個(gè)或者多個(gè)數(shù)據(jù)庫(kù)表格中的數(shù)據(jù)進(jìn)行映射。
(2)Struts2 框架
Struts 是基于MVC(Model,View,Controller)體系結(jié)構(gòu)的Web應(yīng)用程序框架,MVC設(shè)計(jì)模式由模型(M)、視圖(V)和控制器(C)三部分組成。Struts 最大的用途就是自動(dòng)獲取表單參數(shù)(FormBean),以及將控制器與視圖分離,將應(yīng)用程序分解為業(yè)務(wù)邏輯、控制邏輯和表現(xiàn)邏輯,降低了各邏輯層之間的耦合度,提高了應(yīng)用程序的開發(fā)速度以及可維護(hù)性和可重用性。
本系統(tǒng)中用到的是Struts2框架,其代碼和Struts1的代碼并不兼容,包括的包文件和配置文件都不一樣,Struts1 的程序必須加以修改才能運(yùn)行于Struts2 之下,可以認(rèn)為它們是兩個(gè)不同的框架。與Struts1相比,Struts2 在Action類、線程模式、Servlet 依賴和可測(cè)性方面都有其獨(dú)特的優(yōu)點(diǎn)。
Struts2 的執(zhí)行流程為: Web 服務(wù)器啟動(dòng)解析struts.xml、初始化消息文件和Action路徑映射等資源,初始化框架→用戶請(qǐng)求(.a(chǎn)ction)→Struts2過(guò)濾器使用對(duì)象工廠(Object Factory,可以是自帶或者是Spring 框架)創(chuàng)建 Action 類的示例→執(zhí)行輕量級(jí)的控制反轉(zhuǎn)(IOC)和攔截器(包括解析表單參數(shù),文件上傳,將解析結(jié)果注入 Action 對(duì)象)→調(diào)用 Action 中用戶編寫的業(yè)務(wù)方法→根據(jù)返回的結(jié)果(Result)路徑轉(zhuǎn)向視圖層。
本文的返回結(jié)果設(shè)為Json列表格式,并且直接Android 終端(客戶端)的應(yīng)用程序讀取。
(3)Spring 框架
Spring是基于企業(yè)間Java環(huán)境(Java 2 Enterprise Edition,J2EE)平臺(tái)上分層的應(yīng)用程序框架。簡(jiǎn)單來(lái)說(shuō),它是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IOC) 和面向切面(AOP)的容器框架。
首先,Spring 的IOC包括控制反轉(zhuǎn)和依賴注入。控制反轉(zhuǎn)就是由容器來(lái)控制程序之間的(依賴)關(guān)系,而非傳統(tǒng)實(shí)現(xiàn)中,由程序代碼直接操控;依賴注入就是組件之間的依賴關(guān)系由容器在運(yùn)行期決定,由容器將某種依賴關(guān)系動(dòng)態(tài)地注入到組件之中。
其次,Spring就是其AOP應(yīng)用。Spring 容器集成了TransactionTemplate 處理方式,它封裝了所有對(duì)事務(wù)處理的功能,包括異常時(shí)事務(wù)回滾、操作成功時(shí)的數(shù)據(jù)提交等復(fù)雜業(yè)務(wù)功能。這些功能都由Spring 容器來(lái)管理,大大減少了程序員的代碼量,也能對(duì)事務(wù)進(jìn)行很好的管理和控制。
(4)SSH 框架的整合
在本系統(tǒng)開發(fā)中,Struts2、Spring 和Hibernate這三個(gè)開源框架在Web應(yīng)用中各自的側(cè)重 點(diǎn)不同。Struts2主要側(cè)重把表現(xiàn)層和邏輯層分開;Spring 主要是對(duì)業(yè)務(wù)層的層次細(xì)化,即更深層次的降低耦合程度;Hibernate主要負(fù)責(zé)Java對(duì)象和關(guān)系數(shù)據(jù)庫(kù)之間的映射。SSH 整合框架正結(jié)合了這三個(gè)框架各自的特點(diǎn)及Web應(yīng)用分層思想,并為Web 應(yīng)用各層提供了相應(yīng)的整合策略。Web應(yīng)用中SSH整合框架的分層架構(gòu)圖如圖3 所示。
3.2服務(wù)器系統(tǒng)設(shè)計(jì)
(1)數(shù)據(jù)庫(kù)設(shè)計(jì)
服務(wù)器系統(tǒng)中的數(shù)據(jù)庫(kù)使用的是 MySQL,用來(lái)存儲(chǔ)塔機(jī)監(jiān)控設(shè)備上的GPRS模塊發(fā)送過(guò)來(lái)的采集到的數(shù)據(jù)信息(載重、幅度和高度等),以及手機(jī)客戶端應(yīng)用程序中需要顯示的關(guān)于設(shè)備的詳細(xì)信息(比如:所在省市、設(shè)備編號(hào)、日期時(shí)間,以及相應(yīng)的文字圖片),這些信息都要顯示在網(wǎng)頁(yè)上和 Android 操作系統(tǒng)界面上,以便工作人員觀測(cè)。所以,有必要新建一個(gè)數(shù)據(jù)表格tower,并新增Id、city等字段來(lái)存放相應(yīng)的數(shù)據(jù),部分SQL代碼如下:
CREATE TABLE 'tower' ('Id' int(11) NOT NULL AUTO_INCREMENT,/ /設(shè)置表格Id的自增方式' province' varchar(20) DEFAULT NULL,/ /為tower創(chuàng)建province 屬性
'city' varchar(20) DEFAULT NULL,/ /創(chuàng)建 city 屬性— — —城市
'pic' varchar(20) DEFAULT NULL,/ /創(chuàng)建 pic 屬性— — —圖片
'dir' varchar(20) DEFAULT NULL,/ /創(chuàng)建 dir 屬性
PRIMARY KEY ('Id') / /將本表的 Id 作為主鍵) ENGINE = MyISAMAUTO_INCREMENT = 1 DEFAULT CHAR-SET = utf8/ /設(shè)置字符集編碼為utf8
(2)數(shù)據(jù)持久層設(shè)計(jì)
數(shù)據(jù)持久層是通過(guò)Hibernate框架來(lái)完成的。根據(jù)本文第(1)節(jié)中所闡述的數(shù)據(jù)庫(kù)表格 tower的設(shè)計(jì),可以為MyEclipse 編譯環(huán)境的Web工程添加Hi-bernate功能來(lái)創(chuàng)建相應(yīng)的配置文件hibernate.cfg.xml,然后配置連接數(shù)據(jù)庫(kù)和所操作實(shí)體類對(duì)應(yīng)配置文件信息的
Hibernate參數(shù),利用MyEclipse 的“反向工程技術(shù)”生成相應(yīng)實(shí)體類和實(shí)體映射文件 tower.hbm.xml,此時(shí),實(shí)體類和實(shí)體關(guān)系表一一對(duì)應(yīng),而實(shí)體映射文件描述了這種對(duì)應(yīng)關(guān)系。
(3)業(yè)務(wù)層設(shè)計(jì)
業(yè)務(wù)層的設(shè)計(jì)主要是通過(guò) Spring 框架來(lái)完成的。為了將控制層和業(yè)務(wù)層分開,又可將業(yè)務(wù)層分為Dao層、業(yè)務(wù)邏輯層以及Web層。Dao層完成對(duì)持久化對(duì)象的交互;業(yè)務(wù)邏輯層是以 Dao層為基礎(chǔ),通過(guò)對(duì)Dao組件的調(diào)用,封裝完成業(yè)務(wù)邏輯層的工作;Web 層包括 MVC 模式中的控制層和表現(xiàn)層,采用Struts2 完成。因此,在本項(xiàng)目中通過(guò)在源代碼文件夾(src)中創(chuàng)建以下的“包類”來(lái)實(shí)現(xiàn)。
1)com.tower.a(chǎn)ction包中的 RiverAction.java類負(fù)責(zé)響應(yīng)手機(jī)端發(fā)出的請(qǐng)求。該類繼承com.opensym-phony.xwork2.ActionSupport 類,這樣極大地簡(jiǎn)化了Struts2 的Action 開發(fā)。
2)com.twoer.biz 包中的TowerBiz.java負(fù)責(zé)處理獲取“關(guān)注設(shè)備”的列表方法 getTowerImpList()以及獲取各省份分類設(shè)備列表 getTowerListByType()。
3) com.twoer.dao包中的TowerDAO.java負(fù)責(zé)編寫數(shù)據(jù)處理的方法,由TowerBiz.java 獲取。
4)在 web.xml和struts.xml這兩個(gè)配置文件中分別設(shè)置Struts2的過(guò)濾器和返回Json 格式列表:
<action name = " towerAction" class = " com.twoer.a(chǎn)ction.TowerAc-tion"><result type = "json" /></action>
4.Android 客戶端應(yīng)用設(shè)計(jì)
1.Android 操作系統(tǒng)
Android 是Google公司開發(fā)的基于Linux開源的移動(dòng)設(shè)備終端平臺(tái),它包括操作系統(tǒng)、 用戶界面、中間件和應(yīng)用程序,同時(shí)其開放性不存在任何以阻礙移動(dòng)產(chǎn)業(yè)創(chuàng)新的專有權(quán)障礙。
首先,Android的操作系統(tǒng)架構(gòu)采用了分層的形式其架構(gòu)圖如圖4所示。從圖4所示可以看出,Android操作系統(tǒng)分為四層,從高層到低層分別是應(yīng)用程序?qū)?、?yīng)用程序框架層、 系統(tǒng)運(yùn)行庫(kù)層和Linux 核心層。
其次,Android 操作系統(tǒng)應(yīng)用極為廣泛,它的優(yōu)點(diǎn)如下。1)其簡(jiǎn)單性使得軟件解決方案很容易找到并實(shí)施,為開源軟件開發(fā)人員提供方便的框架和平臺(tái)。2)其開放性讓軟件本身的靈活性比專有軟件產(chǎn)品具有更大的自由和個(gè)性化。3)Android操作系統(tǒng)由Google 公司主導(dǎo)研發(fā),應(yīng)用方面擁有其他系統(tǒng)無(wú)可比擬的優(yōu)勢(shì)。用戶在使用 Android 的在線軟件時(shí),可以與本系統(tǒng)在計(jì)算機(jī)上使用的Google服務(wù)進(jìn)行真正的無(wú)縫連接,實(shí)現(xiàn)Google服務(wù)的完全同步。
Android操作系統(tǒng)中建立的是Android SDK + Java JDK 6 + Eclipse 3.5的開發(fā)環(huán)境,該環(huán)境是基于Android 2.3.3版本的模擬器開發(fā)的。
2數(shù)據(jù)監(jiān)控應(yīng)用開發(fā)
(1)客戶端應(yīng)用結(jié)構(gòu)
手機(jī)客戶端應(yīng)用程序的操作主要包括刷新設(shè)備列表和查看設(shè)備參數(shù)兩個(gè)步驟, 這兩個(gè)步驟都通過(guò)源代碼中的三類(客戶端工具類、 實(shí)體類和界面相關(guān)類)來(lái)實(shí)現(xiàn), 客戶端應(yīng)用程序結(jié)構(gòu)圖如圖 5 所示。
Y7KLEPW@~T)M9U8~JEZWUA3.jpg
(2)客戶端操作流程
用戶使用 Android 操作系統(tǒng)極其簡(jiǎn)單, 運(yùn)行軟件后進(jìn)入設(shè)備選擇的主界面, 在主界面可以看到最上面一欄有四個(gè)圖標(biāo), 分別代表四類屬性的設(shè)備, 即關(guān)注設(shè)備、 江蘇設(shè)備、 安徽設(shè)備和浙江設(shè)備, 然后根據(jù)用戶所要監(jiān)控設(shè)備所在的屬性/城市點(diǎn)擊相應(yīng)的圖標(biāo), 將其所對(duì)應(yīng)的參數(shù) “type” 發(fā)送給服務(wù)器端, 并讀取服務(wù)器返回的數(shù)據(jù)列表(格式為 Json 列表), 在 Activity 界面中顯示, 設(shè)備列表畫面如圖6a 所示。讀取 Json 列表這部分代碼在工具類 ConnetWeb. java 中實(shí)現(xiàn)。Json 列表部分代碼如下:
String str = connWeb(url);/ /根據(jù)請(qǐng)求的地址參數(shù) url 獲取返回結(jié)果
JSONObject job = new JSONObject(str);/ /轉(zhuǎn)換 JsonObject 對(duì)象
JSONArray jay = job. getJSONArray ( " sblist");/ /獲取 JsonArray對(duì)象
for (int i = 0;i < jay. length();i + = 1) {JSONObject temp = (JSONObject) jay. get(i);……/ /在此設(shè)置塔機(jī)設(shè)備參數(shù)并添加到列表中}
由于屏幕空間問(wèn)題, 在列表中只列出了設(shè)備的地址和編號(hào), 所以, 在每條列表?xiàng)l目上設(shè)置了監(jiān)聽器來(lái)跳轉(zhuǎn)到另一個(gè) Activity 界面, 查看相應(yīng)設(shè)備的詳細(xì)信息, 跳轉(zhuǎn)代碼如下:tripListView. set. OnItemClickListener(new OnItemClickListener()) / /設(shè)置監(jiān)聽器代碼
用戶進(jìn)入設(shè)備列表后, 點(diǎn)擊列表中的設(shè)備即可觀測(cè)到相應(yīng)設(shè)備的詳細(xì)信息, 設(shè)備詳細(xì)信息畫面如圖 6b 所示。此時(shí)已經(jīng)將設(shè)備采集到的即時(shí)數(shù)據(jù)全部快速、 準(zhǔn)確地顯示在手機(jī)上, 并且每次刷新都能重新獲取最新數(shù)據(jù)。塔機(jī)監(jiān)控系統(tǒng)手機(jī)顯示畫面如圖6 所示。 mani? ?<??[ z="" an="" style="mso-bidi-font-size:14px">Google公司開發(fā)的基于Linux開源的移動(dòng)設(shè)備終端平臺(tái),它包括操作系統(tǒng)、 用戶界面、中間件和應(yīng)用程序,同時(shí)其開放性不存在任何以阻礙移動(dòng)產(chǎn)業(yè)創(chuàng)新的專有權(quán)障礙。
首先,Android的操作系統(tǒng)架構(gòu)采用了分層的形式其架構(gòu)圖如圖4所示。從圖4所示可以看出,Android操作系統(tǒng)分為四層,從高層到低層分別是應(yīng)用程序?qū)?、?yīng)用程序框架層、 系統(tǒng)運(yùn)行庫(kù)層和Linux 核心層。
其次,Android 操作系統(tǒng)應(yīng)用極為廣泛,它的優(yōu)點(diǎn)如下。1)其簡(jiǎn)單性使得軟件解決方案很容易找到并實(shí)施,為開源軟件開發(fā)人員提供方便的框架和平臺(tái)。2)其開放性讓軟件本身的靈活性比專有軟件產(chǎn)品具有更大的自由和個(gè)性化。3)Android操作系統(tǒng)由Google 公司主導(dǎo)研發(fā),應(yīng)用方面擁有其他系統(tǒng)無(wú)可比擬的優(yōu)勢(shì)。用戶在使用 Android 的在線軟件時(shí),可以與本系統(tǒng)在計(jì)算機(jī)上使用的Google服務(wù)進(jìn)行真正的無(wú)縫連接,實(shí)現(xiàn)Google服務(wù)的完全同步。
(3)報(bào)警通知
報(bào)警是便攜式塔機(jī)監(jiān)控系統(tǒng)的一個(gè)重要組成部分, 及時(shí)報(bào)警可以幫助工作人員及時(shí)了解塔機(jī)設(shè)備現(xiàn)場(chǎng)的狀況?,F(xiàn)有技術(shù)中經(jīng)常會(huì)用到蜂鳴器報(bào)警, 但是, 如果有了手機(jī)監(jiān)控的加入, 可以添加手機(jī)短信報(bào)警功能(短信是通過(guò)硬件系統(tǒng)中的 GPRS 芯片 MC37i發(fā)送), 通過(guò)短信報(bào)警實(shí)現(xiàn)負(fù)責(zé)人不在現(xiàn)場(chǎng)也能及時(shí)提示工作人員對(duì)系統(tǒng)進(jìn)行修復(fù), 起到了多重監(jiān)督的作用, 防止對(duì)設(shè)備造成損壞以及不堪的后果。
報(bào)警短信程序如下:
if(WEIGHTH > 6000. 00 | | HEIGHTH > 120. 00 | | RANGE >50. 00 | | ANGLE > 120. 00 | | LIJU > 300000. 00 ){beep(…) ;sentsms (…);}elseendif