本帖最后由 OBD芯方案 于 2019-9-19 16:07 编辑
货车车联网 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 J1939—81诊断型工具的规范 QBD芯片有以下功能:QBD61默认为手动 建议熟悉操作过汽车协议开发的专业人员开发使用。
一、基本协议通讯功能
1、 在使用一个源地址前,发出有效的地址申明(可选)
2、 在接收到地址声明后QBD芯片可发送地址声明或不可声明源地址消息。
3、 名字域可编程(修改PP编程参数)。
4、 源地址可更换。
5、 QBD芯片能自动接收J1939定义两种多包数据,全局的广播BAM消息及特定地址的
RTS/CTS的多包消息,并能同时接收多个ECU同时发出的多个BAM数据消息和一个RTS/CTS多包数据。
二、高级扩展应用指令
1、直接数据输出,各种常用数据无需二次转换,直接以十进制ASCII码回传汽车各参数(如转速,车速,水温等等)
2、高级数据指令,如油耗,里程,还支持多参数一次性读取。
三、标准指令举例(客户亦无须了解J1939协议直接使用QBD指令读取各个参数)
J1939(默认)的波特率根据J1939—11定义为250kbps, 也许有的应用使用其它的波特率,你可改变可编程参数PP 2B实现。
J1939协议定义, J1939消息头为29位ID,数据域长度最多8位(ISO15765是固定8位长的)诊断方法及其实际的数据传输链路层请查阅SAE J1939—73和SAE J1939—21
QBD芯片发送J1939消息的方法和标准的OBD2协议一样 ,头格式数据QBD芯片能定义并自动添加到消息中。
例:如你想请求ECU发动机温度的信息,J1939用PGN 00 FE EE参数组传输这个信息。你只要向QBD芯片发出:
>EE FE 00 的OBD 命令 (高字节在后)。
QBD芯片会自动加上附加的头格式字节,并自动配置接收正确的响应消息,QBD芯片默认的头格式字节值为18 EA FF F9 表示为OBD诊断工具的全局请求:
18是优先级和数据页
EA为请求数据的PDF格式
FF为全局地址
F9为J1939定义的诊断工具源地址
改变头格式字节用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芯片能自动接收并返回给PC。CAF0及CAF1只是影响J1939返回数据的显示格式,在QBD芯片发送时不影响。
当CAF1时J1939与ISO15765一样,显示数据总长度及消息包的编号,CAF0时仅返回全部的数据域的数据。ATH1打开头格式显示时返回整个消息包的内容。
SAE J1939预定义了一些诊断模式, 第一个是诊断模式DM1。 在J1939的CAN网络系统中,诊断模式(DM1)消息周期性的在总线上广播(如果有故障码)。如果想监听总线上的DM1消息,只要简单地使用内部命令DM1:
>AT DM1
QBD芯片将会在收到DM1消息时把信息的内容返回给PC。
当想监听其他内容的诊断消息时,只要用AT MP 命令用参数组编号来监听,。
例如:DM2的参数组编号为65227即16进制数00 FE CB ,QBD芯片只要输入后4位数,前面两位默认值为”00” ,所以监听DM2诊断消息则输入:
>AT MP FE CB
QBD芯片发出J1939的OBD命令时根据命令的字节数来分成两种类型的接收方法,当发送的命令为三个字节长度时,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的多包消息传送
1、RTS/CTS多包消息
2、全局广播的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从休眠状态唤醒,开始工作。如下图所示,图一为休眠,图二为唤醒。
2.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,就可以得到实际的车速值。
|