ADAS AD控制器模組開發08 UDS診斷

2021-08-28 04:51:22 字數 2950 閱讀 4554

前言

這一塊可是汽車電子工程師必須掌握的硬菜,雖然不難,但是都要懂點。

uds相關的detail knowhow內容就不在本文中體現了,大家可以在網上搜尋iso14229、iso15765、iso11898等一系列標準來學習。本文只介紹knowhow summary和project level相關的內容,盡量偏向實戰應用。

簡單來講,汽車的診斷基本都是通過uds實現的。其中iso14229定義了應用層,而iso15765、iso10681、iso13400和iso17987則分別定義了以can、flexray、乙太網和lin通訊實現的傳輸層和網路層,即通過can、flexray和乙太網等通訊方式實現iso14229定義的uds應用層。

圖1 uds協議棧

系統測試很大程度上依賴uds診斷提供的各種基礎服務,例如讀取dtc,讀取internal fault table,讀寫did來改變或控制ecu的一些功能等等。

一、工程師在做診斷時,是一種什麼樣的場景?

下面給乙個具體而真實的場景描述:

前幾天,我負責開發的某款adas產品(比如ifc-智慧型前視攝像頭模組)按照客戶的要求進行了一次重要功能公升級,同時修復了幾個軟體的bug;新版軟體release後,我趕緊把軟體刷到產品中,在實驗室裡做了一遍完整的系統台架測試。今天,我需要將產品安裝到整車上,進行一次實車的診斷。

我和助手,手裡抱著膝上型電腦、剛測試過的ifc控制器、canoe(如圖1)、產品線束(連線pc、canoe和)、obd聯結器及線束;到了車內,先將ifc接到後視鏡底座的ifc指甲上,連線好線束;接著將obd聯結器插上整車obd口,將線束依次連線好;順序大體為,obd線束連線好產品線束,產品線束連線好canoe,canoe連線好電腦。開啟電腦裡的canoe軟體,配置好can網路;車輛ign off後等3秒,再ign on;開啟canoe的trace視窗,首先檢查通訊是否正常;若通訊正常,則按照can訊息開啟對應產品的相關訊息(例如ifc,開啟ifc1和ifc2兩個訊息),看訊息中的訊號數值是否與預期相符;若與預期相符,那麼利用uds診斷寫入一些關鍵的did值,以開啟底層的開發者使用的coremsg,觀察視覺檢測演算法相關訊號是否正常;若正常,那就準備開車實車測試。當然,副駕駛的助手需要全程抱著電腦,實時觀察整車can網路的訊息和訊號數值是否符合實車執行的場景,是否有錯誤等等(如圖2)。

測試過程中,要將所有的can網路資料,儲存下來。

診斷除了在整車上做,也經常在自己的辦公桌上進行。一般工具就是自己的膝上型電腦、canoe盒和連線電腦的線束、連線canoe-產品-電源-120ω終端電阻的產品線束、12v電源、產品本身。需要提一點,與整車不同,在辦公桌上搭台架,必須要12電源給產品供電,也需要乙個120ω的終端電阻,仿真實車上can網路的阻抗。

圖1 死貴死貴的can盒

圖2 實車診斷時的副駕駛助手電腦螢幕的場景還原

二、診斷的應用層:

應用層主要定義了診斷命令,通過傳送診斷命令,開發人員可以對can網路中相關ecu節點進行操作。診斷牽涉到幾個概念:sid、did、rid和dtc。這幾種概念的組合格式是在iso15765傳輸層定義的,一般遵循以下格式,組成完整的診斷命令:

發請求時的格式1:sid+did;

發請求時的格式2:sid(特指例程式控制**務)+子型別+rid;

正響應時的格式1:(sid+40)+did+其他定義的label;

正響應時的格式2:(sid+40)+子型別+rid+返回的結果資料;

負響應時的格式: 7f+sid+did+其他定義的 label。

其中:

圖3 常用的sid

圖4 自定義的集中會話模式

圖5 常見的did

圖6 常見的rid

使用canoe進行診斷操作時,情景如下圖:

圖7 輸入診斷命令「22 f1 a1」

以上意思為,讀取(sid=22)did為f1a1的資料,查表獲知,f1a1代表車聯配置字資訊。

三、診斷故障碼dtc

dtc,diagnostic trouble code,診斷故障碼,是uds診斷最基礎的應用之一。本身沒有什麼難理解的,主要發診斷命令讀取dtc即可。主要用於產品故障的診斷。一旦讀出對應的dtc故障,就要按照dtc指引的方向去檢查問題。下圖以ifc為例,分享一種常見的dtc列表。

圖8 常見dtc示例

總結

uds診斷不是乙個難以理解的概念,不能把它當成理解某個複雜演算法一樣去看待。他只是一種定義,而且跟專案最息息相關的定義。每到拿到新專案時,最關注的一部分就應該是uds診斷定義的該項目的sid、did和dtc等資訊,製作成診斷手冊(可以使用excel**),不需要記住,但是用到的時候方便檢視

Thinkphp5基礎 08 控制器

設定beforeactionlist屬性,指定某個方法為其他方法的前置操作,陣列鍵名為需要呼叫的前置方法名,無值的話為當前控制器下所有方法的前置方法。except 方法名,方法名 表示這些方法不使用前置方法 only 方法名,方法名 表示只有這些方法使用前置方法。下面例子,訪問hello方法時,將會...

ios開發控制器 UIViewController

大部分的控制器類都會繼承uikit的uiviewcontroller基類。該基類中的方法如下,通過重寫以下方法可以自定義需要實現的效果等,注意重寫該方法的時候需要呼叫 super 方法名 viewdidload 當該控制器管理的檢視被載入完成後,系統會自動呼叫該方法。didreceivememory...

thinkcmf開發 關於控制器

一 安裝 安裝 刪除install 檔案 刪除index.php 修改資料庫資訊 建立資料庫 修改資料庫資訊 data conf db.php 包括伺服器位址 專案1.建立資料夾 在 下新增專案檔案 mobile 在config.php 中module allow list 中新增mobile 建立...