面向Android系统的手机电梯预约APP①
2018-08-17齐保良季从宏蔺玉璞
齐保良,孙 敏,季从宏,王 旭,蔺玉璞,孙 悦
(山东建筑大学 信息与电气工程学院,济南 250101)
近年来,随着社会经济的快速发展,城市中的中高层住宅小区大量出现,电梯已成为必不可少的垂直交通运输设备,为人们的日常生活提供了便利.目前电梯控制方式灵活,多采用分布式控制和监控中心集中监控的控制方式[1,2],但在电梯呼梯方面存在一些问题,首先电梯呼梯方式较为单一,一般采用电梯厅按键呼梯的方式,并且电梯轿厢运行位置只能在候梯厅实时显示,乘坐人员在手动按动按钮后,还要等待电梯.其次由于无法预判轿厢内外人员状况,在高峰拥挤时,容易造成候梯厅拥堵,出现“中国式乘梯”的现象[3].同时随着Android智能手机普及,各行各业都通过智能终端设备提升自身服务质量,由于Android有着移动性好、数据通信便捷、自身具有运算能力等特点,将智能手机应用到电梯远程呼梯系统中,可以实现电梯数据的监控,真正意义上实现信息化、智能化管理.目前针对电梯远程监控存在的弊端,文献[4]通过电梯的远程监控的方式,让维保人员实时了解电梯动态,保障电梯安全可靠,但普通用户无法观测电梯运行位置.文献[5]只实现了对电梯进行远程呼梯的设计,但并未对乘候人数检测进行研究.
本文为实现远程可预约呼梯功能,采用具有跨平台性、面向对象与开放性的Java语言[6],设计了一款集电梯运行情况查询、载客运行优化与远程呼梯为一体的手机App电梯预约系统,系统实现了远程观察轿厢内外人员拥挤情况、远程呼梯的功能,能够减少候梯时间,疏导高峰期电梯使用人群,提高电梯的利用率.
1 电梯预约系统的组成及工作流程
该系统主要由现场设备、数据采集控制终端、服务器和远程客户端组成.系统结构框图如图1所示.现场设备包括电梯控制柜和摄像头模块,电梯控制柜主要完成对电梯运行参数检测与控制,作为数据信息的源头;数据采集控制终端采集电梯数据和图像信息打包并上传服务器;用户通过客户端远程访问服务器,实时获得电梯运行状态数据和乘候梯图像信息,在确认当前电梯符合自己的使用要求时,电梯用户在客户端上输入自己当前所在楼层位置与预期的电梯运行方向.服务器对APP数据请求进行汇总,向电梯控制柜发送控制命令,并将电梯轿厢内外图像与电梯运行数据回传给客户端,最终实现电梯远程预约.
整个系统的工作流程分为三部分:
(1)电梯数据和图像信息的采集与上传
其中电梯运行状态数据通过RS485总线传输到数据采集控制终端,轿厢内外的乘候梯图像信息通过网络线的TCP/IP协议进行传输.数据采集控制终端分析处理采集到的数据(包括电梯运行状态信号处理和图像信息的编码和压缩),主处理芯片按照预先设定好的通信协议对数据进行封装打包并通过网络的TCP/IP协议发送给服务器,服务器通过网络线接入Internet网络,接收数据并将数据保存在数据库中,实时更新数据,完成数据的传输.
(2)用户查询指令和呼梯指令的下达
用户指令的下达是通过客户端完成的,手机客户端通过移动互联网转接到Internet网络,实现客户端到服务器间的通信.用户通过客户端提交控制指令到服务器后,服务器的Servlet组件接收指令并解析指令类型,若为查询指令,服务器通过JDBC组件调取数据库里的数据信息,并将数据打包成JSON格式数据返回客户端,客户端进行解析并显示;若为呼梯指令,则首先将指令要求写入数据库对应数据表中.
(3)电梯响应处理呼梯命令
服务器完成数据处理后,将数据打包发送给数据采集控制终端,数据采集控制终端根据控制命令实现对电梯控制柜的控制,最终点亮候梯厅轿厢外的呼梯按钮,完成远程呼梯.
2 数据采集控制终端
2.1 硬件设计
数据采集控制终端采集的数据包括视频图像信息和电梯的运行状态数据(上行、下行、所在楼层位置),硬件结构图如图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 数据采集控制终端的硬件结构图
2.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,用于指示数据的传输完成.
3 电梯查询预约客户端
本系统采用B/S架构,主要由Android客户端、Web服务器和数据库三部分组成.客户端可以实现电梯数据的查询、显示和远程呼梯功能.Web服务器端使用Servlet技术响应数据请求,采用Tomcat服务器作为Servlet的容器,接收请求并将响应返回给客户端.数据存储分为2部分,一部分数据存储在客户端数据库SQLIte中,一部分数据存储在服务器端数据库MySQL中,服务器访问数据库的数据必须通过JDBC技术实现,调用SQL语句实现数据库数据的增删改查.
3.1 Android客户端功能设计
客户端面向用户开发,在客户端UI界面显示的电梯图像数据和电梯运行数据,用户能够获得电梯载客情况、所处楼层、每层的候梯人数.用户可根据UI界面显示的数据,选择乘梯楼层和方向,完成电梯预约,点亮对应楼层轿厢外的呼梯按钮.主要包括四个模块,分别为:注册/登陆模块、数据查询显示模块、电梯预约模块和黑名单模块.
(1)注册/登陆模块
该模块是构建App系统的第一步,用于验证用户注册/登陆的账号信息,对用户账号安全起到基础的保护作用.用户注册功能模块通过POST方式提交用户注册、登陆的相关数据信息到服务器,并将注册数据保存在数据库中.用户登陆模块也同样采用POST方式提交数据信息到服务器,服务器Servlet接口接收客户端发来的验证请求,比对数据库的用户数据,根据服务器端返回的结果来判断用户是否登陆成功.
该模块还具有找回密码、更改密码、查看/修改用户信息的功能.
(2)数据查询显示模块
该模块了实现对所选电梯的相关运行数据的查询显示功能.在此模块下,界面整体采用LinearLayout布局,通过Spinner下拉菜单选择要查询的楼层数,查询数据的加载需要根据服务器提供的API接口,通过HTTP协议采用POST方式提交请求到服务器,并通过GET或者POST请求从服务器获得封装好的JSONArray对象,客户端接收解析显示到UI界面.
(3)电梯预约模块
该模块数据提交方式与查询模块相同,同样采用Spinner下拉菜单选择要查询的楼层数,通过HTTP协议的POST方式提交数据到服务器服务器解析数据并把数据命令通过服务器端HTTP协议连接电梯数据采集控制终端,点亮该楼层呼梯大厅内的呼梯按钮.
(4)黑名单模块
此模块用户管理使用客户端恶意呼梯的用户.电梯预约流程图如图3所示.
3.2 Web服务器设计
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 服务器接收请求数据示意图
3.3 数据库设计
在本系统中,数据库采用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接口并将响应结果集进行封装.
4 系统功能测试
4.1 用户登陆认证功能测试
软件打开后进入登陆界面图5(a)注册登录界面所示.客户端接收到用户名和密码登录后,根据用户输入的登录信息,在数据库的用户表(user)中搜寻与此信息相匹配的记录,验证其合法性.如果用户合法,则将请求网络获得主界面,否则返回初始界面并提示“用户名或密码错误”.
4.2 查询预约功能测试
用户登陆主界面后,可执行两种操作:查看功能和预约功能,如图5(d)、(e)所示.当用户输入指令后,服务器进行JSON数据解析,判断指令内容,若为查看功能,显示所选电梯的当前位置、运行方向,以及所选楼层轿厢内外的图像信息,如图5(c)所示;若为预约指令,服务器和数据采集控制终端通讯,将呼梯指令下达到电梯控制器,完成预约功能.部分功能实现效果图如图5所示.
经测试,该系统功能可靠,方便快捷,实时性和可靠性强,满足了系统设计需求,具有广泛的应用情景.
5 总结
本系统采用C/S架构,结合通讯技术、互联网技术、嵌入式技术等多种技术,在Android平台上实现了电梯的运行监视和预约功能,经过Android模拟机的调试实验,该系统能够实现手机客户端远程呼梯,并通过APP显示轿厢内外实时图片,指导用户错开时间乘梯,节约了用户候梯时间,提高了电梯利用率.
图5 部分功能实现效果图