新聞中心

EEPW首頁(yè) > 汽車電子 > 設(shè)計(jì)應(yīng)用 > 汽車OBD2診斷程序開發(fā)

汽車OBD2診斷程序開發(fā)

作者: 時(shí)間:2011-06-30 來(lái)源:網(wǎng)絡(luò) 收藏
TL718的OBD命令

如果你向TL718發(fā)送的指令以16進(jìn)制數(shù)的ASCII開頭,則TL718認(rèn)為是OBD命令,TL718接收后,把成對(duì)的ASCII碼16進(jìn)制數(shù)轉(zhuǎn)換成單個(gè)字節(jié)的16進(jìn)制數(shù)據(jù)發(fā)送到車輛電腦數(shù)據(jù)總線。OBD命令實(shí)際是被嵌入到數(shù)據(jù)消息包內(nèi)后發(fā)送到數(shù)據(jù)總線上的,大多數(shù)標(biāo)準(zhǔn)要求:在每個(gè)數(shù)據(jù)消息包內(nèi)包含三字節(jié)的頭及最后一個(gè)數(shù)據(jù)校驗(yàn)字節(jié)。TL718自動(dòng)添加了這些附加的字節(jié),這些默認(rèn)的值對(duì)診斷模式請(qǐng)求指令都不需要更改,但如果你想要更改這些頭字節(jié)值,可以用內(nèi)部命令“ATSH XXXXXX”更改。

大部分OBD指令長(zhǎng)度只有一個(gè)字節(jié)或2個(gè)字節(jié),TL718充許發(fā)送的最長(zhǎng)度是對(duì)應(yīng)標(biāo)準(zhǔn)規(guī)定的字節(jié),超出部分將被丟棄。發(fā)出的OBD指令,不能出現(xiàn)單個(gè)的數(shù)字,16進(jìn)制數(shù)必須成對(duì)發(fā)送,比喻0不可能發(fā)送單個(gè)的“0”,必須發(fā)送“00”,如果出現(xiàn)單個(gè)數(shù)字,TL718認(rèn)為指令格式錯(cuò)誤,將返回一個(gè)“?”。由于OBD(診斷標(biāo)準(zhǔn))都使用16進(jìn)制,所以TL718接收發(fā)送的數(shù)據(jù)也是16進(jìn)制的。例15的代表的十進(jìn)制值是21;

當(dāng)發(fā)送完命令后,TL718等待從總線接收OBD消息,如果接收到地址的消息并且地址匹配,則TL718就把數(shù)據(jù)從RS232發(fā)送給PC,如果TL718接收到的消息和發(fā)送的地址不匹配,則忽略該消息。但也可以通過(guò)ATBD內(nèi)部命令查看該接收到的消息包。如果直到等待時(shí)間(P2MAX ATST命令的設(shè)置值,默認(rèn)值100ms)結(jié)束,沒(méi)有接收到匹配地址的數(shù)據(jù),則TL718返回“NO DATA”,如果接收到數(shù)據(jù)并且地址匹配則復(fù)位計(jì)時(shí)間,繼續(xù)等待,直到等待時(shí)間溢出。


標(biāo)準(zhǔn)診斷模式

本文引用地址:http://butianyuan.cn/article/197379.htm



開發(fā)OBD2,必須掌握ISO 15031-5(SAE J1979)定義的九種診斷模式,對(duì)于英文不是很好的朋友,本站有個(gè)中文的說(shuō)明:
可以參考:


OBD系統(tǒng)輸出信息的模式/服務(wù)
  • Mode 1: 請(qǐng)求動(dòng)力系當(dāng)前數(shù)據(jù)
  • Mode 2: 請(qǐng)求凍結(jié)禎數(shù)據(jù)
  • Mode 3: 請(qǐng)求排放相關(guān)的動(dòng)力系診斷故障碼
  • Mode 4: 清除/復(fù)位排放相關(guān)的診斷信息
  • Mode 5: 請(qǐng)求氧傳感器監(jiān)測(cè)測(cè)試結(jié)果
  • Mode 6: 請(qǐng)求非連續(xù)監(jiān)測(cè)系統(tǒng)OBD測(cè)試結(jié)果
  • Mode 7: 請(qǐng)求連續(xù)監(jiān)測(cè)系統(tǒng)OBD測(cè)試結(jié)果
  • Mode 8: 請(qǐng)求控制車載系統(tǒng),測(cè)試或者部件
  • Mode 9: 讀車輛和標(biāo)定識(shí)別號(hào)
每個(gè)模式后面緊跟一個(gè)參數(shù)標(biāo)識(shí)(PID)表示后面是什么參數(shù),每個(gè)模式的PID 00 是ISO15031定義專用的參數(shù),每個(gè)符合標(biāo)準(zhǔn)的電腦必須支持這個(gè)參數(shù)標(biāo)識(shí)。代表該模式對(duì)其他PID是否支持。


與車輛數(shù)據(jù)通訊

OBD2命令的格式

1、


上圖是OBD2的診斷指令的消息包的完整格式(極大部分廠商專用的功能也是這種格式),TL718能自動(dòng)設(shè)定了Header/ID/PCI/CHECKSUM這部分?jǐn)?shù)據(jù),對(duì)于標(biāo)準(zhǔn)的OBD2你都幾乎不用關(guān)心修改它。想了解有關(guān)內(nèi)容,它們分別定義在ISO14230-2、J1850 、IS9141-2 和ISO15765-2數(shù)據(jù)鏈層定義的文本內(nèi)。

TL718自動(dòng)檢測(cè)數(shù)據(jù)總線的物理連接,能在協(xié)議1-9間自動(dòng)搜尋當(dāng)前車輛的協(xié)議,搜尋到后自動(dòng)返回?cái)?shù)據(jù)。當(dāng)然也可手工設(shè)定到某個(gè)特定的協(xié)議。TL718不搜尋A-F協(xié)議,因?yàn)锳-F協(xié)議它們沒(méi)有象OBD2一樣有一個(gè)統(tǒng)一的ISO15031應(yīng)用層協(xié)議,那樣的話自動(dòng)搜索變得毫無(wú)意義。

2、ISO15031(SAE J1979)是應(yīng)用層的協(xié)議,同樣它也不用關(guān)心使用什么樣的物理層協(xié)議(TL718自動(dòng)連接),你編程時(shí)只要發(fā)送數(shù)據(jù),和接收及處理接收回來(lái)的數(shù)據(jù)(計(jì)算或顯示)。所以這么多種物理連接,以統(tǒng)一標(biāo)準(zhǔn)規(guī)定的數(shù)據(jù)包來(lái)發(fā)送接收,我編程處理變得相對(duì)簡(jiǎn)單。下面我們來(lái)討論OBD2指令。

3、這里我們只要關(guān)心數(shù)據(jù)消息包的7字節(jié)數(shù)據(jù)(data byte)部分就可以了

ISO15031-5定義:

字節(jié) 意義
1 MODE 代表請(qǐng)求數(shù)據(jù)的類型
2 PID 參數(shù)標(biāo)識(shí)
3-7 根據(jù)不同的MODE及PID ISO15031-5有詳細(xì)的定義






如上圖所示,連接好線路及打開車匙到ON,不要起動(dòng)車輛。不用做任何設(shè)定,只要你向TL718發(fā)送指令,TL718自動(dòng)返回車輛響應(yīng)的數(shù)據(jù)。


例 1:圖所示:“0100”代表ISO15031-5定義MODE 01 PID 00 指令。

>01 00
41 00 BF 9F B9 90
第1個(gè)字節(jié) 41代表 Mode 01(01+40,標(biāo)準(zhǔn)定義)
第2個(gè)字節(jié) 00代表PID 00
3-6字節(jié)是車輛發(fā)送回來(lái)關(guān)于 MODE 01 PID 00 請(qǐng)求返回來(lái)的數(shù)據(jù)
表示模式00 所支持其他(PID01---PID32)標(biāo)識(shí)的按位定義的數(shù)據(jù) 1代表支持 0代表不支持。

例 2:請(qǐng)求(讀?。┌l(fā)動(dòng)機(jī)水溫 MODE 01 PID 05

我們只要簡(jiǎn)單的向車輛發(fā)送0105指令
>0105
41 05 7B

41代表MODE 01
05代表 PID 05
7B是水溫值 10進(jìn)制數(shù)值是(7*16+11)123 水溫是123-40=80度

例 3:讀取發(fā)動(dòng)機(jī)轉(zhuǎn)速rpmMODE 01 PID 0C

同樣只要向TL718發(fā)送:010C

>01 0C
41 0C 1A F8
1AF8是2字節(jié)的16進(jìn)制值,轉(zhuǎn)換為10進(jìn)制數(shù)是6904,每格1/4 rpm
轉(zhuǎn)速是6904/4=1726 rpm

注:以上數(shù)據(jù)的轉(zhuǎn)換,及格式在ISO15031-5內(nèi)有詳細(xì)定義

c++相關(guān)文章:c++教程




關(guān)鍵詞: OBD2 汽車 診斷程序

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉