汽车DTC故障内码与标准故障码的解析与转换

目录

一、故障内码与标准故障码的解析

(1)故障内码的信息格式与解析

(2)故障内码中DTC状态的解析

(3)故障内码与标准故障码之间的对应关系

二、故障内码与标准故障码的转换代码


一、故障内码与标准故障码的解析

(1)故障内码的信息格式与解析

通过UDS读出来的DTC信息格式:

 例如:

TX:03 19 02 09 00 00 00 00 

RX:11 CF 59 02 FF 31 54 06

RX:21 AF 30 3C 13 AF 30 3D

其中:31 54 06 AF对应上述DTC故障内码的格式

  • DTC High Byte:31
  • DTC Middle Byte:54
  • DTC Low Byte:06 
  • DTC Status:AF

注:DTC Low Byte用于描述故障种类与子类型

(2)故障内码中DTC状态的解析

当DTC Status = 0x24时候的对应位解释:

(3)故障内码与标准故障码之间的对应关系

  • 标准故障码中的第一位表示所属系统:

  •  标准故障码的第二位表示故障类型:

  • 标准故障码的第三位表示故障所属子系统
  • 标准故障码的第四、五位表示具体故障对象和类型

例如:

标准故障码:U10BD 83 

转换成故障内码:0xD0BD83

二、故障内码与标准故障码的转换代码

用Python根据上述规则写的转换代码

dtc_hex2str_15_14_bit= {
    "00" : "P", # Powertrain  动力系统故障
    "01" : "C", # Chassis     底盘故障
    "10" : "B", # Body        车身故障
    "11" : "U", # Network     网络故障
}

dtc_str2hex_15_14_bit= {
   "P" : "00",  
   "C" : "01",
   "B" : "10",
   "U" : "11",
}


class DtcAnalyser(object):
    def __init__(self):
        pass

    def str2hex(self, dtc_code : str) -> str:
        # DTC High Byte   
        bit15_14_str = dtc_str2hex_15_14_bit.get(dtc_code[0])            # 故障所属系统
        bit13_12_str = bin(int(dtc_code[1], 16))[2:].zfill(2)            # 故障类型:0:ISO/SAE标准故障, 1:制造商自定义故障码, 2:ISO/SAE预留, 3:ISO/SAE预留
        bit11_8_str =  bin(int(dtc_code[2], 16))[2:].zfill(4)            # 故障所属子系统 

        # DTC Middle Byte
        bit7_0_str =   bin(int(dtc_code[3:5], 16))[2:].zfill(8)          # 故障对象和类型

        # DTC Low Byte
        dtc_low_byte_str = bin(int(dtc_code[5:], 16))[2:].zfill(8)

        # Decode to Binarary
        dtc_bin_str = bit15_14_str + bit13_12_str + bit11_8_str  + bit7_0_str + dtc_low_byte_str

        return hex(int(dtc_bin_str, 2))

    def hex2str(self, dtc_hex : str) -> str:
        # Str filter
        dtc_hex_str = dtc_hex.replace('0x', '') if '0x' in dtc_hex else dtc_hex

        # To Binarary
        dtc_bin_str = bin(int(dtc_hex_str, 16))[2:].zfill(24)            # 故障码一般由3个字节组成

        # Decode to DTC
        dtc_bit1_str = dtc_hex2str_15_14_bit.get(dtc_bin_str[0:2])
        dtc_bit2_str = str(int(dtc_bin_str[2:4], 2))
        dtc_bit3_str = str(int(dtc_bin_str[4:8], 2))
        dtc_middle_low_str = dtc_hex_str[2:]


        dtc_code_str = dtc_bit1_str + dtc_bit2_str + dtc_bit3_str  + dtc_middle_low_str
        
        return dtc_code_str

if __name__ == "__main__":
    dtc_code_str = "U10BD83"
    dtc_hex_str = "0x318F13"
    
    dtc_analyser = DtcAnalyser()                                                                                                                                                                                                                             
    print("new:%s"%(dtc_analyser.str2hex(dtc_code_str)))
    print(dtc_analyser.hex2str(dtc_hex_str))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不吃鱼的猫丿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值