【学习篇】SAE J1939协议—常用到的知识点

前言:以下关于SAE J1939协议知识点的学习均抄录自书籍,侵权请联系删除。

故障诊断

SAE J1939诊断应用层定义了用于诊断服务的报文帧,诊断报文(DM)提供了用于车辆进行诊断和维修的功能。

诊断故障代码定义

SAE J1939在应用层中还定义了12种诊断报文(Diagnostic Message,DM)、诊断故障代码(Diagnostic Trouble Code,DTC)。

诊断故障代码由三部分组成:可疑参数号(Suspect Parameter Number,SPN)、故障模式标志(Failure Mode Identifier,FMI)及故障发生次数(Occurrence Count,OC)。一个故障代码由4字节构成,三个部分的位数分配如表所示。

在这里插入图片描述

通过诊断故障代码,诊断设备可以确定是哪个控制器在报告诊断信息。诊断故障代码以4字节发送。DTC表示法定义如图所示。

在这里插入图片描述

可疑参数编号SPN是一个19位的值,用于识别特定的元素组件或与ECU相关的参数。这在诊断中非常有用,它允许已经检测到某个部件如传感器有效故障情况的ECU发送一个故障报文以识别故障部件。SPN由SAE委员会分配。初始的511个SPN是预置SPN,所有其他的SPN将从512开始继续编号,且每加1作为一个新的赋值。生产厂商可自定义可疑参数,编号自520 192~524 287,多达4096个。

FMI定义了为SPN所识别的子系统中发现的故障类型,该故障可能不是电子故障,相反可能是需要报告给设备技术员甚至操作员的子系统故障或条件,这些条件包括需要报告的系统事件或状态。FMI、SPN为预留的和发生次数域组合已知的诊断故障代码。

故障发生次数OC是一个7位的数域,它包括了一个故障从先前激活状态到激活状态的变化次数,最大值为126。计数向上溢出时,该计数器值保留为126。假如发生次数未知,则该域所有位的数值均设为1。

在这里插入图片描述
在这里插入图片描述

SAE J1939定义了12种诊断报文帧并为它们分配了不同的PGN,如下表所示:

在这里插入图片描述

经常使用的是DM1(激活状态的诊断故障代码)、DM2(历史诊断故障代码)和DM3(历史诊断故障代码的数据清除/复位)。

激活状态的诊断故障代码(DM1)

本指令包含的诊断信息仅限于当前正处于激活状态的可改变指示灯状态的故障码。故障码和指示灯都是电子控制单元用来通知网络上其他成员该模块自身的诊断状态的。该数据信息包括:指示灯状态、一列诊断代码以及当前激活状态诊断代码的发生次数,还包括排放相关的诊断故障代码。

当前已定义的指示灯(故障指示灯、红色停止灯、琥珀色警告灯和保护灯)都与诊断故障代码有关。若电子控制单元未检测到当前故障码,那么它发出的指示灯的状态信息提示可以关闭指示灯,但直接控制指示灯的部件必须权衡影响该指示灯的所有在线控制模块的诊断信息后才能决定是否改变指示灯的状态。

一旦有DTC成为激活的故障,就有DM1消息会被传输,并在之后处于正常的仅一次每秒的更新速度。如果故障激活的时间是1s或更长,然后变为不激活的状态,则应传输DM1消息以反映这种状态的改变。如果在1s的更新期间有不同的DTC改变状态,则要传输新的DM1消息反映这个DTC。

为了避免因高频率的间断故障而引起的高消息传输率,建议每个DTC每秒只有一个状态改变被传输。这样,如果故障码在1s期间发生两次状态改变,激活/不激活状态,会有一个用于确认DTC成为激活状态的消息,和在下一个传输期间确认它为不激活状态的消息。该消息仅当有一个激活的DTC存在或处于响应一个请求时才被发送。

DM1多包报文传输

有关DM1多包报文在SAE J1939协议如何定义的,可以参考:J1939 DM1多包广播报文发送

DM1多包广播报文发送和接送遵循J1939传输协议规定。
在这里插入图片描述

传输协议功能
传输协议功能是数据链路层的一部分,它可再细分为两个主要功能:(1)消息的拆装和重组;(2)连接管理。

在以下的段落中,术语“发送者”(Originator)指那些发出请求发送消息的电控单元或设备,术语“响应者”(Responder)指那些发出应答发送消息的电动单元或设备。

(1)消息的拆装和重组
长度大于8字节的消息无法用一个单独的CAN数据帧来装载。因此,它们必须被拆分为若干个小的数据包,然后使用单独的数据帧对其逐一传送,而接收方必须能够接收这些单独的数据帧,然后解析各个数据包并重组成原始的信息。

(2)数据包
CAN数据帧包含一个8字节的数据场。由于那些重组成长消息的单独数据包必须要能够被一个个识别出来,才可以正确重组,因此把数据场的首字节定义为数据包的序列编号。
每个数据包都会被分配到一个从1-255的序列编号。由此可知,最长的数据长度是1785字节(255包*7字节/包)。

(3)序列编号
序列编号在数据拆装时分配给每个数据包,然后通过网络传送给接受方。接收方接收后,利用这些编号把数据包重组回原始信息。
序列编号将从1开始依次分配给每个数据包,直到整个数据都被拆装和传送完毕。这些数据包将从编号为1的数据包开始按编号的递增顺序发送。

(4)数据拆装
过长的数据是指那些无法用一个单独的CAN数据帧全部装载的数据(例如数据场长于8字节的消息)。
考虑本协议的用途,过长的数据这里被认为是与一些9字节长或以上的字符串相关的参数群。第一个数据传送包包含序列编号1和字符串的头7个字节,其后的7个字节跟随序列编号2存放在另一个SAE J1939/CAN数据帧中,再随后的7个字节与编号3一起,就这样直到原始信息中所有的字节都被存放到SAE J1939/CAN数据帧中并被传送。
多组广播信息的数据包发送间隔时间为50-200ms。对于发送到某个指定目标地址的多组消息,发送者将维持数据包(在CTS允许多于一个数据包时)发送间隔的最长时间不多于200ms。响应者必须知道这些数据包都是具有相同的标识符。
每个数据传送包(除了传送队列中的最后一个数据包)都装载着原始数据中的7个字节,而最后一个数据包的数据场的8个字节包含数据包的序列编号和与参数群相关数据的至少一个字节,余下未使用的字节全部设置为FF(16进制数)。

在这里插入图片描述

(5)数据重组
数据包被陆续地接收后,多组消息的数据包将会按照序列编号的顺序重新组合成一长串字节。这一长串字节将被传送给负责处理长数据的应用程序模块。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言每日一题:5.至少是其他数字的两倍+两个数组的交集。

第一题:至少是两倍其他数字的最大数 第一题: 思路一: 1.需要我们返回最大数值的下标,所以先循环遍历我们的这个数组记录一下最大的数值和下标位置。 2.使用qsort排序(总是存在唯一的最大整数) 3所以排序之…

Java编程实现遍历两个MAC地址之间所有MAC的方法

Java编程实现遍历两个MAC地址之间所有MAC的方法 本文实例讲述了java编程实现遍历两个MAC地址之间所有MAC的方法。分享给大家供大http://家参考,具体如下: 在对发放的设备进行后台管理时,很多时候会用到设备MAC这个字段,它可以标识唯一一个设备。然而在数…

安全渗透--正则表达式

什么是正则表达式? 正则表达式是一组由字母和符号组成的特殊文本,它可以用来从文本中找出满足你想要的格式的句子。 一个正则表达式是一种从左到右匹配主体字符串的模式。 “Regular expression”这个词比较拗口,我们常使用缩写的术语“regex…

16K个大语言模型的进化树;81个在线可玩的AI游戏;AI提示工程的终极指南;音频Transformers课程 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 LLM 进化树升级版!清晰展示 15821 个大语言模型的关系 这张进化图来自于论文 「On the Origin of LLMs: An Evolutionary …

uniapp 微信小程序 预览pdf方法

效果图: 1、在小程序中 // #ifdef MP */ 是区分运行的环境,在小程序中可使用如下方法uni.downloadFile({url: item.link,//文件地址success: function (res) {var filePath res.tempFilePath;uni.openDocument({filePath: filePath,showMenu: false…

spring 存储对象 + 获取对象

前言 本篇在spring中如何使用五大类注释与方法注释将对象加入IOC容器中,了解如何使用注释来获取容器中的Bean对象,如有错误,请在评论区指正,让我们一起交流,共同进步! 文章目录 前言1.通过注释将类加入IoC…

大数据Flink(五十):流式计算简介

文章目录 流式计算简介 一、数据的时效性 二、流式计算和批量计算

260. 只出现一次的数字 III

题目描述: 主要思路: 首先通过抑或的方式可以将所有两个的数字全部排除,得到两个单个数字的异或值。 接下来将当前得到的异或值取最低一位的1。 分析异或值的每一位,为1的肯定是两个数中一个有一个没有。于是可以通过这一特性将两…

【Java编程案例】面向对象实现模拟物流快递系统

文章目录 一、案例目标二、案例分析1. 交通工具类2. 保养接口3. 专用运输车类4. 定位功能接口5. 快递类 三、测试类四、总结 在现代社会,网购已经成为人们生活的重要组成部分。当用户在购物网站中下订单后,订单中的货物经过一系列的流程,最终…

2023十大最牛编程语言排行榜以及各语言的优缺点

文章目录 ⭐️ 2023年7月十大编程语言排行榜⭐️ 十大值得学习编程语言概要🌟 Python🌟 C/C🌟 Java🌟 C#🌟 JavaScript🌟 Swift🌟 Ruby🌟 GO(Golang)&#x1…

ElasticSearch Window Linux部署

文章目录 一、Window 集群部署二、Linux 单节点部署三、Linux 集群部署 一、Window 集群部署 创建 elasticsearch-cluster 文件夹,在内部复制三个elasticsearch服务 修改集群文件目录中每个节点的 config/elasticsearch.yml 配置文件 # -----------------------…

ROS 2 — 托管(生命周期)节点简介

一、说明 这篇文章是关于理解ROS 2中托管(生命周期)节点的概念。我们描述了概念性的想法以及我们为什么需要它。所以让我们开始吧! 二、托管式节点 — 什么和为什么? 为了理解托管式节点,让我们从一个简单的问题陈述开…

LeetCode 918. Maximum Sum Circular Subarray【数组,动态规划】中等

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

谷粒商城篇章5 ---- P173-P192 ---- 检索服务【分布式高级篇二】

目录 1 检索服务 1.1 搭建页面环境 1.1.1 引入依赖 1.1.2 将检索页面放到gulimall-search的src/main/resources/templates/目录下 1.1.3 调整搜索页面 1.1.4 将静态资源放到linux的nginx相关映射目录下/root/docker/nginx/html/static/ search/ 1.1.5 SwitchHosts配置域…

Zookeeper的基本概念以及安装

Zookeeper简介 Zookeeper是一个分布式的(多台机器同时干一件事情),开源的分布式应用程序协调服务,是Google公司Chubby产品,是Hadoop和Base重要的组件,.它是一个分布式应用程序提供一致性的服务的软件,提供的功能包括:配置服务,域名服务,分布式同步,组服务等 Zookeeper目…

大数据课程C4——ZooKeeper结构运行机制

文章作者邮箱:yugongshiyesina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解Zookeeper的特点和节点信息; ⚪ 掌握Zookeeper的完全分布式安装 ⚪ 掌握Zookeeper的选举机制、ZAB协议、AVRO; 一、Zookeeper-简介 1. 特点…

TRT4-trt-integrate - 3 使用onnxruntime进行onnx的模型推理过程

前言: onnx是microsoft开发的一个中间格式,而onnxruntime简称ort是microsoft为onnx开发的推理引擎。允许使用onnx作为输入进行直接推理得到结果。 py接口的推理过程: main函数: if __name__ "__main__":session onn…

模拟量采集S_ITR函数(信捷C语言FC)

模拟量采集和转换函数非常简单,这里不再介绍,想了解具体算法的可以查看下面博客文章: PLC模拟量输入 模拟量转换FC S_ITR_博途模拟量转换程序_RXXW_Dor的博客-CSDN博客模拟量采集、工业现场应用特别广泛、大部分传感器的测量值和输出信号都是线型关系,所以我们可以利用线性…

JPA连接达梦数据库导致auto-ddl失效问题解决

现象: 项目使用了JPA,并且auto-ddl设置的为update,在连接达梦数据库的时候,第一次启动没有问题,但是后面重启就会报错,发现错误为重复建表,也就是说已经建好的表没有检测到,…

mysql用户添加

一、连接mysql服务 mysql -u root -p 二、查询用户表 use mysql ; SELECT User, Host FROM mysql.user; 三、新增用户并授权 Create USER dev4rw% IDENTIFIED WITH mysql_native_password BY 新密码; GRANT ALL PRIVILEGES ON *.* TO dev4rw% WITH GRANT OP…