<tr id="tp1vn"><td id="tp1vn"><dl id="tp1vn"></dl></td></tr>
  1. <p id="tp1vn"></p>
  2. <sub id="tp1vn"><p id="tp1vn"></p></sub>
    <u id="tp1vn"><rp id="tp1vn"></rp></u>
    <meter id="tp1vn"></meter>
      <wbr id="tp1vn"><sup id="tp1vn"></sup></wbr>
      日韩第一页浮力,欧美a在线,中文字幕无码乱码人妻系列蜜桃 ,国产成人精品三级麻豆,国产男女爽爽爽免费视频,中文字幕国产精品av,两个人日本www免费版,国产v精品成人免费视频71pao
      網易首頁 > 網易號 > 正文 申請入駐

      UDS 14服務(ClearDiagnosticInformation)詳解:原理、C++實現與測試用例

      0
      分享至


      一、服務概要

      • 服務名稱:ClearDiagnosticInformation (CDTCI)

      • **服務標識 (SID)**:0x14

      • **肯定響應 (PRSID)**:0x54

      • 功能摘述:客戶端請求清除ECU內存中存儲的診斷信息,這些信息主要指故障碼 (DTC) 及與之關聯的快照數據、擴展數據和各類統計信息。

      • 典型場景:軟件更新后清除陳舊信息以避免干擾、生產線下線檢測關閉時的故障記錄初始化,以及維修保養結束或高級服務執行前重置歷史數據。

      二、消息格式與NRC 1. 請求格式

      Byte #

      Parameter

      Value

      縮寫

      1

      ClearDiagnosticInformation Request SID

      0x14

      CDTCI

      2

      groupOfDTC[0] (HighByte)

      0x00–0xFF

      GODTC_HB

      3

      groupOfDTC[1] (MiddleByte)

      0x00–0xFF

      GODTC_MB

      4

      groupOfDTC[2] (LowByte)

      0x00–0xFF

      GODTC_LB

      • 該服務無子功能參數,直接由 SID 和 3 字節的groupOfDTC構成。

      • groupOfDTC大端模式表示:3 字節 = [HighByte, MiddleByte, LowByte]。特殊字符0xFFFFFF表示清除所有 DTC。

      • groupOfDTC除了 0xFFFFFF,還可指定為 DTC 分組或具體某個 DTC 代碼。分組值依據 OEM 在協議中的定義,例如 0xFFFF33 對應排放/動力總成組。

      2. 肯定響應
      • 格式:0x54

      服務完全處理完成后,服務器應返回肯定響應,即使當前未存儲任何 DTC。
      3. 否定響應
      • 格式0x7F+0x14+NRC(1 byte)。


      NRC 代碼

      名稱

      描述

      0x13

      incorrectMessageLengthOrInvalidFormat

      請求報文長度不正確(groupOfDTC不足 3 字節)

      0x22

      conditionsNotCorrect

      當前會話條件不滿足(如服務需要在默認會話模式執行)

      0x31

      requestOutOfRange

      請求的groupOfDTC值不被 ECU 支持

      0x33

      securityAccessDenied

      所需安全等級驗證未通過(針對高安全清除策略)

      0x7F

      serviceNotSupportedInActiveSession

      服務在活動診斷會話模式下不支持

      0x11

      serviceNotSupported

      服務根本不被 ECU 支持

      0x12

      subFunctionNotSupported

      實際上 14 服務無子功能,若報此錯說明格式錯誤

      NRC 優先級參考(ISO 未明確定義,但多數實現遵循):0x11 > 0x7F > 0x13 > 0x12 > 0x7E > 0x33 > 0x22 > 0x31 > 0x14。

      三、清除的架構設計:內存處理與多副本

      項目

      RAM 管理 (主要副本)

      非易失存儲器管理 (備份副本)

      清除目標

      立即執行:清除狀態字節、快照數據、擴展數據、計數器、標志

      清除診斷服務的主要副本后,備份副本不應即時清除

      操作流程

      ① 收到 0x14 服務;② 硬件或軟件直接清空;③ 刷新通信時對應用層報告數據

      ECU 進入低功耗鎖存階段 (Power-Latch) 時,根據備份策略用 RAM 的新內容覆蓋 EEPROM/Flash

      常見數據不一致原因

      程序內部未按設計清除 ALL DTC 相關數據和副本

      如果在電力鎖存階段受到干擾(如意外斷開電池),可能導致 RAM 與長期存儲器之間數據不一致


      四、模擬 ECUSim — C++ 示例與詳解 1. 定義核心組件和類結構

      #include  
      
      #include
      #include
      #include
      #include // for std::find, std::remove_if
      #include // for memcpy
      usingnamespacestd;

      // --------------------------------
      // 1. DTC 的數據結構
      // --------------------------------
      struct DtcSnapshot {
      std::vector snapshotRecord; // 凍結幀數據
      };

      struct DtcExtendedData {
      std::vector extendedRecord; // 擴展數據
      uint16_t occurrenceCounter; // 故障發生次數
      uint16_t agingCounter; // 老化計數器
      };

      struct DiagnosticTroubleCode {
      uint32_t dtcCode; // 3字節 DTC 代碼 (大端)
      uint8_t statusMask; // DTC 狀態字節 (按照 ISO 14229-1 定義)
      DtcSnapshot snapshot;
      DtcExtendedData extendedData;
      bool isPermanent; // 是否為永久性故障(不可清除)
      };

      // --------------------------------
      // 2. ECU 模擬類
      // --------------------------------
      class ECU {
      private:
      std::map storedDTCs;
      bool isSecurityGranted;

      // 工具函數: 將 3 字節 DTC (大端) 轉為 uint32_t (實際低24位有效)
      uint32_t dtcToUint32(uint8_t high, uint8_t mid, uint8_t low) const {
      return (static_cast(high) << 16) |
      (static_cast(mid) << 8) |
      static_cast(low);
      }

      public:
      ECU() : isSecurityGranted(false) {}

      void grantSecurityAccess() { isSecurityGranted = true; }
      void revokeSecurityAccess() { isSecurityGranted = false; }

      // 新增 DTC (模擬故障發生器)
      void addDTC(uint32_t dtcCode, uint8_t status, bool permanent) {
      DiagnosticTroubleCode dtc;
      dtc.dtcCode = dtcCode;
      dtc.statusMask = status;
      dtc.isPermanent = permanent;
      dtc.extendedData.occurrenceCounter = 1;
      storedDTCs[dtcCode] = dtc;
      }

      // 模擬讀取 DTC 狀態(用于清空后驗證)
      void reportStoredDTCs() const {
      if (storedDTCs.empty()) {
      cout << "[ECU] No DTC stored." << endl;
      return;
      }
      cout << "[ECU] Stored DTCs:" << endl;
      for (constauto& pair : storedDTCs) {
      uint32_t code = pair.first;
      cout << hex << " DTC: 0x" << ((code >> 16) & 0xFF) << " "
      << ((code >> 8) & 0xFF) << " " << (code & 0xFF)
      << " | StatusMask: 0x" << (int)pair.second.statusMask
      << " | Permanent: " << (pair.second.isPermanent ? "Yes" : "No")
      << dec << endl;
      }
      }

      // 核心: ClearDiagnosticInformation 服務 (0x14)
      // 返回: 0x54 -> 肯定響應
      // 0x7F 0x14 0x?? -> 否定響應
      uint32_t clearDiagnosticInformation(const uint8_t* request, uint32_t len) {
      // --- 步驟 1: 長度校驗 ---
      if (len != 4) { // SID + 3字節 groupOfDTC
      cout << "[Server] NRC 0x13: incorrectMessageLength" << endl;
      return0x13;
      }

      // 提取 GroupOfDTC
      uint8_t grpHigh = request[1];
      uint8_t grpMid = request[2];
      uint8_t grpLow = request[3];
      uint32_t groupVal = dtcToUint32(grpHigh, grpMid, grpLow);

      // 臨時存儲需要刪除的 DTC 列表
      std::vector toDelete;

      // --- 步驟 2: 安全級別檢查 ---
      // 假設 OEM 要求針對某些特定組 (例如排放組) 清除時需要安全訪問
      if (groupVal == 0xFFFF33 && !isSecurityGranted) {
      cout << "[Server] NRC 0x33: securityAccessDenied" << endl;
      return0x33;
      }

      // --- 步驟 3: groupOfDTC 值支持范圍校驗 ---
      // 檢查 groupVal 是否屬于已定義支持的范圍
      // 假設支持清除: 0xFFFFFF (全部), 0xFFFF33 (排放組), 0x000100 (示例單個DTC代碼)
      bool groupSupported = (groupVal == 0xFFFFFF) ||
      (groupVal == 0xFFFF33) ||
      (groupVal == 0x000100);
      if (!groupSupported) {
      cout << "[Server] NRC 0x31: requestOutOfRange" << endl;
      return0x31;
      }

      // --- 步驟 4: 清除邏輯 (根據 groupOfDTC 匹配) ---
      for (auto& pair : storedDTCs) {
      DiagnosticTroubleCode& dtc = pair.second;

      // 永久性故障 (不可清除) 跳過
      if (dtc.isPermanent) continue;

      bool match = false;
      if (groupVal == 0xFFFFFF) {
      match = true; // 清除所有 DTC
      } elseif (groupVal == 0xFFFF33) {
      // 排放組匹配檢查: 按 DTC 的高字節是否為 0xFFFF33 定義的組內;
      // 演示: 假設 highByte == 0xFF 屬于排放組
      uint8_t highByte = (pair.first >> 16) & 0xFF;
      if (highByte == 0xFF) match = true;
      } elseif (groupVal == pair.first) {
      match = true; // 精確匹配單個 DTC 代碼
      }

      if (match) {
      toDelete.push_back(pair.first);
      }
      }

      // 執行刪除 (仿照 "內存中用于 ReadDTCInformation 的主副本被清除")
      for (uint32_t code : toDelete) {
      storedDTCs.erase(code);
      cout << "[Server] Cleared DTC: 0x" << hex << ((code >> 16) & 0xFF)
      << " " << ((code >> 8) & 0xFF) << " " << (code & 0xFF)
      << dec << endl;
      }

      // --- 步驟 5: 模擬電源鎖存 (Power-Latch) 階段的備份更新 ---
      // 在實際系統中,主副本清空后,備份副本會在 Power-Latch 階段由 RAM 數據自動覆蓋;
      // 這里僅示意一致性: 如果需要觸發 EEPROM 更新,在代碼層面預留接口即可。
      // 在該階段,如果電池意外斷電,RAM 與 EEPROM 可能不一致,本示例假設一致。

      // 肯定響應始終返回 0x54
      return0x54;
      }

      // 模擬處理整體 UDS 請求
      void processUDSRequest(const uint8_t* req, uint32_t len) {
      if (len == 0) return;
      uint8_t sid = req[0];
      if (sid == 0x14) {
      uint32_t result = clearDiagnosticInformation(req, len);
      if (result == 0x54) {
      cout << "[Tester] Received positive response: 0x54" << endl;
      } else {
      cout << "[Tester] Received negative response: 0x7F 0x14 0x" << hex << (int)result << dec << endl;
      }
      } else {
      cout << "[Server] Service not supported for SID: 0x" << hex << (int)sid << dec << endl;
      }
      }
      };
      2. 模擬通訊運行函數

      int main() {
      ECU myECU;

      // 預設一些 DTC 用于清除測試
      // DTC: 0xFF 01 02 (高字節 0xFF, 用作排放組示例), 非永久故障
      myECU.addDTC(0xFF0102, 0x09, false);
      // DTC: 0x00 01 00 (另一個 DTC), 非排放組, 非永久
      myECU.addDTC(0x000100, 0x08, false);
      // DTC: 0xAA BB CC (永久故障, 不能清除)
      myECU.addDTC(0xAABBCC, 0x09, true);
      // DTC: 0xFF 03 04 (另一排放組 DTC), 非永久
      myECU.addDTC(0xFF0304, 0x09, false);

      cout << "Before Clear:" << endl;
      myECU.reportStoredDTCs();

      // 示例 1: 清除所有 DTC (group = 0xFFFFFF)
      uint8_t clearAllRequest[] = {0x14, 0xFF, 0xFF, 0xFF};
      cout << "\n--- Clearing All DTCs (0x14 FF FF FF) ---" << endl;
      myECU.processUDSRequest(clearAllRequest, 4);
      myECU.reportStoredDTCs();

      // 示例 2: 清除指定單個 DTC (0x00 01 00)
      cout << "\n--- Clearing Single DTC (0x14 00 01 00) ---" << endl;
      uint8_t clearSingleRequest[] = {0x14, 0x00, 0x01, 0x00};
      myECU.processUDSRequest(clearSingleRequest, 4);
      myECU.reportStoredDTCs();

      // 示例 3: 如果安全訪問失敗 (模擬未授權清除排放組)
      cout << "\n--- Attempt Clear Emission Group without Security ---" << endl;
      uint8_t clearEmissionNoSecurity[] = {0x14, 0xFF, 0xFF, 0x33};
      myECU.processUDSRequest(clearEmissionNoSecurity, 4);
      myECU.reportStoredDTCs();

      // 示例 4: 先模擬安全訪問,再清除排放組
      cout << "\n--- Grant Security and Clear Emission Group (0x14 FF FF 33) ---" << endl;
      myECU.grantSecurityAccess();
      uint8_t clearEmissionWithSecurity[] = {0x14, 0xFF, 0xFF, 0x33};
      myECU.processUDSRequest(clearEmissionWithSecurity, 4);
      myECU.reportStoredDTCs();

      // 示例 5: 長度校驗 (錯誤報文)
      cout << "\n--- Error: Incorrect Length (missing group data) ---" << endl;
      uint8_t badLenRequest[] = {0x14, 0xAA};
      myECU.processUDSRequest(badLenRequest, 2);
      // 預期: 服務器應不修改 DTC 存儲,返回 NRC 0x13

      // 示例 6: 不支持 groupOfDTC 值
      cout << "\n--- Error: unsupported groupOfDTC (0x14 AA BB CC) ---" << endl;
      uint8_t unsupportedGroup[] = {0x14, 0xAA, 0xBB, 0xCC};
      myECU.processUDSRequest(unsupportedGroup, 4);

      return0;
      }

      五、常見測試用例與驗證

      測試用例:
      -用例1:基本清除
      步驟:[TX]14FFFFFF→預期:[RX]54→DTC存儲為空
      -用例2:清除時未存儲DTC
      步驟:當無DTC存儲時請求14FFFFFF→[RX]54 →(即使無存儲,仍相應肯定)
      -用例3:組清除
      步驟:[TX]14FFFF33(指定某個定義好的組)→[RX]54→驗證僅該組DTC消失。
      -用例4:安全訪問
      步驟:清除前先調用27服務解鎖,然后再使用14FFFFFF功能成功清除。
      -用例5:長度校驗
      步驟:[TX]14FF(長度不足)→預期:NRC0x13
      -用例6:不支持group值
      步驟:[TX]14AABBCC→預期:NRC0x31
      -用例7:故障重現
      步驟:清除后重啟ECU,若故障重現→實際故障未消除,需執行11服務軟復位后再讀取。
      六、常見問題與解決

      問題

      原因

      解決

      清除后故障碼立即重現

      物理故障未完全修復,ECU 再次監控到故障觸發; 或清除僅清了 DTC 狀態字節,但計數器、凍結幀未被全清(實現不完整)

      ① 徹底排查故障;② 部分 ECU 支持擴展清除幀,利用 14 服務特定 groupOfDTC 深度清除; ③ 清除后發送 11 01 軟復位,避免軟件緩存殘留

      永久故障碼無法清除

      永久性 DTC 的isPermanent標志為真,不允許清除;法規要求必須保留

      這是正常行為,此類 DTC 需通過其它機制(如老化計數器歸零)自動清除,診斷儀無法強制清除;定期檢查到該 DTC 未發生后,通過計數器自行移除。

      備份副本不一致

      電源鎖存階段意外掉電或中斷,導致 RAM 與 EEPROM 內容不同步

      設計異常保護邏輯,在下次上電時自動校驗并依據多數策略修復

      不同會話下不可用

      14 服務僅在默認會話或擴展會話中支持;如果在編程會話中調用,ECU 可能響應 NRC 0x7F

      切換至合適的會話再執行清除流程


      七、補充說明

      • 零星的思路:14 服務(ClearDiagnosticInformation)與 19 服務(ReadDTCInformation)相輔相成。清除之前,可以通過 19 服務讀取當前 DTC 列表和狀態;清除成功后,再次通過 19 服務讀取結果來驗證。

      • 其它類似服務:UDS 里0x85(ControlDTCSetting) 服務用來臨時開啟或關閉 DTC 存儲,而不是清除已有信息。兩者經常配合使用。

      • 可用性見解:實現時,注意必須清除 DTC 狀態字節、快照、擴展數據、計數器等全部項。如果groupOfDTC設置為清除某個組,那么該組內部所有 DTC 必須刪除。供電鎖存階段要遵循備份策略,確保 RAM 和 EEPROM 的數據一致。

      特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

      Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

      相關推薦
      熱點推薦
      58歲日本籍主帥神了:率中國男足3-1逆轉東道主,晉級亞洲杯四強

      58歲日本籍主帥神了:率中國男足3-1逆轉東道主,晉級亞洲杯四強

      側身凌空斬
      2026-05-16 03:03:31
      6000萬美元成交!央視致謝網友,國際足聯天價報價落空

      6000萬美元成交!央視致謝網友,國際足聯天價報價落空

      生活新鮮市
      2026-05-16 09:48:31
      他不服文革判決,越獄流亡3萬里,居然活著熬到平反

      他不服文革判決,越獄流亡3萬里,居然活著熬到平反

      瑾瑜聊情感
      2025-08-21 23:50:34
      5歲千萬網紅瑤一瑤跪謝媽媽,被質疑擺拍引爭議!網友:別消耗小孩了

      5歲千萬網紅瑤一瑤跪謝媽媽,被質疑擺拍引爭議!網友:別消耗小孩了

      品牌新
      2026-05-15 17:55:11
      仙女到底咋擦,和你有屁關系?

      仙女到底咋擦,和你有屁關系?

      布衣亂彈
      2026-05-13 18:37:44
      國宴里的兩種敘事:雷軍不丟臉,丟臉的是特朗普

      國宴里的兩種敘事:雷軍不丟臉,丟臉的是特朗普

      黔有虎
      2026-05-15 17:33:21
      兇手按照同學錄逐個殺人,同學錄成“死亡筆記”,作案20年終落網

      兇手按照同學錄逐個殺人,同學錄成“死亡筆記”,作案20年終落網

      莫地方
      2026-05-15 01:00:04
      盛典這天,戚薇背部白皙,吉娜故意撩裙子,被袁姍姍“單胸”搶鏡

      盛典這天,戚薇背部白皙,吉娜故意撩裙子,被袁姍姍“單胸”搶鏡

      翰飛觀事
      2026-05-16 09:46:02
      買下之后迅速賣出!33歲老射手無人信任,雙逆足難題仍存在

      買下之后迅速賣出!33歲老射手無人信任,雙逆足難題仍存在

      里芃芃體育
      2026-05-16 00:15:06
      文詠珊,這大長腿真的是太愛了呀

      文詠珊,這大長腿真的是太愛了呀

      草莓解說體育
      2026-05-05 17:40:52
      白人女性與黑人女性的體味差異,網友真實分享引發熱議

      白人女性與黑人女性的體味差異,網友真實分享引發熱議

      特約前排觀眾
      2025-12-22 00:20:06
      空軍一號離京,中方收到邀請,高市察覺不妙,急著要與特朗普通話

      空軍一號離京,中方收到邀請,高市察覺不妙,急著要與特朗普通話

      千羽解讀
      2026-05-16 10:06:36
      西安市人大常委會辦公廳原一級巡視員賀簡政接受審查調查

      西安市人大常委會辦公廳原一級巡視員賀簡政接受審查調查

      界面新聞
      2026-05-15 19:24:15
      美股存儲芯片股全線殺跌,英特爾跌6%,英偉達跌4%,中國資產普跌,美聯儲加息概率大增

      美股存儲芯片股全線殺跌,英特爾跌6%,英偉達跌4%,中國資產普跌,美聯儲加息概率大增

      21世紀經濟報道
      2026-05-16 07:14:32
      全面加速,第四艘中國航母即將官宣!命名大概率為"江蘇號"

      全面加速,第四艘中國航母即將官宣!命名大概率為"江蘇號"

      清歡百味
      2026-05-16 04:31:22
      市委常委會舉行會議 市委書記袁家軍主持并講話

      市委常委會舉行會議 市委書記袁家軍主持并講話

      愛看劇的阿峰
      2026-05-16 00:27:13
      “莫奈紫”變“摸奶子”,OPPO呼吸都是錯的

      “莫奈紫”變“摸奶子”,OPPO呼吸都是錯的

      梳子姐
      2026-05-13 19:46:10
      毛主席遺體變形變色?每年百萬美金護理費?負責人徐靜:無稽之談

      毛主席遺體變形變色?每年百萬美金護理費?負責人徐靜:無稽之談

      顧秋韻
      2026-05-15 02:13:46
      包工頭與做飯大姐相好5年,工程完工想走,誰曾想大姐竟不好惹

      包工頭與做飯大姐相好5年,工程完工想走,誰曾想大姐竟不好惹

      磊子講史
      2025-07-02 13:45:23
      美媒認為,特朗普這次訪華有一個重大變化:中方已廢了特朗普底牌

      美媒認為,特朗普這次訪華有一個重大變化:中方已廢了特朗普底牌

      蘭亭墨未干
      2026-05-15 18:46:41
      2026-05-16 11:11:00
      新能源自動駕駛 incentive-icons
      新能源自動駕駛
      專注于半導體行業資訊
      977文章數 347關注度
      往期回顧 全部

      科技要聞

      漲的是車價,要的是老命

      頭條要聞

      火遍全網后消失 網紅小胖如今樣貌大變:做了心臟搭橋

      頭條要聞

      火遍全網后消失 網紅小胖如今樣貌大變:做了心臟搭橋

      體育要聞

      35歲坎特,干了一件這輩子最吵的事

      娛樂要聞

      張嘉譯和老婆的差距讓人心酸

      財經要聞

      造詞狂魔賈躍亭

      汽車要聞

      高爾夫GTI刷新紐北紀錄 ID. Polo GTI迎全球首秀

      態度原創

      藝術
      家居
      教育
      手機
      公開課

      藝術要聞

      張自忠密信曝光,書法與國畫關系引發討論

      家居要聞

      110㎡淡而有致的生活表達

      教育要聞

      英國名校也扛不住了?諾丁漢大學被曝將大規模裁員,40余個專業面臨調整

      手機要聞

      小米打頭陣、各家排隊上!國產安卓的UI審美要統一了

      公開課

      李玫瑾:為什么性格比能力更重要?

      無障礙瀏覽 進入關懷版 主站蜘蛛池模板: 国产男女猛烈无遮挡免费视频网址| 亚洲国产精品无码久久电影| 国产鲁鲁视频在线观看| 久久婷婷五月综合中文字幕| 中文字幕av无码人妻| 九九精品免费看| 又大又粗又长的高潮视频| 91中文字幕在线一区| 午夜福利精品国产二区| 国产精品国产三级国产专区53| 99精品欧美一区二区三区| 色翁荡媳又硬又粗又长视频| 亚洲视频在线观看| 牛牛视频一区二区三区| 成人亚欧欧美激情在线观看| 亚洲1区二区三区麻豆| 亚洲欧美精品午睡沙发 | 成年男女免费视频网站不卡| 激情五月天伊人久久| 亚洲视频一区| 精品产品网站| 欧美freesex10一|3| www国产亚洲精品| 色窝窝免费播放视频在线| 亚洲精品日韩av| 欧美性猛交xxxx乱大交极品| 亚洲精品白浆高清久久久久久| 永久免费的啪啪免费网址| 人妻精品久久久无码区色视| 亚洲制服丝袜一区二区三区| 亚洲性网| 欧美激情国产一区在线不卡| 国产午夜视频在线观看| 人妻系列无码专区无码中出| 亚洲AV无码久久久一区二不卡 | 99国产精品人妻人伦| 2020国产欧洲精品网站| 国产无套内射久久久国产| 欧洲亚洲第一区久久久| 国产精品无码专区第一页| 毛片天堂|