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

圖2 數據采集控制終端的硬件結構圖
本文根據電梯控制柜、攝像頭與數據采集控制終端的數據傳輸的特點,在MODBUS與H.264圖像編碼格式的基礎上,制定了通信協議,電梯控制柜發送和接受的數據形式均采用十六進制.當電梯的運行狀態發生變化時,電梯控制柜自動上傳數據,電梯控制柜與數據采集控制終端通信采用的數據幀格式如表1所示.

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

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

圖3 電梯預約流程圖

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

圖5 部分功能實現效果圖