作者 / 黄赞1 莫长江2 黄梓华1 1.岭南师范学院 机电工程学院(广东 湛江 524048)2.岭南师范学院
信息工程学院(广东 湛江 524048)
*基金项目:广东省科技计划项目(NO.2017A010102022);岭南师范学院校级科研项目(NO.LY1806);2017年大学生立异创业练习计划项目
黄赞(1971-),男,广东湛江人,汉族,高档试验师/博士研讨生,研讨方向为精细丈量与计算机视觉。
摘要:本文针对完成网络化的车辆确诊与数据收集体系,提出了一种依据Android线性链表的车辆信息收集并网络存储的规划办法。计划以蓝牙OBDII(2nd
On Board
Diagnostics)硬件与Android程序为中心,经过高效的线性链表办法读取车辆行车数据,在Android上以外表盘等办法显现,一起运用Android移动信号上传到服务器,并树立网站完成查询、报表输出等功用。体系程序运用DELPHI开发,经过车辆实测,计划高效,性价比高,到达了车辆数据网络化的意图。
行车安满是车辆规划与行进的榜首要素,而运用OBDII接口取得车辆的各项运转参数,可为车辆必备的ECU(Electronic Control
Unit)的规划供给数据支撑,相同也可使得最终用户关于车辆的车况能有更全面的了解。车辆安装企业进行车辆测验时,需求很多的轿车数据,这种数据并不单纯是显现在外表中,或许是单机设备文件中,更需求把确诊终端在各台车辆设备的数据经过网络保存到服务器中,进行后期的查询、剖析作业。
一般市面上与文献上的OBDII设备并不能满意其多终端车辆数据收集的功用[1,2],如参考文献1与2,有的没有完成网络化数据收集的功用;有的尽管运用了GPRS模块完成收集,但并没有运用Android智能终端程序且只对毛病码与GPS方位进行了收集,没有本地毛病码铲除、行车外表数据显现等功用,硬件本钱较高,不能满意本地ECU制作企业的需求。因而依据企业实践要求,规划并开发了一种在Android智能终端上运用线性链表完成数据外表显现、本机车辆毛病码铲除、行车数据收集的网络体系计划。
1 体系全体规划
1.1 需求剖析
依据相关查询组织的数据计算[3],
Android在2017年度我国智能手机商场,“安卓持续同比添加,现在占有智能手机销量的87.2%”,意味着在我国十部智能手机中,简直有九部都搭载的是Android操作体系。本体系规划运用Android做为确诊终端介质,可到达较好的性价比与用户承受度。
车辆数据收集在底层依靠蓝牙OBDII与ECU的通讯,能够读取ECU把握车辆的各个参数,如进气压力、节气门相对方位、发动机转速、缸壁温度、焚烧提早角、速度、车辆毛病码等数值。而车辆数值需经过Android手机进行各数值的实时显现、网络会集上传到服务器供给查询与报表输出功用,一起Android
App能对车辆毛病码进行查询与铲除作业。
1.2 全体规划
经过需求剖析,可区分工程模块,完成车辆参数显现、毛病确诊、网络传输的多功用的车辆数据体系规划。
(1)规划蓝牙OBDII接口的电路,使得接口电路能读取车辆参数,并由蓝牙接口与Android软件进行交互。
(2)规划Android软件,并研讨OBDII协议,蓝牙接口,完成蓝牙通讯、网络通讯、数值显现、毛病确诊与铲除等功用。
(3)规划网络通讯服务器接纳程序,用于接纳智能终端的数据上传;规划服务器网站体系,用于查询终端上传的数据等等。
而在开发环境上,共同运用DELPHI言语开发(2)(3)的功用程序,可进步体系的兼容性与开发功率。根本的体系框图如图1所示。
2 硬件规划
硬件电路包括了两大部分:
(1)OBDII专用芯片。芯片选用ELM327芯片[4],经过它供给的各种接口(K
line、CAN等)与车辆ECU衔接,可获取车辆确诊信息,多用于毛病码读取、铲除、各参数读取等运用。
(2)蓝牙接口模块。蓝牙模块选用HC-08[5],本模块为串口蓝牙模块,运用它的TTL串口与ELM327芯片的串口穿插相连,可把OBDII的串口转成蓝牙串口,这样,就形成了与Android体系的蓝牙进行通讯的链路。
别的,包括了轿车电瓶12 V电源输出转5 V的电源部分电路与车辆的物理16针的确诊接口等,得到硬件电路图2。
3 软件规划
3.1 Android端软件结构
Android软件运用Embarcadero公司的DELPHI
Seattle[6]版别开发,依据面向对象PASCAL言语,杰出优势在于跨渠道的编译体系,可完成一次编码,屡次编译,即同一套代码可编译出在Windows、Android、IOS不同体系上运转的不同的方针程序,进步了作业功率。
运用商场占有率高的Android体系作为开发方针体系,归纳运用多窗体技能、SQLite数据库技能、内置蓝牙控件与GPS控件、TeeChart外表与图表显现[7]第三方控件,完成体系的设置、通讯、显现、本地记载、制作数据时刻-数值曲线图、数据上传与车辆信息获取等OBDII功用。
3.2 依据线性链表的蓝牙通讯模块
3.2.1 OBDII协议指令与毛病确诊
ELM327支撑OBDII通讯协议,并分红两大类,经过串口通讯,发送ASCII码,其间一类为AT指令,包括如“AT
BRT”等比方波特率的装备指令,假如不是以“AT”最初的,ELM327芯片则认为是对车辆的OBDII指令,一般有9个形式,如表1所示。
每个形式下面都或许有若干个子指令,则发送对应指令时,榜首个字节发送形式序号字节,第2、3个字节则发送该形式下的子指令字节,这些字节值称为PID(parameter
identification)。比方,发送:01 0C,表明显现引擎rpm转速,或许得到的回复是:41 0C 1A
F8。回复的一个字节为对应01+40=41,第二个是对应的PID值0C,而第三、四个1A、F8则是需求的rpm值,经过协议的公式转化,转速依据公式(1)得到:
(1)
详细每个PID的意义与回复协议,可参看SAE J1979或许ISO
15031-5规范。除了取得PID参数,依据表1,发送03指令,并解说回来,可得到车辆对应的毛病码。毛病码回来假如不为“P0000”,则表明存在车辆毛病,可依据回来的详细代码查表取得毛病信息,而Android
App取得详细代码后,可主动查表,显现中文毛病信息,比传统的毛病确诊仪更具优势。而发送04指令,可铲除车辆毛病码。依据以上两条指令,可完成车辆毛病确诊仪的功用。
3.2.2 Android蓝牙的完成
本体系的Android蓝牙[8]运用Delphi
Seattle内建System.Bluetooth.pas单元的蓝牙功用,包括了若干的蓝牙类:TBluetoothManager、TBluetoothDeviceList、TBluetoothAdapter、TBluetoothDevice、TBluetoothService、TBluetoothServiceList、TBluetoothSocket。而特别关于串口蓝牙而言,TBluetoothService指远端蓝牙设备服务,包括服务名和UUID两个参数,并别离规定为
'SerialPort Service'和'{00001101-0000-1000-8000-00805F9B34FB}'。
依据以上蓝牙类,调用对应的函数,详细完成进程为:取得蓝牙配对设备列表、选定一个已配对蓝牙进行配对操作、获取已配对设备服务列表、判别假如含有串口服务,则可为蓝牙读写线程树立socket衔接与初始化作业。
设置Fsocket为蓝牙socket全局变量,则Android写蓝牙函数为socket.sendData(ToSend),其间ToSend为发送字节数组类型system.sysutils.Tarray,要发送的数值可放入可变长度的字节型数组共同发送;Android读蓝牙函数为Fdata:=Fsocket.readData,Fdata为回来值,与ToSend数据类型共同,读取回来值后拜访该变长字节数组,依据OBDII指令通讯协议,可解说每个字节的意义,得到对应的参数值。该读蓝牙函数为堵塞型函数,有必要放入子线程履行。
3.2.3 头尾刺进式线性链表算法运用于蓝牙通讯
线性链表是指有链接存储结构的线性表,它用一组地址动态分配的单元寄存线性表中的数据元素,一般用结点描绘:结点(表明数据元素) =数据域(数据元素的映象)
+ 指针域(指示后继元素存储方位)。线性链表大约可分为单向线性链表、双向线性链表,循环线性链表[9]。
鉴于OBDII协议指令的发送规则,算法上选用双向线性链表,循环线性链表都不太适宜,因而选用头尾刺进式单向线性链表。
一般的单向线性链表都在头部读取元素,尾部刺进元素的FIFO(Fisrt In First
Out)处理算法,而体系选用头尾刺进式单向线性链表算法,把优先级高的指令元素立刻刺进头部,不然仍是依照原算法刺进链表尾部。在体系完成中,当用户界面并不急迫显现其指令回来成果时,顺次进行次序发送,运用链表尾刺进办法添加链表节点;反之,当其指令的履行作用需求立刻在软件界面表现,则运用链表头刺进办法添加链表节点,使得需求赶快履行的OBDII指令插队到榜首履行,例如用户界面切换到用户查询与消除毛病码时,需求立刻得到体系呼应,就要运用在链表头刺进节点指令的办法去防止用户长时刻的等候。实践证明,当呈现用户车辆毛病码查找与消除界面时,指令刺进连表头,可立刻得到呼应,快速完成车辆毛病码显现及铲除毛病码的动作。链表的刺进与读取(删去)如图4所示。
本单向线性链表数据域为myData,数据类型为字节数组,可存储OBDII指令字节,指针域为next,指向下一个元素存储方位。别的,依据面向对象的编程思想,把头尾刺进式单向线性链表的操作完成封装成了TsingleQueue类,类包括头尾指针界说、初始化链表办法、添加节点办法、删去节点办法与清空链表办法等。
其间,类办法中添加节点addQueue办法为完成头尾刺进式单向线性链表的中心办法,参照图4中在链表头刺进节点p与在链表尾刺进节点p的原理,详细完成如下:
function TsingleQueue.addQueue(ele:dataArr;headOrRear:boolean):boolean;
var
p:sQueue;
begin
new(p); //动态分配内存节点
p^.myData:=ele;//节点中的数据域赋值
if (headOrRear=true) or (head=rear) then
//假如是在链表尾部或许空链表刺进节点
begin
P^.next:=nil;
rear^.next:=p;
rear:=p;
end
else //假如是在链表头部刺进节点
begin
p^.next:=head^.next;
head^.next:=p;
end;
result:=true;
isEmpty:=false; //非空链表符号
end;
在主程序中,运用sq:=TsingleQueue.create生成链表,sq.initQueue办法初始化链表后,为了增强用户体会,数据处理不能放在用户界面主线程,防止程序呼应时刻过长,照成用户界面假死,需运用多线程[10]后台操作该线性链表类,并留意多线程的临界区操作,界说cs:TcriticalSection,防止呈现多线程调用时,造成因非线程安全引起的链表数据过错,线程中心代码如下:
while not Terminated do
begin
cs.Enter;//进入临界区
tmp:=sq.delQueue;
//读取并删去线性链表的首个OBDII指令
cs.Leave;//脱离临界区
setLength(toSend,5);//分配指令数组
for i:= Low(tosend) to High(tosend) do
toSend[i]:=tmp[i];//OBDII指令数组赋值
if toSend[0]<>0 then
begin
mainform.FSocket.SendData(ToSend);//运用蓝牙端口发送OBDII指令
receivedBT;//读蓝牙回来值并解说存储
end;
end;
3.3 服务器模块
为完成多终端数据网络收集功用的特别需求,需规划服务器数据库,体系选用了MSSQLSERVER联系型数据库,规划有车辆信息表、用户表、设置表与车辆数据表以及对应的数据库存储进程、触发器程序等。
而体系中间件DataSnap[11]中间件在服务器中完成接纳终端数据,并存入数据库的功用,选用的DataSnap中心依据JSON与HTTP
REST的跨渠道规范。程序首要运用了FIREDAC数据库组件进行对数据库的读写操控,WebModuleUnit完成HTTP接口,ServerMethodUnit完成数据库衔接、数据表读写与存储进程操控。
而服务器的另一个功用是网站发布。运用DELPHI+uniGUI的形式进行网站开发,编程规划网站读取用户手机终端上传到数据库的各项PID数据、经纬度数据等信息并显现在浏览器上,可完成查询数据、报表输出的功用。
4 工程实测与定论
Android手机为小米Note电信增强版,版别4.4.4KTU84P,MIUI5,车辆选用北京现代瑞纳VERNA做为实测车辆。硬件接入车辆的OBDII接口后,翻开本体系规划的Android软件,并运转服务器的DataSnap中间件服务器接纳参数,IIS网站服务器发布编写好的网站。
经测验,本体系能查询并消除车辆毛病码的功用,正常读取车辆的各项中心数据,并成功上传至服务器存储,经过网页拜访,可得到多终端各个车辆的数据,到达了预期的规划要求,并经过了企业的检验。终端读取车辆实时数据如图5所示。(1)为车辆怠速时的外表显现页面;(2)为车辆正常行进时的外表显现页面;(3)(4)为车辆正常行进时的部分PID数据。
而图6为浏览器中显现是服务器网站的页面之一:网络收集的部分车辆PID信息网络页面,该网站页面由uniGUI技能编程生成,可经过数据生成日期进行查询,亦可经过车辆识别码进行联合查询(车辆识别码由企业自主生成),而查询成果可生成打印报表输出,企业用户可运用报表数据,剖析ECU对车辆在各个状况时的操控作用,调整与匹配车辆的各项参数,完成了既定功用。
经过线性链表与多线程等关键技能在蓝牙通讯中的工程运用,一方面进步了通讯可靠性,另一方面,程序运转界面无阻滞死机,提升了用户体会,而运用了Android移动互联网、
OBDII协议的网络车辆数据收集体系具有性价比高、用户交互性强等特性,可直接运用于车辆的确诊、实时数据网络监测、GPS定位等项目需求。
参考文献:
[1]潘益斌,张海峰.依据OBD的轿车数据收集及捕获体系规划[J].杭州电子科技大学学报(自然科学版),2015:45-48.
[2]杨彬,周建武.依据OBDII和GPRS长途轿车毛病确诊体系规划和完成[J].计算机运用与软件,2012(09):209-212.
[3]Kantar:2017年我国智能手机商场Android比例高达87%[EB/OL].(2018-9-20) [2017-5-12]
http://tech.sina.com.cn/roll/2017-05-13/doc-ifyfecvz1148686.shtml
[4]Elm Electronics.ELM327 OBD to Rs232 Interpreter[EB/OL].(2016-05-13)
[2016-09-13]http://wenku.baidu.com/link?url=7QV1b8sAtvp90L82s94895SajqTE_5FYdohhlbmX0wUFxW9MetB5t27wfhyXu2YDA-6zqn983vr86p-u8nZK2ybTUii3Xm7TqB_xa_wF3I7
[5]汇承信息科技.HC-08蓝牙串口通讯模块用户手册V2.4 [EB/OL].(2016-07-26)
[2016-09-28]http://www.wavesen.com/mysys/db_picture/news3/2016726165447101.pdf
[6] 黄春香,杨奕.依据Delphi的PC机与AVR单片机的串行通讯[J].外表技能与传感器,2012(06):112-114.
[7] 蔡黎,代妮娜,邓明.依据OBD协议的Android渠道轿车虚拟外表规划[J].电子技能运用,2011,37(12):91-94.
[8] Thomas Soderholm.简化低功耗蓝牙医疗设备的规划[J].电子产品世界,2018,25(05):63-64+70.
[9]杨泽林,李先发. 依据双指针环形缓冲区的数据收集体系规划[J].外表技能与传感器,2016,11:67-69.
[10]许健,于鸿洋.一种Linux多线程运用下内存池的规划与完成[J].电子技能运用,2012,38(11):146-149.
[11]刘磊.依据Datasnap技能的信贷管理体系的规划与完成[J].科学技能与工程,2006,6(17):2766-2768.
本文来源于《电子产品世界》2018年第12期第39页,欢迎您写论文时引证,并注明出处。