目录

一、报文的拆装和重组

对于报文发送方而言,长度大于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传输协议功能的更多相关文章

  1. 【转】安全传输协议SSL和TLS及WTLS的原理

    一.首先要澄清一下名字的混淆 1.SSL(Secure Socket Layer)是Netscape公司设计的主要用于WEB的安全传输协议.这种协议在WEB上获得了广泛的应用. 2.IETF将SSL作 ...

  2. HTTP超文本传输协议-HTTP/1.1中文版

    摘要 超文本传输协议(HTTP)是一种为分布式,合作式,多媒体信息系统服务,面向应用层的协议.它是一种通用的,不分状态(stateless)的协议,除了诸如名称服务和分布对象管理系统之类的超文本用途外 ...

  3. RTSP RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议

    RTSP 编辑 RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学.网景和RealNetwo ...

  4. ftp (文件传输协议)

    ftp (文件传输协议) 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议” ...

  5. SMTP 简单邮件传输协议

    SMTP 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传 ...

  6. http 超文本传输协议

    超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准.设计HTTP最初的目的是为了提供一种发布和接 ...

  7. git传输协议原理

    git精神:distributed-is-the-new-centralized 转自:http://git-scm.com/book/zh/v1/Git-%E5%86%85%E9%83%A8%E5% ...

  8. FastSocket学习笔记~制定自已的传输协议~续~制定基于FastSocket的协议

    FastSocket这个东西上次我已经说过,它使用简单,功能强大,扩展灵活,目前在新浪的生产环境中已经被广泛使用,所以它的性能,安全等各方面我们绝对可以信赖,今天我们来说一个话题,和上一讲有关,这次我 ...

  9. ISO7816 传输协议 T0 T1

    T=0协议不能用一条命令来实现,必须分为两步实现:第一条命令为卡片提供数据,然后用另外一条相关的命令来取回数据.这样给卡片的编程带来很大麻烦,同时卡片内存中必须保留上一次操作需要返回的数据.这时如果不 ...

  10. ISO14443-4块传输协议的实现

    ISO1444-3块传输协议主要用于应用数据的传输,其实现如下: unsigned char Apdu(unsigned char *comm,unsigned short len,unsigned ...

随机推荐

  1. C/C++双叹号!!运算符

    1.问题引入 在阅读https://github.com/amhndu/SimpleNES源代码中ppu.cpp中发现如下代码 m_bgPage = static_cast<CharacterP ...

  2. 第6讲、全面拆解Encoder、Decoder内部模块

    全面拆解 Transformer 架构:Encoder.Decoder 内部模块解析(附流程图小测验) 关键词:Transformer.Encoder.Decoder.Self-Attention.M ...

  3. 深入理解Nginx-模块开发与架构解析(第2版)第一章

    为什么选择Nginx 更快 高扩展性 高可靠性 低内存消耗 单机支持10万以上的并发连接 热部署 最自由的BSD许可协议 Nginx先天的事件驱动型设计.全异步的网络I/O处理机制.极少的进程间切换以 ...

  4. windows下大数据开发环境搭建(5)——Hive环境搭建

    本文介绍如何在windows下搭建Hive开发环境,主要依赖的环境是Java和Hadoop,其他大部分工作主要是动手配置的工作,按照下面的介绍一步步操作即可完成搭建. 一.所需环境 1.Java:wi ...

  5. Java Solon v3.3.2 发布(可替换,美国博通公司的 Spring 方案)

    Solon 框架! Solon 是新一代,Java 企业级应用开发框架.从零开始构建(No Java-EE),有灵活的接口规范与开放生态.采用商用友好的 Apache 2.0 开源协议,是" ...

  6. AI 实战:一键生成数字人视频!

    做自媒体行业的同学都知道,制作一条可发布的视频成本是很高的,通常我们需要先录制原始视频,而录制原始视频的时间通常是发布视频时长的 3-5 倍,之后还需要花费很长的时间剪辑,最终才能制作一条可发布的视频 ...

  7. burpsuite插件-验证码识别插件使用教程

    一.插件下载 下载最新插件与验证码识别端(captcha-killer-modified.jar.codereg.py) 使用Burp加载captcha-killer-modified.jar 安装p ...

  8. Spring Cloud微服务架构深度解析

    在分布式系统单体应用拆分为多个独立服务,实现了高内聚.低耦合的架构目标.本文从核心组件.服务治理.配置管理及面试高频问题四个维度,结合Spring Cloud生态与工程实践,系统解析微服务架构的实现原 ...

  9. 3.Java SDK源码分析系列笔记-LinkedList

    目录 1. 是什么 2. 如何使用 3. 原理分析 3.1. uml 3.2. 构造方法 3.2.1. 队列的节点Node 3.3. add方法 3.3.1. 插入到链表尾部 3.3.2. 构造新节点 ...

  10. HarmonyOS NEXT仓颉开发语言实战案例:外卖App

    各位周末好,今天为大家来仓颉语言外卖App的实战分享. 我们可以先分析一下页面的布局结构,它是由导航栏和List容器组成的.幽蓝君目前依然没有找到仓颉语言导航栏的系统组件,还是要自定义,这个导航栏有三 ...