当前位置: 首页 > news >正文

汽车总线之----J1939总线

instruction

SAE J1939 是由美国汽车工程协会制定的一种总线通信协议标准,广泛应用于商用车,船舶,农林机械领域中,J1939协议是基于CAN的高层协议,我们来看一下两者之间的关系。在J1939 中,物理层和数据链路层都是基于CAN标准,使用的是CAN扩展真帧格式,除此以外,J1939 在CAN 标准的基础上做了一些额外的规定,比如对29位的ID有更详细的定义,J1939 中的数据单元为parameter group及参数组,参数组是由参数组编号以及PGN所标识的,参数组携带的数据长度不再限制为八个字节,实现这一点的必要规定主要在OSI模型中的更高层进行定义。
在这里插入图片描述

在J1939 中存在两种通信方式,分别是点对点和广播通信,我们知道CAN采用的是广播通信,既然J1939 是基于CAN的通信协议,为什么会有点对点的连接方式呢,其实在J1939 中,数据链路层采用的仍然是广播通信的方式,这与CAN是一致的,具体点对点还是广播的方式,其实是在OSI模型中的第七层及应用层决定的。
在这里插入图片描述

这里我们可以看一个例子来理解这两种通信方式,在这个网络中有五个节点,红线表示的是点对点的通信方式,蓝线表示的就是广播的通信方式,我们具体来看一下transmission controller或break system controller,可以通过发送TSC1这一个参数组给Engine controler,来控制发动机扭矩,这就是点对点的通信方式,这种通信方式具备特定的发送方和接收方,instrument class control了,可以通过RQST这个参数组,向总线上的所有其他ECU请求获得他们的地址,这就是广播通信方式。
在这里插入图片描述

J1939 参数组和信号

首先我们先来学习PDU和PGN这两个重要的概念,首先是PDU,PDU是应用层和网络层中的数据单元,用于与数据链路层进行数据交互。接着我们再来看一下PGN,PGN及参数组是具有彼此相关性,并且传输速率相同的一组信号。每个参数组都有唯一的编号及PGN,也就是参数组编号。PGN的长度为24个位,六个最高位为零,其余部分分别是扩展数据页EDP,数据页DP, PDU格式PF, PDU细节PS。 EDP和DP两个位的组合用于扩展PGN的范围,在J1939 中一般使用的是00,其余的组合用于NMA2000 或者诊断等。在EDP和DP之后是八个位的PDU格式及PF,PDU格式有两种,当PF的范围为0x00 到0x1 f时,为PDU格式1,此时PDU细节也就是PS表示的是目标地址,当PF的范围为0xf0 到0xff时,PS表示的是组扩展,组扩展意味着可以扩大PGN的数量,后续内容中会向大家介绍PGN数量的计算,了解了PDU和PGN这两个概念后,我们可以看一下PDU的结构,首先是三个位的优先级,这三个位主要控制访问总线的优先级,在PGN之后是八个位的原地址,结合两种PDU格式就可以实现点对点或者广播的通信方式,最后是数据场内容,整体上PDU分为七个部分,在进行通信时,PDU是需要映射到CAM报文进行发送的,数据场内容是放到CAN报文的数据场,发送的前六个部分则会与CAN中定义的29位的ID进行映射。
在这里插入图片描述

我们具体来看一下,我们可以看到前六个部分是按照高位到低位的顺序,依次分布在29位ID中的,前面我们介绍到PDU有两种格式,由此我们可以计算所能表示的PGN的数量,当PF小于240时,PS表示的是目标地址,此时可以表示的PGN的数量为240,当PF在240255之间时,PS表示的是组扩展,它的范围为0255,此时PF和PS的组合可表示的PG数量为16x256,所以我们可以计算出PG最大的数量为4336,当然这是EDP和DP的值,均为临时的计算结果,对于EDP和DP的不同组合,还可以表示更多的PGN并应用于不同的场景。
在这里插入图片描述

这11939不仅定义了PGN,还定义了其数据内容,这11939中定义的信号采用的是英特尔编码方式,每个定义的信号称为SPN,每个SPN都有有效的数据范围,比例因子和偏移量,在这里我们可以看一个例子。对于flue temperature,也就是发动机油温,这个SPN它的数据范围为-40摄氏度到正210摄氏度,它的比例因子为一摄氏度,偏移量为-40摄氏度,根据比例因子和偏移量就可以得出原始值到物理值的转换公式,也就是原始值乘以比例因子,然后再加上偏移量,比如现在原始值为100,那么所表示的发动机油温的物理值为60摄氏度,通过以上内容,我们学习了PDU, PG以及SPN这三个J1939 中重要的概念,相关内容,大家也可以查阅J1939-21这一个文档进行学习,
在这里插入图片描述
在这里插入图片描述

J1939传输协议

介绍J1939 的传输协议,传输协议主要实现数据的拆装重组以及连接管理,下面我们具体来看一下,首先我们对传输协议进行整体的了解,在J1939 中有两种通信方式,分别是点对点和广播通信,这两种通信方式对应两种类型的传输协议,对于一帧CAN报文,它的数据厂长度最大为八个字节。在J1939 中,PGN的数据长度不限于八个字节,但由于J1939 中物理层和数据链路层都是基于CAN标准,因此对于大于八个字节的数据,需要发送方将其拆分为多个数据包,然后通过CAN报文形式进行发送,接收方则需要将接收的数据进行重组,这就是通过传输协议实现的。
在这里插入图片描述

下面我们具体来看一下,对于点对点的通信方式,采用的是connection mode date transfer,简称为cmdt,也就是连接模式,数据传输这种传输协议,数据的传输建立在发送方和接收方建立连接的基础上,接收方可以对数据包的流量进行控制,并且发送方和接收方都可以终止连接,对于广播通信方式采用的是broadcast a nice message,简称为bm应用,这种传输协议数据会发送到所有节点。
在这里插入图片描述

在J1939 中,有两个PGM用于传输协议,实现多包数据的点对点以及广播传输,第一个PGN为TP.CM及00ec00,这个PGN用于连接管理以及流量控制,它的数据长度为八个字节,其中第一个字节为控制字节,包括请求发送,允许发送报文,结束应答,终止连接以及广播发送。后期和字节根据控制类型的不同,定义也有所不同,后续我们也会详细介绍几种典型的控制类型,第二个PGN为TP.DT即001b00 ,这个PGN用于实现数据包的传输,接下来我们就来看一下这两个PG如何实现多包数据的传输。
在这里插入图片描述

首先我们先来看TP.CM,当控制字节为0x10 时,表示的是请求发送,即rts,此时第二第三个字节表示的是要发送的数据的字节数,第四个字节表示的是要发送的数据包的数量,第五个字节表示的是每接收到一个cts后,能发送的最大的数据包的数量,第六到第八个字节表示的是打包数据的拼接,通过rts发送方告知接收方网络中有节点希望与其建立连接,也就是明确发送的意图,当节点接收到rts报文后,可以选择建立连接或者拒绝连接,当选择建立连接时,接收方需要发送一个cs报文,通知发送方,他可以接收数据,cp报文的控制字节为0x11 ,此时第二个字节表示的是可以发送的数据包的数量,第三个字节表示的是下一个发送的数据包的编号,第六到第八个字节表示的是打包数据的PGN对于点对点的通信方式,当控制字节为0xff和0x1330表示的分别是终止连接和报文结束应答,这里就不做详细介绍,大家可以查阅J1939-21这一个文档进行学习,当控制字节为0x20 时,表示的是广播通信的方式,发送方告知网络上的所有节点要广播发送数据,通过TP.CM不同的控制类型就可以实现点对点的连接或广播通信。
在这里插入图片描述

而TP.DT这个PGN则可以实现数据包的传输,对于两种通信方式打包的数据都是通过TP.DT传输的,它的数据厂长度为八个字节,第一个字节表示的是数据包的序列编号,序列编号从一开始依次分配给每个数据包,最大为255,第二到第八个字节的内容为打包的数据,因此每个TP.DT可以传输七个字节的数据,数据将从编号为一的数据包开始按编号的递增顺序传输,因此我们可以知道可以拆分的包数为255,每个数据包包含的数据为七个字节,所以可以计算出J1939 中最大可以传输7x255,也就是1785个字节的数据。
在这里插入图片描述

相关文章:

汽车总线之----J1939总线

instruction SAE J1939 是由美国汽车工程协会制定的一种总线通信协议标准,广泛应用于商用车,船舶,农林机械领域中,J1939协议是基于CAN的高层协议,我们来看一下两者之间的关系。在J1939 中,物理层和数据链路…...

基于skopt的贝叶斯优化基础实例学习实践

贝叶斯方法是非常基础且重要的方法,在前文中断断续续也有所介绍,感兴趣的话可以自行移步阅读即可: 《数学之美番外篇:平凡而又神奇的贝叶斯方法》 《贝叶斯深度学习——基于PyMC3的变分推理》 《模型优化调参利器贝叶斯优化bay…...

OJ在线评测系统 后端 用策略模式优化判题机架构

判题机架构优化(策略模式) 思考 我们的判题策略可能会有很多种 比如 我们的代码沙箱本身执行程序需要消耗时间 这个时间可能不同的编程语言是不同的 比如沙箱执行Java要额外花费2秒 我们可以采用策略模式 针对不同的情况 定义不同独立的策略 而不是把所有情况全部放在一个i…...

element ui 精确控制日期控件 date-picker

https://github.com/element-plus/element-plus/discussions/17378 -- 某组件 xxx.vue ... <el-date-pickerv-model"timeRange"type"daterange"range-separator"-"start-placeholder"开始日期"end-placeholder"结束日期"…...

centos7安装指定版本php及扩展

安装EPEL仓库&#xff08;如果尚未安装&#xff09; sudo yum install epel-release导入REMI仓库的公钥&#xff1a; sudo rpm --import http://rpms.remirepo.net/RPM-GPG-KEY-remi启用REMI仓库&#xff08;你可以选择PHP 7.0或者7.4&#xff0c;以下以7.0为例&#xff09;&am…...

后端-对表格数据进行添加、删除和修改

一、添加 要求&#xff1a; 按下添加按钮出现一个板块输入添加的数据信息&#xff0c;点击板块的添加按钮&#xff0c;添加&#xff1b;点击取消&#xff0c;板块消失。 实现&#xff1a; 1.首先&#xff0c;设计页面输入框格式&#xff0c;表格首行 2.从数据库里调数据 3.添加…...

【学习笔记】手写 Tomcat 七

目录 一、优化 Dao 1. 设置 UserDaoImpl 为单例模式 2. 创建 Dao 工厂 3. 在 Service 层获取 UserDao 的实例 二、优化 Service 1. 设置 UserServiceImpl 为单例模式 2. 创建 Service 工厂 3. 在 Servlet 层获取 Service 实现类的对象 三、优化 Servlet 1. 使用配置…...

QT开发:详解 Qt 多线程编程核心类 QThread:基本概念与使用方法

1. 引言 在现代应用程序开发中&#xff0c;多线程编程是一个关键技术&#xff0c;能够显著提高程序的效率和响应速度。Qt 是一个跨平台的 C 框架&#xff0c;其中 QThread 类是实现多线程编程的核心类。本文将深入详解 QThread 的基本概念、使用方法及其在实际应用中的重要性。…...

【芋道源码】gitee很火的开源项目pig——后台管理快速开发框架使用笔记(微服务版之本地开发环境篇)

后台管理快速开发框架使用笔记&#xff08;微服务版之本地开发环境篇&#xff09; 后台管理快速开发框架使用笔记&#xff08;微服务版之本地开发环境篇&#xff09; 后台管理快速开发框架使用笔记&#xff08;微服务版之本地开发环境篇&#xff09;前言一、如何获取项目&#…...

设计模式、系统设计 record part01

技术路线&#xff1a; 工程师》设计师》分析师》架构师 管理路线&#xff1a; 项目经理》技术经理 工程师&#xff1a; 编程技术、测试技术 设计师&#xff1a; 工程师设计技术 分析师&#xff1a; 设计师分析技术 架构师&#xff1a; 分析师架构技术 项目经理&#xff1a; 时间…...

服务器与普通电脑的区别是什么?

服务器作为企业进行线上业务所使用的网络设备&#xff0c;大多数的用户对于服务器都有一定的了解&#xff0c;而普通的电脑则是人们在进行日常娱乐活动中经常会用到的设备&#xff0c;本文就来探讨一下服务器与普通电脑之间的区别是什么吧&#xff01; 普通的电脑就是我们通常所…...

Vue3学习(六)Vue3 + ts几种写法

前言 官网提到组合式api和选项式api 选项式api其实就是vue2的写法&#xff0c;组合式api是vue3的新写法&#xff08;组合式api可以在script中使用setup&#xff08;&#xff09;也可以使用<script setup>&#xff0c;<script setup>是setup&#xff08;&#xff…...

【前端】ES6:Proxy代理和Reflect对象

文章目录 1 Proxy代理1.1 get方法1.2 set方法1.3 has方法1.4 this问题 2 Reflect对象2.1 代替Object的某些方法2.2 修改某些Object方法返回结果2.3 命令式变为函数行为2.4 配合Proxy 1 Proxy代理 Proxy如其名&#xff0c;它的作用是在对象和和对象的属性值之间设置一个代理&am…...

基于微信开发助手企鹅音乐微信小程序的设计与实现(源码+文档+讲解)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…...

学习Spring Boot,应该从哪里开始学起

文章目录 前言1. Java基础2. Spring框架基础3. Spring Boot入门4. 搭建Spring Boot项目5. 编写RESTful API6. 数据库操作7. 安全性和测试8. 部署和运维9. 实践和项目总结前言 学习Spring Boot,应该从哪里开始学起 学习Spring Boot,你可以从以下几个步骤开始学起: 1. Java基…...

【JavaEE初阶】深入解析死锁的产生和避免以及内存不可见问题

前言&#xff1a; &#x1f308;上期博客&#xff1a;【后端开发】JavaEE初阶—线程安全问题与加锁原理&#xff08;超详解&#xff09;-CSDN博客 &#x1f525;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 ⭐️小编会在后端开发的学习中不断更新~~~ &#…...

企微群管理软件:构建高效社群运营的新引擎

在数字化营销日益盛行的今天&#xff0c;企业微信&#xff08;简称“企微”&#xff09;群作为企业与用户直接互动的重要平台&#xff0c;其管理与运营效率直接关系到企业的品牌形象、用户满意度及市场影响力。企微群管理软件&#xff0c;作为专为企微社群设计的高效管理工具&a…...

CORE 中间件、wwwroot

ASP.NET Core中间件组件是被组装到应用程序管道中以处理HTTP请求和响应的软件组件&#xff08;从技术上来说&#xff0c;组件只是C&#xff03;类&#xff09;。 ASP.NET Core应用程序中的每个中间件组件都执行以下任务。 选择是否将 HTTP 请求传递给管道中的下一个组件。这可…...

SpringBoot 与 Maven 快速上手指南

SpringBoot 与 Maven 快速上手指南 在Java开发领域&#xff0c;Spring Boot和Maven是两个极其重要的工具&#xff0c;它们极大地简化了企业级应用的开发和构建过程。Spring Boot通过自动配置和起步依赖等特性&#xff0c;让开发者能够快速搭建起一个Spring应用&#xff1b;而M…...

大觅网之自动化部署(Automated Deployment of Da Mi Network)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...