车载信息终端在智能客流量系统中的应用研究

2019-09-10 07:22费惠张维忠
关键词:CAN总线

费惠 张维忠

摘要:为提高公交客流计数系统的实时性及准确性,本文分别对车载信息终端的控制器局域网络(controller area network,CAN)总线及RS485线协议进行研究。通过实时采集车载信息终端数据并解析,获取公交实时运行信息。将公交车上的CAN总线和RS485线的信号通过串口转换器变为RS232信号,并基于Linux和Windows两种操作系统设计了两套数据分析系统,用户可以根据公交客流计数系统的基本需求,实时获取公交车的相关信息。实地测试结果表明,该设计能够实时精确的获取车辆的各项信息,达到预期目标,说明本文所采用的数据分析算法,准确率高、效率高、魯棒性好,为公交客流计数系统提供了有效信息。该研究具有很好的实际应用价值。

关键词:车载信息终端; CAN总线; RS485; 客流计数

中图分类号: TP311.1; TN919.5文献标识码: A

文章编号: 10069798(2019)01000906; DOI: 10.13306/j.10069798.2019.01.002

目前,公交车车载信息终端[12]的通信方式主要分为RS485[34]和CAN总线[56]两种。车载信息终端同时具有远程定位、实时通信、车况信息采集、自动报站等多种功能,并且能够和公交车的其他设备相关联,方便管理者对公共交通的实时调度。因此,将这些实时信息应用到智能客流量统计系统,能够丰富系统的功能,提高系统的实用性[78]。公交车载信息终端通过通用分组无线服务技术(general packet radio service,GPRS)通信单元,将全球定位系统(global positioning system,GPS)模块获取的实时位置信息等发送到后台,实现公交的定位功能以及语音播报,促进城市公交的智能化发展[9]。目前,CAN总线在公交上的应用日趋成熟。其中,安连华等人[10]通过CAN总线实时获取公交油耗信息,防止偷油行为的同时,可以有效监测驾驶员行车规范;赵祥模等人[11]采用基于视频的客流统计方法,能够有效监测公交客流量,但客流数据没有与站点信息相结合。公交车的车站名称信息能够直接反映当前站点的客流量统计信息,减少智能客流量统计系统对车站信息获取的信息量。2018年初,青岛新进一批比亚迪纯电动公交车,其中有400多辆安装了智能客流量统计系统,因此加强对公交车的实时信息采集、分析及应用具有重要意义。基于此,本文主要对车载信息终端的CAN总线及RS485线协议进行研究,通过对车载信息终端数据进行采集与分析,并基于Linux和Windows两种操作系统,设计了两套数据分析系统,用户可以根据公交客流计数系统的基本需求,实时获取公交车的相关信息,提高了系统的准确性,减轻了系统的工作负担。该研究提高了公交等智能化水平,在公交客流统计方面具有广阔的应用前景。

1硬件设计与软件实现

1.1硬件设计

车载CAN总线采用RS232转CAN模块[12],RS485线采用RS232转RS485模块[13],其中每个模块分为有源和无源两种型号,用户可以根据情况进行选择。本文采用RS232转CAN模块,RS232转CAN总线电路原理图如图1所示。其中,主要包括RS232串行接口驱动器、CAN线控制器和驱动器。该模块具有数据透明转换功能,其中CAN总线波特率支持5 kBd/s~1 MBd/s,串口波特率支持1 200~460 800 Bd/s,适应范围广,而且支持CAN20A和CAN20B协议,支持标准帧和扩展模式。

RS232转RS485模块分为有源和无源两种,RS232转RS485电路原理图如图2所示,DB9端的2脚和3脚分别是接收端和发送端,经过TTL转232电路和TTL转485电路,该模块可将RS232信号转换为平衡差分的RS485信号,从而实现双向通信功能。其工作方式为异步半双工,波特率支持范围是9 600~115 200 Bd/s。

1.2软件实现

1.2.1CAN总线协议分析

车载信息终端与其他设备进行数据通信时,一般采用250 kBd/s的CAN波特率和57 600 Bd/s串口波特率。CAN接口协议分为ID域和数据域两部分,CAN接口协议构成图如图3所示。报文ID域是报文的唯一标识,其中SA源地址和DA目标地址表示该报文的发送方和接收方,FN报文帧序号代表当前报文在当前会话中的位置。CAN报文数据域构成图如图4所示。报文数据域由版本号、流水号、消息帧、校验值4部分组成,其中消息帧由消息帧类型、消息帧长度及数据帧集合组成。每个数据帧由数据帧类型、数据帧长度和数据元素组成。校验值是从版本号开始到校验值之前所有字节的异或值[1415]。

一部分CAN总线的数据帧类型如表1所示,CAN总线的消息帧类型如表2所示。一个完整的报文数据需要分包发送,每包发送8字节数据和4字节的ID域,直到所有数据发送完为止,最后一包数据如果不足8字节,则补0。

1.2.2RS485协议分析

设定RS485车载信息终端与外部设备通讯接口参数为串口波特率19 200 Bd/s,8位数据位,1位停止位,无奇偶检验位。RS485为了提高协议的兼容性,由数据帧灵活组合构成的消息帧可适应不同的需求,避免严格的固定长度消息帧造成冗余,从而减少资源浪费。RS485数据报文由开始符、目标地址、源地址、消息帧、校验值和结束符组成。

RS485接口协议构成图如图5所示,RS485的部分数据帧类型如表3所示,消息帧类型如表4所示。通过对车载信息终端数据的采集与分析,可获得公交车的实时位置信息、当前时速信息、到站离站信息及当前站点名称信息等。

1.2.3技术方案

该系统的主要功能是实现对车载信息系统的数据采集到解析输出的全过程。系统流程图如图6所示。

该部分的核心思想是通过串口通信,即串口编程实现CAN总线和RS485的数据接收,然后根据协议标准对接收到的数据解析处理,并根据消息帧的类型,提取客流统计系统所需要的站点相关的报文信息,去除冗余数据,同时根据报文的编码规则,作出相对应的解码方案,将十六进制数据翻译成常人能看懂的站点信息。算法实现流程图如图7所示。

具体实现方法及步骤:

(1)Linux系统。

1)调用open( )函数打开串口/dev/ttyS0,并设置串口的读写模式。

2)对termios结构指针进行相关配置,修改控制模式,设置波特率、数据位、校验位、停止位,修改输入输出模式,然后进行超时设置。

3)调用read()函数对串口进行读操作。

4)调用getCompleteFrame()函数对数据进行分析处理,获得当前公交车的站点信息、到站离站信息等。

5)write()函数可上传数据到车载信息终端。

6)调用函数close()关闭串口。

(2)Windows系统。

1)调用CreateFile()函数打开串口COM*。

2)调用SetCommState()函数配置串口基本参数,SetCommTimeouts()函数对串口进行超时设置,调用SetupComm()函数定义了输入输出缓冲区的大小。

3)调用ReadFile()函数对串口进行读操作。

4)调用getCompleteFrame()函数对数据进行分析处理,获取车辆实时信息。

5)调用WriteFile()函数可以将获得的数据实时上传到车载信息终端。

6)调用CloseHandle()函数关闭串口。

由于串口每次接收的数据长度不固定,而且每个完整的报文数据可能分多次发送[18]。因此,getCompleteFrame()函數首先需要将接收到的数据保存在队列内,然后从队列头开始对数据解析处理,发现报文结束标志后,根据报文数据的长度及校验值确定该报文数据是否完整。如果当前队列内没有完整数据帧时,则继续接收新的数据。每当解析出一个完整的报文数据,就清空当前队列内的所有数据,重新接收下一报文。此外,如果队列长度超出内存长度的066,抛弃队列的前066部分,既能防止有效信息丢失,还能避免内存溢出造成的系统崩溃。同时,采用多线程串口通信[1920],提高处理效率。

2实验结果

CAN总线在Linux下测试,RS485在Windows下测试。实验结果表明,该设计能够实时精确的获取车辆的各项信息,达到预期目标。CAN总线测试结果如图8所示,其中Complete Date表示当前接收到的报文数据域部分,所有数字为十六进制表示。以南庄二为例:20表示版本号,14表示流水号,该数字随机产生,03表示该消息帧代表进站离站信息,00 25表示消息帧总长度为十进制37,01表示具体的数据帧类型是什么,00 04表示该数据帧内容的长度为4字节,后面紧跟4字节的数据帧内容00 00 17 74,后面的05 00 01 01也是一组完整数据帧,以此类推,最后的49表示校验位,如果该值与前面所有的数字异或值相同,则表示该报文接收无误。根据消息帧类型、数据帧类型以及数据帧的内容部分,解析当前车辆线路是上行下行、当前站点是终点站还是其他站点、进站离站、站点编号及站点中文名。

RS485测试结果如图9所示。以团岛进站信号为例:7e代表会话包的开始,最后的7f代表会话包的结束,ff 01表示目标地址和源地址,03表示该会话包的消息帧类型为服务播报,07是随机产生的流水号,00 23表示后面所有的数据帧总长度,02 00 01 01表示数据帧类型为02,内容长度为00 01,内容为01的一个完整数据帧,以此类推,结束符前的2f表示校验位,该值应与从包头开始到校验位之前所有数字异或值相同。

当车辆进站时,发出到站信号,显示当前站点类型,获得当前站点编号及站点中文名;当车辆离站时,发出离站信号,显示当前站点类型,获得下一站的站点编号及站点中文名。这样可以将每站的客流量信息对应加在每个站点上,并且可以与电子站牌相结合,让公共交通更加智能化。

3结束语

本文主要对车载信息终端在智能客流量系统中的应用进行研究。分析了CAN总线和RS485协议标准,并对现场环境进行实验测试。测试结果表明,本文所设计的两套分析系统,能够精准的采集并解析车载信息终端的数据,结合公交客流计数系统的需求特点,实时获取公交车的线路类型、站点编号、站点名称、进站离站等信息;长时间的测试结果表明,本系统的鲁棒性高、算法稳定,为客流统计系统的发展提供了技术支持,大大提高公共交通的智能化水平,其应用前景广阔。此外,当信号环境极差时,GPS对公交车定位会出现偏差,间接影响车辆位置信息的精准度,后期应对该问题进行优化改进,提高系统的鲁棒性。

参考文献:

[1]吴建芳. 嵌入式车载信息终端的实现研究[D]. 哈尔滨: 哈尔滨工程大学, 2010.

[2]韩敏艳. 车辆监控系统研究与设计[D]. 哈尔滨: 哈尔滨工程大学, 2007.

[3]许燕萍, 杨代华. RS485串行总线可靠性的研究[J]. 电子科技, 2009, 22(2): 810, 22.

[4]冯子陵, 俞建新. RS485总线通信协议的设计与实现[J]. 计算机工程, 2012, 38(20): 215218.

[5]曹万科. CAN协议车载网络若干关键理论研究[D]. 沈阳: 东北大学, 2008.

[6]陈曦. CAN总线实时性和可靠性若干问题的研究[D]. 天津: 天津大学, 2010.

[7]侯竑炤. 基于Android的车载物联信息终端研究与设计[D]. 上海: 复旦大学, 2012.

[8]蔡晓利. 公交车人数统计系统设计与实现[D]. 成都: 电子科技大学, 2016.

[9]Jia Yanxia. Onvehicle information terminal of urban public transit dispatching[J]. China Standardization, 2013 (5): 8285.

[10]安連华, 管德永, 程鹏. CAN总线在智能公交系统中的应用[J]. 城市公共交通, 2016(1): 3639.

[11]赵祥模, 闵海根, 常志国, 等. 一种基于视频的公交客流自动统计方法[J]. 计算机工程, 2015, 41(6): 136142.

[12]赵志军, 王建英. RS232/CAN智能协议转换器及其通信网络[J]. 中国铁道科学, 2007, 28(3): 134139.

[13]陆熊, 周杏鹏. 基于ISA总线的RS232/RS485(RS422)通讯转换卡[J]. 工业控制计算机, 2003, 16(2): 1718.

[14]全国文献工作标准化技术委员会第七分委会. T/ITS 0026—2015 海信城市公共汽电车车载智能服务终端与调度中心间数据通信协议[S]. 北京: 中国标准出版社, 2015.

[15]全国文献工作标准化技术委员会第七分委会. T/ITS 0027—2015 海信城市公共汽电车车载智能服务终端数据总线接口通信规范[S]. 北京: 中国标准出版社, 2015.

[16]严贤, 韩秀玲. 基于Qt的串口通信应用研究与实现[J]. 微计算机信息, 2012, 28(8): 114116.

[17]李晓锋, 胡良君, 宋锐. 基于Qt5的MODBUS协议编程与实现[J]. 中小企业管理与科技, 2016(11): 138139.

[18]侯师, 李正新, 王琳. 一种定长单字节格式报文协议下串口接收预处理方法: 中国, H04L29/06[P]. 20170615.

[19]陈让琛. 多线程串口通信技术在北斗导航中的运用分析[J]. 无线互联科技, 2017(15): 89, 79.

[20]岳明, 何波贤, 余博超, 等. 基于VC++串口多线程通信的实现[J]. 电脑编程技巧与维护, 2016(10): 38, 65.

猜你喜欢
CAN总线
论网络通信技术
基于嵌入式的汽车辅助制动系统研究
CAN总线通信技术在电梯监控系统中的应用
基于CANoe的J1939协议在ECU通信中的应用
利用MC9S12(X)单片机构建CAN总线网络的研究
基于CAN总线的智能微喷灌监控系统中下位机的硬件电路组成与设计
基于CAN总线的变电站通讯网络设计
一种航空交换机中CAN总线的自动化测试方法