452_J1939广播多帧报文的例程分析

         全部学习汇总: https://github.com/GreyZhang/J1939_basic

         借助一个简单的例子来看一下J1939广播多帧报文的发送实现。为什么不叫多帧报文而叫广播多帧报文呢?因为在J1939中存在两种多帧报文的发送模式,一个是广播另外一个是点对点的。而两个流程是不同的。

         上面的这个流程图就是J1939的广播多帧报文的实现,这个是我从Vector的一份文件中截取出来的。从上面可以看得出,大概的流程是先发送一帧TP.CM_BAM的报文,然后是一连串的数据包。而TP.CM_BAM采用的是一个特殊的PGN 60416。

         上面的截图信息则是来自一个网站,这里说明了广播多帧报文发送TP.CM_BAM的时候的报文内容。其中,需要注意的是一个是目标地址是全局地址,另一个则是包含了数据字节数、数据包数目还有PGN的信息。不过这里我有一点疑问,居然数据一包最多7个,难道知道了数据字节数这个多少包的数据不就可以计算出来了吗?为什么还有这么一个数据信息呢?

         上面的报文发送完了之后,接下来,进行数据的传输。而传输所用到的功能是另一个特殊PGN 60160,也就是TP.DT。具体的信息如下:

         重要的信息有:1,由于是广播多帧报文,目标地址是全局地址。另外,里面包含了数据包的编号和数据。而帧间隔的最小时间为50ms。

         接下来看看我手里面的例程代码:

         其实,这个就是TP.CM的发送。PGN 0x00FED8用于说明接下来的多帧报文的具体的作用。数据一共是9个字节,分成了2个数据包。

         接下来则是2包数据,其中没有用到的数据场全都填充成了0xFF。这里的数据的排列,似乎没有什么大小端的说法了。直接按照数据场的index来的,其实是可以理解为大端的?与看的文档有所差异的地方是帧间隔的控制,其实这里没有延时控制,似乎是不合理的。应该至少要有50ms的时间间隔。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页