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

news2024/11/25 5:46:01

前言:以下关于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)数据重组
数据包被陆续地接收后,多组消息的数据包将会按照序列编号的顺序重新组合成一长串字节。这一长串字节将被传送给负责处理长数据的应用程序模块。

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

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

相关文章

从Vue层面 - 解析发布订阅模式和观察者模式区别

目录 前言一、发布订阅模式什么是发布订阅模式?应用场景 二、观察者模式1)什么是观察者模式?2)应用场景3)vue中的观察者模式观察者(订阅者) - Watcher目标者(发布者) - D…

内部类(上)成员内部类,局部内部类的使用

文章目录 前言一、内部类是什么?二、如何使用? 1.成员内部类2.局部内部类总结 前言 如果在一个文件中创建了两个类,那么这两个类是并列关系,不存在哪一个类包含哪一个类的情况。如果在类中再定义一个类,那么这个在类中…

VMPWN的入门系列-1

温馨提示: 今天的文章有点长,图片比较多,请耐心阅读 5.1 实验一 VMPWN1 5.1.1 题目简介 这是一道基础的VM相关题目,VMPWN的入门级别题目。前面提到VMPWN一般都是接收字节码然后对字节码进行解析,但是这道题目不接受字节…

加载已训练好的目标检测YOLOv8,v5,v3,v6模型,对数据集中某张图片中的object打上方框、标出类别,并将图片保存到本地

参考的教程:Python - Ultralytics YOLOv8 Docs 在与ultralytics代码同一层级下新建 predict.py 里面写下面的内容。运行即可 from ultralytics import YOLO from PIL import Image import cv2# 加载计划使用的模型 model YOLO("yolov8n.pt") # load a…

Flask deleteput

Flask delete&put 一、delete 请求1.1 代码1.2 分析1.3 验证 二、put请求2.1 代码2.2 分析2.3 验证 三、总结 Flask get&post 请求传送门:FLASK get&post分析 一、delete 请求 1.1 代码 from flask import Flask, requestapp Flask(__name__)app.ro…

CVPR2023新作:考虑3D一致性的人脸关键点检测

Title: 3D-aware Facial Landmark Detection via Multi-view Consistent Training on Synthetic (三维感知人脸关键点检测:合成数据下多视角一致训练) Affiliation: Texas A&M University Authors: Libing Zeng, Lele Chen, Wentao Bao, Zhong Li, Yi Xu, Jun…

Linux常用命令——dris命令

在线Linux命令查询工具 dris 显示和清空目录堆栈中的内容 补充说明 dris命令用于显示和清空目录堆栈中的内容。 语法 dris(选项)选项 n:显示从左边算起第n笔的目录; -n:显示从右边算起第n笔的目录; -l:显示目录…

2023年第六届河北省研究生数学建模竞赛题目B题Python求解代码

2023年第六届河北省研究生数学建模竞赛题目B题 本文文档与代码视频讲解与下载:【2023河北省研究生数学建模竞赛B题数据集和代码-哔哩哔哩】 https://b23.tv/weulGAO 光伏电池的异常检测与发电产能预测在碳达峰-碳中和的战略背景下,我国的光伏发电技术发…

离谱!学费4万孩子考8分

家长怒怼学费4万孩子考8分,高中单科却只考了8分,而且还有不少孩子考了5分甚至更低? 这试题是有多难啊? 老洪说两句。 现在有一些“贵族学校”或者是一些民办学校,收费项目和标准都由市场来决定,可能比一般学…

openGauss学习笔记-21 openGauss 简单数据管理-GROUP BY子句

文章目录 openGauss学习笔记-21 openGauss 简单数据管理-GROUP BY子句21.1 语法格式21.2 参数说明21.3 示例 openGauss学习笔记-21 openGauss 简单数据管理-GROUP BY子句 GROUP BY语句和SELECT语句一起使用,用来对相同的数据进行分组。您可以对一列或者多列进行分组…

【mysql学习篇】Order by与Group by优化以及排序算法详解

一、Order by与Group by优化 Case1: 分析: 利用最左前缀法则:中间字段不能断,因此查询用到了name索引,从key_len74也能看出,age索引列用在排序过程中,因为Extra字段里没有using filesort 注意…

tinkerCAD案例:12.Minecraft Party Glasses 我的世界派对眼镜

tinkerCAD案例:12.Minecraft Party Glasses 我的世界派对眼镜 原文 In this lesson, you will learn to design a cool pair of party glasses! 在本课中,您将学习设计一副很酷的派对眼镜! Start by dragging the Box shape to the Workpla…

【Unity】写的一个小工具用来帮助调试代码

unity的Debug.Log方法当放在Update这样的高频方法中调用时,调试信息就会显得很乱难以观测,因此我自己实现了一个调试辅助工具,可以通过GUI实时显示变量状态在Game视图中,可以在代码的任意处调用即可(key不要重复&#…

STM32 USB使用记录:HID类设备(后篇)

文章目录 目的基础说明项目构建与代码调整接收发送代码与测试示例链接报告描述符总结 目的 接上篇: 《STM32 USB使用记录:HID类设备(前篇)》 USB HID 类的设备有个比较大的好处是大部分时候接入主机中都是可以免驱使用的。这篇文…

通过Vue-cli解决前端跨域问题

1、找到vue.config.js 在vue.config.js当中增加如下配置 devServer: {port: 3001,proxy: {/agent: {target: http://10.8.50.250:6666,ws: false, //true,开启ws, 如果是http代理此处可以不用设置changeOrigin: true, // 如果接口跨域,需要进行这个参…

面向对象编程:深入理解抽象类和关键字

文章目录 1. 关键字1.1 static1.2 final1.3 static final 2. 抽象类2.1 抽象类的推导过程2.2 抽象类能否创建对象?2.3 抽象类的意义2.4 判断 3. 案例:计算圆形和长方形的周长及面积 在Java编程中,我们经常会遇到一些特殊的关键字和概念&#…

Kyuubi入门简介

一、官方简介 HOME — Apache Kyuubi 二、概述 1、一个企业级数据湖探索平台 2、一个高性能的通用JDBC和SQL执行引擎 3、一个基于spark的查询引擎服务 三、优点 1、提供hiveserver2查询spark sql的能力,查询效率更为高效,首次构建连接时会持续保持连…

学习笔记21 list

一、概述 有两种不同的方法来实现List接口。ArrayList类使用基于连续内存分配的实现,而LinkedList实现基于linked allocation。 list接口提供了一些方法: 二、The ArrayList and LinkedList Classes 1.构造方法 这两个类有相似的构造方法&#xff1a…

数据结构--串、数组、广义表

这里写目录标题 串定义案例引用串的类型定义以及存储结构抽象类型定义存储结构(顺序表较为常用)顺序存储结构链式存储结构 串的模式匹配算法(查找主串中是否有某个字串)BF算法KMP算法设计思想对字串的回溯进行了优化代码对next【j】进行优化 数组类型一维…

C#,数值计算——Kolmogorov-Smirnov累积分布函数的计算方法与源程序

using System; namespace Legalsoft.Truffer { /// <summary> /// Kolmogorov-Smirnov累积分布函数 /// Kolmogorov-Smirnov cumulative distribution functions /// and their inverses. /// </summary> public class KSdist { …