这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » J1939协议详解,货车OBD芯片 QBD61 QBD66芯片指令应用手册 货车

共3条 1/1 1 跳转至

J1939协议详解,货车OBD芯片 QBD61 QBD66芯片指令应用手册 货车卡车等商用车车联网数据采集手册

菜鸟
2019-07-25 10:10:06     打赏

货车车联网 J1939 QBD61 QBD66 TDA61/66 在卡车货车工程车商车大客车的应用.货车OBD芯片J1939协议开发

 

J1939 协议简介

J1939是一个广泛应用在重型汽车,卡车,工程车和大客车商务车的CAN协议。大型车队各种商务车辆的管理,货车大客车的时时监控调度等等这些商用OBD应用使得J1939有着比较广泛的应用领域。

 

深圳芯方案电子科技公司开发的QBD芯片(QBD61,QBD66等)支持了J1939 ECU和诊断设备的绝大部分功能,QBD66默认为自动版,使用者无需过多专业知识,即可读取J1939 货车商用车的总线输出,并以车速,转速的数值直接显示。

QBD芯片还可以支持J1939的通讯协议的不同波特率(不同波特率需要改变可编程参数设置)基本可以与市面上绝大部分的商用车工程车货车通讯。但现在很多厂商根据J1939协议,自定义了很多应用层,所以在使用过程中可能会发现有异常现象,请反馈给我们,我们会尽快的修正。QBD芯片内部有方便的升级功能。QBD芯片自定商用车OBD指令用户无需了解J1939协议,即可直接获取货车,商用车ECU的各个参数。QBD芯片还拓展更多高级指令,用户可以直接得到当前车辆的油耗,里程。

 

 

QBD芯片J1939选型

QBD61 QBD66分为自动版 手动版两个版本 一般61是手动版,66自动版。 所谓自动版 手动版,简单来说是指上位机获取OBD数据的方式。 手动版--- 手动进行车辆数据的查询,灵活查询各种OBD数据参数,适用于那些低频,且专业诊断的用户,例年检,维修,和各种特定场景应用的客户。

自动版--- 自动实时上传车辆的常用数据给上位机,特定情况下也可以下发指令类似手动版的方式进行查询(但是这个不能频繁手动发送,且响应速度会稍延迟)。适用于 车联网,车队监控,车辆运行状态监控的车联网应用。 需要OBD数据高频,且OBD数据较固定的客户。

 

QBD61芯片J1939功能介绍

依照SAE J193981诊断型工具的规范 QBD芯片有以下功能:QBD61默认为手动 建议熟悉操作过汽车协议开发的专业人员开发使用。

 

  1. 基本协议通讯功能

     

    1 在使用一个源地址前,发出有效的地址申明(可选)

    2 在接收到地址声明后QBD芯片可发送地址声明或不可声明源地址消息。

    3 名字域可编程(修改PP编程参数)。

    4 源地址可更换。

    5 QBD芯片能自动接收J1939定义两种多包数据,全局的广播BAM消息及特定地址的

    RTS/CTS的多包消息,并能同时接收多个ECU同时发出的多个BAM数据消息和一个RTS/CTS多包数据。

     

  2. 高级扩展应用指令

     

    1、直接数据输出,各种常用数据无需二次转换,直接以十进制ASCII码回传汽车各参数(如转速,车速,水温等等)

    2、高级数据指令,如油耗,里程,还支持多参数一次性读取。

     

     

     

  3. 标准指令举例(客户亦无须了解J1939协议直接使用QBD指令读取各个参数)

     

    J1939默认)的波特率根据J193911定义为250kbps, 也许有的应用使用其它的波特率,你可改变可编程参数PP 2B实现。

    J1939协议定义, J1939消息头为29ID,数据域长度最多8位(ISO15765是固定8位长的)诊断方法及其实际的数据传输链路层请查阅SAE J193973SAE J193921

    QBD芯片发送J1939消息的方法和标准的OBD2协议一样 ,头格式数据QBD芯片能定义并自动添加到消息中。

     

    例:如你想请求ECU发动机温度的信息,J1939PGN 00 FE EE参数组传输这个信息。你只要向QBD芯片发出:

     

    >EE FE 00 OBD 命令 (高字节在后)。

     

    QBD芯片会自动加上附加的头格式字节,并自动配置接收正确的响应消息,QBD芯片默认的头格式字节值为18 EA FF F9 表示为OBD诊断工具的全局请求:

     

    18是优先级和数据页

    EA为请求数据的PDF格式

    FF为全局地址

    F9J1939定义的诊断工具源地址

     

    改变头格式字节用AT SH xx xx xx 命令改变,高5位用AT CP xx设置。

     

    QBD芯片的默认值对请求的响应消息可能是单个数据桢或多个数据桢(多包消息)QBD芯片都能正确返回数据并显示。如果是多包消息,QBD芯片自动为你处理应答内容,你不用关心它如何在接收多包消息时是如何应答的。J1939定义了两种格式的多包消息,一种是全局的BAM广播消息,还有一种是一对一的RTS/CTS控制多包消息,QBD芯片能同时接收多个ECU发出个多个BAM消息及一个RTS/CTS消息,完全符合J1939要求。

    接收RTS/CTS多包消息,QBD芯片自动发送CTS控制消息, 这个和ISO15765不同,QBD芯片在用CFC0关闭时,不影响J1939协议时QBD芯片CTS发送。对于BAM多包消息, J1939定义不用发送控制消息,QBD芯片能自动接收并返回给PCCAF0CAF1只是影响J1939返回数据的显示格式,在QBD芯片发送时不影响。

    CAF1J1939ISO15765一样,显示数据总长度及消息包的编号,CAF0时仅返回全部的数据域的数据。ATH1打开头格式显示时返回整个消息包的内容。

    SAE J1939预定义了一些诊断模式, 第一个是诊断模式DM1 J1939CAN网络系统中,诊断模式(DM1)消息周期性的在总线上广播(如果有故障码)。如果想监听总线上的DM1消息,只要简单地使用内部命令DM1

     

    >AT DM1

     

    QBD芯片将会在收到DM1消息时把信息的内容返回给PC

     

    当想监听其他内容的诊断消息时,只要用AT MP 命令用参数组编号来监听,

    例如:DM2的参数组编号为6522716进制数00 FE CB QBD芯片只要输入后4位数,前面两位默认值为”00” ,所以监听DM2诊断消息则输入:

     

    >AT MP FE CB

     

    QBD芯片发出J1939OBD命令时根据命令的字节数来分成两种类型的接收方法,当发送的命令为三个字节长度时,QBD芯片认为这是个PGN(参数据编号)请求,例:前面的>EE FE 00” OBD命令。QBD芯片将只接收该PGM消息的响应。如果不是3字节长,QBD芯片作为一般的命令处理,将只接收发送给目标地址为QBD芯片源地址(F9)的消息。

     

    J1939的地址、名字及申明

     

    QBD芯片源地址默认为OBD标准地址F9,可通过PP 0E更改其默认值。QBD芯片J1939名字由8字节组成的64位,可通过改变PP 19 1A …20的内容更改。

    QBD芯片可用 AT ADC1/AT ADC0内部命令设定是否进行地址申明,默认为QBD芯片不进行地址申明。注:根据J1939要求在使用源地址前必须进行原地址申明。

    J1939定义,控制应用程序CA(诊断仪)的名字是个64位标识符,由十个域组成,其中6个域由J1939标准定义的给出,其余4个域由网络特性及汽车架构给出或者由生产商给出。

    QBD芯片的设定名字或地址时必须附给J1939定义,否则可能会引起总线地址冲突。

     

    64位名字格式组成如下

     

     

     

     

     

    J1939的多包消息传送

     

  4. RTS/CTS多包消息

     

  5. 全局广播的BAM多包消息

         

    QBD芯片会自动处理以上两种多包消息。

     

    QBD66芯片J1939功能介绍

    依照SAE J1939—的规范 QBD66芯片有以下功能:QBD66默认为自动版,使用群体无需过多专业知识,即可读取J1939 货车商用车的总线输出,并以车速,转速的数值直接显示。

     

     基本功能使用

    1.QBD66(自动版)

    1.1使用QBD3001ECU模拟器读取QBD66 J1939协议的数据

    ECU模拟器电源5V供电,接好OBD头,并且将ECU模拟器的协议切换到c协议,如下图所示。

     

     

    1.2电脑端打开SSCOM软件(串口、网络数据调试器),然后选择好对应端口号,波特率选择为115200之后打开串口,就会看到QBD66的数据流了,可以观察到车辆当前的信息了,如下图所示。

     

    1.3数据流格式:BD$V12.2;R05093;S039;P000.0;O027.4;C-40;L050.1;XM008.731;M000644;F000.056;T0000060;A01;B00;D00;GX27;GY257;GZ65491;@4

    BD$ 为头格式分号为每条数据结尾的标示

    V = 电瓶电压
    R = RPM 转速
    S = SPD 速度
    P = TP 绝对节气门开度(位置)
    O = LOD 发动机负荷
    C = ECT 冷却液温度
    L = FLI 剩余油量 1分钟刷新一次

    XM 此两位为瞬时油耗

    其中第一位 X表示当前车辆是X传感器,直接数据就是当前车辆的瞬时油耗。

    其中第二位 M表示百公里油耗 (行驶显示 速度>0)

    M  =  MILES-T 此次的里程 单位 米
    F  =  FUELS-T 此次的油耗  单位 L

    T  =  TIMES 此次运行时间  单位 秒
    E   =  汽车发动机状态0熄火,1点火,2是自动启停状态,3是油电混合或油气状态
    A   =  急加速次数
    B   =  急刹车次数 
    D   =  故障码个数 1分钟刷新一次(如果有变化就把故障码显示出来) 例如1,P123;显示一次
    GX  =  X轴震动值(有GSENSOR的时候显示)
    GY  =  X轴震动值(有GSENSOR的时候显示)
    GZ  =  X轴震动值(有GSENSOR的时候显示)

    @n  =  n 为输出的顺序以方便上位机判断当前指令是否结束和依次的顺序。

    1.4休眠唤醒方式

    ECU模拟器上,按下最右侧按钮(点火/熄火按钮),此时数码管灯灭,则表示车已经熄火,OBD进入休眠低功耗状态,再次按下最右侧按钮,此时数码管点亮,表示车点火启动,OBD从休眠状态唤醒,开始工作。如下图所示,图一为休眠,图二为唤醒。

     

     

  6. QBD61(手动版)

    2.1首先将线材都连接好,USB一端连接电脑USB口,另一端连接到ECU模拟器上,并且将协议切换到c协议。如下图所示。

     

    2.2同样在电脑端打开SSCOM软件(串口、网络数据调试器),选择对应的端口号,波特率选择38400,然后打开串口。由于QBD61是手动版,所以打开串口不会看到数据流,需要手动发送指令,即可得到需要读取的数据,以下步骤为读取转速(RPM)为例。

    1)发送ATL1

     —>ATl1

    <ATl1OK

    2)发送ATSPA

    >STAPA

    <ATSPAOK

    3)然后发送AT MP 00F004

    ->AT MP 00F004

    然后会接收到十六进制的数据流,如下图所示。

     

    将数据的第四位和第五位拿出来为101F,并且把高位放在后低位放在前,得到1F10,然后除以8,会得到转速的实际值。

    2.3以下步骤为读取车速的(SPD)数据

    1)发送ATL1

     —>ATl1

    <ATl1OK

    2)发送ATSPA

    >STAPA

    <ATSPAOK

    3)发送 AT MP FEF1,就会接受到数据,如下图所示。

     

    将第二位和第三位的数拿出来为DD 0C,高位在后低位在前为0C DD,然后再除以256,就可以得到实际的车速值。

     

     

     

     




    关键词: J1939     QBD61          QBD66     货车     协议         

    工程师
    2019-07-25 21:43:29     打赏
    2楼

    总结的很全面!


    菜鸟
    2019-09-19 18:48:31     打赏
    3楼

    深圳市芯方案电子科技有限公司


    共3条 1/1 1 跳转至

    回复

    匿名不能发帖!请先 [ 登陆 注册 ]