<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
      網(wǎng)易首頁 > 網(wǎng)易號(hào) > 正文 申請(qǐng)入駐

      J1939診斷應(yīng)用層協(xié)議詳解:從DM1報(bào)文格式到DTC解析的完整指南

      0
      分享至

      J1939診斷應(yīng)用層協(xié)議(SAE J1939-73)是重型車輛診斷的核心標(biāo)準(zhǔn),它規(guī)范了故障碼(DTC)的格式、診斷報(bào)文的定義以及多包傳輸機(jī)制。本文結(jié)合協(xié)議原理與C++代碼示例,深入解析DM1報(bào)文的解析與發(fā)送過程。


      1. J1939診斷應(yīng)用層協(xié)議簡介

      J1939的診斷應(yīng)用層(對(duì)應(yīng)SAE J1939-73標(biāo)準(zhǔn))不僅覆蓋基礎(chǔ)的故障檢測(cè)功能,還涵蓋了監(jiān)視系統(tǒng)、內(nèi)存存取、數(shù)據(jù)轉(zhuǎn)換、引導(dǎo)載入、標(biāo)定等一系列復(fù)雜的交互功能。其核心目的之一是標(biāo)準(zhǔn)化不同廠商、不同車型的診斷信息交互方式,避免重復(fù)開發(fā)。

      這些功能通過不同類型的診斷報(bào)文(Diagnostic Message, DM) 實(shí)現(xiàn),例如:

      • DM1 :當(dāng)前激活故障碼

      • DM2 :歷史故障碼

      • DM3 :歷史故障碼清除/復(fù)位

      • DM11 :凍結(jié)幀數(shù)據(jù)

      2. 核心概念解析

      在深入代碼之前,需要理解J1939診斷的幾個(gè)核心術(shù)語。

      2.1 SPN (可疑參數(shù)編號(hào))

      SPN用于標(biāo)識(shí)具體的子系統(tǒng)、部件或故障對(duì)象(如發(fā)動(dòng)機(jī)、傳感器)。它是一個(gè)19位的編號(hào),前511個(gè)與SAE J1587兼容,之后的由SAE定義或廠商自定義。

      2.2 DTC (診斷故障碼) 的構(gòu)成

      J1939的DTC結(jié)構(gòu)與常見的UDS(3字節(jié))不同,它由4個(gè)字段組成,共占4個(gè)字節(jié)

      字段

      位數(shù)

      描述

      SPN

      19位

      指示故障發(fā)生在哪個(gè)部件/子系統(tǒng)

      FMI

      5位

      故障模式指示器,描述故障類型(如電壓高、數(shù)據(jù)不穩(wěn)定)

      OC

      7位

      故障發(fā)生次數(shù)

      CM

      1位

      SPN轉(zhuǎn)換方式(通常設(shè)為0,表示使用最新版本轉(zhuǎn)換)


      2.3 PGN (參數(shù)組編號(hào))

      診斷報(bào)文在總線上通過PGN進(jìn)行識(shí)別。例如,**DM1報(bào)文的PGN是65226 (0x00FECA)**。

      3. 診斷應(yīng)用示例:DM1報(bào)文(當(dāng)前故障碼)

      DM1是診斷中最核心的報(bào)文,用于周期性廣播當(dāng)前處于激活狀態(tài)的故障碼。根據(jù)SAE J1939-73規(guī)范,當(dāng)存在激活故障時(shí),ECU必須每秒發(fā)送一次DM1報(bào)文;如果故障狀態(tài)發(fā)生變化,必須立即發(fā)送。

      3.1 DM1報(bào)文格式

      DM1報(bào)文數(shù)據(jù)域格式如下(Intel格式,小端模式):

      Byte

      參數(shù)

      描述

      1

      指示燈狀態(tài)

      Bit 7-6: MIL, Bit 5-4: 紅色停止燈, Bit 3-2: 琥珀色警告燈, Bit 1-0: 保護(hù)燈

      2

      預(yù)留

      通常為0xFF

      3-6

      DTC

      SPN (19位) + FMI (5位) + OC (7位) + CM (1位)

      7-8

      DTC

      如果存在多個(gè)故障,繼續(xù)排列


      3.2 C++ 代碼示例:解析DM1報(bào)文

      以下代碼演示如何從CAN原始數(shù)據(jù)中提取DM1中的第一個(gè)DTC,并解析相關(guān)的指示燈狀態(tài)。

      #include  
                
      #include

      // 定義DTC結(jié)構(gòu)體
      struct J1939_DTC {
      uint32_t spn; // 可疑參數(shù)編號(hào) (0 - 524287)
      uint8_t fmi; // 故障模式標(biāo)識(shí) (0 - 31)
      uint8_t oc; // 發(fā)生次數(shù) (0 - 126)
      bool cm; // 轉(zhuǎn)換方式 (通常為0)
      };

      // 解析DM1報(bào)文的函數(shù)
      // data: 指向CAN數(shù)據(jù)域8字節(jié)的指針
      void Parse_DM1(const uint8_t* data) {
      // 1. 解析指示燈狀態(tài) (Byte 1)
      uint8_t lampStatus = data[0];
      bool mil_on = (lampStatus >> 7) & 0x01; // Malfunction Indicator Lamp
      bool red_stop_on = (lampStatus >> 5) & 0x01; // Red Stop Lamp
      bool amber_warning_on = (lampStatus >> 3) & 0x01; // Amber Warning Lamp
      bool protect_on = (lampStatus >> 1) & 0x01; // Protection Lamp

      std::cout << "=== DM1 解析結(jié)果 ===" << std::endl;
      std::cout << "MIL燈: " << (mil_on ? "點(diǎn)亮" : "熄滅") << std::endl;
      std::cout << "紅色停止燈: " << (red_stop_on ? "點(diǎn)亮" : "熄滅") << std::endl;
      std::cout << "琥珀色警告燈: " << (amber_warning_on ? "點(diǎn)亮" : "熄滅") << std::endl;

      // 2. 解析第一個(gè)DTC (Byte 3-6)
      // 注:J1939通常使用Intel格式,即低字節(jié)在前
      uint32_t raw_spn_fmi = data[3] | (data[4] << 8) | (data[5] << 16) | (data[6] << 24);
      J1939_DTC dtc;
      // 提取SPN (低19位: bits 0-18)
      dtc.spn = raw_spn_fmi & 0x7FFFF;
      // 提取FMI (bits 19-23) -> 右移19位,取低5位
      dtc.fmi = (raw_spn_fmi >> 19) & 0x1F;
      // 提取CM (bit 24) -> 右移24位,取低1位
      dtc.cm = (raw_spn_fmi >> 24) & 0x01;
      // 提取OC (bits 25-31) -> 右移25位,取低7位
      dtc.oc = (raw_spn_fmi >> 25) & 0x7F;

      std::cout << "\n=== 當(dāng)前激活故障碼 (DTC ) ===" << std::endl;
      std::cout << "SPN: " << dtc.spn << " (部件標(biāo)識(shí))" << std::endl;
      std::cout << "FMI: " << (int)dtc.fmi << " (故障模式)" << std::endl;
      std::cout << "OC: " << (int)dtc.oc << " (發(fā)生次數(shù))" << std::endl;
      std::cout << "CM: " << dtc.cm << " (轉(zhuǎn)換方式)" << std::endl;
      }

      int main() {
      // 模擬總線接收到的一幀DM1報(bào)文
      // 場(chǎng)景:發(fā)動(dòng)機(jī)進(jìn)氣歧管壓力(SPN 102)電壓低于正常值(FMI 4),發(fā)生2次
      // 數(shù)據(jù)排列 (Intel 格式):
      // Byte1: 指示燈(0x04) -> AMBER燈亮
      // Byte2: 0xFF
      // Byte3-6: SPN=102, FMI=4, OC=2, CM=0
      // 計(jì)算 Raw Value: SPN(102) | (FMI(4)<<19) | (CM(0)<<24) | (OC(2)<<25)
      // 結(jié)果 = 0x00040066 (小端存儲(chǔ)在內(nèi)存中: 0x66, 0x00, 0x04, 0x00)
      uint8_t simulated_dm1[8] = {0x04, 0xFF, 0x66, 0x00, 0x04, 0x00, 0xFF, 0xFF};
      Parse_DM1(simulated_dm1);
      return 0;
      }
      3.3 C++ 代碼示例:發(fā)送DM1報(bào)文

      在實(shí)際ECU開發(fā)中,需要構(gòu)造并發(fā)送DM1。以下示例展示如何打包一個(gè)DTC并發(fā)送(此處模擬傳輸層發(fā)送函數(shù))。

      #include  
                
      #include
      #include

      // 模擬CAN發(fā)送函數(shù)(實(shí)際開發(fā)中替換為驅(qū)動(dòng)層函數(shù))
      bool CAN_Send(uint32_t id, const uint8_t* data, uint8_t len) {
      std::cout << "發(fā)送CAN ID: 0x" << std::hex << id << std::endl;
      std::cout << "數(shù)據(jù): ";
      for (int i = 0; i < len; i++) {
      std::cout << std::hex << (int)data[i] << " ";
      }
      std::cout << std::dec << std::endl;
      return true;
      }

      // 發(fā)送DM1報(bào)文的函數(shù)
      void Send_DM1(uint8_t lamp_status, const J1939_DTC* dtc_list, uint8_t count) {
      uint8_t data[8];
      memset(data, 0xFF, sizeof(data)); // 初始化填充0xFF
      // 設(shè)置Byte 1: 指示燈狀態(tài)
      data[0] = lamp_status;
      // 設(shè)置Byte 2: 預(yù)留
      data[1] = 0xFF;
      if (count > 0 && dtc_list != nullptr) {
      // 打包第一個(gè)DTC到 Bytes 3-6
      // 構(gòu)造32位原始DTC值: Bytes = SPN + (FMI<<19) + (CM<<24) + (OC<<25)
      uint32_t raw_dtc = dtc_list[0].spn;
      raw_dtc |= (dtc_list[0].fmi << 19);
      raw_dtc |= ((dtc_list[0].cm ? 1 : 0) << 24);
      raw_dtc |= (dtc_list[0].oc << 25);
      // 寫入數(shù)組 (Intel格式: 低字節(jié)在低地址)
      data[3] = raw_dtc & 0xFF;
      data[4] = (raw_dtc >> 8) & 0xFF;
      data[5] = (raw_dtc >> 16) & 0xFF;
      data[6] = (raw_dtc >> 24) & 0xFF;
      // 注意:若有多個(gè)DTC,需要利用傳輸層協(xié)議(TP)發(fā)送多包,此處僅演示單包
      }
      // DM1的PGN是65226,對(duì)應(yīng)CAN ID通常為 0x18FECA00 + Source Address
      uint32_t can_id = 0x18FECA00; // 假設(shè)源地址為0
      CAN_Send(can_id, data, 8);
      }

      int main() {
      J1939_DTC active_dtc;
      active_dtc.spn = 100; // 發(fā)動(dòng)機(jī)機(jī)油壓力
      active_dtc.fmi = 1; // 數(shù)據(jù)低于正常范圍
      active_dtc.oc = 3; // 發(fā)生3次
      active_dtc.cm = 0; // 標(biāo)準(zhǔn)轉(zhuǎn)換
      // 點(diǎn)亮琥珀色警告燈
      uint8_t lamp = 0x04; // Amber燈亮
      std::cout << "發(fā)送激活故障碼 DM1..." << std::endl;
      Send_DM1(lamp, &active_dtc, 1);
      return 0;
      }
      4. 多包傳輸機(jī)制

      當(dāng)DM1報(bào)文包含的激活故障碼超過1個(gè)時(shí)(即數(shù)據(jù)超過8字節(jié)),必須使用J1939傳輸層協(xié)議(TP) 進(jìn)行多包傳輸。

      1. **BAM (廣播公告報(bào)文)**:發(fā)送方先發(fā)出PGN 60416的報(bào)文,聲明即將發(fā)送消息的字節(jié)總數(shù)、分包數(shù)量及目標(biāo)PGN(如65226)。

      2. **DT (數(shù)據(jù)傳輸報(bào)文)**:隨后發(fā)送一系列PGN 60160的報(bào)文,每一包包含7字節(jié)的有效載荷,順序拼接成完整的DM1報(bào)文。

      下圖展示了多包DM1在總線上的邏輯結(jié)構(gòu):

      [ BAM Packet ] --> 告知: 我要發(fā)送22字節(jié)數(shù)據(jù),分4包發(fā),內(nèi)容屬于DM1
      [ DT Packet ] --> 序列號(hào)1 + Data(Byte 0-6)
      [ DT Packet ] --> 序列號(hào)2 + Data(Byte 7-13)
      [ DT Packet ] --> 序列號(hào)3 + Data(Byte 14-20)
      [ DT Packet ] --> 序列號(hào)4 + Data(Byte 21-22 + 填充)
      5. 總結(jié)

      J1939診斷應(yīng)用層協(xié)議(J1939-73)通過標(biāo)準(zhǔn)化的SPNFMIDM1報(bào)文,為重型車輛提供了高效的故障自診斷方案。理解其DTC的位/字節(jié)布局以及多包傳輸(BAM/DT) 機(jī)制,是進(jìn)行商用車控制器(ECU)開發(fā)和故障診斷的基礎(chǔ)。

      與乘用車常用的UDS協(xié)議不同,J1939診斷具有更強(qiáng)的周期性廣播特性(每秒一次的固定心跳),這要求開發(fā)者在設(shè)計(jì)ECU軟件時(shí),需嚴(yán)格遵循其發(fā)送時(shí)序,以防止因報(bào)文速率過高導(dǎo)致總線負(fù)載異常。

      特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。

      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.

      相關(guān)推薦
      熱點(diǎn)推薦
      特朗普歡迎晚宴上的10位中國企業(yè)家,都是什么來頭?

      特朗普歡迎晚宴上的10位中國企業(yè)家,都是什么來頭?

      筆記俠
      2026-05-15 19:27:15
      錢學(xué)森36歲還未婚,妹妹錢學(xué)英幫他相親,他卻說:要不你嫁給我吧

      錢學(xué)森36歲還未婚,妹妹錢學(xué)英幫他相親,他卻說:要不你嫁給我吧

      顧史
      2026-05-02 07:38:44
      被曝涉黃,觸目驚心!網(wǎng)友怒了: 看得脊背發(fā)涼

      被曝涉黃,觸目驚心!網(wǎng)友怒了: 看得脊背發(fā)涼

      每日經(jīng)濟(jì)新聞
      2026-05-13 21:30:06
      52歲謝金燕近況曝光!馬甲線鋒利如刀,背后卻藏著數(shù)不盡的坎坷

      52歲謝金燕近況曝光!馬甲線鋒利如刀,背后卻藏著數(shù)不盡的坎坷

      飄飄然的娛樂匯
      2026-05-14 21:15:11
      人活多久,看喝酒就知道?壽命短的人,喝酒一般有這6個(gè)特征

      人活多久,看喝酒就知道?壽命短的人,喝酒一般有這6個(gè)特征

      芹姐說生活
      2026-05-14 23:38:55
      中國做出兩個(gè)承諾!特朗普親口證實(shí):不提供軍武、幫忙通海峽

      中國做出兩個(gè)承諾!特朗普親口證實(shí):不提供軍武、幫忙通海峽

      子桑說
      2026-05-15 16:12:39
      “暴富夢(mèng)”碎?深圳這個(gè)區(qū)已有7個(gè)舊改“宣告失效”!

      “暴富夢(mèng)”碎?深圳這個(gè)區(qū)已有7個(gè)舊改“宣告失效”!

      新浪財(cái)經(jīng)
      2026-05-16 00:01:48
      火箭或再次豪賭!美媒曬6換2交易方案:申京換小卡攜手KD組雙超巨

      火箭或再次豪賭!美媒曬6換2交易方案:申京換小卡攜手KD組雙超巨

      鍋?zhàn)踊@球
      2026-05-15 21:57:04
      兩老人撿十幾年破爛存五六萬,這都下得去手!真正的“騙子”是誰

      兩老人撿十幾年破爛存五六萬,這都下得去手!真正的“騙子”是誰

      走讀新生
      2026-05-15 15:05:17
      受奶奶影響!馬斯克6歲兒子穿新中式帶火小眾國牌,正在學(xué)普通話

      受奶奶影響!馬斯克6歲兒子穿新中式帶火小眾國牌,正在學(xué)普通話

      草莓信箱
      2026-05-15 20:43:36
      小寶與王某雷,誰探訪花的數(shù)量更多?

      小寶與王某雷,誰探訪花的數(shù)量更多?

      挪威森林
      2026-01-31 12:15:26
      工資8000-12000(6險(xiǎn)2金+雙休)無錫面向社會(huì)公開招243名人員公告!本地居民優(yōu)先,5月15日開始報(bào)名!大專可報(bào)!可入編!

      工資8000-12000(6險(xiǎn)2金+雙休)無錫面向社會(huì)公開招243名人員公告!本地居民優(yōu)先,5月15日開始報(bào)名!大專可報(bào)!可入編!

      錫城頭條
      2026-05-15 10:20:40
      "簡直是鬧劇"——英超VAR審查小組承認(rèn)西漢姆聯(lián)被漏判兩粒點(diǎn)球

      "簡直是鬧劇"——英超VAR審查小組承認(rèn)西漢姆聯(lián)被漏判兩粒點(diǎn)球

      綠茵情報(bào)局
      2026-05-16 00:03:22
      廣東省紀(jì)委監(jiān)委通報(bào):何寧卡被查

      廣東省紀(jì)委監(jiān)委通報(bào):何寧卡被查

      鄉(xiāng)知鄉(xiāng)見
      2026-05-15 23:53:41
      天吶!看到孫儷早年舊合照,我終于懂鄧超為啥一眼就淪陷

      天吶!看到孫儷早年舊合照,我終于懂鄧超為啥一眼就淪陷

      東方不敗然多多
      2026-05-15 17:52:33
      卸磨殺驢的結(jié)果!文胖:詹皇愿去別隊(duì)拿中產(chǎn),也不愿降薪3000萬

      卸磨殺驢的結(jié)果!文胖:詹皇愿去別隊(duì)拿中產(chǎn),也不愿降薪3000萬

      錢說體育
      2026-05-15 09:05:10
      馬斯克訪華像回家,母親已長住上海,兒子身價(jià)萬億她還做視頻帶貨

      馬斯克訪華像回家,母親已長住上海,兒子身價(jià)萬億她還做視頻帶貨

      別人都叫我阿腈
      2026-05-15 12:53:23
      久坐危害被低估:即使每天運(yùn)動(dòng)也難抵消

      久坐危害被低估:即使每天運(yùn)動(dòng)也難抵消

      字節(jié)漫游指南
      2026-05-14 12:28:06
      紫菱跟前夫家搶孩子?任嘉倫婚變了?丞磊晉升太子?辛云來被罵破防?姨太問答

      紫菱跟前夫家搶孩子?任嘉倫婚變了?丞磊晉升太子?辛云來被罵破防?姨太問答

      毒舌扒姨太
      2026-05-15 22:40:09
      深圳一建筑工地兩名工人從6樓墜亡?當(dāng)?shù)刈〗ù_認(rèn)涉事項(xiàng)目有安全事故發(fā)生致2人死亡,已要求項(xiàng)目停工整改

      深圳一建筑工地兩名工人從6樓墜亡?當(dāng)?shù)刈〗ù_認(rèn)涉事項(xiàng)目有安全事故發(fā)生致2人死亡,已要求項(xiàng)目停工整改

      大風(fēng)新聞
      2026-05-15 17:32:44
      2026-05-16 06:20:49
      新能源自動(dòng)駕駛 incentive-icons
      新能源自動(dòng)駕駛
      專注于半導(dǎo)體行業(yè)資訊
      977文章數(shù) 347關(guān)注度
      往期回顧 全部

      汽車要聞

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

      頭條要聞

      黃仁勛在北京喝豆汁痛苦皺眉 問“這是什么東西”

      頭條要聞

      黃仁勛在北京喝豆汁痛苦皺眉 問“這是什么東西”

      體育要聞

      德約科維奇買的球隊(duì),從第6級(jí)聯(lián)賽升入法甲

      娛樂要聞

      方媛為何要來《桃花塢6》沒苦硬吃?

      財(cái)經(jīng)要聞

      騰訊掉隊(duì),馬化騰戳破真相

      科技要聞

      直降千元起步!蘋果華為率先開啟618讓利

      態(tài)度原創(chuàng)

      本地
      家居
      手機(jī)
      時(shí)尚
      公開課

      本地新聞

      用蘇繡的方式,打開江西婺源

      家居要聞

      110㎡淡而有致的生活表達(dá)

      手機(jī)要聞

      iPhone 17系列全系跳水,最高立減2500!

      頂級(jí)團(tuán)隊(duì)拍出來的作品不如素人,問題出在哪兒了?

      公開課

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

      無障礙瀏覽 進(jìn)入關(guān)懷版 主站蜘蛛池模板: 久久人妻无码AⅤ毛片A| 欧美亚洲国产人妖系列视| 日本一区二区中文字幕| 中文字幕二区三区| 欧美喷潮最猛视频| 蜜臀午夜一区二区在线播放| 欧美a级视频| 无码精品人妻一区二区三区人妻斩| 性色av一区二区三区人妻| 日韩精品一区二区三区不卡| 伊人无码视频| 欧美曰韩国久久| 国产亚洲精品视频中文字幕| 国产乱码1卡二卡3卡四卡5| 午夜激情网站| 国产成人精品手机在线观看| 亚洲男人天堂| 无码高潮喷水专区久久| 男女后进式猛烈xx00动态图片| 日韩丰满少妇无吗视频激情内射| 国产精品 亚洲一区二区三区| 青青草无码国产亚洲| 精品国产乱码久久久久软件 | 99国产欧美另娄久久久精品| 中文字幕亚洲资源网久久| 亚洲一二区三区| 毛片无遮挡高清免费| 久久人人妻人人爽人人卡片av| 国产高潮流白浆喷水免费网站| 亚洲爆乳中文字幕无码专区网站| 99久热在线精品视频观看 | 开心一区二区三区激情| 人妻夜夜添夜夜无码av| 国产成人精品三上悠亚| 成人欧美一区二区三区在线观看| 国产精品亚洲丝袜专区| 炉霍县| 亚洲国产天堂久久综合226114 | 久爱www人成免费网站| 翘臀少妇被扒开屁股日出水爆乳| 亚洲美女屁股眼交3|