车载总线系列——J1939三

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

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

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

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.mzph.cn/news/23536.shtml

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

相关文章

Golang之路---04 并发编程——信道/通道

信道/通道 如果说 goroutine 是 Go语言程序的并发体的话,那么 channel(信道) 就是 它们之间的通信机制。channel,是一个可以让一个 goroutine 与另一个 goroutine 传输信息的通道,我把他叫做信道,也有人将…

PLC4X踩坑记录

plc4x引起的oom 使用Jprofiler查看dump文件 由上可以看出有大量的NioEventLoop对象没有释放 PlcConnection#close 设备断连重连后导致的oom,看源码close方法主要是channel通道关闭。 修改NettyChannelFactory源码 plc4x设计思想是一个设备一个连接,…

k8s ingress获取客户端客户端真实IP

背景 在Kubernetes中,获取客户端真实IP地址是一个常见需求。这是因为在负载均衡架构中,原始请求的源IP地址会被替换成负载均衡器的IP地址。 获取客户端真实IP的需求背景包括以下几点: 安全性:基于客户端IP进行访问控制和认证授…

工厂模式(C++)

定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟(目的:解耦,手段:虚函数)到子类。 应用场景 在软件系统中,经常面临着创建对象的工作;由于需求的变化,需要创建的对象的具体类…

Spring Boot、Spring Cloud、Spring Alibaba 版本对照关系及稳定兼容版本

Spring Boot、Spring Cloud、Spring Alibaba 版本对照关系及稳定兼容版本 引言 在 Java 生态系统中,Spring Boot、Spring Cloud 和 Spring Alibaba 是非常流行的框架,它们提供了丰富的功能和优雅的解决方案。然而,随着不断的发展和更新&…

【ARM Coresight 系列文章 2.3 - Coresight 寄存器】

文章目录 Coresight 寄存器介绍1.1 ITCTRL,integration mode control register1.2 CLAIM寄存器1.3 DEVAFF(Device Affinity Registers)1.4 LSR and LAR1.5 AUTHSTATUS(Authentication Status Register) Coresight 寄存器介绍 Coresight 对于每个 coresight 组件&am…

架构训练营学习笔记:5-3接口高可用

序 架构决定系统质量上限,代码决定系统质量下限,本节课串一下常见应对措施的框架,细节不太多,侧重对于技术本质有深入了解。 接口高可用整体框架 雪崩效应:请求量超过系统处理能力后导致系统性能螺旋快速下降 链式…

STM32CubeMx之FreeRTOS的中断优先级+配置

编译运行即可 例如我编写的是一个灯亮500ms 一个等200ms的亮灭 如果他们的优先级是同等的,那么任务都可以实现,时间片会自动切换 但是如果亮500ms的灯 任务优先级更高 还用HALdelay的话 就会让任务二饿死,从而就会只看到任务一的内容 解…

回归预测 | MATLAB实现SO-CNN-BiGRU蛇群算法优化卷积双向门控循环单元多输入单输出回归预测

回归预测 | MATLAB实现SO-CNN-BiGRU蛇群算法优化卷积双向门控循环单元多输入单输出回归预测 目录 回归预测 | MATLAB实现SO-CNN-BiGRU蛇群算法优化卷积双向门控循环单元多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现SO-CNN-BiGRU蛇群算法…

Cilium系列-13-启用XDP加速及Cilium性能调优总结

系列文章 Cilium 系列文章 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, 可以进一步提升 Cilium 的网络性能. 具体调优项包括不限于: 启用本地路由(Native Routing)完全替换 KubeProx…

什么是微服务

微服务的架构特征: 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责自治:团队独立、技术独立、数据独立,独立部署和交付面向服务:服务提供统一标准的接口&#xff0…

九、pig安装

1.上传pig包 2.解压文件 3.改名 4.赋权 5.配置环境变量 export PIG_HOME/usr/local/pig export PATH$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$HBASE_HOME/bin:$SQOOP_HOME/bin:$PIG_HOME/bin 6.测试

开发运营监控

DevOps 监控使管理员能够实时了解生产环境中的元素,并有助于确保应用程序平稳运行,同时提供最高的业务价值,对于采用 DevOps 文化和方法的公司来说,这一点至关重要。 什么是开发运营监控 DevOps 通过持续开发、集成、测试、监控…

使用JProfiler进入JVM分析

要评测JVM,必须将JProfiler的评测代理加载到JVM中。这可以通过两种不同的方式发生:在启动脚本中指定-agentpath VM参数,或者使用attach API将代理加载到已经运行的JVM中。 JProfiler支持这两种模式。添加VM参数是评测的首选方式,集…

Maven项目中Lifecycle和Plugins下的install的区别

在Maven中,如果你的web和service在不同的模块下,如果直接用用tomcat插件运行web层,那么运行时会报错 Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.5.2:install (default-cli) on project springboot: The pack…

常用SQL语句总结

SQL语句 文章目录 SQL语句1 SQL语句简介2 DQL(数据查询语句)3 DML(数据操纵语句)4 DDL(数据定义语句)5 DCL(数据控制语句)6 TCL(事务控制语句) 1 SQL语句简介…

nginx网站服务

nginx:是一个高性能,轻量级web软件 1、稳定性高(没有Aapache稳定) 2、资源消耗比较低,体现在处理http请求的并发能力很高,单台物理服务器可以处理到3万-5万个请求 稳定:一般在企业中为了保持…

SpringBoot+AOP+Redission实战分布式锁

文章目录 前言一、Redission是什么?二、使用场景三、代码实战1.项目结构2.类图3.maven依赖4.yml5.config6.annotation7.aop8.model9.service 四、单元测试总结 前言 在集群环境下非单体应用存在的问题:JVM锁只能控制本地资源的访问,无法控制…

javaAPI(二):String、StringBuffer、StringBuilder

String、StringBuffer、StringBuilder的异同? String:不可变字符序列;底层结构使用char[]存储; StringBuffer:可变字符序列;线程安全的,效率低;底层结构使用char[]存储; …

快速搭建单机RocketMQ服务(开发环境)

一、什么是RocketMQ ​ RocketMQ是阿里巴巴开源的一个消息中间件,在阿里内部历经了双十一等很多高并发场景的考验,能够处理亿万级别的消息。2016年开源后捐赠给Apache,现在是Apache的一个顶级项目。 早期阿里使用ActiveMQ&#xff0c…