基于TCP Socket和HTTP POST的现代有轨电车定位系统
2016-11-08陈荣超
陈荣超 杨 厅
(兰州交通大学光电技术与智能控制教育部重点实验室 甘肃 兰州 730070)
基于TCP Socket和HTTP POST的现代有轨电车定位系统
陈荣超杨厅
(兰州交通大学光电技术与智能控制教育部重点实验室甘肃 兰州 730070)
为实现实时获取现代有轨电车车辆的运行状态以及更稳定可靠的传输数据,设计一个基于TCP Socket和HTTP的POST请求的现代有轨电车定位系统。使用BDS/GPS双模定位模块获取车辆的坐标等数据,中心平台以基于TCP协议的Socket通信服务器端软件为主、HTTP的POST请求配合PHP页面为辅的方式接收数据,用MySQL数据库存储数据,在TCP服务器端软件和百度地图上显示列车的运行状态。该系统能够实时获取、存储并显示列车的运行数据,在TCP服务器端软件出故障时能自动切换到HTTP的POST请求方式发送数据。测试结果表明,该系统定位精度高,收发数据及运行稳定可靠,可作为现代有轨电车的一种可选择的定位方式。
BDS/GPSTCP SocketHTTP的POST请求百度地图
0 引 言
现代有轨电车具有载客量大、安全舒适、节能环保、快速便捷等优势[1],2012年至2020年我国工程总投资预计达3000亿元。现代有轨电车作为现代化交通工具应实时获取全线列车的位置,而目前中心平台多采用基于传输控制协议TCP的Socket通信服务器端软件接收数据(以下简称TCP服务器端软件)[2,3],一旦TCP服务器端软件出现故障,就无法获取列车位置。针对这一情况,本系统将超文本传输协议HTTP的POST请求作为发送数据的第二种方式,使用此方式时中心平台电脑无需开启软件,配合PHP网页就可以接收并储存数据。
本文将中国北斗卫星导航系统BDS/全球定位系统GPS、通用分组无线服务技术GPRS、百度地图、TCP socket、微软基础类库MFC、超文本预处理器PHP、MySQL、Apache服务器等多项技术相结合,使用主备方式接收数据,设计了一个更稳定可靠的现代有轨电车定位系统。
1 系统总体设计
本系统由定位终端和中心平台两大部分组成,如图1所示。
定位终端将获取的位置坐标等数据通过GPRS网络发送到中心平台服务器。中心平台对数据处理后存储到数据库,WEB显示界面借助强大的百度地图应用程序编程接口API,在百度地图上直观的显示列车运行状态,用户可以通过PC端、PAD端、手机端的浏览器随时进行查看。
图1 系统框图
2 定位终端设计
2.1定位终端的系统架构
定位终端主要由BDS/GPS模块、GPRS模块、MCU模块、USB转串口模块构成。
BDS/GPS模块采用高灵敏度的ATGM332D,它包含32个跟踪通道,可同时接收所有的GPS和BDS可见卫星,支持GPS和BDS的单系统定位和双系统联合定位,双系统联合定位时精度可达到2.5 m,用3.3 V单电源供电。
GPRS模块采用SIM900A,其内置TCPIP协议,可实现TCP/UDP数据传输[4],它的GPRS网络理论最大接入速率为上行42.8 kbps、下行85.6 kbps,用4 V单电源供电。
MCU模块采用STC15W4K32S4芯片,它是一种STC低功耗增强型8051单片机,速度是普通51单片机的7~12倍[5],片内数据存储器(RAM)为4 KB,有四个完全独立的高速异步串行通信端口,工作电压为5 V。
USB转串口模块采用CH340G芯片。定位终端用USB连接线外接5 V电源,再用稳压芯片将5 V电压转换为4 V和3.3 V给其他模块供电。
2.2功能
BDS/GPS模块用来获取列车的当前经度、纬度、时间、速度数据。ATGM332D上电后通过串口每秒输出一个NMEA-0183协议格式的定位数据包[6],由最小定位信息(GNRMC)、接收机速度和航向信息(GNVTG)、时间与日期信息(GNZDA)、软件、硬件、厂家等信息(GPTXT)、定位信息(GNGGA)、定位和时间信息(GNGLL)、GPS当前卫星信息(GPGSA)、北斗当前卫星信息(BDGSA)、GPS可见卫星信息(GPGSV)、北斗可见卫星信息(BDGSV)组成。其中的GNRMC包含了本系统要用到的所有信息,格式为:“数据类型,UTC时间,定位状态,纬度,纬度方向,经度,经度方向,对地速度,对地航向,日期,磁偏角,磁偏角方向,模式指示,校验和”,如:“GNRMC,033244.000,A,3606.3735,N,10343.5830,E,0.00,0.00,010415,,,A*79”。为减小数据传输量,本系统从GNRMC中提取出UTC时间、经度、纬度、速度处理后再进行传输。
MCU模块对获取的数据进行采集、处理、打包,GPRS模块将打包好的数据发送给服务器,USB转串口模块使定位终端可以用USB口下载程序及供电。
2.3工作流程
定位终端工作流程如图2所示,各模块初始化后,GPRS模块分别以TCP/IP协议方式、中国移动互联网CMNET作为发送数据方式和移动分组数据业务的接入方式,连接中心平台服务器IP的指定端口建立TCP连接,所有配置用AT指令完成,部分关键指令如下:
AT+MIPCALL=1,″CMNET″(创建无线连接)。
AT+MIPOPEN=3,″TCP″,″112.124.27.15″,8118,2000(打开一个Socket连接服务器IP的8118端口建立TCP连接)。
图2 定位终端工作流程图
BDS/GPS模块通过串口1每秒输出一个定位信息数据包,单片机通过中断接收处理,先检测GNRMC中的定位状态位,如果为A说明获取的是有效信息,提取出时间、经度、纬度、速度4条数据后打包处理。如果GPRS模块TCP连接成功,数据包通过串口2发送至GPRS模块,GPRS模块再通过基站将数据包传送到中心平台IP的指定端口。
2.4传输协议
为保证数据传输的完整性和准确性,定位终端和中心平台以发送-应答协议方式传输数据,定位终端每成功发送一个数据包,中心平台返回一个应答包,表示成功收到数据。发送的数据包格式为“头标识,数据编号,数据包字符长度,定位内容,校验码”,其中定位内容由设备ID、经纬度、速度、UTC时间组成,中间以“|”隔开。校验码的简单计算方式为经度小数部分减纬度小数部分。
3 中心平台设计
中心平台用Apache作服务器,MySQL数据库存储数据,有一固定的公网IP地址。接收数据采用主备方式,主要以MFC编写的TCP服务器端软件监听其IP的8118端口来接收,这种方式最为常用,收发数据操作简便,并且相对安全和稳定可靠。在TCP服务器端软件出现故障时,采用HTTP的POST请求方式,直接将数据发送给服务器端为HTTP开放的80端口下的storage.php页面,并由此PHP页面处理数据后存入数据库,将TCP服务器端软件出现故障时带来的损失降到最小。
显示界面也分为两部分,一部分以WEB网页形式呈现,调用百度地图API,用PHP、JavaScript等语言编写。而另一部分直接在TCP服务器端软件上显示,方便管理人员查看。
3.1TCP服务器端软件
TCP服务器端软件可以收发数据、向MySQL数据库存储数据、显示列车实时运行状态等。它由一个侦听Socket和多个用于应答的Socket组成,每个应答Socket与客户端建立一对一的数据流通道[7]。工作流程如图3所示,首先初始化Socket,创建并绑定端口,对端口进行监听,等待客户端GPRS模块的连接请求,如果收到GPRS模块的连接请求,则双方建立连接,就可以相互发送数据。
TCP服务器端软件收到数据后先查看数据包的头标识,如果符合要求就接收定位内容;然后统计实际收到数据的字符总长度,如果和数据包里的字符长度相同说明数据完整;查看数据编号,如果和上一个连续说明没有丢失数据;再计算效验码,如果正确说明数据准确。TCP服务器端软件成功收取一次数据就给GPRS模块发送一次“TCPOK”,表示数据成功收到,如果GPRS模块连续发送4次数据后都没有收到“TCPOK”,则说明TCP服务器端软件出现故障,定位终端自动切换到HTTP的POST请求方式发送数据,并给预设手机号码发送短信通知管理人员进行修复。
图3 TCP服务器端工作流程图
3.2HTTP的POST请求
HTTP以请求-应答协议方式工作,设计的目的是使客户端和服务器顺利进行通信[8]。HTTP 方法有多种,GET和POST最为常用, POST方法相比GET方法可传更大的数据量,而且安全性更高。
使用POST方法时,请求参数作为请求体的一部分向服务器发送请求,要求服务器接受附在后面的数据[9]。例如本系统中定位终端将“POST /storage.php HTTP/1.1 Host:112.124.27.15:80 Content-Type: application/x-www-form-urlencoded Content-Length: 63 point2=103.7262&point1=36.1062&riqi=0&time=11:29:05&carnumber=1 ”发给服务器IP地址的80端口。其中“POST /storage.php HTTP/1.1”意为请求的方式为POST方式,要请求的子路径为/storage.php,例如我使用的服务器IP地址和端口号为112.124.27.15:80,则此请求的完整路径是 112.124.27.15:80/storage.php,接下来说明HTTP协议的版本号为1.1;Host为客户端要访问的HTTP服务器的域名或者IP地址和端口号; ContentType用来指定响应的HTTP内容类型,使用POST请求发送表单数据的默认编码类型为“application/x-www-form-urlencoded”;Content-Length用于描述HTTP消息实体的传输长度;最后是要传递的参数,用&连接各个参数,需要注意的是Content-Length行和参数行必须间隔一行。提交成功服务器的返回值为“HTTP/1.1 200 OK”,提交失败则返回“HTTP/1.1 404 (NOT FOUND) ”。
参数传递给storage.php页面后,此PHP页面用_POST[′参数名′]获取相应的参数值,进行处理后再存储到MySQL数据库。
3.3原始坐标转百度地图坐标
百度地图功能丰富、交互性强、使用完全免费,本系统WEB显示页面调用百度地图的JavaScript API,将获取到的坐标等信息直观的显示在百度地图上。BDS/GPS模块获取的坐标是原始坐标,而百度地图使用的坐标是在由国测局制定的GCJ-02对地理位置进行首次加密的基础上,又进行了BD-09二次加密[10],所以使用时要将原始坐标转换为百度坐标。
本系统使用百度地图提供的坐标转换接口:http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=103.724350&y=36.104422 (其中x、y后的数据为原始坐标经、纬度) ,返回结果是json格式的{″error″:0,″x″:″MTAzLjczMzQxODE0NDI1″,″y″:″MzYuMTA5OTU3MDkyODk=″} (其中x、y后面的数据为经过base64加密的百度坐标) 。
使用TCP服务器端软件接收数据转换坐标时,MFC编程中创建一个类CWinApp的CInternetSession成员,调用OpenURL在Internet上打开此URL读取结果,提取出经过base64加密的百度坐标,此时的坐标可直接被百度地图读取,但为了查看更直观,编写base64解密程序解密此坐标。在使用HTTP的POST请求方法接收数据时,坐标转换在接收数据的storage.php页面进行,用file_get_contents() 函数获取该URL的json格式返回值,再用json_decode() 函数将此返回值转换为PHP变量,经过base64_decode()函数解码后就可以得到百度坐标。
3.4坐标间距离
本系统在实现报站、判断是否安全距离等功能时要计算两坐标点间的地表距离。一般情况下此距离和地球周长相比足够小,因此可将地球近似看作球体,并且两坐标间的弧度和地球表面地形的误差都可忽略不计。以0度经线为基准,任意两点的间距就可以根据此两点的经纬度算出,根据三角推导可以得到计算公式如下:
(1)
式中L为所求坐标1、2之间距离,p=180/π,a为坐标1纬度,c为坐标1经度,b为坐标2纬度,d为坐标2经度,R为地球近似半径6 366 000米。
4 系统可靠性
为提高定位终端的可靠性,采用冗余技术,两台定位终端同时工作,互为备用;对定位终端的工作流程建立一个功能逻辑流程表,包含所有可能会出现的正常、异常情况,根据结果执行相应动作,保证所有状况都在预料之中,都可以正确解决;出现故障时,程序按照逻辑关系,重新执行相关代码或重新热启动相关模块等操作。
为提高TCP服务器端软件可靠性,MFC编程过程中,将接收数据、显示数据、向数据库存数据等功能模块化,各模块相互独立,且划分用户权限,不同权限用户查看和操作的内容不同;每个窗口的功能专一,联系简单;关键位置设置出错提示点,出错时提示错误信息;连接MySQL数据库出现问题时,自动用Excel临时存储数据并提示。
5 系统测试
分别对整个系统的运行,中心平台收发数据情况,定位精度进行测试。
首先测试整个系统是否能正常工作。在空旷的位置放置好BDS/GPS模块的天线,电脑1用USB转UART线连接定位终端并运行串口调试助手,服务器端的电脑2运行TCP服务器端软件对8118端口进行监听。等待一段时间后,串口调试助手收到“TCPOK”,此时关闭TCP服务器端软件并等待20 s左右。串口调试助手收到“HTTP/1.1 200OK”,如图4所示,且预设的手机号收到短信提示TCP服务器端软件异常,MySQL数据库存储整个过程中成功发来的所有数据,说明整个系统能正常工作。在TCP服务器端软件出现故障的情况下可以自动切换到HTTP的POST请求方式发送数据。
图4 串口助手收到的数据
图5 TCP服务器端软件
接下来对中心平台收发数据情况进行测试。首先在校园里选取的一段路线上设置6个坐标点作为站台,测试人员1、2分别携带外接移动电源的定位终端1、2在此线路上骑自行车移动,同时测试人员3打开TCP服务器端软件观察数据接收情况,如图5所示。定位终端每分钟发送12次数据,中心平台绝大多数情况下能正确收到12次数据。点击TCP服务器端软件上的按钮可以控制定位终端相应的LED灯的亮灭,说明本系统收发数据能力强。
最后对定位终端的精度进行测试,测试人员3打开中心平台WEB界面的各个页面在地图上查看运行状态,列车1的运行轨迹如图6所示。随着定位终端的移动,网页中坐标点也在实时变动,对比我校实际地理信息误差在3m左右,定位精度较高。
图6 中心平台WEB界面
6 结 语
测试结果表明本系统的软硬件运行稳定,收发数据稳定可靠,定位精度高,可作为现代有轨电车的一种可选择的定位方式。数据传输采用TCP服务器端软件和HTTP的POST请求主备方式,使得数据传输更稳定可靠;显示界面以WEB网页为主,用户可以在各个平台的浏览器上查看而无需安装其他软件;BDS/GPS双模定位模块的使用使得定位精度更高。相信随着北斗卫星导航系统和4G技术的发展与普及,本系统能发挥出更佳的性能。
[1]AndreaMacdonald,SelbyCoxon.TowardsaMoreAccessibleTramSysteminMelbourne-challengesforinfrastructuredesign[C].AustralasianTransportResearchForum2011Proceedings28~30September2011:2-3.
[2] 沈阳.基于GPRS网络电动汽车远程监控系统设计的研究[D].上海:上海交通大学,2013.
[3] 朱振茂.无线网络实时监测系统上位机软件的设计与实现[D].大连:大连海事大学,2008.
[4] 张晶如,邵建华,于笃发.基于SIM900A的智能心电监护系统客户端[J].通信技术,2013,46(7):109-111,114.
[5] 丁向荣.单片微机原理与接口技术-基于STC15W4K32S4系列单片机[M].北京:电子工业出版社,2015.
[6] 邓婷.RFID/GPS/BDS技术在危险品运输监控中的应用[J].太赫兹科学与电子信息学报,2014,12(5):716-720.
[7] 吕鑫.VC++就业培训宝典之MFC视频教程[M].北京:机械工业出版社,2014:490.
[8] 祝瑞,车敏.基于HTTP协议的服务器程序分析[J].现代电子技术,2012,35(4):117-119,122.
[9] 陈雷,刘嘉勇.基于HTTP协议的POST数据分析与还原[J].通信技术,2011,44(4):132-134,169.
[10] 百度开发者中心.百度地图API开发指南[EB/OL].(2013-05-14).[2013-05-14].http://developer.baidu.com/map/jsdevelop-1.htm.
MODERN STREETCAR POSITIONING SYSTEM BASED ON TCP SOCKET AND HTTP POST
Chen RongchaoYang Ting
(KeyLaboratoryofOpto-electronicTechnologyandIntelligentControloftheMinistryofEducation,LanzhouJiaotongUniversity,Lanzhou730070,Gansu,China)
In order to timely get the running status of modern streetcars and to transmit data in a more stable and reliable way, we designed a positioning system for modern streetcars, it is based on transmission control protocol (TCP) socket and hypertext transfer protocol (HTTP) POST requests protocol. It uses dual-mode positioning module of BeiDou Navigation Satellite System (BDS)/Global Positioning System (GPS) to retrieve vehicles coordinates data, its centre platform receives data in the way of mainly using TCP protocol-based Socket communication server software but having HTTP POST request together with Hypertext Preprocessor (PHP) page as the supplement, its data is stored in MySQL database. The streetcars running status is displayed on Baidu map and TCP server software. Finally the system is capable of receiving, storing and displaying the operation data of streetcar in real time, and can automatically switch to HTTP Post request model to send data when the software at TCP server is down. Test result indicates that the system has high positioning precision, is stable and reliable in sending and receiving data as well as in operation, it is an optional positioning way for modern streetcar.
BDS/GPSTCP socketPOST requests of HTTPBaidu map
2015-07-06。甘肃省自然科学基金项目(145RJZA2 13)。陈荣超,硕士生,主研领域:通信与信息系统。杨厅,硕士生。
TP391
A
10.3969/j.issn.1000-386x.2016.10.002