4、应用层
应用层主要定义常用物理参数的格式,数据格式规定了数据的长度、分辨率、取值范围和类型。其中,状态值一般用2位离散值表示,测量值用多个字节表示。实际 应 用 时,用户应对系统参数按 SAEJ1939的数据定义方法进行定义。

数据类型
对每个参数都应该确定它的数据类型,数据的类型可以是状态或者是测量值。
状态类型表示一个多状态参数的目前状态,或者传输节点在执行操作后所产生的结果。
测量值类型数据表示了传输节点对某个参数测量后得到的当前值。

数据传输方式
为了保证单个节点之间正常通信,就必须确定怎样传输消息,即对于两个以上字节的参数是首先传输高字节再传输低字节(Intel方式)还是首先传输低字节再传输高字节(Motorola方式)

参数数值范围

新参数的数值范围分配
这部分意在定义一组推荐的SLOT(比例Scaling;界限 Limit;偏移量 Offset和传送Transfer功能),用于在SAE J1939中增加新参数。这样可以在给定的参数类型(温度、压
力、速度等)中尽量保持数据的一致性。每个SLOT提供了适合给定类型中的大部分参数的数值范围和分辨率。若需要,可是用不同的比例
因子或偏移量。偏移量应该根据以下两点进行恰当的选择:
a. 偏移量 = 0,或者
b.偏移量 = 50%(等于±数值范围)

推荐SLOT定义

参数群中参数定义
通常,参数根据以下准则来组成参数群:

a. 按照实现功能(汽油,冷却剂,燃料等)而不按照类型(温度,压力,速度等)
b. 具有相近的更新速度(为了减少不必要的系统开销)
c. 按照通用的子系统(用于测量和发送数据的设备)

例1:发动机燃料/润滑剂系统

例2:时间/日期调整

通信方式
由于SAE J1939的数据链路层和物理层采用CAN2.0B协议,所以SAE J1939网络支持多主竞争方式。 CAN协议废除了站地址寻址方式,然而SAE J1939通过对CAN标识符的重新定义,可同时支持基于节点传输和基于帧传输两种方式。

a 基于节点传输
基于节点传输的通信方式只在两节点之间进行通信,其他节点并不参与。该方式的前提条件就是,在报文中包含目标地址,发送节点知道目标接收节点。对于接收节点而言,通过对接收报文标识符中的目标地址进行滤波,就可确定是否应该接收该报文。

基于节点传输的过程
基于节点的分帧传输分为三步:建立连接、数据传输、拆除连接。

b 基于报文传输
基于报文传输的通信方式就是某个节点把包含一个或多个参数的参数组报文发送给网络中所有的节点,也就是广播式的传输方式。
发送节点不需要确定接收节点的地址,接收节点根据报文标识符中的参数组号PGN进行滤波,如果几个节点对某个PGN参数组的报文感兴趣,它们可以同时接收该报文。

基于报文传输的过程

2、故障诊断
SAE J1939在应用层中还定义了12种诊断报文(Diagnostic Message,简称DM)、诊断故障代码(Diagnostic Trouble Code,简称DTC)

SAE J1939DTC构成
诊断故障代码由三部分组成:可疑参数号(Suspect Parameter Number,简称SPN)、故障模式标志(Failure Mode Identifier,简称FMI)及故障发生次数(Occurrence Count,简称OC)。一个故障代码由4个字节构成,三个部分的位数分配如表所示。

SAE J1939诊断报文的构成

诊断故障代码实例

激活状态的诊断故障代码
一旦有一个DTC成为激活的故障,就有一个DM1消息会被传输,并在其之后处于正常的每秒仅一次的更新速度下。如果一个故障激活的时间是一秒或更长,然后变为不激活的状态,则应传输一个DM1消息以反映这种状态的改变。如果在一秒的更新期间有一个不同的DTC改变状态,则要传输一个新的DM1消息反映这个新的DTC。为了避免因高频率的间断故障而引起的高的消息传输率,建议每个DTC每秒只有一个状态改变被传输。

DM1格式

DM1诊断过程

故障指示灯
一种只用于传达发送相关故障代码信息的灯。该灯仅当有一个发送的相关故障代码处于激活状态时才点亮。

红色停止灯
该灯用于表达一种处于将是车辆停止的严峻形式下的故障代码信息。

琥珀色警告灯
该灯用于表达一种被告知车辆系统出现问题但不须立即停止的故障代码信息。

保护灯
该灯用于表达一种代码信息,用于提示被告知车辆系统出现问题且极有可能不是相关电路子系统引起的故障。例如,发动机冷却液的温度超出了它的规定温度范围。

可疑参数编号( SPN
19位的SPN用于多种目的,用于诊断的有:
1)用于识别可修复的失效最小子系统;
2)用于识别有严重错误的子系统;
3)识别一个将要告知的专门事件或情况;
可疑参数编号赋值给一个参数组内每个单独的参数,以及不包括在参数组内但与诊断有关的参数项目。可疑参数编号有独立的源地址发送消息。然而,该源地址有必要确定由网络上的哪个控制器来执行诊断。

故障模式标志符( FMI
FMI定义了为一个SPN所识别的子系统中发现的故障类型。如:
FMI=0―数据有效但超出了正常操作范围-最严重水平
FMI=1―数据有效但低于正常操作范围-最严重水平

3、网络管理
SAE J1939网络管理的主要任务就是节点的地址分配或确定。节点地址是SAE J1939网络正常工作的前提条件,这和单纯的CAN网络不同。 SAE J1939网络初始化期间,所有节点都要检查它们自己静态配置的节点地址,从而确定这个地址在网络中是独一无二的,每个节点在获得响应的地址后才能进行正常通信。

地址分配
SAE J1939采用地址声明”(address claiming)的方法来进行地址分配。 SAE J1939网络中要求每个节点有一个名字,由设备编号、使用场合、设备类型等位场组成。节点名字具有优先级,节点编号越小,优先级就越高。
如果两个或多个网络节点同时申请同一个节点地址,那么节点名字优先级最高的将获得该地址,失去该地址的节点必须在全网络范围内重新申请新的地址。

ECU名字
在一个网络中,每个ECU至少应该有一个名字,这样ECU就可以根据功能唯一地被标示出来。反过来,网络中的每个ECU至少应该有一个唯一的地址,这样ECU可以与其它ECU进行CAN消息
帧的仲裁。
名字相对于地址,表明网络中ECU的功能,网络管理协议中的网络管理过程允许将一个源地址与ECU的功能和网络中相关布告联系在一起。

节点地址配置等级
SAE J1939根据网络节点的可配置性将网络节点分为四级:
1、不可配置的网络节点:该节点的地址在程序写入时就确定了。
2、可通过专用工具配置的网络节点:该节点地址可以通过专用工具调整,调整时该节点必须处于某种特殊的工作模式下。

3、可通过命令来配置的网络节点:节点处于在正常工作模式下,通过网络使用命令报文来调整节点的地址。
4、可以自配置的网络节点:节点借助内部算法确定自己的地址,即通过地址声明的方法来实现地址分配。如果发生地址冲突可重新确定一个地址,然后通知网络中的其他节点。

节点配置方式
节点有静态配置方式和动态配置方式:使用静态配置地址的节点通常固定在网络中,上面提到的不可配置或可通过专用工具配置的节点应属于静态配置方式。对于可以更换地址或经常不在网络中运行的节点,可使用动态配置方式。

动态地址分配-地址声明
节点通过地址声明方法可以在网络范围内声明自己的地址。发送节点向网络上其它节点发送地址声明帧,该帧的标识符包括该节点要声明的地址,该帧的数据场包含了64位的节点名字。如果地址有冲突,那么就根据名字的优先级决定哪一个节点将最终获得声明的地址,而其它未获胜的节点将放弃原来声明的地址,重新在网络范围内通过地址声明帧申请新的地址。无论什么原因,当地址声明帧的节点不能重新申请新地址时,都应该发送一个不能进行地址声明帧,这样该节点就不能参与网络通信。

动态地址分配-地址索取
节点A将自己静态配置的地址X作为目标地址向网络中发送地址索取请求帧。等待一段时间后,如果还没有节点响应该地址索取请求帧,那么节点A就以该地址向网络中的其它节点发送一个地址声明帧,等一段时间后就可以发送报文。

节点A通过地址索取请求帧向网络中其它节点提出请求,请它们发送节点地址和名字, 然后根据获得的地址和一定的算法选择一个空闲的节点地址,再向网络发送一个地址声明帧,源地址就是刚才选择的节点地址,等待一段时间后就可以与其他节点开始通信。

通过地址命令报文帧进行节点地址的分配。地址命令报文帧可以借助服务工具对节点有目的地进行地址分配,当然该节点应该属于可以通过命令配置的类型。

SAE J1939协议(二)相关推荐

  1. AUTOSAR协议解析篇(一)-J1939协议解析

    SAE J1939协议是基于CAN2.0B协议之上的应用层协议,但是SAE J1939协议并不仅仅是个应用层协议,她对物理层,数据链路层,网络层,应用层,故障诊断, 网络层管理层等都做了详细的规定,只 ...

  2. 788_AUTOSAR_RS_SystemTemplate3_通信2_时序以及SAE J1939等

    全部学习汇总: GitHub - GreyZhang/hack_autosar: learning autosar documents, aha, very hard! 继续学习AUTOSAR的文档, ...

  3. CAN2.0和J1939协议的关系

    转发自http://www.cankau.cn/support/help/can-vs-j1939.html 很长时间没搞明白j1939与CAN2.0的关系,这篇文章让我明白了. CAN2.0是一种总 ...

  4. J1939协议与CAN2.0对应关系图表

    SAE J1939 消息帧格式定义与CAN 2.0B帧格式对应关系 J1939应用层协议详细描述了用于J1939网络的每个参数,包括其数据长度.数据类型.分辨率.范围及参考标签,并为每个参数分配了一个 ...

  5. HTTP协议 (二) 基本认证

    HTTP协议 (二) 基本认证 http协议是无状态的, 浏览器和web服务器之间可以通过cookie来身份识别. 桌面应用程序(比如新浪桌面客户端, skydrive客户端)跟Web服务器之间是如何 ...

  6. J1939协议中CAN ID 与PGN互换--遇到了广播报文

    Ref:J1939 Explained - A Simple Intro (2021)– CSS Electronics Ref:CAN 帧ID 与J1939 PGN 转换例子_horse_2007s ...

  7. SAE J1708协议

    SAE J1708协议 1.协议简介 1708是SAE(Society of Automotive Engineers:美国机动车工程师学会)专门针对重型车辆(卡车和客车)起草文件中J标准规范之一,该 ...

  8. SAE J1587协议简介

    原文地址::http://blog.csdn.net/bbs598598/article/details/52022741 SAE J1587简介 背景 这个协议是由卡车和客车电气和电子委员会的一个分 ...

  9. SAE J1708协议详解

    1,协议简介 1708是SAE(Society of Automotive Engineers:美国机动车工程师学会)专门针对重型车辆(卡车和客车)起草文件中J标准规范之一,该协议旨在推广微控制器模块 ...

  10. 使用udp协议实现服务器端程序时,用VisualC#实现UDP协议(二)

    12.并以下面代码替换Form.cs中由系统产生的InitializeComponent过程. private void InitializeComponent ( ) { this.button1 ...

最新文章

  1. 第八周实践项目3 顺序串一些算法操作
  2. 原 水质监测系统解决方案
  3. 解析:Web前端未来的前景如何呢?
  4. Lua === Lua 十分钟基础入门上手
  5. linux 添加开机自启动脚本
  6. vue 悬浮按钮_Vue@哇!几行代码实现拖拽视图组件
  7. 【UOJ 92】有向图的强连通分量
  8. Linux触发连锁反应,惠及全球
  9. 第一次学游泳技巧_游泳前,让自己不再怕水的5堂准备课
  10. springboot做网站_Github点赞接近10万的SpringBoot学习教程+实战推荐!牛批!
  11. python机器学习入门实例-老司机学python篇:第一季(基础速过、机器学习入门)
  12. ISA 2006 服务器 (一)
  13. Mxne入门--第2篇
  14. 使用VNC完毕远程调用图形化
  15. vba编写的出库单(可添加出库项目记录、生成、打印出库单)
  16. C语言格式化输出函数printf详解——C语言基础知识
  17. matlab 绘制四棱锥,素描教程:怎么绘制四棱锥
  18. 大自然是最广阔的“感统训练室”,端午节带上孩子“趣”玩吧!
  19. gfortran版本
  20. python中与six有关的whl_pandas - 在升级numpy,six和python-dateutil时,无法使用pip来安装pandas - 堆栈内存溢出...

热门文章

  1. SVN客户端安装与常用操作(超详细)
  2. DMSP/OLS夜间灯光数据
  3. php天气预报小偷,php天气预报的小偷程序
  4. python alphago_使用 Python 搭建简易版AlphaGo
  5. 【不读唐诗,不足以知盛世】盛唐诗坛的璀璨明星们
  6. 【SQL注入05】延时盲注实例操作
  7. 编码表/转义字符/进制转换
  8. IE10首个修复补丁出现 解决ASP.NET兼容性
  9. Visio 2007 序列号
  10. Flash Bootloader