汽车总线之----J1939总线

news2024/12/26 19:42:03

instruction

SAE J1939 是由美国汽车工程协会制定的一种总线通信协议标准,广泛应用于商用车,船舶,农林机械领域中,J1939协议是基于CAN的高层协议,我们来看一下两者之间的关系。在J1939 中,物理层和数据链路层都是基于CAN标准,使用的是CAN扩展真帧格式,除此以外,J1939 在CAN 标准的基础上做了一些额外的规定,比如对29位的ID有更详细的定义,J1939 中的数据单元为parameter group及参数组,参数组是由参数组编号以及PGN所标识的,参数组携带的数据长度不再限制为八个字节,实现这一点的必要规定主要在OSI模型中的更高层进行定义。
在这里插入图片描述

在J1939 中存在两种通信方式,分别是点对点和广播通信,我们知道CAN采用的是广播通信,既然J1939 是基于CAN的通信协议,为什么会有点对点的连接方式呢,其实在J1939 中,数据链路层采用的仍然是广播通信的方式,这与CAN是一致的,具体点对点还是广播的方式,其实是在OSI模型中的第七层及应用层决定的。
在这里插入图片描述

这里我们可以看一个例子来理解这两种通信方式,在这个网络中有五个节点,红线表示的是点对点的通信方式,蓝线表示的就是广播的通信方式,我们具体来看一下transmission controller或break system controller,可以通过发送TSC1这一个参数组给Engine controler,来控制发动机扭矩,这就是点对点的通信方式,这种通信方式具备特定的发送方和接收方,instrument class control了,可以通过RQST这个参数组,向总线上的所有其他ECU请求获得他们的地址,这就是广播通信方式。
在这里插入图片描述

J1939 参数组和信号

首先我们先来学习PDU和PGN这两个重要的概念,首先是PDU,PDU是应用层和网络层中的数据单元,用于与数据链路层进行数据交互。接着我们再来看一下PGN,PGN及参数组是具有彼此相关性,并且传输速率相同的一组信号。每个参数组都有唯一的编号及PGN,也就是参数组编号。PGN的长度为24个位,六个最高位为零,其余部分分别是扩展数据页EDP,数据页DP, PDU格式PF, PDU细节PS。 EDP和DP两个位的组合用于扩展PGN的范围,在J1939 中一般使用的是00,其余的组合用于NMA2000 或者诊断等。在EDP和DP之后是八个位的PDU格式及PF,PDU格式有两种,当PF的范围为0x00 到0x1 f时,为PDU格式1,此时PDU细节也就是PS表示的是目标地址,当PF的范围为0xf0 到0xff时,PS表示的是组扩展,组扩展意味着可以扩大PGN的数量,后续内容中会向大家介绍PGN数量的计算,了解了PDU和PGN这两个概念后,我们可以看一下PDU的结构,首先是三个位的优先级,这三个位主要控制访问总线的优先级,在PGN之后是八个位的原地址,结合两种PDU格式就可以实现点对点或者广播的通信方式,最后是数据场内容,整体上PDU分为七个部分,在进行通信时,PDU是需要映射到CAM报文进行发送的,数据场内容是放到CAN报文的数据场,发送的前六个部分则会与CAN中定义的29位的ID进行映射。
在这里插入图片描述

我们具体来看一下,我们可以看到前六个部分是按照高位到低位的顺序,依次分布在29位ID中的,前面我们介绍到PDU有两种格式,由此我们可以计算所能表示的PGN的数量,当PF小于240时,PS表示的是目标地址,此时可以表示的PGN的数量为240,当PF在240255之间时,PS表示的是组扩展,它的范围为0255,此时PF和PS的组合可表示的PG数量为16x256,所以我们可以计算出PG最大的数量为4336,当然这是EDP和DP的值,均为临时的计算结果,对于EDP和DP的不同组合,还可以表示更多的PGN并应用于不同的场景。
在这里插入图片描述

这11939不仅定义了PGN,还定义了其数据内容,这11939中定义的信号采用的是英特尔编码方式,每个定义的信号称为SPN,每个SPN都有有效的数据范围,比例因子和偏移量,在这里我们可以看一个例子。对于flue temperature,也就是发动机油温,这个SPN它的数据范围为-40摄氏度到正210摄氏度,它的比例因子为一摄氏度,偏移量为-40摄氏度,根据比例因子和偏移量就可以得出原始值到物理值的转换公式,也就是原始值乘以比例因子,然后再加上偏移量,比如现在原始值为100,那么所表示的发动机油温的物理值为60摄氏度,通过以上内容,我们学习了PDU, PG以及SPN这三个J1939 中重要的概念,相关内容,大家也可以查阅J1939-21这一个文档进行学习,
在这里插入图片描述
在这里插入图片描述

J1939传输协议

介绍J1939 的传输协议,传输协议主要实现数据的拆装重组以及连接管理,下面我们具体来看一下,首先我们对传输协议进行整体的了解,在J1939 中有两种通信方式,分别是点对点和广播通信,这两种通信方式对应两种类型的传输协议,对于一帧CAN报文,它的数据厂长度最大为八个字节。在J1939 中,PGN的数据长度不限于八个字节,但由于J1939 中物理层和数据链路层都是基于CAN标准,因此对于大于八个字节的数据,需要发送方将其拆分为多个数据包,然后通过CAN报文形式进行发送,接收方则需要将接收的数据进行重组,这就是通过传输协议实现的。
在这里插入图片描述

下面我们具体来看一下,对于点对点的通信方式,采用的是connection mode date transfer,简称为cmdt,也就是连接模式,数据传输这种传输协议,数据的传输建立在发送方和接收方建立连接的基础上,接收方可以对数据包的流量进行控制,并且发送方和接收方都可以终止连接,对于广播通信方式采用的是broadcast a nice message,简称为bm应用,这种传输协议数据会发送到所有节点。
在这里插入图片描述

在J1939 中,有两个PGM用于传输协议,实现多包数据的点对点以及广播传输,第一个PGN为TP.CM及00ec00,这个PGN用于连接管理以及流量控制,它的数据长度为八个字节,其中第一个字节为控制字节,包括请求发送,允许发送报文,结束应答,终止连接以及广播发送。后期和字节根据控制类型的不同,定义也有所不同,后续我们也会详细介绍几种典型的控制类型,第二个PGN为TP.DT即001b00 ,这个PGN用于实现数据包的传输,接下来我们就来看一下这两个PG如何实现多包数据的传输。
在这里插入图片描述

首先我们先来看TP.CM,当控制字节为0x10 时,表示的是请求发送,即rts,此时第二第三个字节表示的是要发送的数据的字节数,第四个字节表示的是要发送的数据包的数量,第五个字节表示的是每接收到一个cts后,能发送的最大的数据包的数量,第六到第八个字节表示的是打包数据的拼接,通过rts发送方告知接收方网络中有节点希望与其建立连接,也就是明确发送的意图,当节点接收到rts报文后,可以选择建立连接或者拒绝连接,当选择建立连接时,接收方需要发送一个cs报文,通知发送方,他可以接收数据,cp报文的控制字节为0x11 ,此时第二个字节表示的是可以发送的数据包的数量,第三个字节表示的是下一个发送的数据包的编号,第六到第八个字节表示的是打包数据的PGN对于点对点的通信方式,当控制字节为0xff和0x1330表示的分别是终止连接和报文结束应答,这里就不做详细介绍,大家可以查阅J1939-21这一个文档进行学习,当控制字节为0x20 时,表示的是广播通信的方式,发送方告知网络上的所有节点要广播发送数据,通过TP.CM不同的控制类型就可以实现点对点的连接或广播通信。
在这里插入图片描述

而TP.DT这个PGN则可以实现数据包的传输,对于两种通信方式打包的数据都是通过TP.DT传输的,它的数据厂长度为八个字节,第一个字节表示的是数据包的序列编号,序列编号从一开始依次分配给每个数据包,最大为255,第二到第八个字节的内容为打包的数据,因此每个TP.DT可以传输七个字节的数据,数据将从编号为一的数据包开始按编号的递增顺序传输,因此我们可以知道可以拆分的包数为255,每个数据包包含的数据为七个字节,所以可以计算出J1939 中最大可以传输7x255,也就是1785个字节的数据。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2169324.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第13讲 实践:设计SLAM系统

设计一个视觉里程计,理解SLAM软件框架如何搭建,理解视觉里程计设计容易出现的问题以及解决方法。 目录 1、工程目标 2、工程框架 3、实现 附录 1、工程目标 实现一个精简版的双目视觉里程计。由一个光流追踪的前端和一个局部BA的后端组成。 2、工程…

asp.net mvc core 路由约束,数据标记DataTokens

》从0自己搭建MVC 》用 asp.net Core web 应用 空web 应用程序 需要配置 mvc服务 、mvc路由 新建 Controller 、Models、Views 》》》core 6 之前版本 vs2022 asp.net Core Web 应用(模型-视图-控制器) 不需要配置 就是mvc框架 asp.net Core web 应…

从Elasticsearch到RedisSearch:探索更快的搜索引擎解决方案

文章目录 RedisSearch 的关键功能与 ElasticSearch 对比性能对比产品对比 如何使用 Docker 安装 RedisSearch1. 获取 RedisSearch Docker 镜像2. 启动 RedisSearch 容器3. 验证安装 RedisSearch 使用示例1. 连接到 RedisSearch2. 创建索引3. 添加文档4. 执行搜索搜索所有包含 &…

【Geoserver使用】2.26.0版本发布主要内容

文章目录 前言一、GeoServer 2.26.0 版本二、主要内容1.Java17支持2.Docker更新3.搜索改进4.广泛的 MapML 改进4.重写演示请求页面5.栅格属性表扩展6.GeoCSS 改进7.地球静止卫星 AUTO 代码8.labelPoint 功能改进9.改进的矢量图块生成10.GeoPackage QGIS 兼容性改进11.新的图像马…

深度学习—神经网络基本概念

一,神经元 1.生物神经元与人工神经元 1.1神经元是人脑的基本结构和功能单位之一。人脑中有数1000亿个神经元,其功能是接受(树突),整合(细胞体),传导(轴突)和…

MySQL --用户管理

文章目录 1.用户1.1用户信息1.2创建用户1.3删除用户1.4修改用户密码 2.数据库的权限2.1给用户授权2.2回收权限 如果我们只能使用root用户,这样存在安全隐患。这时,就需要使用MySQL的用户管理。 1.用户 1.1用户信息 MySQL中的用户,都存储在系…

Spring Cloud 教程(二) | 搭建SpringCloudAlibaba

Spring Cloud 教程(二) | 搭建SpringCloudAlibaba 前言一、SpringBoot 与 SpringCloud 版本对应关系:二、SpringCloud 与 SpringCloudAlibaba版本对应关系:三、SpringCloudAlibaba版本 与 组件版本 对应关系:四、搭建S…

Django项目配置日志

需求 在Django项目中实现控制台输出到日志文件,并且设置固定的大小以及当超过指定大小后覆盖最早的信息。 系统日志 使用Django自带的配置,可以自动记录Django的系统日志。 可以使用logging模块来配置。下面是一个完整的示例代码,展示了如…

Java | Leetcode Java题解之第438题找到字符串中所有字母异位词

题目&#xff1a; 题解&#xff1a; class Solution {public List<Integer> findAnagrams(String s, String p) {int sLen s.length(), pLen p.length();if (sLen < pLen) {return new ArrayList<Integer>();}List<Integer> ans new ArrayList<Int…

163页制造业变革转型:营销/服务/研发/供应链/制造/质量/财务

制造业企业要实现变革转型&#xff0c;可以从营销、服务、研发、供应链、制造、质量、劳务以及人力资源等多个方面着手&#xff1a; 一、营销 市场调研与定位 深入了解目标市场的需求、趋势和竞争态势。通过大数据分析、消费者调研等手段&#xff0c;精准把握市场动态&#…

管家婆分销费用分摊功能使用说明!

在入库和销售业务中&#xff0c;往往会产生一些费用需要和入库单和销售单关联&#xff0c;这时候就可以使用费用分摊的功能。下面我们一起来学习在分销A\V系列软件中费用分摊的操作步骤 一、入库费用分摊 1、只有移动加权平均成本算法才有入库费用分摊单&#xff1b;入库费用分…

centos7系统安装宝塔面板

1、开始安装 适用系统 Centos/OpenCloud/Alibaba 稳定版9.0.0 urlhttps://download.bt.cn/install/install_lts.sh;if [ -f /usr/bin/curl ];then curl -sSO $url;else wget -O install_lts.sh $url;fi;bash install_lts.sh ed8484bec等待命令执行&#xff0c;安装完成&#…

【理解 Java 中的 for 循环】

理解 Java 中的 for 循环 for 循环是 Java 中用于迭代的常用控制结构&#xff0c;它可以帮助我们重复执行某段代码&#xff0c;直到满足特定条件。本文将介绍 for 循环的基本语法、执行流程、注意事项及一些练习。 基本语法 for 循环的基本语法如下&#xff1a; for (循环变…

Linux下的基本指令/命令(一)

目录 基本命令 1. Is命令/指令: 罗列当前目录下指定的文件或者目录. 2. pwd命令&#xff1a; 查看当前工作的路径 3. cd命令&#xff1a; 切换到指定路径下。 只能切换到目录中 4. tree命令: 树状显式目录 使用前要输入命令 yum install -y tree &#xff0c;用来安装一个…

数组模拟邻接表存图

图的定义 图&#xff08;graph&#xff09;是一种非线性数据结构&#xff0c;由顶点和边组成。我们可以将图 抽象地表示为一组顶点和一组边的集合。G(V,E) 图分为有向图和无向图&#xff0c;下图带箭头为有向图&#xff0c;无箭头为无向图 我们可以用两种方式来表示图&#x…

有点快要跟不上时代的感觉

团队的群里面有一个同事突然问了下&#xff0c;下面的这个 JavaScript 如何进行优化 var startIndex (start undefined || start null) ? null : start[0].Value;看上面的代码就是典型的判断和返回的问题。 如果是要调试的话也不是做不出来&#xff0c;但可能要花点时间&a…

【Java】—— 多线程:线程的创建方式3、4___实现Callable与线程池

目录 8.1 新增方式一&#xff1a;实现Callable接口 8.2 新增方式二&#xff1a;使用线程池 8.1 新增方式一&#xff1a;实现Callable接口 与使用Runnable相比&#xff0c; Callable功能更强大些 相比run()方法&#xff0c;可以有返回值 方法可以抛出异常 支持泛型的返回值&…

音视频整体解码流程和同步流程

目录 1. 整体解码流程1. 初始化 FFmpeg2. 打开媒体文件3. 查找解码器4. 打开解码器5. 读取和解码数据6. 处理解码后的帧7. 释放资源 2. 音视频同步整体流程1. 解复用媒体流2. 解码3. 以音频为时钟源进行音视频同步的策略4. 缓冲区设计 现在先说大体流程&#xff0c;不分析代码 …

网络原理 - TCP/IP

文章目录 传输层UDP协议TCP协议TCP协议的核心机制确认应答机制超时重传机制连接管理三次握手四次挥手 滑动窗口流量控制拥塞控制延迟应答捎带应答面向字节流粘包问题 异常情况 小结 网络层IP协议IP地址不够用的问题一、动态分配IP地址二、 NAT机制(网络地址映射)三、使用IPv6 地…

【HarmonyOS】自定义圆点进度条

【HarmonyOS】实现一个自定义带圆点的进度条效果。 方案就是做一个圆角组件&#xff0c;然后利用rotate旋转&#xff0c;至于动画效果&#xff0c;我查了一下文档&#xff0c;只要设置enableSmoothEffect:false&#xff0c;就可以关闭动画&#xff0c;然后自己开个定时器&#…