基于Android的網(wǎng)絡(luò)車(chē)輛診斷與數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)
作者 / 黃贊1 莫長(zhǎng)江2 黃梓華1 1.嶺南師范學(xué)院 機(jī)電工程學(xué)院(廣東 湛江 524048)2.嶺南師范學(xué)院 信息工程學(xué)院(廣東 湛江 524048)
本文引用地址:http://cafeforensic.com/article/201811/395035.htm*基金項(xiàng)目:廣東省科技計(jì)劃項(xiàng)目(NO.2017A010102022);嶺南師范學(xué)院校級(jí)科研項(xiàng)目(NO.LY1806);2017年大學(xué)生創(chuàng)新創(chuàng)業(yè)訓(xùn)練計(jì)劃項(xiàng)目
黃贊(1971-),男,廣東湛江人,漢族,高級(jí)實(shí)驗(yàn)師/博士研究生,研究方向?yàn)榫軠y(cè)量與計(jì)算機(jī)視覺(jué)。
摘要:本文針對(duì)實(shí)現(xiàn)網(wǎng)絡(luò)化的車(chē)輛診斷與數(shù)據(jù)采集系統(tǒng),提出了一種基于Android線性鏈表的車(chē)輛信息采集并網(wǎng)絡(luò)存儲(chǔ)的設(shè)計(jì)方法。方案以藍(lán)牙OBDII(2nd On Board Diagnostics)硬件與Android程序?yàn)楹诵?,通過(guò)高效的線性鏈表方式讀取車(chē)輛行車(chē)數(shù)據(jù),在Android上以?xún)x表盤(pán)等方式顯示,同時(shí)使用Android移動(dòng)信號(hào)上傳到服務(wù)器,并搭建網(wǎng)站實(shí)現(xiàn)查詢(xún)、報(bào)表輸出等功能。系統(tǒng)程序使用DELPHI開(kāi)發(fā),通過(guò)車(chē)輛實(shí)測(cè),方案高效,性?xún)r(jià)比高,達(dá)到了車(chē)輛數(shù)據(jù)網(wǎng)絡(luò)化的目的。
行車(chē)安全是車(chē)輛設(shè)計(jì)與行駛的第一要素,而利用OBDII接口取得車(chē)輛的各項(xiàng)運(yùn)行參數(shù),可為車(chē)輛必備的ECU(Electronic Control Unit)的設(shè)計(jì)提供數(shù)據(jù)支撐,同樣也可使得最終用戶(hù)對(duì)于車(chē)輛的車(chē)況能有更全面的了解。車(chē)輛裝配企業(yè)進(jìn)行車(chē)輛測(cè)試時(shí),需要大量的汽車(chē)數(shù)據(jù),這種數(shù)據(jù)并不單純是顯示在儀表中,或者是單機(jī)設(shè)備文件中,更需要把診斷終端在各臺(tái)車(chē)輛設(shè)備的數(shù)據(jù)通過(guò)網(wǎng)絡(luò)保存到服務(wù)器中,進(jìn)行后期的查詢(xún)、分析工作。
普通市面上與文獻(xiàn)上的OBDII設(shè)備并不能滿(mǎn)足其多終端車(chē)輛數(shù)據(jù)采集的功能[1,2],如參考文獻(xiàn)1與2,有的沒(méi)有實(shí)現(xiàn)網(wǎng)絡(luò)化數(shù)據(jù)采集的功能;有的雖然使用了GPRS模塊實(shí)現(xiàn)采集,但并沒(méi)有使用Android智能終端程序且只對(duì)故障碼與GPS位置進(jìn)行了采集,沒(méi)有本地故障碼清除、行車(chē)儀表數(shù)據(jù)顯示等功能,硬件成本較高,不能滿(mǎn)足本地ECU制造企業(yè)的需求。因此根據(jù)企業(yè)實(shí)際要求,設(shè)計(jì)并開(kāi)發(fā)了一種在Android智能終端上使用線性鏈表實(shí)現(xiàn)數(shù)據(jù)儀表顯示、本機(jī)車(chē)輛故障碼清除、行車(chē)數(shù)據(jù)采集的網(wǎng)絡(luò)系統(tǒng)方案。
1 系統(tǒng)整體設(shè)計(jì)
1.1 需求分析
根據(jù)相關(guān)調(diào)查機(jī)構(gòu)的數(shù)據(jù)統(tǒng)計(jì)[3], Android在2017年度中國(guó)智能手機(jī)市場(chǎng),“安卓繼續(xù)同比增長(zhǎng),如今占據(jù)智能手機(jī)銷(xiāo)量的87.2%”,意味著在中國(guó)十部智能手機(jī)中,幾乎有九部都搭載的是Android操作系統(tǒng)。本系統(tǒng)設(shè)計(jì)使用Android做為診斷終端介質(zhì),可達(dá)到較好的性?xún)r(jià)比與用戶(hù)接受度。
車(chē)輛數(shù)據(jù)采集在底層依賴(lài)藍(lán)牙OBDII與ECU的通訊,可以讀取ECU掌握車(chē)輛的各個(gè)參數(shù),如進(jìn)氣壓力、節(jié)氣門(mén)相對(duì)位置、發(fā)動(dòng)機(jī)轉(zhuǎn)速、缸壁溫度、點(diǎn)火提前角、速度、車(chē)輛故障碼等數(shù)值。而車(chē)輛數(shù)值需通過(guò)Android手機(jī)進(jìn)行各數(shù)值的實(shí)時(shí)顯示、網(wǎng)絡(luò)集中上傳到服務(wù)器提供查詢(xún)與報(bào)表輸出功能,同時(shí)Android App能對(duì)車(chē)輛故障碼進(jìn)行查詢(xún)與清除工作。
1.2 整體設(shè)計(jì)
通過(guò)需求分析,可劃分工程模塊,實(shí)現(xiàn)車(chē)輛參數(shù)顯示、故障診斷、網(wǎng)絡(luò)傳輸?shù)亩喙δ艿能?chē)輛數(shù)據(jù)系統(tǒng)設(shè)計(jì)。
(1)設(shè)計(jì)藍(lán)牙OBDII接口的電路,使得接口電路能讀取車(chē)輛參數(shù),并由藍(lán)牙接口與Android軟件進(jìn)行交互。
(2)設(shè)計(jì)Android軟件,并研究OBDII協(xié)議,藍(lán)牙接口,實(shí)現(xiàn)藍(lán)牙通訊、網(wǎng)絡(luò)通訊、數(shù)值顯示、故障診斷與清除等功能。
(3)設(shè)計(jì)網(wǎng)絡(luò)通訊服務(wù)器接收程序,用于接收智能終端的數(shù)據(jù)上傳;設(shè)計(jì)服務(wù)器網(wǎng)站系統(tǒng),用于查詢(xún)終端上傳的數(shù)據(jù)等等。
而在開(kāi)發(fā)環(huán)境上,統(tǒng)一使用DELPHI語(yǔ)言開(kāi)發(fā)(2)(3)的功能程序,可提高系統(tǒng)的兼容性與開(kāi)發(fā)效率?;镜南到y(tǒng)框圖如圖1所示。
2 硬件設(shè)計(jì)
硬件電路包含了兩大部分:
(1)OBDII專(zhuān)用芯片。芯片采用ELM327芯片[4],通過(guò)它提供的各種接口(K line、CAN等)與車(chē)輛ECU連接,可獲取車(chē)輛診斷信息,多用于故障碼讀取、清除、各參數(shù)讀取等應(yīng)用。
(2)藍(lán)牙接口模塊。藍(lán)牙模塊采用HC-08[5],本模塊為串口藍(lán)牙模塊,使用它的TTL串口與ELM327芯片的串口交叉相連,可把OBDII的串口轉(zhuǎn)成藍(lán)牙串口,這樣,就形成了與Android系統(tǒng)的藍(lán)牙進(jìn)行通訊的鏈路。
另外,包括了汽車(chē)電瓶12 V電源輸出轉(zhuǎn)5 V的電源部分電路與車(chē)輛的物理16針的診斷接口等,得到硬件電路圖2。
3 軟件設(shè)計(jì)
3.1 Android端軟件框架
Android軟件使用Embarcadero公司的DELPHI Seattle[6]版本開(kāi)發(fā),基于面向?qū)ο驪ASCAL語(yǔ)言,突出優(yōu)勢(shì)在于跨平臺(tái)的編譯系統(tǒng),可實(shí)現(xiàn)一次編碼,多次編譯,即同一套代碼可編譯出在Windows、Android、IOS不同系統(tǒng)上運(yùn)行的不同的目標(biāo)程序,提高了工作效率。
利用市場(chǎng)占有率高的Android系統(tǒng)作為開(kāi)發(fā)目標(biāo)系統(tǒng),綜合使用多窗體技術(shù)、SQLite數(shù)據(jù)庫(kù)技術(shù)、內(nèi)置藍(lán)牙控件與GPS控件、TeeChart儀表與圖表顯示[7]第三方控件,實(shí)現(xiàn)系統(tǒng)的設(shè)置、通信、顯示、本地記錄、繪制數(shù)據(jù)時(shí)間-數(shù)值曲線圖、數(shù)據(jù)上傳與車(chē)輛信息獲取等OBDII功能。
3.2 基于線性鏈表的藍(lán)牙通訊模塊
3.2.1 OBDII協(xié)議命令與故障診斷
ELM327支持OBDII通訊協(xié)議,并分成兩大類(lèi),通過(guò)串口通訊,發(fā)送ASCII碼,其中一類(lèi)為AT命令,包含如“AT BRT”等諸如波特率的配置命令,如果不是以“AT”開(kāi)頭的,ELM327芯片則認(rèn)為是對(duì)車(chē)輛的OBDII命令,通常有9個(gè)模式,如表1所示。
每個(gè)模式下面都可能有若干個(gè)子命令,則發(fā)送對(duì)應(yīng)命令時(shí),第一個(gè)字節(jié)發(fā)送模式序號(hào)字節(jié),第2、3個(gè)字節(jié)則發(fā)送該模式下的子命令字節(jié),這些字節(jié)值稱(chēng)為PID(parameter identification)。比如,發(fā)送:01 0C,表示顯示引擎rpm轉(zhuǎn)速,可能得到的回復(fù)是:41 0C 1A F8?;貜?fù)的一個(gè)字節(jié)為對(duì)應(yīng)01+40=41,第二個(gè)是對(duì)應(yīng)的PID值0C,而第三、四個(gè)1A、F8則是需要的rpm值,通過(guò)協(xié)議的公式轉(zhuǎn)化,轉(zhuǎn)速根據(jù)公式(1)得到:
(1)
具體每個(gè)PID的含義與回復(fù)協(xié)議,可參看SAE J1979或者ISO 15031-5標(biāo)準(zhǔn)。除了獲得PID參數(shù),根據(jù)表1,發(fā)送03命令,并解釋返回,可得到車(chē)輛對(duì)應(yīng)的故障碼。故障碼返回如果不為“P0000”,則表示存在車(chē)輛故障,可根據(jù)返回的具體代碼查表獲得故障信息,而Android App獲得具體代碼后,可自動(dòng)查表,顯示中文故障信息,比傳統(tǒng)的故障診斷儀更具優(yōu)勢(shì)。而發(fā)送04命令,可清除車(chē)輛故障碼?;谝陨蟽蓷l命令,可實(shí)現(xiàn)車(chē)輛故障診斷儀的功能。
3.2.2 Android藍(lán)牙的實(shí)現(xiàn)
本系統(tǒng)的Android藍(lán)牙[8]利用Delphi Seattle內(nèi)建System.Bluetooth.pas單元的藍(lán)牙功能,包含了若干的藍(lán)牙類(lèi):TBluetoothManager、TBluetoothDeviceList、TBluetoothAdapter、TBluetoothDevice、TBluetoothService、TBluetoothServiceList、TBluetoothSocket。而特別對(duì)于串口藍(lán)牙而言,TBluetoothService指遠(yuǎn)端藍(lán)牙設(shè)備服務(wù),包括服務(wù)名和UUID兩個(gè)參數(shù),并分別規(guī)定為 'SerialPort Service'和'{00001101-0000-1000-8000-00805F9B34FB}'。
根據(jù)以上藍(lán)牙類(lèi),調(diào)用對(duì)應(yīng)的函數(shù),具體實(shí)現(xiàn)步驟為:獲得藍(lán)牙配對(duì)設(shè)備列表、選定一個(gè)已配對(duì)藍(lán)牙進(jìn)行配對(duì)操作、獲取已配對(duì)設(shè)備服務(wù)列表、判斷如果含有串口服務(wù),則可為藍(lán)牙讀寫(xiě)線程建立socket連接與初始化工作。
設(shè)置Fsocket為藍(lán)牙socket全局變量,則Android寫(xiě)藍(lán)牙函數(shù)為socket.sendData(ToSend),其中ToSend為發(fā)送字節(jié)數(shù)組類(lèi)型system.sysutils.Tarray,要發(fā)送的數(shù)值可放入可變長(zhǎng)度的字節(jié)型數(shù)組統(tǒng)一發(fā)送;Android讀藍(lán)牙函數(shù)為Fdata:=Fsocket.readData,F(xiàn)data為返回值,與ToSend數(shù)據(jù)類(lèi)型一致,讀取返回值后訪問(wèn)該變長(zhǎng)字節(jié)數(shù)組,根據(jù)OBDII命令通信協(xié)議,可解釋每個(gè)字節(jié)的含義,得到對(duì)應(yīng)的參數(shù)值。該讀藍(lán)牙函數(shù)為阻塞型函數(shù),必須放入子線程執(zhí)行。
3.2.3 頭尾插入式線性鏈表算法應(yīng)用于藍(lán)牙通訊
線性鏈表是指有鏈接存儲(chǔ)結(jié)構(gòu)的線性表,它用一組地址動(dòng)態(tài)分配的單元存放線性表中的數(shù)據(jù)元素,一般用結(jié)點(diǎn)描述:結(jié)點(diǎn)(表示數(shù)據(jù)元素) =數(shù)據(jù)域(數(shù)據(jù)元素的映象) + 指針域(指示后繼元素存儲(chǔ)位置)。線性鏈表大概可分為單向線性鏈表、雙向線性鏈表,循環(huán)線性鏈表[9]。
鑒于OBDII協(xié)議命令的發(fā)送規(guī)律,算法上采用雙向線性鏈表,循環(huán)線性鏈表都不太合適,因此采用頭尾插入式單向線性鏈表。
一般的單向線性鏈表都在頭部讀取元素,尾部插入元素的FIFO(Fisrt In First Out)處理算法,而系統(tǒng)采用頭尾插入式單向線性鏈表算法,把優(yōu)先級(jí)高的命令元素立刻插入頭部,否則還是按照原算法插入鏈表尾部。在系統(tǒng)實(shí)現(xiàn)中,當(dāng)用戶(hù)界面并不急切顯示其命令返回結(jié)果時(shí),依次進(jìn)行順序發(fā)送,使用鏈表尾插入方式增加鏈表節(jié)點(diǎn);反之,當(dāng)其命令的執(zhí)行效果需要馬上在軟件界面體現(xiàn),則使用鏈表頭插入方式增加鏈表節(jié)點(diǎn),使得需要盡快執(zhí)行的OBDII命令插隊(duì)到第一執(zhí)行,例如用戶(hù)界面切換到用戶(hù)查詢(xún)與消除故障碼時(shí),需要馬上得到系統(tǒng)響應(yīng),就要使用在鏈表頭插入節(jié)點(diǎn)命令的方法去避免用戶(hù)長(zhǎng)時(shí)間的等待。實(shí)踐證明,當(dāng)出現(xiàn)用戶(hù)車(chē)輛故障碼查找與消除界面時(shí),命令插入連表頭,可馬上得到響應(yīng),快速實(shí)現(xiàn)車(chē)輛故障碼顯示及清除故障碼的動(dòng)作。鏈表的插入與讀取(刪除)如圖4所示。
本單向線性鏈表數(shù)據(jù)域?yàn)閙yData,數(shù)據(jù)類(lèi)型為字節(jié)數(shù)組,可存儲(chǔ)OBDII命令字節(jié),指針域?yàn)閚ext,指向下一個(gè)元素存儲(chǔ)位置。另外,基于面向?qū)ο蟮木幊趟季S,把頭尾插入式單向線性鏈表的操作實(shí)現(xiàn)封裝成了TsingleQueue類(lèi),類(lèi)包含頭尾指針定義、初始化鏈表方法、增加節(jié)點(diǎn)方法、刪除節(jié)點(diǎn)方法與清空鏈表方法等。
其中,類(lèi)方法中增加節(jié)點(diǎn)addQueue方法為實(shí)現(xiàn)頭尾插入式單向線性鏈表的核心方法,參照?qǐng)D4中在鏈表頭插入節(jié)點(diǎn)p與在鏈表尾插入節(jié)點(diǎn)p的原理,具體實(shí)現(xiàn)如下:
function TsingleQueue.addQueue(ele:dataArr;headOrRear:boolean):boolean;
var
p:sQueue;
begin
new(p); //動(dòng)態(tài)分配內(nèi)存節(jié)點(diǎn)
p^.myData:=ele;//節(jié)點(diǎn)中的數(shù)據(jù)域賦值
if (headOrRear=true) or (head=rear) then
//如果是在鏈表尾部或者空鏈表插入節(jié)點(diǎn)
begin
P^.next:=nil;
rear^.next:=p;
rear:=p;
end
else //如果是在鏈表頭部插入節(jié)點(diǎn)
begin
p^.next:=head^.next;
head^.next:=p;
end;
result:=true;
isEmpty:=false; //非空鏈表標(biāo)記
end;
在主程序中,使用sq:=TsingleQueue.create生成鏈表,sq.initQueue方法初始化鏈表后,為了增強(qiáng)用戶(hù)體驗(yàn),數(shù)據(jù)處理不能放在用戶(hù)界面主線程,以免程序響應(yīng)時(shí)間過(guò)長(zhǎng),照成用戶(hù)界面假死,需使用多線程[10]后臺(tái)操作該線性鏈表類(lèi),并注意多線程的臨界區(qū)操作,定義cs:TcriticalSection,避免出現(xiàn)多線程調(diào)用時(shí),造成因非線程安全引起的鏈表數(shù)據(jù)錯(cuò)誤,線程核心代碼如下:
while not Terminated do
begin
cs.Enter;//進(jìn)入臨界區(qū)
tmp:=sq.delQueue;
//讀取并刪除線性鏈表的首個(gè)OBDII命令
cs.Leave;//離開(kāi)臨界區(qū)
setLength(toSend,5);//分配命令數(shù)組
for i:= Low(tosend) to High(tosend) do
toSend[i]:=tmp[i];//OBDII命令數(shù)組賦值
if toSend[0]<>0 then
begin
mainform.FSocket.SendData(ToSend);//使用藍(lán)牙端口發(fā)送OBDII命令
receivedBT;//讀藍(lán)牙返回值并解釋存儲(chǔ)
end;
end;
3.3 服務(wù)器模塊
為實(shí)現(xiàn)多終端數(shù)據(jù)網(wǎng)絡(luò)采集功能的特殊需求,需設(shè)計(jì)服務(wù)器數(shù)據(jù)庫(kù),系統(tǒng)采用了MSSQLSERVER關(guān)系型數(shù)據(jù)庫(kù),設(shè)計(jì)有車(chē)輛信息表、用戶(hù)表、設(shè)置表與車(chē)輛數(shù)據(jù)表以及對(duì)應(yīng)的數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程、觸發(fā)器程序等。
而系統(tǒng)中間件DataSnap[11]中間件在服務(wù)器中實(shí)現(xiàn)接收終端數(shù)據(jù),并存入數(shù)據(jù)庫(kù)的功能,采用的DataSnap核心基于JSON與HTTP REST的跨平臺(tái)標(biāo)準(zhǔn)。程序主要使用了FIREDAC數(shù)據(jù)庫(kù)組件進(jìn)行對(duì)數(shù)據(jù)庫(kù)的讀寫(xiě)控制,WebModuleUnit實(shí)現(xiàn)HTTP接口,ServerMethodUnit實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接、數(shù)據(jù)表讀寫(xiě)與存儲(chǔ)過(guò)程控制。
而服務(wù)器的另一個(gè)功能是網(wǎng)站發(fā)布。使用DELPHI+uniGUI的模式進(jìn)行網(wǎng)站開(kāi)發(fā),編程設(shè)計(jì)網(wǎng)站讀取用戶(hù)手機(jī)終端上傳到數(shù)據(jù)庫(kù)的各項(xiàng)PID數(shù)據(jù)、經(jīng)緯度數(shù)據(jù)等信息并顯示在瀏覽器上,可實(shí)現(xiàn)查詢(xún)數(shù)據(jù)、報(bào)表輸出的功能。
4 工程實(shí)測(cè)與結(jié)論
Android手機(jī)為小米Note電信增強(qiáng)版,版本4.4.4KTU84P,MIUI5,車(chē)輛選用北京現(xiàn)代瑞納VERNA做為實(shí)測(cè)車(chē)輛。硬件接入車(chē)輛的OBDII接口后,打開(kāi)本系統(tǒng)設(shè)計(jì)的Android軟件,并運(yùn)行服務(wù)器的DataSnap中間件服務(wù)器接收參數(shù),IIS網(wǎng)站服務(wù)器發(fā)布編寫(xiě)好的網(wǎng)站。
經(jīng)測(cè)試,本系統(tǒng)能查詢(xún)并消除車(chē)輛故障碼的功能,正常讀取車(chē)輛的各項(xiàng)核心數(shù)據(jù),并成功上傳至服務(wù)器存儲(chǔ),通過(guò)網(wǎng)頁(yè)訪問(wèn),可得到多終端各個(gè)車(chē)輛的數(shù)據(jù),達(dá)到了預(yù)期的設(shè)計(jì)要求,并通過(guò)了企業(yè)的驗(yàn)收。終端讀取車(chē)輛實(shí)時(shí)數(shù)據(jù)如圖5所示。(1)為車(chē)輛怠速時(shí)的儀表顯示頁(yè)面;(2)為車(chē)輛正常行駛時(shí)的儀表顯示頁(yè)面;(3)(4)為車(chē)輛正常行駛時(shí)的部分PID數(shù)據(jù)。
而圖6為瀏覽器中顯示是服務(wù)器網(wǎng)站的頁(yè)面之一:網(wǎng)絡(luò)采集的部分車(chē)輛PID信息網(wǎng)絡(luò)頁(yè)面,該網(wǎng)站頁(yè)面由uniGUI技術(shù)編程生成,可通過(guò)數(shù)據(jù)生成日期進(jìn)行查詢(xún),亦可通過(guò)車(chē)輛識(shí)別碼進(jìn)行聯(lián)合查詢(xún)(車(chē)輛識(shí)別碼由企業(yè)自主生成),而查詢(xún)結(jié)果可生成打印報(bào)表輸出,企業(yè)用戶(hù)可利用報(bào)表數(shù)據(jù),分析ECU對(duì)車(chē)輛在各個(gè)狀態(tài)時(shí)的控制效果,調(diào)整與匹配車(chē)輛的各項(xiàng)參數(shù),實(shí)現(xiàn)了既定功能。
通過(guò)線性鏈表與多線程等關(guān)鍵技術(shù)在藍(lán)牙通訊中的工程應(yīng)用,一方面提高了通訊可靠性,另一方面,程序運(yùn)行界面無(wú)停滯死機(jī),提升了用戶(hù)體驗(yàn),而利用了Android移動(dòng)互聯(lián)網(wǎng)、 OBDII協(xié)議的網(wǎng)絡(luò)車(chē)輛數(shù)據(jù)采集系統(tǒng)具有性?xún)r(jià)比高、用戶(hù)交互性強(qiáng)等特性,可直接應(yīng)用于車(chē)輛的診斷、實(shí)時(shí)數(shù)據(jù)網(wǎng)絡(luò)監(jiān)測(cè)、GPS定位等項(xiàng)目需求。
參考文獻(xiàn):
[1]潘益斌,張海峰.基于OBD的汽車(chē)數(shù)據(jù)采集及捕獲系統(tǒng)設(shè)計(jì)[J].杭州電子科技大學(xué)學(xué)報(bào)(自然科學(xué)版),2015:45-48.
[2]楊彬,周建武.基于OBDII和GPRS遠(yuǎn)程汽車(chē)故障診斷系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2012(09):209-212.
[3]Kantar:2017年中國(guó)智能手機(jī)市場(chǎng)Android份額高達(dá)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藍(lán)牙串口通信模塊用戶(hù)手冊(cè)V2.4 [EB/OL].(2016-07-26) [2016-09-28]http://www.wavesen.com/mysys/db_picture/news3/2016726165447101.pdf
[6] 黃春香,楊奕.基于Delphi的PC機(jī)與AVR單片機(jī)的串行通訊[J].儀表技術(shù)與傳感器,2012(06):112-114.
[7] 蔡黎,代妮娜,鄧明.基于OBD協(xié)議的Android平臺(tái)汽車(chē)虛擬儀表設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2011,37(12):91-94.
[8] Thomas Soderholm.簡(jiǎn)化低功耗藍(lán)牙醫(yī)療設(shè)備的設(shè)計(jì)[J].電子產(chǎn)品世界,2018,25(05):63-64+70.
[9]楊澤林,李先發(fā). 基于雙指針環(huán)形緩沖區(qū)的數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)[J].儀表技術(shù)與傳感器,2016,11:67-69.
[10]許健,于鴻洋.一種Linux多線程應(yīng)用下內(nèi)存池的設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2012,38(11):146-149.
[11]劉磊.基于Datasnap技術(shù)的信貸管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].科學(xué)技術(shù)與工程,2006,6(17):2766-2768.
本文來(lái)源于《電子產(chǎn)品世界》2018年第12期第39頁(yè),歡迎您寫(xiě)論文時(shí)引用,并注明出處。
評(píng)論