J1939传输协议功能
一、报文的拆装和重组
对于报文发送方而言,长度大于8字节的报文无法用一个单独的CAN数据帧来装载。因此,它们必须拆分为若干个小的数据包,然后使用单独的数据帧对其进行逐一的、分包传送。
对于报文接收方而言,接收方必须能够接收这些单独的数据帧,然后解析各个数据包并重组成发送方发过来的原始报文信息。
1.1 数据包的序列号
上文提到,帧数据单元(8bit)中的第一个bit是数据包序列编号。序列编号在数据拆装时分配给每个数据包,然后通过网络传送给接收方。接收方成功接收后,利用这些编号把数据包重组回原始信息。序列编号将从1开始依次分配给每个数据包,直到整个数据都被拆装和传送完毕。其编号范围为1-255,所以多帧传输的最大数据长度为255 x 7 = 1785个。
1.2 数据包的拆装
数据包的拆装工作是需要发送方完成的工作。每个数据包都装载着序列编号和原始数据的7个字节。最后一个数据包的8个字节包含序列编号和至少一个原始字节,其余的字节全部设置为0xFF。
1.3 数据包的重组
数据包的重组工作是需要接收方完成的工作。接收方按照数据包顺序陆续接收到数据包后,按照数据包顺序号重新将多个数据包组合起来。
二、传输协议连接管理中的报文类型
传输协议连接管理中的报文(TP.CM)用于建立、关闭连接以及控制数据流。传输协议提供了6种传输协议连接管理报文:连接模式下的请求发送报文、连接模式下的准备发送报文、消息结束应答报文、放弃连接报文、广播公告报文和数据传送报文。同时TP.CM的PGN值是60416(0x00EC00),也就是说和TP.CM相关的所有报文都为236(0xEC),默认优先级是7,DP为0,R为0。
2.1 连接模式下的请求发送报文 TP.CM_RTS
TP.CM_RTS消息用于通知一个节点,在网络上有另一个点希望和它建立一个虚拟连接,并告诉接收方将要发送数据的字节数量、分成多少包、数据的PGN编码。

2.2 连接模式下的准备发送报文 TP.CM_CTS
TP.CM_CTS用于回答请求发送消息,它通知对方节点,已经准备好接收一定量的长消息数据,包括能接收多少包数据(一次不多于5包)、下一数据包编号、数据的PGN编码。

2.3 消息结束应答报文 TP.CM_EndofMsgACK
TP.CM_EndofMsgACK消息由长消息的响应者传送给消息的发送者,表示整个消息已经被接收并正确重组。

2.4 放弃连接报文 TP.Conn_Abort
TP.Conn_Abort 消息用于让虚拟连接中的任一节点在没有完成整个消息的传输时关闭连接。无论是发送者还是响应者,在数据传输完成之前,由于任何原因(包括超时)决定关闭连接时,它都应该发送一条放弃连接消息。

2.5 广播公告报文 TP.CM_BAM
TP.CM_BAM 消息用于通知网络上所有节点将要广播一条长消息,包括一共有多少个字节、分成了多少个数据包、数据的PGN编号。

2.6 数据传送报文 TP.DT
TP.DT 消息用于把一包一包的数据发送出去,当然,发送之前需要明确所发送数据的PGN,不能发错。

三、多组消息广播
3.1 发送TP.CM_BAM报文
BAM消息规划好即将广播的长消息的参数群编号、消息字节数量和它被拆装的数据包的数目,然后使用数据传输PGN(60160,TP.DT)来发送相关的数据。如图为广播数据传送顺序示例图:一个节点向网络表示,它将要使用传输协议的服务来传送一个多组消息。在这个例子中,PGN(65260,车辆身份标识符)在网络中广播。发送节点首先发出了一条TP.CM_BAM消息,随后发送数据包。所有的响应者都没有进行接收确认。

3.2 发送报文的时间间隔
对于发送节点而言,J1939规定:多组广播消息中,数据包之间所需要的时间间隔是50-200ms。也就是说发送节点发送完一个报文后,在自己的MCU中设置一个定时器,定时范围为50-200ms,比如定时器150ms,过150ms后再发送下一包数据,以便让接收节点有时间接收这些数据包。
对于接收节点而言,J1939规定:多组广播消息中,当接收节点收到一个数据包后,等待下一个数据包的时间间隔不大于750ms。也就是说,接收节点接收完一包数据,然后最多等待750ms,如果750ms内发送节点没有把下一包数据发过来,接收节点就会认为连接关闭。
四、连接模式下的多字节发送(无错误情况)
通常情况下,RTS/CTS协议下无传送错误的数据传输会按照下图的数据流模式进行。假设发动机电控单元(0x00)作为发送节点,变速器的电控单元(0x03)作为接收节点,两者之间传输组件识别标识符PGN65259(0x00FEEB) 。

4.1 发送节点发送 TP.CM_RTS 报文
发动机电控单元向变速器的电控单元发送TP.CM_RTS报文,告诉变速器的电控单元“我要发送参数群编号PGN为65259的一组数据给你,总共23个字节数据,分4包发给你”。结合2.1的报文结构,发出的TP.CM_RTS报文为:0x88 0x1c 0xEC 0x03 0x00 0x10 0x17 0x00 0x04 0xFF 0xEB 0xFE 0x00
4.2 传输报文的时间间隔 1
针对接收节点而言,变速器的电控单元收到发动机电控单元发过来的TP.CM_RTS后,需要在200ms内回复TP.CM_CTS应答报文,否则视为连接失败。
针对发送节点而言,发动机电控单元向变速器的电控单元发送TP.CM_RTS报文后开始计时等待;如果在1250ms内没有收到变速器的电控单元发送的TP.CM_CTS应答报文,视为放弃连接。
4.3 接收节点发送TP.CM_CTS应答报文
变速器的电控单元向发动机电控单元发送TP.CM_CTS应答报文,表示它已准备好接收2个数据包,从编号1开始。因此,变速器发出的TP.CM_CTS报文为:0x88 0x1C 0xEC 0x00 0x03 0x11 0x02 0x01 0xFF 0xFF 0xEB 0xFE 0x00
4.4 传输报文的时间间隔 2
针对发送节点而言,发动机电控单元收到变速器的电控单元发过来的TP.CM_CTS响应报文后,证明连接正常;200ms内发出第一个数据包,下一个200ms发送第2个数据包。
针对接收节点而言,变速器的电控单元发送TP.CM_CTS响应报文后计时1250ms,如果在这1250ms内没有收到发动机电控单元发过来的第1包数据,就认为连接失败;正常接收到第一包数据后,计时750ms,如果在750ms内没有收到发动机电控单元发过来的第2包数据,就认为连接失败。
4.5 发送节点发送前2个 TP.DT 报文
发动机电控单元向变速器电控单元发送TP.DT,先发送前2包数据。
4.6 接收节点发送2个 TP.CM_CTS 报文
变速器电控单元发出的第一个TP.CM_CTS报文为:0x88 0x1C 0xEC 0x00 0x03 0x11 0x00 0xFF 0xFF 0xFF 0xEB 0xFE 0x00
上述报文中,可接收数据包的数量是0x00,下一个发送的数据包编号是0xFF,表示变速器电控单元想和发动机电控单元保持连接,但不能马上再接收任何数据包。在最长延迟500ms后,变速器电控单元必须再发一条TP.CM_CTS消息来保持连接。在这个例子中,响应者变速器电控单元再发送了一条TP.CM_CTS消息,表示它可以接收从编号3开始的两个数据包。第二个TP.CM_CTS报文为:0x88 0x1C 0xEC 0x00 0x03 0x11 0x02 0x03 0xFF 0xDD 0xEB 0xFE 0x00
4.7 发送节点发送3、4包数据
发送剩余数据包,不足用0xFF填充。
4.8 接收节点发送 TP.CM_EndofMsgACK 报文,数据接收完毕
变速器电控单元向发动机电控单元发送TP.CM_EndofMsgACK,表示所有数据接收完毕,现在关闭连接。结合2.3报文结构,该TP.CM_EndofMsgACK报文为:0x88 0x1C 0xEC 0x00 0x03 0x13 0x00 0x04 0xFF 0xEB 0xFE 0x00
五、连接模式下的多字节发送(有错误情况)
在这种情况下,发送请求与前面的例子相同,通过同样的方式发送。发动机电控单元发送完毕1和2两个数据包后。响应者变速器电控单元认为2号数据包中有错误。然后变速器电控单元发送了一条TP.CM_CTS消息:0x88 0x1C 0xEC 0x00 0x03 0x11 0x02 0xFF 0xFF 0xEB 0xFE 0x00表示它想让发动机电控单元再单独发送一次2号数据包。
发送者发动机电控单元回应,并再次发送了2号数据包。接着,响应者变速器电控单元发出了一条CTS消息,表示它想要从编号3开始的2个数据包,这条消息同时也确认了2号数据包已经被正确接收了。
其余的传输过程和无错误传输数据流模式相同,一旦最后一个数据包被正确接收,则响应者发送一条TP.CM_EndofMsgACK消息,表示整个消息已经被正确接收了。

J1939传输协议功能的更多相关文章
- 【转】安全传输协议SSL和TLS及WTLS的原理
一.首先要澄清一下名字的混淆 1.SSL(Secure Socket Layer)是Netscape公司设计的主要用于WEB的安全传输协议.这种协议在WEB上获得了广泛的应用. 2.IETF将SSL作 ...
- HTTP超文本传输协议-HTTP/1.1中文版
摘要 超文本传输协议(HTTP)是一种为分布式,合作式,多媒体信息系统服务,面向应用层的协议.它是一种通用的,不分状态(stateless)的协议,除了诸如名称服务和分布对象管理系统之类的超文本用途外 ...
- RTSP RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议
RTSP 编辑 RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学.网景和RealNetwo ...
- ftp (文件传输协议)
ftp (文件传输协议) 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议” ...
- SMTP 简单邮件传输协议
SMTP 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传 ...
- http 超文本传输协议
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准.设计HTTP最初的目的是为了提供一种发布和接 ...
- git传输协议原理
git精神:distributed-is-the-new-centralized 转自:http://git-scm.com/book/zh/v1/Git-%E5%86%85%E9%83%A8%E5% ...
- FastSocket学习笔记~制定自已的传输协议~续~制定基于FastSocket的协议
FastSocket这个东西上次我已经说过,它使用简单,功能强大,扩展灵活,目前在新浪的生产环境中已经被广泛使用,所以它的性能,安全等各方面我们绝对可以信赖,今天我们来说一个话题,和上一讲有关,这次我 ...
- ISO7816 传输协议 T0 T1
T=0协议不能用一条命令来实现,必须分为两步实现:第一条命令为卡片提供数据,然后用另外一条相关的命令来取回数据.这样给卡片的编程带来很大麻烦,同时卡片内存中必须保留上一次操作需要返回的数据.这时如果不 ...
- ISO14443-4块传输协议的实现
ISO1444-3块传输协议主要用于应用数据的传输,其实现如下: unsigned char Apdu(unsigned char *comm,unsigned short len,unsigned ...
随机推荐
- C#之方法
在C#中,方法是类的函数成员,方法由两个主要部分: (1)方法头:指定了方法的特征,包括是否返回数据,如果返回,返回什么类型;方法的名称;哪种类型的数据可以传递给方法或从方法返回,以及如何处理这些数据 ...
- WPF 使用GDI+提取图片主色调并生成Mica材质特效背景
先看效果,在浅色模式下: 在深色模式下: P.S. 此算法只是尽可能地接近Windows Mica效果,并非实际实现:主色调提取算法只能确保在绝大多数情况下适用. 测试项目在Github上开源: Tw ...
- Java 在文件末尾追加内容
需求背景:多次向文件中依次写入内容, 需求分析:如何向文件中依次追加内容呢?而且不清空之前的内容. 今天就分享一下基于Java语言,如何在文件末尾追加内容. import java.io.*; pub ...
- 启智树提高组day3T1 3479 : A:climb 树
启智树提高组day3T1 3479 : A:climb 树 题目描述 DoubleDuck山是X省的著名旅游景点.这一天,淘淘慕名而来,打算爬到山顶处. DoubleDuck山的构造是十分特殊的.在这 ...
- 计算机网络-TCP/IP知识点
快速以太网数据帧有效载荷的最小长度为 46 字节(参考:Ethernet Frame Calculations) 实战 (2012 408考研真题 47)(15分)主机 H 通过快速以太网连接 Int ...
- 自定义localStorage监听事件
一.问题 在项目开发过程中,发现有很多时候进行localStorage.setItem()操作设置本地存储后,页面必须刷新才能够获取到存储数据,而有些时候本地缓存更新后,页面无法通过再次刷新以获取本地 ...
- Axios 禁用缓存
Disable cache for Axios1. set headers.Cache-Control = 'no cache' // not work for 0.19.x or later?2. ...
- 基于.net6的一款开源的低代码、权限、工作流、动态接口平台
一款开源的低代码.权限.工作流.动态接口平台. 主要功能模块:工作流.权限管理.低代码.动态表单.动态接口.动态数据源 功能展示 因为个人时间非常有限,框架目前很多细节可能没完善.且前端有些代码写的不 ...
- DotTrace系列:6. 程序异常诊断 和 Request慢处理
一:背景 1. 讲故事 在我分析的众多dump中,有一些CPU爆高是因为高频的抛 Exception 导致,比如下面这张图,有 19 个线程都在抛 xxxResultException 异常. 从卦中 ...
- SQLServer常用个技巧(一):根据某字符截取后面的字符串,String转int
SELECT GOODS_CD AS goodsCd, 原字符串 reverse( GOODS_CD ) AS dCsdoog, 颠倒 LEFT ( reverse( GOODS_CD ), char ...