J1939协议简介【小白入门】

article/2025/10/19 11:05:02

文章目录

  • J1939协议简介
  • J1939主要特性
  • 报文格式及使用方法(J1939/21)
  • 地址和名称 (J1939/81)
  • 地址请求
  • 报文传递(J1939/21和J1939/7x)
  • TP_BAM报文
  • TP_CM报文
  • 报文接收(J1939/21和J1939/7x)
  • ECU设计(J1939/1x,J1939/21和J1939/7x)
  • 接线布局 - 物理层(J1939/1x)
  • 如何解读J1939报文的示例
  • 总结


J1939协议简介

J1939协议是由美国汽车工程师协会(SAE) (SAE协会简介)定义的一组标准。J1939标准用于卡车、公共汽车和移动液压等重型车辆。在许多方面,J1939标准类似于旧版J1708和J1587标准,但J1939标准协议建立在CAN(控制器区域网络,ISO11898)上。
物理层(J1939/11)描述了针对客车的电气接口。数据链路层描述了构建报文、访问总线以及诊断传送故障的规则。应用层(J1939/71和J1939/73)定义了在网络中传送的每条报文的具体数据。

J1939主要特性

J1939协议标准基于CAN的高层协议
J1939协议应用于重型车辆
J1939协议传送速度稳定在250kbps

报文格式及使用方法(J1939/21)

MJ1939标准定义的大部分报文均旨在广播。这意味着网络中传输的数据没有指定目标地址。这样任何想要使用数据的设备都不需要再额外请求报文。将来的软件升级也可以方便兼容新设备(地址分配)。当报文必须指向特定设备时,可以在报文标识符里包含特定的目标地址。例如,请求来自发动机的特定扭矩值,而不是来自制动控制器的特定扭矩值。
J1939使用CAN 2.0B协议中定义的29位标识符,如图1所示。含有指定目标地址的报文(“PDU 1”)与旨在广播的报文(“PDU 2”)使用的标识符略有不同。
PDU是协议数据单元(即报文格式)。
SOF,SRR和IDE位由CAN标准定义,这里忽略。RTR位(远程请求位)在J1939中总是设置为0。
J1939协议中使用的29位标识符结构如下。
在这里插入图片描述
标识符的前三位是用于在仲裁过程中控制报文的优先级。0值拥有最高优先级。更高优先级值通常用于高速控制报文,例如从传动装置至发动机的转矩控制报文。包含时间不重要的数据的报文,例如车辆行驶速度,会被赋予较低优先级值。
标识符的下一位将保留备用,在报文发送中应设置为0。
标识符中的下一位是数据页选择器。此位扩展可由标识符表示的潜在参数组的数目。
协议数据单元格式(PF)用于确定是否可以作为包含目标地址报文发送或者报文总是作为广播报文发送。
对特定协议数据单元(PS)字段变化的解释以PF的值为依据:

如果PF处于0和239之间,则报文可寻址,且PS字段包含目标地址。
如果PF处于240和255之间,则报文只能广播(PDU2),且PS字段包含组扩展。

组扩展扩展了可由标识符表示的潜在广播参数组的数目。
术语参数组编号(PGN)适用于将保留位、DP、PF和PS字段的值合并成单个18位的值。
例如: 身份0xcf004ee可分为表2所示字段。
在这里插入图片描述
标识符的最后8位包含发送报文的设备的地址。地址是被分配以提供唯一地访问网络上的给定设备的方式的标签或“句柄”。对于给定的网络,每个地址必须是唯一的(可以有254个)。这意味着两个不同的设备(ECU)不能使用相同的地址。

地址和名称 (J1939/81)

名称是64位(8字节)长的标签,给每个ECU一个独特的身份。 名称由10个字段组成,并具有表3所示的以下结构。
表3. 名称的结构
1.随机存取位
2.行业组,长度3位
3.车辆系统实例,长度4位
4.车辆系统,长度7位
5.保留位
6.函数,长度8位
7.函数实例,长度5位
8.ECU实例,长度3位
9.制造商代码,长度11位
10.身份号码,长度21位
在这里插入图片描述

名称的主要目的是描述ECU。低函数字段的值,0到127,被预先分配给“标准的”函数或设备。值128至254则依赖于行业组和车辆系统的值。这种依赖性使得不同的车辆可以拥有相同配置的函数。该系统还允许诸如拖车和农用车辆等设备限制对可用地址的搜索,且因此尽可能缩短动态声明地址的时间以及降低其难度。当请求地址时, 名称被用来决定哪一个ECU拥有更高的优先权,并以此获得请求的地址。

网络中的每一个设备都会至少与一个名称和地址相关联。然而,多个设备名称和多个地址可能会在单个ECU中共存。例如,一个发动机和发动机制动(减速器)通过一个物理总线连接共存在同一个设备中。设备地址定义了报文的特定讯息来源或目的地。名称能识别功能,当网络中有多个同类设备共存时,可以为功能分配一个特定编号。受地址限制,一个网络中最多可同时包含254个同类设备。地址255被留作广播的全局地址,地址254被留作“空地址”,当设备还未获得地址或获得地址失败时使用。

地址请求

一般来说,大多数地址都是提前分配好的,接通电源即可使用。为了允许J1939 容纳后来的设备和未被定义的功能,需设定一个程序,允许动态分配地址。每台设备需表明和它相关的地址。这便是识别(地址请求)属性。有两种选择:

  1. 发送地址请求指令申请地址。
    当设备发送地址请求报文申请地址时,所有设备都会将这条报文与它们在网络中的设备地址比较。如果该地址已被有更高优先权的设备申请,具有优先权的设备会发送一条包含地址已被使用的地址请求报文。设备名称,在地址请求报文中以数据的形式发送,决定哪个设备具有更高的优先权。
    2.发送申请地址请求。
    当一个设备发出申请地址的请求时,所有设备通过传递已申请到地址的报文来回复。这保证了过渡中的设备(工具,追踪器等)或即将工作的设备获得当前的地址表,选择并申请可获得的地址。如图表2。
    动态地址分配支持是有选择的,只有当设备可能遇到地址冲突时才使用该支持。为了减少动态地址分配支持,加快“识别”速度,大部分ECU 都与一个推荐地址联系到一起。这些推荐地址在J1939/71文件中有描述。如果推荐地址已被其他ECU使用,设备的自配置得到了其他设备的支持的话,则可以申请另一个地址。
    在这里插入图片描述

报文传递(J1939/21和J1939/7x)

为完成特定的数据传送,报文中必须有描述待传数据的控制报文。为减少控制报文,相关数据应放在一条报文中。J1939/71文件定义了一些标准的PGN,可以描述报文中待传的参数。此外,J1939/71文件还包括关于报文优先性和传输速率的信息。应该注意的是,当设备不能提供指定参数的数据时,本该包含此参数的字节被设定为“无法获得”(0xFF),接收器便能知道数据丢失了。报文中的数据多于八个字节时,可被作为多数据包报文传输。多数据包报文通过传输协议功能传输,参见J1939/21中的定义。但是传输多数据包报文有两种方式:
1.广播通知报文(TP_BAM)
2.连接管理(TP_CM)

TP_BAM报文

TP_BAM报文使用全局地址,意味着网络中的所有设备都能接收到报文。传输通过连接管理(CM)报文PGN = 0x00EC00开始,其中有一个表明TP_BAM的控制字节。报文数据接着在数据传输(DT)报文,PGN = 0x00EB00中。

TP_CM报文

TP_CM报文在两个设备间点到点传输。传输从带有表示请求发送(RTS)的控制字节的CM 报文开始。接收设备回复一个带有表示清除发送(CTS)的控制字节的CM报文。然后传输设备使用DT报文发送CTS中表示的数据。CTS和DT报文持续进行信号交换直到全部数据传送完成。当报文传送完成,接收设备传输一个带有表示报文结束确认(EOM)的控制字节的CM报文,连接终止。要注意的是,在工作的过程中,CM报文会根据控制字节的种类带有额外数据。RTS包括:字节的数目,数据包的数量和数据已运输的PGN。CTS包括接收设备下次预期的数据包的数量和起初的数据包数量。

报文接收(J1939/21和J1939/7x)

从网络中捕捉选中的信息有不同的技术手段(和芯片)。可使用一般的观察方法,但基于接收到的信息而有所不同:
1.如果一则报文请求特定的地址,设备必须确认目标地址是否与设备请求的地址匹配。如果匹配,接收设备必须处理报文,并进行某种确认。
2.如果报文是一个全局请求,那每个设备,包括发起设备都必须处理请求,并回复数据是否可得。
3.如果报文是广播,每个设备必须确认内容是否相关。

ECU设计(J1939/1x,J1939/21和J1939/7x)

尽管每个制造商对产品中的电子控制单元(ECU)的性能有不同的要求,还是需要观察一下支持J1939的几种资源。J1939目前的数据速率是250Kbps.一个典型的包含8个数据字节的报文长度是128位(包含用于填充的位),也就是约500微秒。最短的报文有64位。这意味着,每250微秒可以发送一个新报文。尽管并不是所有报文都是相关的,总线负载也不会超过50%,接收处理器必须能在很短的时间内处理(或缓冲)反馈信息。这需要一些内存空间和传输内存的处理时间。

接线布局 - 物理层(J1939/1x)

J1939网络是一对线型屏蔽双绞线,环绕在车身,连在每个ECU上。在ECU和总线之间允许有一个短的末梢网络。这样简化了总线的接线,总线可以不用直接连到ECU上。线型总线的数据速率要达到250Kbps,以使得电子信号反射最小化。总线每个终端的终端电子也能降低反射。
其实,J1939网络可能由几个段组成,由一个中继设备作为连接桥。这些段互相不需要直接兼容。比如,这些段的数据速率可能不同,或使用不同的物理媒介。网桥的主要功能是在各段间起到电绝缘作用。在牵引机和拖车间的线中断的情况下,牵引机上主要的J1939段也能继续发挥功能。网桥还可以有选择的过滤需要存储的报文和将报文从一个段转送到另一个。

如何解读J1939报文的示例

这个例子旨在解释解读J1939报文的准则。
我们来看一条内容如下的J1939报文:
在这里插入图片描述
CAN-ID 提供了什么信息?
在这里插入图片描述
前两个字节=0x0C = 00001100二进制。由于标识符只有29个位,所以前三个位不使用。接着的3个位代表优先报文,在这个例子中是3。接着是一个保留位,然后是决定完整PGN的数据页。
CAN-ID的最后一个位是源地址(发送设备的地址),在这个例子中是1。
PGN= 0x0F004,根据J1939/71文件,它与电子引擎控制器#1 (EEC1)相对应。J1939/71文件还对数据字节中的参数和位置做了描述。在这个例子中,数据区包含以下字节:
在这里插入图片描述
该例子中数据字节1,2,6,7和8无法获得,因此设为0xFF。源参数值(单个字节)的不能为0xFF。
数据字节3是实际发动机转矩百分比参数。源参数值0×82是十进制的130。根据J1939/71文件的每比特缩放比为1%, 偏移-125.因此,该参数的实际值为5%。
数据字节4和5构成引擎转速参数。第一个字节(4)是最不重要的一个(内部字节顺序)。源参数值0x1ADF = 十进制中的6879。缩放比例为每比特0.125 rpm, 偏移为0.所以该参数的实际值低于859.875 rpm。


总结

对J1939协议简介有了初步了解。


http://chatgpt.dhexx.cn/article/DDWDR1r0.shtml

相关文章

J1939 入门教程

SAE J1939协议是基于CAN2.0B协议之上的应用层协议,但是SAE J1939协议并不仅仅是个应用层协议,她对物理层,数据链路层,网络层,应用层,故障诊断, 网络层管理层等都做了详细的规定,只不过这其中很多…

神经网络炒股出现的问题,炒股容易得神经病吗

听朋友说他用盈首AI全自动炒股机器人炒股,效果很好,请问一下用过的朋友,不知道是否是真的? 应该是真的,现在是人工智能时代,科学炒股是必然选择,国家也在出了很多支持人工智能的政策&#xff0…

竟然可以用python炒股?

由于笔者并无深厚的数学功底也无深厚的金融知识, 所以不会在本文中引用各种高深的投资模型或数学模型,参考书籍主要是《海龟交易法则》《以交易为生》。 交易系统 在交易之前,我们应该首先有一个交易系统用于指导我们自己交易,不一定有什么规…

用深度学习算法预测未来股票走势

最近研究了一下用深度学习算法来预测股票未来的走势,看了网上不少别人分享的案例,也实际进行了测试,感觉用 LSTM 算法比较适用。长短期记忆网络(LSTM,Long Short-Term Memory)是一种时间循环神经网络&#…

AI in Finance<量化交易人工智能金融投资>(下)

7 机器学习量化策略7.1 基于股价涨跌分类/回归模型7.1.1 特征选择(遗传算法因子挖掘)7.1.2 Linear Regression股价回归预测7.1.3 Logestic Regression涨跌分类预测7.1.4 Random Forests涨跌分类预测7.1.5 SVM涨跌分类/回归预测7.1.6 MLP涨跌分类/回归预测7.1.7 集成学习 涨跌分…

(转)人工智能无处不在,这次是有公司用它来炒股

这事情能成吗? 人工智能是现在科技界一个比较热门的话题,不管公司大小、做什么,都在谈人工智能,好像这是唯一的选择。 现在有人想用它来炒股。 Shaunak Khire 的团队开发了一套机器智能系统 Emma AI,正在募资成立一…

AI 量化机器人,人工智能如何助你从股市发家?

量化交易是不是很高大上? 量化交易,听起来很高大上,其实就是众多投资方法中的一种。 要理解什么是量化交易,首先我们来说说什么叫“量化”。 我们来想象一种场景: 假如有人做了两道菜,让大家去评价这两道菜…

如何用深度强化学习自动炒股

向AI转型的程序员都关注了这个号???????????? 人工智能大数据与深度学习 公众号:datayx 深度学习技术在股票交易上的应用研究调查 http://gregharris.info/a-survey-of-deep-learning-techniques-applied-to-trading/ 文中缩写: DBN 深度信…

如何用人工智能预测股票(完整项目)

本文由 沈庆阳 所有,转载请与作者取得联系! 前言 十分钟实现人工智能股价预测,是一个深度学习的练习项目。其通过机器学习算法,根据过去几年与某只股票相关的K线走势、公司相关报道的情感分析作为数据集,通过训练来得到可以预测股价的机器学…

想靠AI炒股致富,结果恐怕会让你怀疑人生

来源:脑极体 作者:藏狐 经历了漫长熊市的A股,在农历新年后迎来了一个超乎想象的春天。最能够代表牛市来临的信号,不是领跑全球的历史性涨幅,而是连你老家的大妈都准备拿出首付甚至卖房抄底了,各路股神纷纷出…

手把手带你玩转Spark机器学习-使用Spark进行文本处理

系列文章目录 手把手带你玩转Spark机器学习-专栏介绍手把手带你玩转Spark机器学习-问题汇总手把手带你玩转Spark机器学习-Spark的安装及使用手把手带你玩转Spark机器学习-使用Spark进行数据处理和数据转换手把手带你玩转Spark机器学习-使用Spark构建分类模型手把手带你玩转Spa…

大数据笔记--Spark机器学习(第二篇)

目录 一、梯度下降法 1、什么是梯度? 2、梯度下降法与梯度上升法 3、梯度下降法的直观解释 4、梯度下降法的相关概念 5、梯度下降法原理 6、梯度下降法的算法参数 7、梯度下降法-家族(BGD,SGD,MBGD) 8、总结 …

Spark机器学习(一)-Spark工程搭建

目录 概述 环境准备 搭建Spark项目的代码工程 创建maven项目工程 创建scala测试类 整合spark环境 概述 最近自己在加强AI这块,以前做Java、大数据分析比较多,所以对CDH那套东西都比较熟悉,例如Hadoop、Spark。但Spark这块中的ML用得不…

【Spark】实验6 Spark机器学习库MLlib编程实践

Spark机器学习库MLlib编程实践 一、实验目的 通过实验掌握基本的MLLib编程方法;掌握用MLLib解决一些常见的数据分析问题,包括数据导入、成分分析和分类和预测等。 二、实验平台 新工科智慧平台。数据集1:下载Adult数据集(http://archive.i…

手把手带你玩转Spark机器学习-使用Spark进行数据降维

系列文章目录 手把手带你玩转Spark机器学习-专栏介绍手把手带你玩转Spark机器学习-问题汇总手把手带你玩转Spark机器学习-Spark的安装及使用手把手带你玩转Spark机器学习-使用Spark进行数据处理和数据转换手把手带你玩转Spark机器学习-使用Spark构建分类模型手把手带你玩转Spa…

spark之常见的机器学习算法

1、分类、回归、聚类 分类回归是一种重要的机器学习和数据挖掘技术。分类的目的是根据数据集的特点构造一个分类函数或分类模型(也常常称作分类器),该模型能把未知类别的样本映射到给定类别中的一种技术。 即: 向量X[x1,x2...xn]但标签C[c1,c2...,ck]的…

Apache Spark机器学习

推荐电子书:Apache Spark 2.x入门 - 从入门到制作 前言: 使用Apache Spark 2.0及更高版本,实现了很大的改进,使Spark更容易编程和执行更快: Spark SQL和Dataset / DataFrame API通过Spark SQL优化的执行引擎提供易用…

Spark Machine Learning(SparkML):机器学习(部分二)

目录 6.分类和回归 6.1分类(Classification) 逻辑回归(LR) 决策树分类器(DTC) 随机森林分类器(RFC) 梯度提升树分类器(GBTC) 多层感知器分类器(MLPC) 线性支持向量机(SVM) One-vs-Rest分类器 朴素贝叶斯(NB) 6.2回归(Regression) 线性回归(LR) 广义线性回归(GLR) …

spark机器学习笔记:(六)用Spark Python构建回归模型

声明:版权所有,转载请联系作者并注明出处 http://blog.csdn.net/u013719780?viewmodecontents 博主简介:风雪夜归子(英文名:Allen),机器学习算法攻城狮,喜爱钻研Meachine Learnin…

Spark机器学习实例

2020/07/09 - 引言 《Learning Spark》过程中只是简单介绍了mllib中的东西,没有一个完整的实践过程,暂时还没有去找有没有专门做这种的书,好像我看《spark in action》是有这部分内容,后续在看。本篇文章就利用这个鸢尾花的数据集…