<tbody id="ovqgh"><noscript id="ovqgh"></noscript></tbody>


    1. <th id="ovqgh"></th>

      汽車OBD2診斷程序開發

      2019-05-28 11:01:37 root
      1、因EST527已經為你建立了物理層、數據鏈層和部分應用層的協議,所以只要OBD2標準應用層協議文本,ISO15031-5 或 SAE J1979(這兩個協議是相同的內容)。    
      2、EST527診斷接口 1 套或用EST527芯片自建電路。
      3、家用PC機電腦一臺。
      4、安裝軟件:Accessport調試軟件及VC++(或VB、BC++等)你喜歡的開發軟件。
      5、符號OBD2標準的汽車發動機電腦一塊(或汽車一臺)
       
      準備好以上這些,你就可以開始你的OBD2標準程序開發了?。?!
       
      EST527基本信息
       
          EST527通過一個UART串口與單片機、PDA或PC RS232通訊,在有的新的PC機上已沒有裝備RS232串口,可以通過虛擬串口實現與EST527通訊,例USB TO RS232、以太網TO RS232、或藍牙 TO RS232等等。
       
              -------     RS232     ------    OBD2電纜    ----------
             |   PC  |<----------->| EST527|<------------>|汽車診斷口|
              -------               ------                ----------
       
         不管使用怎樣的物理連接,你可以使用超級終端或串口調試工具,直接通過鍵盤發送和接收字符。在使用串口調試軟件前,首先必須設置正確的COM端口號和正確的波特率。一般為9600波特率(PIN6=0V),或38400波特率(PIN6=VCC,PP OC設置默認值)。串口設置為:8個數據位,校驗位:0, 停止位 1位。如果設置錯誤,將不能和EST527正常通訊。所有從EST527的響應以一個回車符(0X0D)及一個可選的換行符(0X0A)結束。正確連接,打開電源后。EST527將驅動測試LED燈,(閃亮3次)后,發送:
       
            EST527 starting
            〉
       
          如果正確收到以上信息代表串口及連接設置正確。第二行“〉”符號代表EST527為空閑狀態,可以立即從RS232接收數據。如果沒有收到“〉”符號就向EST527發送數據,可能引起數據丟失。而發生不正確的響應。PC從串口向EST527發送的指令格式:
       
            EST527有2種格式的命令
                             1、OBD連接命令,與車輛發生通訊。
                             2、內部命令,全部以AT開頭,不與輛發生通訊。
       
      l發送必須以0x0d(回車符)結束的ASCII碼字符,回車符后面的字符被EST527丟棄。
      lEST527內部命令以“AT”開頭,后面跟可見字符。不可見字附及空格被忽視。
      lOBD命令只能包含16進制的ASCII碼(0-9,a-f,A-F),空格被忽略。
      l如果發送的指令,不能被EST527有效解釋,EST527將返回一個“?”表明,發送指令無效。
      l當EST527處理OBD命令時,EST527連續監視RTS引腳及RS232輸入,其中任何一個情況發生,EST527將中斷當前的OBD命令,使它快速返回提示符“〉”,等待接收新的命令。
      l大小寫字符都能被EST527接收,空格被忽略。比喻命令“ATZ”、“atz”、“at z”都是一樣的。
       
      比喻我們向EST527發送一個復位指令只要向RS232串口發送ASCII字符“ATZ”+0x0d(回車符);
       
      EST527 Starting
      >ATZ
      ELM327 v1.2
      >
       
      注:ATZ指令返回 ELM327 V1.2是為了使用現成的國外OBD觀軟件,所以用了這個返回信息。
      返回本芯片信息用“ATI”指令。
       
      >ATI
      EST527 v1.0
      >
       
      返回芯片編號用 "AT@S"指令(這個編號升級硬件和提供保修服務時需要)
      >AT@S
      CodeNumb:98764323
      >
       
      EST527的OBD命令
        
                如果你向EST527發送的指令以16進制數的ASCII開頭,則EST527認為是OBD命令,EST527接收后,把成對的ASCII碼16進制數轉換成單個字節的16進制數據發送到車輛電腦數據總線。OBD命令實際是被嵌入到數據消息包內后發送到數據總線上的,大多數標準要求:在每個數據消息包內包含三字節的頭及最后一個數據校驗字節。EST527自動添加了這些附加的字節,這些默認的值對OBD2診斷模式請求指令都不需要更改,但如果你想要更改這些頭字節值,可以用內部命令“ATSH XXXXXX”更改。
       
             大部分OBD指令長度只有一個字節或2個字節,EST527充許發送的最長度是對應標準規定的字節,超出部分將被丟棄。發出的OBD指令,不能出現單個的數字,16進制數必須成對發送,比喻0不可能發送單個的“0”,必須發送“00”,如果出現單個數字,EST527認為指令格式錯誤,將返回一個“?”。由于OBD(汽車診斷標準)都使用16進制,所以EST527接收發送的數據也是16進制的。例15的代表的十進制值是21;
       
             當發送完OBD2命令后,EST527等待從總線接收OBD消息,如果接收到地址的消息并且地址匹配,則EST527就把數據從RS232發送給PC,如果EST527接收到的消息和發送的地址不匹配,則忽略該消息。但也可以通過ATBD內部命令查看該接收到的消息包。如果直到等待時間(P2MAX ATST命令的設置值,默認值100ms)結束,沒有接收到匹配地址的數據,則EST527返回“NO DATA”,如果接收到數據并且地址匹配則復位計時間,繼續等待,直到等待時間溢出。        
       
      OBD2標準診斷模式
       
      開發OBD2診斷程序,必須掌握ISO 15031-5( SAE J1979)定義的九種診斷模式,對于英文不是很好的朋友,本站有個中文的說明:
      可以參考:
                
      OBD系統輸出信息的模式/服務
      Mode 1: 請求動力系當前數據
      Mode 2: 請求凍結禎數據
      Mode 3: 請求排放相關的動力系診斷故障碼
      Mode 4: 清除/復位排放相關的診斷信息
      Mode 5: 請求氧傳感器監測測試結果
      Mode 6: 請求非連續監測系統OBD測試結果
      Mode 7: 請求連續監測系統OBD測試結果
      Mode 8: 請求控制車載系統,測試或者部件
      Mode 9: 讀車輛和標定識別號
      每個模式后面緊跟一個參數標識(PID)表示后面是什么參數,每個模式的PID 00 是ISO15031定義專用的參數,每個符合標準的電腦必須支持這個參數標識。代表該模式對其他PID是否支持。
       
         與車輛數據通訊
       
      OBD2命令的格式
       
      1、OBD2的診斷指令的消息包的完整格式(極大部分廠商專用的功能也是這種格式),EST527能自動設定了Header/ID/PCI/CHECKSUM這部分數據,對于標準的OBD2診斷程序你都幾乎不用關心修改它。想了解有關內容,它們分別定義在ISO14230-2、J1850 、IS9141-2 和ISO15765-2數據鏈層定義的文本內。
       
             EST527自動檢測數據總線的物理連接,能在協議1-9間自動搜尋當前車輛的協議,搜尋到后自動返回數據。當然也可手工設定到某個特定的協議。EST527不搜尋A-F協議,因為A-F協議它們沒有象OBD2一樣有一個統一的ISO15031應用層協議,那樣的話自動搜索變得毫無意義。
       
      2、ISO15031(SAE J1979)是應用層的協議,同樣它也不用關心使用什么樣的物理層協議(EST527自動連接),你編程時只要發送數據,和接收及處理接收回來的數據(計算或顯示)。所以這么多種物理連接,以統一標準規定的數據包來發送接收,我們編程處理變得相對簡單。下面我們來討論OBD2指令。
       
      3、這里我們只要關心數據消息包的7字節數據(data byte)部分就可以了
       
            ISO15031-5定義:
       
                   字節               意義
                    1         MODE    代表請求數據的類型
                    2          PID    參數標識
                    3-7               根據不同的MODE及PID ISO15031-5有詳細的定義
                
               如上圖所示,連接好線路及打開車匙到ON,不要起動車輛。不用做任何設定,只要你向EST527發送指令,EST527自動返回車輛響應的數據。
       
      例 1:  圖所示:“0100”代表ISO15031-5定義MODE 01 PID 00 指令。
       
                >01 00
                41 00 BF 9F B9 90
               第1個字節 41  代表 Mode 01  (01+40,標準定義)   
               第2個字節 00  代表  PID 00
               3-6字節是車輛發送回來關于 MODE 01 PID 00 請求返回來的數據
                表示模式00 所支持其他(PID01---PID32)標識的按位定義的數據 1代表支持 0代表不支持。  
       
      例 2:請求(讀?。┌l動機水溫 MODE 01 PID 05
       
               我們只要簡單的向車輛發送0105指令
                >0105
                 41 05 7B
              
                41代表MODE 01 
                05代表 PID 05
                7B是水溫值 10進制數值是(7*16+11)123 水溫是123-40=80度
                
      例 3:讀取發動機轉速rpm  MODE 01 PID 0C
       
            同樣只要向EST527發送:010C
       
                >01 0C
                41 0C 1A F8
             1AF8是2字節的16進制值,轉換為10進制數是6904,每格1/4 rpm
             轉速是6904/4=1726 rpm
       
            注:以上數據的轉換,及格式在ISO15031-5內有詳細定義

       

      讀OBD2故障碼(DTCs Diagnostic Trouble Codes)
       
          讀故障碼是診斷儀最常用的功能,這里只是簡單的說明一下,詳細內容請查閱ISO15031-5文本
         一般情況下可直接用MODE 03讀取當前故障碼,但這里我們
       
      先用MODE 01 PID 01讀取現在有多少個故障碼存在ECU內
            
             >01 01
              41 01 81 07 65 04
             >
       
            41 01 前面已說明是對MODE 01 PID 01的響應代碼,
            81   代表當前的故障碼數,這個10進制數值是129,不是代表有129個故障碼,
                  81它的最高位MSB 代表是否點亮故障指燈,低7位代表了故障碼的數量
                 16進制算法應是 0x81 & 0x7F = 0x01 所以是一個故障碼。也可是10進制數值直接減128
                  即:129-128=1;
            
             所以81代表了,故障燈點亮,有一個故障碼,81后面的數據請參考標準文本,和讀故障碼沒有關系。
       
      在這個例子中,EST527只返回了一行數據,但是如果有另外的控制模塊也附合響應條件,有可能返回多行信息。
      比喻常見的:發動機電腦和自動波箱控制電腦同時返回信息,就會有2行信息,要確認是哪一個電腦返回的是哪一行
      信息,必須設置返回OBD消息保的三字節頭(AT H1內部命令打開),查看消息頭字節中的第三個字節(源地址)確定
      是那個電腦模塊返回的消息包。這里先不討論,在另外章節來詳細討論,多消息包數據。
       
      現在已經讀了有多少個故障碼,下一步讀實際的故障碼是什么。
       
                用OBD2診斷模式MODE 03讀?。褐灰唵蔚叵駿ST527發送03
                 
              >03
       
               可能的返回信息數據如下:
               43 01 33 00 00 00 00
               
              注:如果故障碼數量多于3或多個電腦模塊,會返回多行消息包,
                 
           43是對MODE 03 請求的響應(03+40),另外的6個字節是故障代碼,2個字節代表一個故障碼。
           這里有3個代表故障碼的數據:0133 0000 0000,“0000”是ISO15031在這個模式下返回的填充數據
           不是實際的故障碼。
           
          故障碼含義:ISO定義:二字節故障碼(例0133)的第一個數如下表所示  現在來分析上面的故障碼 0133:
       
           第一個數字“0”按上表用“P0”代替。0133就代表是故障碼P0133。
      同樣如果收到的是D016則,“D”用U1代替,則故障代碼就時U1016;
      如果收到是1131則代換后,故障代碼是P1131。
       
         注:ISO15765 CAN故障碼消息包和J11850、ISO9141 ISO14230返回的信息有稍不同,
             編寫程序時要注意,ISO 15765 返回的信息第二個數據代表的是電腦模塊有多少個故障碼(DTCs),
             詳細看ISO15031-5內定義。
       
      清除故障代碼
       
          OBD2診斷模式MODE04 是復位ECU的一個功能,同時也清觸故障代碼;執行后ECU將:
       
                 1、復位故障代碼的數量為0
                 2、刪除所有的故障代碼
                 3、刪除存儲的凍結楨數據
                 4、刪除所有O2傳感器聽測試數據
                 5、刪除模式MODE06 和 MODE 07的數據信息
       
           復位后你的汽車由于復位了一些數據,短時間內可能會引起工作異常。為了防止不小心復位ECU,
          ISO15031-5要求所有的掃描工具(診斷儀)在發送MODE 04指令前,必須加一個“確認信息”。
          EST527不監視發送信息的內容是否是復位指令。
       
              >04
               44
              >
           發送04指令后,車輛ECU接收成攻,將立即復位以上內容,
           并發回一個MODE 04的響應信息44(04+40)。
       
      結束語
       
      ISO14230 ISO9141要求通訊前的初始化過程、及連接后要求有一個周期性的握手信號,這些EST527都已經自動完成,OBD2標準的診斷程序都不用更改。怎樣更改這些參數:
      看完這些內容,就可開始你的OBD2開發。實際上廠商專用的診斷功能程序差不多也是這么簡單。為什么叫專用,是因為它沒有公開應用層的協議。開發時比我們OBD2開發多少一個過程。就是怎樣用EST527從專用的設備中讀得專用的診斷指令(也就是應用層協議)。在開發專用功能的診斷儀中討論這個問題。
      OBD2其他的診斷模式這里不再說明,診斷方法都是一樣的。詳細內容查看ISO15031-5或SAE J1979。
      多試多做你會發現開發診斷程序原來如此簡單。


      電話咨詢
      公司地址
      解決方案
      QQ客服
      亚洲日韩高清四虎_国产精品一区二区在线观看99_日韩2021亚洲天堂在线_制服丝袜视频高清中文字幕