:從刷寫到診斷的功能擴展)
1. 引言在前面的系列文章中我們完成了基于圖莫斯CAN工具的LabVIEW UDS升級上位機開發實現了ECU固件刷寫的完整流程。然而UDS協議的能力遠不止于刷寫——它涵蓋了六大功能單元、共26種診斷服務是汽車電子領域最全面的診斷通信協議。刷寫功能只是UDS應用的一個子集。在實際的ECU開發、產線測試和售后診斷場景中我們還需要讀取DTC故障碼快速定位ECU故障讀取DID數據標識符獲取軟件版本、硬件版本、VIN碼等信息清除DTC故障修復后清除歷史故障碼安全訪問解鎖受保護的診斷服務例程控制執行ECU內部預定義操作如傳感器自學習、標定等好消息是我們已經封裝好的通信基座和UDS服務子VI可以直接復用只需在此基礎上擴展新的診斷服務即可。本文將展示如何利用現有架構快速構建一個功能完整的UDS診斷上位機。2. 已封裝子VI的復用價值在刷寫上位機中我們已經完成了以下核心基礎設施2.1 通信基座TOOMOSS_SendAndWaitResp.vi這是所有UDS服務的“發動機”。它封裝了CAN_UDS_Request發送UDS請求CAN_UDS_Response接收UDS響應超時處理與錯誤返回任何新的UDS服務只需構造對應的請求數據調用此基座即可完成收發無需重復編寫CAN通信邏輯。2.2 設備管理層TOOMOSS_OpenDev(CAN).vi提供設備句柄管理所有診斷服務共用同一個設備句柄無需重復打開設備。2.3 已有的UDS服務子VI子VI服務用途TOOMOSS_SID10_RequestSession.vi0x10會話切換TOOMOSS_SID27_SecurityAccess.vi0x27安全訪問TOOMOSS_SID2E_WriteDataByID.vi0x2E寫入數據TOOMOSS_SID31_RoutineControl.vi0x31例程控制TOOMOSS_SID11_EcuReset.vi0x11ECU復位TOOMOSS_SID28_CommunicationControl.vi0x28通信控制TOOMOSS_SID85_ControlDTCSetting.vi0x85DTC控制這些子VI可以直接在診斷上位機中復用無需任何修改。3. 需要新增的診斷服務要構建完整的診斷上位機還需要補充以下UDS服務3.1 0x22 ReadDataByIdentifier按標識符讀數據功能根據DIDData Identifier讀取ECU中存儲的數據。DID是2字節的標識符每個DID對應ECU中的特定數據。典型應用0xF190讀取VIN碼0xF188讀取軟件版本號0xF187讀取硬件版本號請求格式Byte 0: SID 0x22 Byte 1: DID_High Byte 2: DID_Low肯定響應格式Byte 0: SID 0x62 (0x22 0x40) Byte 1: DID_High Byte 2: DID_Low Byte 3~N: dataRecord讀取到的數據示例請求讀取DID0xF187發送22 F1 87響應62 F1 87 48 32 30 31數據為H201等ASCII字符3.2 0x19 ReadDTCInformation讀取DTC信息功能讀取ECU中存儲的診斷故障碼DTC。這是UDS中最復雜但最重要的診斷服務之一包含28個子功能。常用子功能子功能名稱用途0x01reportNumberOfDTCByStatusMask讀取符合特定條件的DTC數量0x02reportDTCByStatusMask讀取符合特定條件的DTC列表0x06reportDTCExtDataRecordByDTCNumber讀取指定DTC的快照/環境數據DTC狀態掩碼1字節bit 0testFailed當前是否失敗bit 4confirmedDTC是否已被確認/存儲bit 6warningIndicatorRequested是否觸發警告燈示例讀取所有已確認的DTC數量19 01 08讀取所有激活狀態的DTC列表19 02 01讀取指定DTC的完整環境數據19 06 XX XX XX FF具體的設計在下一篇“基于圖莫斯的CAN UDS診斷上位機-LabVIEW版本十七TOOMOSS_SID19_ReadDTCInformation.vi-讀取DTC信息”文章介紹。3.3 0x14 ClearDiagnosticInformation清除DTC功能清除ECU中存儲的DTC。請求格式Byte 0: SID 0x14 Byte 1: groupOfDTC_High Byte 2: groupOfDTC_Mid Byte 3: groupOfDTC_Low特殊值FF FF FF表示清除所有DTC肯定響應0x54示例清除所有DTC發送14 FF FF FF響應543.4 0x3E TesterPresent待機握手功能維持非默認會話狀態防止ECU因超時而自動退回默認會話。請求格式Byte 0: SID 0x3E Byte 1: subFunction (0x00 需要響應, 0x80 不需要響應)典型用法進入擴展會話或編程會話后周期性發送3E 80無需響應保持會話活躍。4. 診斷功能上位機界面設計4.1 主界面布局┌─────────────────────────────────────────────────────────────────────┐ │ CAN UDS 診斷上位機 │ ├─────────────────────────────────────────────────────────────────────┤ │ ┌─ 通信配置 ────────────────────────────────────────────────────┐ │ │ │ 通道: [CAN1▼] 波特率: [500] Kbps │ │ │ │ 物理ID: [0x700] 響應ID: [0x708] 設備: [已打開 ●] │ │ │ └─────────────────────────────────────────────────────────────┘ │ │ ┌─ 診斷服務 ────────────────────────────────────────────────────┐ │ │ │ [讀取DTC] [清除DTC] [讀取DID] [寫入DID] [安全訪問] [復位] │ │ │ └─────────────────────────────────────────────────────────────┘ │ │ ┌─ 服務參數 ────────────────────────────────────────────────────┐ │ │ │ DID: [0xF190] 數據: [ ] │ │ │ │ 子功能: [0x02▼] 掩碼: [0xFF] │ │ │ └─────────────────────────────────────────────────────────────┘ │ │ ┌─ 響應顯示 ────────────────────────────────────────────────────┐ │ │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ │ │ [14:30:25.123] TX: 22 F1 90 │ │ │ │ │ │ [14:30:25.456] RX: 62 F1 90 4C 56 4E 39 30 30 30 30 │ │ │ │ │ │ VIN: LVN90000 │ │ │ │ │ └─────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘ │ │ 狀態欄: [就緒] │ └─────────────────────────────────────────────────────────────────────┘4.2 功能區域說明區域內容說明通信配置通道、波特率、物理ID、響應ID、設備狀態與刷寫上位機共用診斷服務功能按鈕點擊觸發對應的UDS服務服務參數DID、子功能、掩碼、數據等根據所選服務動態顯示響應顯示收發日志 解析結果顯示原始報文和解析后的數據狀態欄當前狀態、錯誤信息實時反饋5. 診斷服務子VI實現5.1 TOOMOSS_SID22_ReadDataByID.vi輸入參數控件類型說明設備句柄U32由OpenDev返回通道號枚舉CAN1/CAN2物理地址U32請求ID響應地址U32響應IDDIDU16數據標識符輸出參數控件類型說明響應數據U8數組讀取到的數據數據長度I32數據字節數返回值I320成功-1失敗錯誤信息字符串錯誤描述程序框圖典型調用讀取VIN碼DID 0xF190發送22 F1 90響應62 F1 90 4C 56 4E ...17字節VIN碼5.2 TOOMOSS_SID19_ReadDTC.vi下篇文章詳解5.3 TOOMOSS_SID14_ClearDTC.vi輸入參數控件類型說明設備句柄U32由OpenDev返回通道號枚舉CAN1/CAN2物理地址U32請求ID響應地址U32響應IDDTC組U323字節組標識FF FF FF表示全部輸出參數控件類型說明返回值I320成功-1失敗錯誤信息字符串錯誤描述程序框圖5.4 TOOMOSS_SID3E_TesterPresent.vi輸入參數控件類型說明設備句柄U32由OpenDev返回通道號枚舉CAN1/CAN2物理地址U32請求ID響應地址U32響應ID需要響應布爾True需要響應(0x00)False無需響應(0x80)程序框圖6. 診斷功能主VI流程編排6.1 狀態機設計IDLE → 選擇診斷服務 → 檢查設備狀態 → 執行服務 → 顯示結果 → IDLE6.2 診斷服務調用示例讀取VIN碼流程用戶選擇DID0xF190調用TOOMOSS_SID22_ReadDataByID.vi將響應數據17字節顯示為ASCII字符串顯示VIN碼解析結果讀取DTC流程用戶選擇子功能0x02按狀態掩碼讀取DTC列表調用TOOMOSS_SID19_ReadDTC.vi解析響應提取DTC列表將3字節DTC轉換為標準5字符格式在表格中顯示DTC及其狀態6.3 與刷寫功能的集成診斷功能與刷寫功能可以共享通信層同一個TOOMOSS_SendAndWaitResp.vi設備管理同一個設備句柄日志系統同一個LogManager.vi主界面通過標簽頁切換“診斷模式”和“刷寫模式”7. 總結通過本系列文章搭建的UDS通信框架我們已經具備了快速擴展診斷功能的基礎已實現刷寫系列可擴展診斷系列0x10 會話切換0x22 讀數據0x27 安全訪問0x19 讀DTC0x2E 寫數據0x14 清除DTC0x31 例程控制0x3E 待機握手0x34/36/37 下載0x23 讀內存0x11 ECU復位...更多核心要點通信基座復用所有新服務只需構造請求數據調用TOOMOSS_SendAndWaitResp.vi即可設備管理復用設備句柄由TOOMOSS_OpenDev(CAN).vi統一管理日志系統復用所有通信自動記錄到日志文件UI框架復用主VI的While循環事件結構可直接擴展新的事件分支這種架構設計的最大價值在于——投入一次基礎設施建設即可持續擴展新的診斷功能而無需重復編寫底層的CAN通信、設備管理和日志記錄代碼。