首页 > 其他分享 >关于ASEJ1939的解析

关于ASEJ1939的解析

时间:2022-08-31 01:33:16浏览次数:56  
标签:02 00 01 04 ASEJ1939 FE FF 解析 关于

项目要用到ASEJ1939的协议,看了很多网上的博客,发现没有特别详细的,有些写的我都看不懂,理论一大堆。硬着头皮粗粗学了一下,大致摸出了点门道,就此记录一下,以免以后用忘记了。

先上图最小数据结构pdu 打开SAE+J1939-21-2001文档可以获得

 

P:优先级,决定该 PDU 进入总线的优先权限。值越小则优 先级越高。

R:预留的  基本为0

DP:数据页,这是 PGN 装载的一个位置,超过 65536 后该 位才会被置 1,现在一般的项目基本用不到,除非航天航空才会用到这么多pgn。

PF:PDU 格式(PDU Fomat),PGN 装载的位置,PDU 格式分为 PDU1 和 PDU2,小于240的是PDU1 格式的,大于等于240就是PDU2格式的。

PS:PDU 特征(PDU Specific),PF是PDU1时该域存放的是目标地址(DA:Destination Address),如果 PF 是 PDU2 时,该域 存放 PGN 扩展(GE:Group Extension)。

SA:源地址(Source Address),和目标地址相对,发送和接收的时候用的。

DATA Field:发送和接收的内容,发送的时候是pgn  接收就是回应的数据。

下面开始进入正题

介绍完了这个PDU,然后就是实战应用了。

首先拿一个练练手,遇到什么就讲什么。

如下是一个申请车轮转速的请求,我们来拆解下

18EA00F9  BF FE 00      F9(诊断设备)向00(发动机)请求车轮转速

18:这是前面的优先级什么的,不用管pass。

EA:这个是申请的pgn 具体可以找对应的文档SAE+J1939-21-2001如下图,

 

 00:因为前面EA小于240 所以是PDU1 格式的,当前这个就是一个目标地址,00表示的是发送机,这个可以参考SAE+J1939-2005这个文档的Table B2,

当然下面的源地址也是要通过这个来找的。

F9:源地址,因为我们当前的是一个诊断设备,所以Table B2 中是249 也就是F9。

然后就是对应的pgn,BF FE 00  这里的实际值应该是0x00febf   因为协议里的是小端模式,低位放在前。

0xfebf 要去SAE+J1939-71-2006 这个文档下找,如下图,可以看到是wheel speed

 

 

 申请数据的指令讲完了,就开始分析收到的指令

18FEBF00   00 00 00 00 00 00 00 00 

这个简单说下就是  优先级+pgn0xfebf +源地址(来自发动机的)   后面的数据就是具体的车轮的转速。因为当时没有转动轮子,得到的全是0.

就是按照上图下面的8byte去依次解析得到数据。

开始增加难度

接下来个难点的。这是一个获取故障码的请求,和这个也差不多我们来拆解

18EAFFF9 CA FE 00 
1CECFF00 20 16 00 04 FF CA FE 00 
1CEBFF00 01 00 FF FD 03 01 02 FE 
1CEBFF00 02 03 01 02 FF 03 01 02
1CEBFF00 03 00 04 01 02 01 04 01
1CEBFF00 04 02 00 00 00 00 00 00

第一条就不用分析了,不过后面这个故障码pgn,在SAE+J1939-71-2006找不到 要去SAE+J1939-73-2004 这个文档里去找。

首先要知道J1939的数据传输。  

数据传输的时候会有2种类型 一种是bam 姑且叫他广播模式    一种是RTS/CTS 这里可以简单理解成tcp通信。具体的还是要看文档SAE+J1939-21-2001,

下面这个图是判断这个指令是bam还是rts 这里一定要看英文的文档,翻译过来的文档根本不靠谱。

 

 我们按这个图来分析一下当前这个指令是什么传输的

18EAFFF9 CA FE 00 

被请求的pgn是00FECA  FE大于240 是pdu2,数据长度大于8byte,请求地址F9 特定地址   响应地址FF全局 按照上图得知是倒数第二个bam

也可以通过第二条传输明明看出

1CECFF00 20 16 00 04 FF CA FE 00 

后面的消息是 20 16 00 04 FF CA FE 00 怎么分析这个呢?  可以参考文档SAE+J1939-21-2001的FIGURE 14 FORMAT OF MESSAGES FOR TRANSPORT PROTOCOL  因为之前判断是bam所以就是下面的箭头 byte=32 也就是16进制的0x20.

 

 

这里主要的就是他们交互的关系

具体的去看一下 SAE+J1939-21-2001的   TRANSPORT PROTOCOL TRANSFER SEQUENCES  

 

 

图有点多就放1个当前讲的这个例子吧。

下面就直接注释搞起了 ,感觉分开分析有点麻烦。

 

 

18EAFFF9 CA FE 00 
1CECFF00 20 16 00 04 FF CA FE 00   TP.CM_BAM  就是下图,然后各个byte的解释  20表示bam  16 00 表示有22个数据 04 4个包 CA FE 00 pgn
1CEBFF00 01 00 FF FD 03 01 02 FE   TP.DT    图也放下面了 01 队列数  然后就是数据
1CEBFF00 02 03 01 02 FF 03 01 02
1CEBFF00 03 00 04 01 02 01 04 01
1CEBFF00 04 02 00 00 00 00 00 00

 

 

 

 

 

 

 

 

 

 然后这bam的解析就算全部完成了。。。

再加一个rts的吧,读取车架号 参考下面的图

18EA00F9 EB FE 00                 F9 向00  发送车架号请求
1CECF900 10 2C 00 07 FF EB FE 00        TP.CM_RTS 44个数据  07个包  EB FE 00 pgn
1CEC00F9 11 07 01 FF FF EB FE 00        TP.CM_CTS 07个包  下个发送的包01  EB FE 00 pgn
1CEBF900 01 4E 4C 43 49 44 2A 31        包的序列 01  数据
1CEBF900 02 32 33 34 35 36 37 38
1CEBF900 03 39 41 42 43 44 45 46
1CEBF900 04 47 48 2A 31 32 33 34
1CEBF900 05 35 36 37 38 2A 31 32
1CEBF900 06 33 34 35 36 37 38 39
1CEBF900 07 41 2A FF FF FF FF FF        包的序列 07  数据  结束了
1CEC00F9 13 2C 00 07 FF EB FE 00        TP.CM_EndOfMsgACK  44个数据  07个包   EB FE 00 pgn

 

 

 

 

 完结撒花!!!!!

应该来说把ASEJ1939的应用层的大部分都解释完了。我目前的开发也就用到这么多了把,还有补充那就等下次了。

相关的J1939协议文档放百度网盘

链接:https://pan.baidu.com/s/1RGvenTdF5BECX6ceBLGL9w
提取码:t03m

 

标签:02,00,01,04,ASEJ1939,FE,FF,解析,关于
From: https://www.cnblogs.com/yepc/p/16641476.html

相关文章

  • 关于修Bug的一些想法
    0.前言八月份快要结束了,这个月也没有啥输出,今天下班较早,赶一篇学了一年多C++后的一些思考,关于修Bug的一些想法和思路。平时工作中,如果写代码花费一天时间,那调试解决Bug......
  • 禅道二次开发(四):集成PhpSpreadsheet解析Excel文件
    PhpSpreadsheet是一个PHP表格文件处理库,可用来读写excel文件,本文介绍如何在禅道中引入PhpSpreadsheet库,可以使用它来解析Excel文件,比如上传excel格式的测试用例、导出测试......
  • SpringMvc请求流程源码解析
    目录SpringMvc请求流程图请求流程粗讲解方法细讲doDispatcher-->核心找到Handler#getHandlergetHandler(request)mapping.getHandler(request)getHandlerInternal()looku......
  • Java开发学习(二十八)----拦截器(Interceptor)详细解析
    一、拦截器概念讲解拦截器的概念之前,我们先看一张图:(1)浏览器发送一个请求会先到Tomcat的web服务器(2)Tomcat服务器接收到请求以后,会去判断请求的是静态资源还是动态......
  • 关于vi不正常退出产生的swp文件
    关于vi不正常退出产生的swp文件_lingdxuyan的博客-CSDN博客_linux如何删除swp文件 https://blog.csdn.net/lingdxuyan/article/details/4993868非正常关闭vi编辑器时会......
  • 关于 JavaScript 函数的思考
    函数可以将一堆重复的代码整合成一个整体,在需要改变的地方通过参数传值来改变。比如,根据类型查询数据,接口返回的数据一样,后续处理这个数据的逻辑也是一样的,只有类型和输入......
  • 域名转移影响域名解析吗?
    为了获得更好的域名管理服务,很多企业都会涉及域名的转入转出操作。那域名转移会影响到正常的DNS解析吗?下面中科三方针对这个问题做下简单介绍。什么是域名转移?目前国内域......
  • 《关于程序猿也得刷行测题的这一天》——第一章:理想与现实
    别人一谈到程序员,都以为是上天入地,无所不能,代码在他们的手中就像花一样。大到可以把大道都给磨灭的量子计算机,小到可以随手修好邻居老王家的路由。就差不能送全体地球人......
  • 关于 Spring Security 携带 token 反而 403 的问题
    https://www.cnblogs.com/liouzeshuen/p/16198795.html 某个目录下允许不登录访问.antMatchers("/activity/index").anonymous()但是传了token反而报403改成.antMatc......
  • 大家都能看得懂的源码 - 那些关于DOM的常见Hook封装(二)
    本文是深入浅出ahooks源码系列文章的第十五篇,该系列已整理成文档-地址。觉得还不错,给个star支持一下哈,Thanks。本篇接着针对关于DOM的各个Hook封装进行解读。use......