齊保良,孫 敏,季從宏,王 旭,藺玉璞,孫 悅
(山東建筑大學(xué) 信息與電氣工程學(xué)院,濟(jì)南 250101)
近年來,隨著社會(huì)經(jīng)濟(jì)的快速發(fā)展,城市中的中高層住宅小區(qū)大量出現(xiàn),電梯已成為必不可少的垂直交通運(yùn)輸設(shè)備,為人們的日常生活提供了便利.目前電梯控制方式靈活,多采用分布式控制和監(jiān)控中心集中監(jiān)控的控制方式[1,2],但在電梯呼梯方面存在一些問題,首先電梯呼梯方式較為單一,一般采用電梯廳按鍵呼梯的方式,并且電梯轎廂運(yùn)行位置只能在候梯廳實(shí)時(shí)顯示,乘坐人員在手動(dòng)按動(dòng)按鈕后,還要等待電梯.其次由于無法預(yù)判轎廂內(nèi)外人員狀況,在高峰擁擠時(shí),容易造成候梯廳擁堵,出現(xiàn)“中國式乘梯”的現(xiàn)象[3].同時(shí)隨著Android智能手機(jī)普及,各行各業(yè)都通過智能終端設(shè)備提升自身服務(wù)質(zhì)量,由于Android有著移動(dòng)性好、數(shù)據(jù)通信便捷、自身具有運(yùn)算能力等特點(diǎn),將智能手機(jī)應(yīng)用到電梯遠(yuǎn)程呼梯系統(tǒng)中,可以實(shí)現(xiàn)電梯數(shù)據(jù)的監(jiān)控,真正意義上實(shí)現(xiàn)信息化、智能化管理.目前針對(duì)電梯遠(yuǎn)程監(jiān)控存在的弊端,文獻(xiàn)[4]通過電梯的遠(yuǎn)程監(jiān)控的方式,讓維保人員實(shí)時(shí)了解電梯動(dòng)態(tài),保障電梯安全可靠,但普通用戶無法觀測電梯運(yùn)行位置.文獻(xiàn)[5]只實(shí)現(xiàn)了對(duì)電梯進(jìn)行遠(yuǎn)程呼梯的設(shè)計(jì),但并未對(duì)乘候人數(shù)檢測進(jìn)行研究.
本文為實(shí)現(xiàn)遠(yuǎn)程可預(yù)約呼梯功能,采用具有跨平臺(tái)性、面向?qū)ο笈c開放性的Java語言[6],設(shè)計(jì)了一款集電梯運(yùn)行情況查詢、載客運(yùn)行優(yōu)化與遠(yuǎn)程呼梯為一體的手機(jī)App電梯預(yù)約系統(tǒng),系統(tǒng)實(shí)現(xiàn)了遠(yuǎn)程觀察轎廂內(nèi)外人員擁擠情況、遠(yuǎn)程呼梯的功能,能夠減少候梯時(shí)間,疏導(dǎo)高峰期電梯使用人群,提高電梯的利用率.
該系統(tǒng)主要由現(xiàn)場設(shè)備、數(shù)據(jù)采集控制終端、服務(wù)器和遠(yuǎn)程客戶端組成.系統(tǒng)結(jié)構(gòu)框圖如圖1所示.現(xiàn)場設(shè)備包括電梯控制柜和攝像頭模塊,電梯控制柜主要完成對(duì)電梯運(yùn)行參數(shù)檢測與控制,作為數(shù)據(jù)信息的源頭;數(shù)據(jù)采集控制終端采集電梯數(shù)據(jù)和圖像信息打包并上傳服務(wù)器;用戶通過客戶端遠(yuǎn)程訪問服務(wù)器,實(shí)時(shí)獲得電梯運(yùn)行狀態(tài)數(shù)據(jù)和乘候梯圖像信息,在確認(rèn)當(dāng)前電梯符合自己的使用要求時(shí),電梯用戶在客戶端上輸入自己當(dāng)前所在樓層位置與預(yù)期的電梯運(yùn)行方向.服務(wù)器對(duì)APP數(shù)據(jù)請求進(jìn)行匯總,向電梯控制柜發(fā)送控制命令,并將電梯轎廂內(nèi)外圖像與電梯運(yùn)行數(shù)據(jù)回傳給客戶端,最終實(shí)現(xiàn)電梯遠(yuǎn)程預(yù)約.
整個(gè)系統(tǒng)的工作流程分為三部分:
(1)電梯數(shù)據(jù)和圖像信息的采集與上傳
其中電梯運(yùn)行狀態(tài)數(shù)據(jù)通過RS485總線傳輸?shù)綌?shù)據(jù)采集控制終端,轎廂內(nèi)外的乘候梯圖像信息通過網(wǎng)絡(luò)線的TCP/IP協(xié)議進(jìn)行傳輸.數(shù)據(jù)采集控制終端分析處理采集到的數(shù)據(jù)(包括電梯運(yùn)行狀態(tài)信號(hào)處理和圖像信息的編碼和壓縮),主處理芯片按照預(yù)先設(shè)定好的通信協(xié)議對(duì)數(shù)據(jù)進(jìn)行封裝打包并通過網(wǎng)絡(luò)的TCP/IP協(xié)議發(fā)送給服務(wù)器,服務(wù)器通過網(wǎng)絡(luò)線接入Internet網(wǎng)絡(luò),接收數(shù)據(jù)并將數(shù)據(jù)保存在數(shù)據(jù)庫中,實(shí)時(shí)更新數(shù)據(jù),完成數(shù)據(jù)的傳輸.
(2)用戶查詢指令和呼梯指令的下達(dá)
用戶指令的下達(dá)是通過客戶端完成的,手機(jī)客戶端通過移動(dòng)互聯(lián)網(wǎng)轉(zhuǎn)接到Internet網(wǎng)絡(luò),實(shí)現(xiàn)客戶端到服務(wù)器間的通信.用戶通過客戶端提交控制指令到服務(wù)器后,服務(wù)器的Servlet組件接收指令并解析指令類型,若為查詢指令,服務(wù)器通過JDBC組件調(diào)取數(shù)據(jù)庫里的數(shù)據(jù)信息,并將數(shù)據(jù)打包成JSON格式數(shù)據(jù)返回客戶端,客戶端進(jìn)行解析并顯示;若為呼梯指令,則首先將指令要求寫入數(shù)據(jù)庫對(duì)應(yīng)數(shù)據(jù)表中.
(3)電梯響應(yīng)處理呼梯命令
服務(wù)器完成數(shù)據(jù)處理后,將數(shù)據(jù)打包發(fā)送給數(shù)據(jù)采集控制終端,數(shù)據(jù)采集控制終端根據(jù)控制命令實(shí)現(xiàn)對(duì)電梯控制柜的控制,最終點(diǎn)亮候梯廳轎廂外的呼梯按鈕,完成遠(yuǎn)程呼梯.
數(shù)據(jù)采集控制終端采集的數(shù)據(jù)包括視頻圖像信息和電梯的運(yùn)行狀態(tài)數(shù)據(jù)(上行、下行、所在樓層位置),硬件結(jié)構(gòu)圖如圖2所示.數(shù)據(jù)采集控制電路主要實(shí)現(xiàn)對(duì)外圍其他設(shè)備的控制,本文采用基于ARM920T內(nèi)核的嵌入式微處理器S3C2440A作為核心,該芯片的處理速度快、低功耗以及內(nèi)存大,同時(shí)該芯片具有RS485模塊、網(wǎng)口模塊、USB模塊和專用攝像頭接口,接口類型豐富[7].控制終端硬件主要由電源模塊、RS485與以太網(wǎng)通信模塊、攝像頭接口、存儲(chǔ)模塊組成.數(shù)據(jù)采集控制終端采用5 V的開關(guān)電源供電,通過電源轉(zhuǎn)換電路將5 V的電源轉(zhuǎn)換成2路3.3 V的直流電源,一路為S3C2440主控板供電,另一路為攝像頭模塊供電.通過采用隔離的方法降低2路電源電路的干擾.電梯控制柜與數(shù)據(jù)采集控制終端采用RS485串口電路連接,RS485電路采用MAX-485芯片.攝像頭通過專用攝像頭接口連接,采集模塊將采集到的圖像信息和電梯狀態(tài)數(shù)據(jù)預(yù)處理后保存在采集終端中,通信模塊通過以太網(wǎng)接口的TCP/IP協(xié)議將數(shù)據(jù)送至服務(wù)器.
本文圖像數(shù)據(jù)格式采用H.264編碼格式[8].H.264的壓縮編碼主要針對(duì)圖像數(shù)據(jù)格式為YUV420,所以本文直接選用圖像格式為YUV420的攝像頭.數(shù)據(jù)傳輸協(xié)議采用RTP/UDP[9]協(xié)議,UDP負(fù)責(zé)數(shù)據(jù)包的傳送,RTP為數(shù)據(jù)流提供時(shí)間信息,提高數(shù)據(jù)傳輸效率.

圖2 數(shù)據(jù)采集控制終端的硬件結(jié)構(gòu)圖
本文根據(jù)電梯控制柜、攝像頭與數(shù)據(jù)采集控制終端的數(shù)據(jù)傳輸?shù)奶攸c(diǎn),在MODBUS與H.264圖像編碼格式的基礎(chǔ)上,制定了通信協(xié)議,電梯控制柜發(fā)送和接受的數(shù)據(jù)形式均采用十六進(jìn)制.當(dāng)電梯的運(yùn)行狀態(tài)發(fā)生變化時(shí),電梯控制柜自動(dòng)上傳數(shù)據(jù),電梯控制柜與數(shù)據(jù)采集控制終端通信采用的數(shù)據(jù)幀格式如表1所示.

表1 電梯控制柜與數(shù)據(jù)采集控制終端通信幀格式
其中,幀頭部分0XAAAA為整個(gè)數(shù)據(jù)幀的開始,用于數(shù)據(jù)對(duì)齊并作為數(shù)據(jù)開始的標(biāo)志.地址1的數(shù)據(jù)作為電梯的唯一ID號(hào).數(shù)據(jù)1的內(nèi)容為電梯當(dāng)前所在樓層數(shù).數(shù)據(jù)2表示了電梯當(dāng)前的運(yùn)行狀態(tài),其中最高位和次高位為00時(shí),代表電梯正在靜止;01表示電梯正在向上運(yùn)行;10代表電梯正在向下運(yùn)行.另外本字節(jié)的其他位為預(yù)留位.校驗(yàn)字節(jié)的內(nèi)容為前面所有字節(jié)數(shù)據(jù)(不包括幀頭)的異或結(jié)果.幀尾部分為兩個(gè)字節(jié),其內(nèi)容為固定的0X5555,用于指示數(shù)據(jù)的傳輸完成.
攝像頭模塊收到數(shù)據(jù)采集控制終端讀圖像的控制指令后,首先抓捕一幀的視屏數(shù)(像素點(diǎn)640×480),然后對(duì)抓取的幀數(shù)據(jù)按照H.264標(biāo)準(zhǔn)進(jìn)行壓縮編碼,并添加攝像頭位置標(biāo)識(shí),最終將數(shù)據(jù)發(fā)送至服務(wù)器.圖像數(shù)據(jù)通信幀格式如表2所示.

表2 圖像數(shù)據(jù)通信幀格式
其中,圖像數(shù)據(jù)幀的幀頭部分為固定的0x0A0A,用于指示數(shù)據(jù)傳輸開始和數(shù)據(jù)對(duì)齊;地址1作為攝像機(jī)ID的唯一標(biāo)識(shí).數(shù)據(jù)1用來表示圖片拍攝的樓層數(shù),數(shù)據(jù)2用來表示轎廂內(nèi)外編號(hào);數(shù)據(jù)3為圖像數(shù)據(jù),采用YUV420格式的640×480個(gè)像素點(diǎn)的圖片作為采集結(jié)果.校驗(yàn)字節(jié)的內(nèi)容為前面字節(jié)數(shù)據(jù)(不包含幀頭)異或的結(jié)果,方便服務(wù)器驗(yàn)證傳輸?shù)臄?shù)據(jù)的正確性與是否需要重發(fā).幀尾部分為兩個(gè)字節(jié),其內(nèi)容為固定的0X5555,用于指示數(shù)據(jù)的傳輸完成.
本系統(tǒng)采用B/S架構(gòu),主要由Android客戶端、Web服務(wù)器和數(shù)據(jù)庫三部分組成.客戶端可以實(shí)現(xiàn)電梯數(shù)據(jù)的查詢、顯示和遠(yuǎn)程呼梯功能.Web服務(wù)器端使用Servlet技術(shù)響應(yīng)數(shù)據(jù)請求,采用Tomcat服務(wù)器作為Servlet的容器,接收請求并將響應(yīng)返回給客戶端.數(shù)據(jù)存儲(chǔ)分為2部分,一部分?jǐn)?shù)據(jù)存儲(chǔ)在客戶端數(shù)據(jù)庫SQLIte中,一部分?jǐn)?shù)據(jù)存儲(chǔ)在服務(wù)器端數(shù)據(jù)庫MySQL中,服務(wù)器訪問數(shù)據(jù)庫的數(shù)據(jù)必須通過JDBC技術(shù)實(shí)現(xiàn),調(diào)用SQL語句實(shí)現(xiàn)數(shù)據(jù)庫數(shù)據(jù)的增刪改查.
客戶端面向用戶開發(fā),在客戶端UI界面顯示的電梯圖像數(shù)據(jù)和電梯運(yùn)行數(shù)據(jù),用戶能夠獲得電梯載客情況、所處樓層、每層的候梯人數(shù).用戶可根據(jù)UI界面顯示的數(shù)據(jù),選擇乘梯樓層和方向,完成電梯預(yù)約,點(diǎn)亮對(duì)應(yīng)樓層轎廂外的呼梯按鈕.主要包括四個(gè)模塊,分別為:注冊/登陸模塊、數(shù)據(jù)查詢顯示模塊、電梯預(yù)約模塊和黑名單模塊.
(1)注冊/登陸模塊
該模塊是構(gòu)建App系統(tǒng)的第一步,用于驗(yàn)證用戶注冊/登陸的賬號(hào)信息,對(duì)用戶賬號(hào)安全起到基礎(chǔ)的保護(hù)作用.用戶注冊功能模塊通過POST方式提交用戶注冊、登陸的相關(guān)數(shù)據(jù)信息到服務(wù)器,并將注冊數(shù)據(jù)保存在數(shù)據(jù)庫中.用戶登陸模塊也同樣采用POST方式提交數(shù)據(jù)信息到服務(wù)器,服務(wù)器Servlet接口接收客戶端發(fā)來的驗(yàn)證請求,比對(duì)數(shù)據(jù)庫的用戶數(shù)據(jù),根據(jù)服務(wù)器端返回的結(jié)果來判斷用戶是否登陸成功.
該模塊還具有找回密碼、更改密碼、查看/修改用戶信息的功能.
(2)數(shù)據(jù)查詢顯示模塊
該模塊了實(shí)現(xiàn)對(duì)所選電梯的相關(guān)運(yùn)行數(shù)據(jù)的查詢顯示功能.在此模塊下,界面整體采用LinearLayout布局,通過Spinner下拉菜單選擇要查詢的樓層數(shù),查詢數(shù)據(jù)的加載需要根據(jù)服務(wù)器提供的API接口,通過HTTP協(xié)議采用POST方式提交請求到服務(wù)器,并通過GET或者POST請求從服務(wù)器獲得封裝好的JSONArray對(duì)象,客戶端接收解析顯示到UI界面.
(3)電梯預(yù)約模塊
該模塊數(shù)據(jù)提交方式與查詢模塊相同,同樣采用Spinner下拉菜單選擇要查詢的樓層數(shù),通過HTTP協(xié)議的POST方式提交數(shù)據(jù)到服務(wù)器服務(wù)器解析數(shù)據(jù)并把數(shù)據(jù)命令通過服務(wù)器端HTTP協(xié)議連接電梯數(shù)據(jù)采集控制終端,點(diǎn)亮該樓層呼梯大廳內(nèi)的呼梯按鈕.
(4)黑名單模塊
此模塊用戶管理使用客戶端惡意呼梯的用戶.電梯預(yù)約流程圖如圖3所示.
Android系統(tǒng)的客戶端應(yīng)用程序一般是不能與數(shù)據(jù)庫直接進(jìn)行數(shù)據(jù)交互的,需要通過后端服務(wù)器完成對(duì)數(shù)據(jù)庫中數(shù)據(jù)的修改、刪除、查詢等操作.在本系統(tǒng)中服務(wù)器采用Apache提供的輕量級(jí)服務(wù)器Tomcat,并將Tomcat服務(wù)器部署到Eclipse平臺(tái)上.需要在Eclipse平臺(tái)上新建一個(gè)Dynamic Web Project,并將新建的項(xiàng)目添加到Tomcat中,重新啟動(dòng)服務(wù)器即可.
本系統(tǒng)中Android客戶端通過Http協(xié)議訪問Web服務(wù)器,完成對(duì)客戶端數(shù)據(jù)的請求與響應(yīng).客戶端通過Android自帶的HttpClient類提交Http請求,并通過GET請求或POST請求向指定的服務(wù)器提交數(shù)據(jù),GET請求用于下載服務(wù)器圖片文件,POST請求用于查詢和修改服務(wù)器內(nèi)容.客戶端和服務(wù)器的數(shù)據(jù)交互必須通過Servlet組件(即服務(wù)器端的小應(yīng)用程序),Servlet包含有doGet和doPost兩個(gè)方法,分別用于處理和接收Http協(xié)議的GET請求和POST請求.Android客戶端通過Http協(xié)議提交用戶請求,WEB服務(wù)器接收用戶請求并將接收的請求轉(zhuǎn)發(fā)至Servlet驅(qū)動(dòng),對(duì)應(yīng)的Servlet接收請求后完成相應(yīng)的業(yè)務(wù)處理,Servlet將響應(yīng)結(jié)果按照規(guī)定的數(shù)據(jù)格式進(jìn)行封裝返回到服務(wù)器,服務(wù)器接收后將結(jié)果集返回到客戶端,客戶端解析數(shù)據(jù)包并在UI界面顯示響應(yīng)結(jié)果.服務(wù)器接收請求數(shù)據(jù)示意圖如圖4所示.

圖3 電梯預(yù)約流程圖

圖4 服務(wù)器接收請求數(shù)據(jù)示意圖
在本系統(tǒng)中,數(shù)據(jù)庫采用Android自帶的輕量級(jí)小型的SQLite數(shù)據(jù)庫和MySQL數(shù)據(jù)庫,SQLite負(fù)責(zé)保存用戶的賬號(hào)名和密碼,通過SQLitedataBase和SQLiteOpenHelper兩個(gè)類完成數(shù)據(jù)庫的增刪改查功能;MySQL數(shù)據(jù)庫負(fù)責(zé)驗(yàn)證用戶的登陸信息、存儲(chǔ)電梯的運(yùn)行數(shù)據(jù)、乘候梯圖像信息和電梯預(yù)約信息.在MySQL數(shù)據(jù)庫中,新建一個(gè)數(shù)據(jù)庫并命名,同時(shí)在新建的數(shù)據(jù)庫中添加4張數(shù)據(jù)表,分別為用戶信息表user、電梯數(shù)據(jù)表elevator_data、圖像信息表camera_info、預(yù)約數(shù)據(jù)表reservation_data.
WEB服務(wù)器調(diào)取MySQL數(shù)據(jù)庫的數(shù)據(jù)需要借助JDBC接口完成,通過JDBC接口可實(shí)現(xiàn)向數(shù)據(jù)庫中插入數(shù)據(jù)、查詢數(shù)據(jù)、刪除數(shù)據(jù)以及更改數(shù)據(jù)庫紀(jì)錄等操作.在系統(tǒng)中需要新建一個(gè)DBUtil包用來封裝連接數(shù)據(jù)庫的代碼,首先通過Class.forName()方法注冊驅(qū)動(dòng),通過Connection()方法與數(shù)據(jù)庫建立連接,此方法中包含數(shù)據(jù)庫的URL,用戶名和密碼,連接成功后,通過Statement接口的createStatement()方法創(chuàng)建操作SQL語句的對(duì)象,利用接口中executeQuery()方法和executeUpdata()方法操作SQL語句,最后將響應(yīng)結(jié)果集返回到ResultSet接口并將響應(yīng)結(jié)果集進(jìn)行封裝.
軟件打開后進(jìn)入登陸界面圖5(a)注冊登錄界面所示.客戶端接收到用戶名和密碼登錄后,根據(jù)用戶輸入的登錄信息,在數(shù)據(jù)庫的用戶表(user)中搜尋與此信息相匹配的記錄,驗(yàn)證其合法性.如果用戶合法,則將請求網(wǎng)絡(luò)獲得主界面,否則返回初始界面并提示“用戶名或密碼錯(cuò)誤”.
用戶登陸主界面后,可執(zhí)行兩種操作:查看功能和預(yù)約功能,如圖5(d)、(e)所示.當(dāng)用戶輸入指令后,服務(wù)器進(jìn)行JSON數(shù)據(jù)解析,判斷指令內(nèi)容,若為查看功能,顯示所選電梯的當(dāng)前位置、運(yùn)行方向,以及所選樓層轎廂內(nèi)外的圖像信息,如圖5(c)所示;若為預(yù)約指令,服務(wù)器和數(shù)據(jù)采集控制終端通訊,將呼梯指令下達(dá)到電梯控制器,完成預(yù)約功能.部分功能實(shí)現(xiàn)效果圖如圖5所示.
經(jīng)測試,該系統(tǒng)功能可靠,方便快捷,實(shí)時(shí)性和可靠性強(qiáng),滿足了系統(tǒng)設(shè)計(jì)需求,具有廣泛的應(yīng)用情景.
本系統(tǒng)采用C/S架構(gòu),結(jié)合通訊技術(shù)、互聯(lián)網(wǎng)技術(shù)、嵌入式技術(shù)等多種技術(shù),在Android平臺(tái)上實(shí)現(xiàn)了電梯的運(yùn)行監(jiān)視和預(yù)約功能,經(jīng)過Android模擬機(jī)的調(diào)試實(shí)驗(yàn),該系統(tǒng)能夠?qū)崿F(xiàn)手機(jī)客戶端遠(yuǎn)程呼梯,并通過APP顯示轎廂內(nèi)外實(shí)時(shí)圖片,指導(dǎo)用戶錯(cuò)開時(shí)間乘梯,節(jié)約了用戶候梯時(shí)間,提高了電梯利用率.

圖5 部分功能實(shí)現(xiàn)效果圖