车载总线系列——J1939三

news2024/11/16 5:47:13

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。

老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师:

没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能站在他人的角度来反对自己。人生在世,最怕的就是把别人的眼光当成自己生活的唯一标准。到最后,既没有活成别人喜欢的样子,也没有活成自己想要的样子。
我们只有接纳真实的自己,不自卑、不自傲,才能拥有更强大的内心;只有找到自己的核心价值,才能活出自己的精彩人生。

SAE J1939是基于CAN(Controller Area Network,控制器局域网)的通信协议,广泛用于各类商用车。该协议对车辆中连接CAN的电子组件及其附加设备之间的通信进行了标准化。

一、优先级

NAME用于解决冲突,以及确定地址的优先级。如果通过“地址声明”检测到地址冲突,则所涉及的设备必须比较其NAME。从 MSB (Most Significant Bit, 最高有效位)). 开始,逐位比较。在比较时,CAN仲裁的规则同样适用:0会覆盖1。数值越小的NAME优先级越高,优先级较高的ECU可以使用该地址。在这种情况下,具有较低优先级NAME的ECU的行为取决于其配置,如下为ECU的四种基本配置:

1、自行配置

地址丢失后,设备将自行搜索介于128到247之间的新地址,并尝试获取该地址。Animation „Address Claim Dynamic“

2、程序配置

设备会有送带有NULL地址(254)的“地址声明”PGN,表示其“无法声明地址”。可以使用“命令地址”网络管理服务为ECU分配新的设备地址。此操作可以使用外部工具或网络中的“智能”设备来完成。

3、手动配置

对于此类ECU,只能借助开关设置新地址。此配置的常用方法是根据ECU的位置,借助处理器I/O端口对地址进行编码。例如,车门ECU可以独立确定是在左侧还是在右侧进行安装,然后选择相应的地址。

4、不可配置

此类ECU只能通过对设备软件进行重新编程来接收新地址。

4、AAC位

可能在网络中多次出现的ECU必须支持上一章解决方案和配置中的“自行配置” 。该配置行为由NAME中的最高有效位(MSB)“仲裁地址(AAC)” 决定。此位用于ECU地址冲突失败后独立搜索新设备地址。如果ECU仅在网络中出现一次,则可以使用固定的设备地址,不必设置“AAC”位。这样操作的结果是,自配置ECU的NAME优先级低于未设置该位的ECU。

5、请求

J1939网络管理中的一个重要机制是使用“请求”PGN,用于请求网络中ECU的PGN。”地址声明“PGN也体现了该机制的应用。例如,ECU必须通过“地址声明”PGN来回答“地址声明请求”PGN。

注意: 如果发出请求的ECU具有有效地址,则该ECU还必须回答自己的请求!

6、空地址

请求机制常应用于动态网络,并在通信开始时使用。因此,要参与通信的ECU可以在“地址声明”之前请求地址情况。注意:“地址声明请求”PGN是J1939中的例外情况。换言之,该PGN是唯一无需有效地址即可发送的参数组,因此可以从空地址(254)发送。

7、分段报文(Fragmented Message)

参数组的基本信息章节中介绍了参数组的属性及其与“纯”CAN报文的区别,其中提到PGN的数据长度不限于8个字节。但由于使用CAN作为物理传输层,因此发送方必须将长度超过8个字节的数据包分为多个数据包,然后通过CAN报文单独发送。接收方必须按其初始顺序进行重组。J1939标准对此定义了一组规则,即传输协议。

二、两种传输协议

1、点对点

特定通信 - 连接模式数据传输,发送方通过此协议与接收方建立连接。接收方可以选择控制和影响各个数据包的流控制。接收方和发送方均可中止连接(例如在发生错误时)。

连接模式数据传输协议不受任何时间限制。所有节点均可以最大允许速度彼此交换数据。

2、广播

全局通信 – BAM(Broadcast Announce Message,广播通知消息):

发送方独自管理流控制。报文发送到所有节点,接收方无法干预通信。即使接收方缺少一条报文,也无法传达此情况。如有必要,接收方必须等待新的报文。

由于接收方无法影响BAM协议中的流控制,因此发送方必须在各个数据包之间保持最小时间间隔,即50-200毫秒。这样,慢速的网络节点就可以跟上通信的节奏。

J1939诊断接口定义了标准诊断连接器,以及一组用于处理各种诊断服务的PGN。诊断报文(DM)中所包含的PGN基本涵盖统一诊断通信服务(UDS)协议中定义的诊断功能,还符合欧盟法规和适用于车载诊断(OBD II)的“加利福尼亚州法规规范”,以及重型车辆 OBD(Heavy Duty OBD)和全球统一OBD(WWH OBD,ISO 27145)。

与必须通过软件工具主动启动服务的UDS诊断相反,J1939 ECU在正常工作期间也可以独立发送诊断报文。如有必要,还可以直接在网络中评估发生的错误并直观显示。同时,可以使用工具通过诊断连接器读出错误。统一错误代码(亦称诊断故障代码,Diagnostic Trouble Codes)包含故障SPN、错误模式和错误发生频率。

三、DTC

DTC表示系统中的故障属性,主要代表当前状态异常的SPN。导致当前状态异常的原因有多种。可解释该状态的指示器用于尽可能精确地说明错误的实际原因。DTC具有统一的结构,并且由以下元素构成:

1、SPN

表示错误的SPN。所有的已定义SPN均可在DTC中使用。

2、FMI(Failure Mode Identifier,故障模式标识符)

表示已发生错误的性质和类型,例如超出值范围(过高或过低)、传感器短路、更新速率错误、标定错误。

3、OC(Occurrence Counter,发生计数器)

该计数器计算每个SPN发生错误的次数并存储该数值(即使错误失效)。

4、CM(SPN Conversion Method,SPN转化方法)

定义DTC对齐方式。值为“0”表示“Structure of a DTC”图中所示的对齐方式;如果值为“1”,则必须区分是标准曾经定义过的3种方式之中的哪一种。系统必须了解这一点。

搁笔分享完毕!

愿你我相信时间的力量

做一个长期主义者!

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

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

相关文章

【Java】如何判断线程池任务执行完?

文章目录 前言1.需求分析2.实现概述3.具体实现3.1 统计完成任务数3.2 FutureTask3.3 CountDownLatch和CyclicBarrier 小结 前言 论是在项目开发中,还是在面试中过程中,总会被问到或使用到并发编程来完成项目中的某个功能。 例如某个复杂的查询&#xf…

etcd

文章目录 etcd单机安装设置键值对watch操作读取键过往版本的值压缩修订版本lease租约(过期机制)授予租约撤销租约keepAlive续约获取租约信息 事务基于etcd实现分布式锁原生实现官方 concurrency 包实现 服务注册与发现Go 操作 Etcd 参考 etcd etcd 是一…

【Java】批量生成条码

批量生成PDF条码 效果图: //调用下方接口注意编码格式if(CollectionUtil.isNotEmpty(productExList)){String exportFileName URLEncoder.encode("商品条码", "UTF-8") DateUtil.format(new Date(), "yyyyMMddHHmmss");response.…

git 公钥密钥 生成与查看

1.什么是公钥 很多服务器都是需要认证的,ssh认证是其中的一种。在客户端生成公钥,把生成的公钥添加到服务器,你以后连接服务器就不用每次都输入用户名和密码了。 很多git服务器都是用ssh认证方式,你需要把你生成的公钥发送给代码仓…

【每日一题】21. 合并两个有序链表

【每日一题】21. 合并两个有序链表 21. 合并两个有序链表题目描述解题思路 21. 合并两个有序链表 题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4…

中间人攻击

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、启动 Kali Linux准备 Apache 服务器使用Ettercap插件进行欺骗使用 Wireshark 捕获 Https 流量总结 前言 您可能已经熟悉中间人攻击:攻击者通过…

测试平台——项目模块模型类设计

这里写目录标题 一、项目应用1、项目包含接口:2、创建子应用3、项目模块设计a、模型类设计b、序列化器类设计c、视图类设计 4、接口模块设计a、模型类设计b、序列化器类设计c、视图类设计 5、环境模块设计6、DRF中的通用过滤6.1、设置过滤器后端 一、项目应用 1、项…

js省市区下拉框联动——前端笔记

问题: 我们常常要用到下拉框联动的功能,比如最常用的是选择地址的 省 市 区 的联动。思路: 先填充第一个下拉框,然后写一个第一个下拉框的change事件来加载第二个下拉框,再写第二个下拉框的change事件来加载第三个下…

面试总结-c++

1该吹牛逼吹牛逼。在自己能说出个所以然的情况下,该吹就吹,不吹没工作,吹了有希望。 比如 c组长,确有其事,但是挺唬人。说自己在北京定居也是侧面吹牛逼,证明自己的能力。还有媳妇在研究所。 2.对自己做过…

uniapp:图片验证码检验问题处理

图形验证码功能实现 uniapp:解决图形验证码问题及利用arraybuffer二进制转base64格式图片(后端传的图片数据形式:x00\x10JFIF\x00\x01\x02\x00…)_❆VE❆的博客-CSDN博客 UI稿: 需求:向后端请求验证码图片&…

Flask 是什么?Flask框架详解及实践指南

Flask 是一个轻量级的 Python Web 框架,它被广泛用于构建 Web 应用程序和 API。Flask 简单易用,具有灵活性和可扩展性,是许多开发者喜欢用其构建项目的原因。本文将介绍 Flask 是什么以及如何使用它来构建 Web 应用程序,同时提供一…

《Java-SE-第二十八章》之CAS

前言 在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:“下边永远是地狱!” 博客主页:KC老衲爱尼姑的博客主页 博主的github,平常所写代码皆在于此 共勉:talk is cheap, show me the code 作者是爪哇岛的新手,水平很有限&…

Cocos Creator的 Cannot read property ‘applyForce‘ of undefined报错

序: 1、博主是看了这个教程操作的时候出的bug>游戏开发 | 17节课学会如何用Cocos Creator制作3D跑酷游戏 | P9 代码控制对象移动_哔哩哔哩_bilibili 2、其实问题不是出在代码上,但是发现物体就是不平移 3、node全栈的资料》node全栈框架 正文…

【文件操作:解锁高效读写与管理技巧】

本章重点 为什么使用文件 什么是文件 文件的打开和关闭 文件的顺序读写 文件的随机读写 文本文件和二进制文件 文件读取结束的判定 文件缓冲区 1. 为什么使用文件 C语言中的变量和数据通常只在程序运行时存在于内存中,一旦程序结束,这些数据就…

LeetCode933. 最近的请求次数

题干 写一个 RecentCounter 类来计算特定时间范围内最近的请求。 请你实现 RecentCounter 类: RecentCounter() 初始化计数器,请求数为 0 。int ping(int t) 在时间 t 添加一个新请求,其中 t 表示以毫秒为单位的某个时间,并返回…

三、PWM呼吸灯

1. 什么是呼吸灯 如下图中的蓝色LED灯,不再是亮灭交替,而是慢慢亮慢慢灭,这就是呼吸灯 生活中常见 2. 怎样实现? 答:用PWM

Android中级——RemoteView

RemoteView RemoteView的应用NotificationWidgetPendingIntent RemoteViews内部机制模拟RemoteViews RemoteView的应用 Notification 如下开启一个系统的通知栏,点击后跳转到某网页 public class MainActivity extends AppCompatActivity {private static final …

项目一:基于stm32的阿里云智慧消防监控系统

若该文为原创文章,转载请注明原文出处。 Hi,大家好,我是忆枫,今天向大家介绍一个单片机项目。 一、简介 智慧消防监控系统,是用于检测火灾,温度,烟雾的监控系统。以 stm32单片机为核心外加 MQ…

一次redis缓存不均衡优化经验

背景 高并发接口,引入redis作为缓存之后,运行一段时间发现redis各个节点在高峰时段的访问量严重不均衡,有的节点访问量7000次/s,有的节点访问量500次/s 此种现象虽然暂时不影响系统使用,但是始终是个安全隐患&#x…

ARM进阶:内存屏障(DMB/DSB/ISB)的20个使用例子详解

在上一节内存屏障指令之DMB、DSB和ISB详解中,介绍了一下内存屏障的三个指令的作用并举了一些例子,对于内存屏障指令的使用时机,与处理器架构(比如Cortex-M和Cortex-A)和处理器的系统实现(同样的架构,有不同的实现,如ST…