J1939入门(一)[通俗易懂]

J1939入门(一)[通俗易懂]J1939概述SAEJ1939(以下简称J1939)是美国汽车工程协会(SAE)的推荐标准,广泛用于是商用车(重卡、大客车等道路车辆和工程机械、农业机械、轨道机车、船舶等非道路车辆及设备)上电子部件间的数字通讯。

大家好,又见面了,我是你们的朋友全栈君。

0.SAE J1939概述

SAE J1939(以下简称J1939)是美国汽车工程协会(SAE)的推荐标准,广泛用于是商用车(重卡、大客车等道路车辆和工程机械、农业机械、轨道机车、船舶等非道路车辆及设备)上电子部件间的数字通讯。它由SAE“卡车与大型客车电气与电子委员会”(Truck & Bus Electrical & Electronics Committee)下属的“卡车与大型客车控制和通讯网络附属委员会”(Truck & Bus Control and Communications Network Subcommittee)开发编写。

J1939基于德国Bosch公司在上世纪80年代开发的控制器局域网络(Controller Area Network,CAN), CAN总线。CAN总线描述了一种车辆各控制单元之间不分主从节点的通信网络, 各控制单元之间通过报文通信。

J1939描述了CAN总线的一种网络应用,包括CAN网络物理层定义、数据链路层定义、应用层定义、网络层定义、故障诊断、和网络管理。在SAE J1939协议中,不仅仅指定了传输类型、报文结构及其分段等,而且报文内容本身也做了精确的定义, 下面对它们详细进行描述。

SAE J1939 不同于在乘用车行业的CAN通信协议。乘用车行业的CAN通信协议没有统一的行业标准, 基本上由各主机厂依据自己的需要进行定义, 这给主机厂之外的应用人员带来了一定的困难。 而商用车行业的SAE J1939 已成为了全球标准, 除了一些用于保密的厂家私有报文之外, 所有车辆运行参数的报文解析都是公开的, 比如发动机转速、发动机水温、发动机负荷比都可以通过标准报文解析获得。

1. J1939 网络各层介绍

1.1 J1939物理层:

J1939-11 定义了波特率为250 kb的带屏蔽的三线物理层, 网络主干可达40米长,可挂40个节点;J1939-15 定义了波特率为250 kb的不带屏蔽的两线物理层, 网络主干可达40米长,可挂10个节点;还有一个J1939-14定义波特率为500 kb的物理层,目前还没正式推出。

1.2 J1939数据链路层(基于J1939-21):

J1939 使用一个较简单的数据链路来通信。 如下表所示, 29为CAN ID包括Priority (P), Extended Data Page (EDP), Data Page (DP), Protocol Format (PF), Protocol Specific (PS), 和 Source Address (SA)六个部分。

P EDP DP PF PS SA
3 bits 1 bit 1 bit 8 bits 8 bits 8 bits

P 是优先级, EDP 和 DP 构成不同的4个数据页, 其中一页为ISO 15765-3 预留。PF 和 PS 定义参数组数和目标地址, SA 是源地址。

1.3 J1939网络层(基于J1939-31):

描述两个网络部分间针对报文传输的网桥的功能,并且只与 J1939网桥实现相关。

1.4 J1939应用层(基于J1939-71):

描述实际的数据 (参数或带有值域的网络变量、分辨率、物理单元和传输类型) 。每个报文无歧义地对应一个数(参数组数) 。

1.5 J1939网络管理(基于J1939-81):

可以被当作一个分离的单元,能直达第一层,因此在这个层模型中,该模块是作为右手边的一个独立的功能块。网络管理基本上包括自动分配或决定节点地址(即插即用原则)。在SAE J1939中没有定义节点监视,因而必须在应用时通过循环报文实现。

1.6 J1939诊断(基于J1939-13/73):

2. J1939 应用介绍

2.1 J1939 报文

J1939 报文的核心是Parameter Group Number (PGN)。每个报文的PGN 都是独特的, 用于区分报文和其数据。 尽管有时候一个报文只包含一个参数(如车架号VIN),一般来说,一个报文会含有多个参数。 整个J1939 一共有8672 个PGN。现以PGN 61444 表示的报文为例, 它表示发动机控制单元报文ECU1。 这个报文含有7个不同的参数, 发动机转速值是其中之一。

2.2 J1939 报文长度

J1939 允许使用3种不同的报文长度: 3字节、8字节、变长度。 其中, 3字节报文只有一个报文, 那就是请求报文, PGN 59904;绝大多数的报文时8字节,这让网络带宽得到最有效地使用;变长度报文指长度在9字节到1785个字节,这样的报文太长无法放进一个单独的数据帧, 所以必须分解放进不同的数据帧,在接收端再完成重组, 这个步骤由 J1939 的传输协议层里定义。传输协议层定义了两种不同类型的分解方法:BAM和CM。 这两种分解方法有几个不同点, 最主要的是: 1, 目标地址不同,BAM使用全局地址而CM使用特定地址, 正由于寻址上的区别,BAM一次只能发送一个而CM一次可以发送多个。 2, 发送需要的时间不同,BAM 个数据包之间得间隔不短于50毫秒且不超过200 毫秒, 而CM类型的数据包可以发送越快越好。

2.3 J1939 节点命名

J1939 网络上的每个电子控制单元(Electronic Control Unit, ECU)都有一个独一无二的名字。 这个名字64位宽, 由下面这几部分组成:Arbitrary Address Capable, Industry Group, Vehicle System Instance, Vehicle System, Reserved Bit, Function, Function instance, ECU Instance, Manufacturer Code, and Identity Number。 这个名字给予每个ECU一个类似于身份样的东西,J1939 网络上的各节点通过这样的名字来互相区分。这个名字也在网络管理上简历优先级。这个64位的名字以数字来表示, 在地址声明时, 这个数字代表优先级, 数字越小优先级越高。

一个有意思的现象: 有时候一个ECU硬件可以包含多个J1939 网络节点, 也就是一个硬件有多个名字。

2.4 J1939 地址声明

在J1939 网络上, 一个节点必须先成功声明一个地址才能启动通信。地址0-128是预先分配好了的, 使用这些地址的节点一上电就可以启动通信。 考虑到将来的节点和功能,J1939 采用了一个动态分配地址的方法。 新接入J1939网络的节点必须先成功为它自己声明一个地址才能发送和接受消息。 当一个新节点要声明地址时, 它发送一个地址声明消息, 该消息含有它想要的地址, 此时, 网络上所有的节点那这个地址和它们自己的地址表进行比较。如果某个高优先级节点正在使用该地址, 这个高优先级节点就说这个地址已经被使用,这个新节点不能声明这个地址, 这次地址声明不成功。如果某个地优先级节点正在使用该地址, 这个低优先级节点立即放弃这个被声明的地址, 然后自己再去声明一个新的, 这个新节点的地址声明成功。

3. J1939 协议栈

什么是J1939协议栈?J1939协议栈是一个完整的软件包,该软件包可以处理J1939 各层内容。 简单来说, 对所有要发送的数据, 该软件包负责将应用软件里的数据进行转换、分解、然后把CAN数据帧发送到J1939 网络; 对所有要接收的数据, 该软件包负责从J1939 网络接收、转换、重组, 然后提供给应用软件。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/132838.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 自动化测试平台(八):列表组件公共化封装和用例项目管理功能开发

    自动化测试平台(八):列表组件公共化封装和用例项目管理功能开发上一章我们完成了整个用户管理模块的功能,能够正确的增、删、改、查用户。但其中有很多判断实际上是其他类似的模块也会有的,例如:1.创建用户后回到首页刷新列表;2.删除次页最后一条数据,回到前一页刷新列表;3.查询条件的格式化;—难道我们每写一个类似的模块,都要去写一遍这些重复的逻辑代码吗?显然是没必要的,所以我们需要将其抽离成公共列表组件提供给其他模块使用,避免大量的做重复的事情,并让代码更容易维护。本章还将完成用例项目管理功能,它主要用于管理不同类型(API、UI),不同项目

    2022年6月25日
    19
  • 【MYSQL】如何下载mysql驱动jar包

    【MYSQL】如何下载mysql驱动jar包进入官网https://www.mysql.com/点击DOWNLOADS然后拉到最下面,点击MySQLCommunity(GPL)Downloads然后选择Connector/J,这里的J是Java的意思这里如果是windows用户的话,选择PlatformIndependent,如果是其他用户就选其他版本点击Download…

    2022年5月21日
    1.5K
  • Ice笔记–Ice的服务器实现技术[通俗易懂]

    Ice笔记–Ice的服务器实现技术[通俗易懂]服务器实现技术 1.      渐进的初始化如果我们使用servant定位器,locate返回的servant只能用于当前请求,也就是说Iceruntime不会把这个servant增加到ActiveServantMap中。一种常用的实现技术是,在loca

    2022年6月5日
    26
  • Java基础测试「建议收藏」

    Java基础测试「建议收藏」Java测试 1.概述Java中标示符是什么? 一、不能以数字开头,由字母、下划线、美元符号组成。二、不能把java关键字和保留字作为标识符。三、标识符没有长度限制。四、标识符对大小写敏感。  2.Java中运算符有哪些? java中的运算符可以分为以下几种类型1.算术运算符      (+,-,*,/,%)2.比较(关系)算符  (>,&l…

    2022年7月8日
    28
  • dw自动滚动图片_DW图片无缝滚动代码

    dw自动滚动图片_DW图片无缝滚动代码DIV的图片无缝滚动,DIV图片上无缝滚动,DIV图片下无缝滚动,DIV图片左无缝滚动,DIV图片右无缝滚动1.先了解一下对象的几个的属性:innerHTML:设置或获取位于对象起始和结束标签内的HTMLscrollHeight:获取对象的滚动高度。scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最顶…

    2022年7月18日
    12
  • id门禁卡复制到手机_手机NFC也可以刷ID卡门禁?无聊测试居然成功了![通俗易懂]

    id门禁卡复制到手机_手机NFC也可以刷ID卡门禁?无聊测试居然成功了![通俗易懂]前段时间换了个K20pro,有NFC功能后手又痒了,就想折腾一下NFC的日常使用。小区的门禁前几个月刚换成了亲邻开门,可以用微信小程序开门,但每次都要拿手机出来点几下(特别是手机提着东西的时候),还是没有手机接触式开门方便。拿出家里的门禁卡放手机背面,没反应,我NFC应该没问题呀!换另外一台华为手机还是没反应!上网一查,我家的门禁卡居然是ID卡!但还是不死心,在小米钱包里虚拟了一张门卡,放到小区门…

    2022年6月10日
    1.6K

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号