0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

新功能发布 | TSMaster如何实现J1939多帧报文收发

上海同星智能科技有限公司 2022-09-06 10:01 次阅读

前言

众所周知,J1939协议是由美国汽车工程师协会(SAE)定义的一组标准。J1939标准用于卡车、公共汽车和移动液压等重型车辆。如今大多数车辆都通过CAN进行ECU通信。但是CAN总线仅仅是提供了通信的基础(就像是电话),但是没有提供对话的“语言”来进行更复杂的操作。所以在大多数大型车辆中,这个“语言”就是SAE定义的J1939标准。

今天我们继续来介绍TSMaster新功能—J1939多帧报文收发。这个功能属于J1939的高级功能,需要license的授权,具体操作需求可以联系我们。

J1939功能使用

Use of J1939 functionality/

我们假设已经拥有了带license的硬件,以TC1005为例,选择硬件通道后连接应用程序,随后打开about窗口,就可以看到拥有license的列表。其中有一个J1939的option,接下来介绍这个功能的使用。

fde64bf8-2af9-11ed-9ade-dac502259ad0.pngfe14fade-2af9-11ed-9ade-dac502259ad0.pngfe2b3b64-2af9-11ed-9ade-dac502259ad0.png

> 首先打开TSMaster的安装目录,进入demo文件夹,找到示例数据库J1939ILDemo的数据库文件。我们将其拖入TSMaster中,这个拖入的过程需要在程序断开连接的时候来完成,可以看到,这个数据库里面有四帧报文,它的PGN分别为EF00,EF00,FF02和FF01。

fde64bf8-2af9-11ed-9ade-dac502259ad0.pngfe6f0f4c-2af9-11ed-9ade-dac502259ad0.pngfe2b3b64-2af9-11ed-9ade-dac502259ad0.png

> 其中前两帧为点对点的多帧,分别是节点2往1发,1往2发;后两个是广播,分别是地址2的广播和地址1的广播。以第一帧为例,他的DLC=35个字节,这意味着这个信号可以在这35乘以8,也就是280个位置里面任意排布。那么报文中的sgn1~4就是模拟了这种情况。如果希望发送这些报文,我们可以直接使用发送窗口,我们打开CAN Transmit窗口,点击左上角的来自数据库的按钮,选择刚才看到的四帧报文,然后再将视图切换成J1939,这样协议相关的信息就一览无余了。

fde64bf8-2af9-11ed-9ade-dac502259ad0.pngfed61642-2af9-11ed-9ade-dac502259ad0.pngfe2b3b64-2af9-11ed-9ade-dac502259ad0.png

前两个是点对点,后两个是广播,可以从目的地址看出来,对于广播报文来讲,发送节点只要自顾自的发送就可以了。而对于前两个点对点的发送过程,不但需要发送节点,还需要接收节点在过程中进行应答,才能完成整个发送过程。所以我们还需要激活TSMaster内置的J1939的仿真节点。

> 接下来我们来到仿真,J1939的仿真配置对话框里面,可以看到节点1和2,分别被标注为Node1和Node2,所有的节点都勾选了仿真发送功能,但是仿真接收功能默认是没有勾选的。我们可以通过激活rbs的方法来自动激活这两个接收的功能,同时呢也可以手动勾上,在此我们就手动勾选,并且点击应用设置来关闭对话框。

fde64bf8-2af9-11ed-9ade-dac502259ad0.pngff302e70-2af9-11ed-9ade-dac502259ad0.pngfe2b3b64-2af9-11ed-9ade-dac502259ad0.png

> 这个时候就可以启动仿真了,我们按下F5,然后打开trace窗口,随后呢我们激活这4个节点的这4个报文的发送,就依次点击发送就可以了。于是在右侧的trace窗口中间就可以看到这4个多帧报文的接收情况。他们的DLC分别是右边的35,36,13和33,然后右边显示的就是他们的默认的数据段默认都是0。

fde64bf8-2af9-11ed-9ade-dac502259ad0.pngff9635ee-2af9-11ed-9ade-dac502259ad0.pngfe2b3b64-2af9-11ed-9ade-dac502259ad0.png

>我们当然可以修改他们的数据字节来任意的修改他们的数据,那这里就可以看到这是我们刚才修改的结果,我们当然还可以通过信号生成器的方式来改,比如说我们选中第一帧报文,在这个sgn1 a2上面选择正弦,然后点击配置,我们可以把峰值改的稍微大一点,然后点击应用、点击启动,这个时候就可以看到这个sgn1 a2就在发生变化。

fde64bf8-2af9-11ed-9ade-dac502259ad0.pngfff0efc0-2af9-11ed-9ade-dac502259ad0.pngfe2b3b64-2af9-11ed-9ade-dac502259ad0.png

> 接下来可以打开图形窗口,将这个信号拖进来,就可以看到正弦波,当然这个正弦波的频率比较低,这是因为它是多帧,它发一帧需要200毫秒,所以一秒只有5个点,我们还可以通过其他的窗口来进行观察,比如说数值显示。

fde64bf8-2af9-11ed-9ade-dac502259ad0.png00498662-2afa-11ed-9ade-dac502259ad0.pngfe2b3b64-2af9-11ed-9ade-dac502259ad0.png

> 最后我们打开数值显示,点击这里的添加按钮,可以选择我们的信号,当然我们也可以通过拖动的方式将信号拖进去,之后可以调整窗口的大小,使得信号值可以在上面显示。我们还可以通过面板的方式添加,当然面板需要设计,所以首先需要停止仿真,停止仿真之后我们可以将信号拖入面板,再启动仿真,然后再启动报文的发送,这样就可以看到这些信号都可以在测量窗口里面正确的显示。

J1939一系列API函数

J1939 A series of API functions/

J1939有一套API的函数,通过这一套API就可以实现J1939的信号读写、报文发送等等一系列功能。

> 我们打开一个自动化模块,然后选中入口点,按回车增加一系列的动作。我们选第一个动作,然后设置他为API函数调用,在过滤器里面敲入1939,就可以看到1939的一系列API。这其中有1939的标识符的get和set方法以及下面的多帧报文的发送方法。关于标识符的get和set方法在此就不展开描述,大家完全可以查看c代码编辑器里面的小程序的帮助文档,里面有详细的介绍,在右侧也可以看到示例代码。那么这次我们着重介绍一下1939的多帧发送的API。

fde64bf8-2af9-11ed-9ade-dac502259ad0.png00ae3922-2afa-11ed-9ade-dac502259ad0.pngfe2b3b64-2af9-11ed-9ade-dac502259ad0.png

> 首先我们可以选中1939异步发送API,那么发送分为同步和异步两种,同步意味着发完之后程序才会往下走,异步则意味着只要将数据推入发送缓存,程序就可以继续往下,那么不管是同步还是异步,还分了两种类型。一种是不带字符串的发送,一种是基于字符串的发送。那么基于字符串方式的发送,他的数据是以逗号来进行分隔,那么这两种方式自动化模块都是支持的。因为在自动化模块里面,数组均以逗号分隔的字符串表达,那么我们可以选择一个异步发送,函数就可以看到这个函数有7个输入的参数

fde64bf8-2af9-11ed-9ade-dac502259ad0.png0112fd44-2afa-11ed-9ade-dac502259ad0.pngfe2b3b64-2af9-11ed-9ade-dac502259ad0.png

>那么第一个参数是通道号,我们可以选择常量,比如说,channel1然后PGN,在此我们就可以输入。比如说我们可以选广播,就是刚才看到的OxFF01,然后优先级是6,默认源地址是2,目的地址是1,然后PDU的数据我们可以随意填写。比如说Ox11,然后我们可以将这个复制多份,密贴多份,这里长度是可以很长。他的实际长度是被最后一个参数限制,那么在此我们可以保持跟dbc的一致,也就是35,然后我们就可以启动,按F9启动发送或者点击发送按钮,那么就可以发送成功。

fde64bf8-2af9-11ed-9ade-dac502259ad0.png01614b48-2afa-11ed-9ade-dac502259ad0.pngfe2b3b64-2af9-11ed-9ade-dac502259ad0.png

> 我们就可以看到trace窗口里面显示的发送的信号内容跟我们的设置是一模一样,最后如果说数据不够,就会以0来补充。那么我们可以把数据填多一点,再启动发送,这样的话,数据长度就会正好达到我们的所需要的长度。

fde64bf8-2af9-11ed-9ade-dac502259ad0.png01ac4fbc-2afa-11ed-9ade-dac502259ad0.pngfe2b3b64-2af9-11ed-9ade-dac502259ad0.png

那这是原始报文的发送方法,倘若需要修改报文里面的信号的值,就需要rbs的仿真引擎来支持,那我们可以点击CAN总线仿真窗口来模拟节点的行为,我们激活这两个节点,然后将总线仿真设置为自动启动,这个时候可以看到rbs已经在工作了,并且得到了我们通过发送窗口一样的结果。

> 当然发送窗口这个时候是不应该启动发送,回到自动化模块里面,删除我们的原始的报文发送的动作,设置一个新的动作衍生函数调用,在此我们搜索set Signal by address,通过这个函数就可以实现rbs里面信号的任意修改。那这里有两个参数,分别是信号地址和值,那么信号地址就是我们所需要发送的信号的数据库地址,我们可以随便选一个比如说A_Node1 signal 1_a1,我们可以点击复制数据库地址,然后到这里粘贴即可,然后他的值我们可以随意修改,然后我们可以点击启动,那么这样就实现了这个信号的修改,可以看到A_Node1里面的这个信号已经变成1111,就是我们所设置的值,那么这就是信号的发送。

fde64bf8-2af9-11ed-9ade-dac502259ad0.png0200123c-2afa-11ed-9ade-dac502259ad0.pngfe2b3b64-2af9-11ed-9ade-dac502259ad0.png

如果是希望接收一个信号的值,该怎么做呢?

我们可以用到signal server的方法:还是来到函数调用,删除我们刚才的发送,然后再多加几个动作。我们首先将它改为函数调用,然后输入SGN SRV,这就是signal server的系列函数。

> 那这里需要一个流程,首先需要注册我们关心的信号,需要用到register_can_signal_by_message ID或者是name,我们在这里选择message ID,那么我们就需要到rbs里面去copy这个报文的ID,copy过来的时候需要把后面的x删掉,让这个字符串是一个有效的16进制值,通道还是可以用之前的通道1,然后信号名称就是我们关心的信号。

fde64bf8-2af9-11ed-9ade-dac502259ad0.png02552524-2afa-11ed-9ade-dac502259ad0.pngfe2b3b64-2af9-11ed-9ade-dac502259ad0.png

> 比如说sgn1_a1,我们自己直接输入sgn1_a1,client ID是这个函数注册成功之后给到我们程序的一个handle,我们可以新建个变量来存储它,就命名ID就行。这个时候直接已经可以点击本地变量关联我们的ID,然后我们可以等一会再读取信号的值,那这个时候可以调用wait函数,比如说等个3秒,然后接下去就是一个读取过程,同样用到了Signal server sgnsrv get_can_signal物理值。最后通过这个方法去取得,得到的信号的物理值,那么在这里可以同样选择channel1 client ID就填我们刚才所得到的变量ID,然后这里就是输出的值,我们同样可以用一个变量来装,这里需要添加的就是个double型的变量,value写个v就行,然后在这个地方选择v,然后同时还会返回最后的时间戳,如果不需要的话,我们这里默认填个0就行或者不填。

fde64bf8-2af9-11ed-9ade-dac502259ad0.png02afb2aa-2afa-11ed-9ade-dac502259ad0.pngfe2b3b64-2af9-11ed-9ade-dac502259ad0.png

> 然后这个时候我们可以将我们读到的值打印出来,这时候就需要用到log函数字符串,我们可以写我们的变量v的值作为字符串,那么log level,可以用一种颜色,比如说绿色,然后我们点击启动,这个时候首先获取ID等待,然后最后获取值结束,那么我们会看一下每一步骤的运行结果。在这里都有反馈,这里是实际传入的参数值,wait然后读到的参数值然后我们可以看一下打印出来值就是111,就是我们之前设定的值,那么我们完全可以改一下这个值,比如说改成12345,这个值最大就是2047,我们就设它为2047,这个时候我们只要再启动一下程序,我们打开log,就可以看到我们获取的值跟我们设定值是一样。这就是1939系列API的用法。

fde64bf8-2af9-11ed-9ade-dac502259ad0.png02f8562c-2afa-11ed-9ade-dac502259ad0.pngfe2b3b64-2af9-11ed-9ade-dac502259ad0.png

以上就是我们本期介绍的TSMaster新功能之J1939多帧报文的收发,我们下期再见!(具体操作解说可以观看我们B站视频哦)

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 汽车
    +关注

    关注

    13

    文章

    3494

    浏览量

    37261
收藏 人收藏

    评论

    相关推荐

    深入解析J1939-73:车辆诊断通信的标准与应用

    和设备之间的实时数据交换。J1939基于CAN(ControllerAreaNetwork)总线技术,使用29bit的扩展标识符和扩展数据,CAN通信速率为250K
    的头像 发表于 12-11 10:01 543次阅读
    深入解析<b class='flag-5'>J1939</b>-73:车辆诊断通信的标准与应用

    SAE J1939中英文资料

    最全的J1939中英文协议资料
    发表于 11-26 15:06 0次下载

    同星设备间的时间戳同步机制TSync功能与使用

    随着汽车网络测试的通道数量不断增加,时常需要多个同星设备同时连接在同一台电脑的同一个TSMaster应用程序,并进行设备同时执行CAN报文收发和记录等
    的头像 发表于 10-12 08:05 2804次阅读
    同星<b class='flag-5'>多</b>设备间的时间戳同步机制TSync<b class='flag-5'>功能</b>与使用

    干货分享 | TSMaster软件指南

    TSMaster是同星智能开发的一款国产汽车总线工具链软件平台,是全方位汽车总线设计、仿真、分析、诊断和标定的专业工具,支持从需求分析到系统实现的整个系统开发过程。TSMaster软件可连接、配置并
    的头像 发表于 09-15 08:08 1662次阅读
    干货分享 | <b class='flag-5'>TSMaster</b>软件指南

    基于VB6.0 实现 CAN信号收发 Demo

    本文主要讲的是,基于TSMaster实现TOSUN系列CAN/CANFD,LIN设备的操作。主要给大家介绍在TSMaster软件里如何实现CAN信号
    的头像 发表于 07-27 08:21 730次阅读
    基于VB6.0 <b class='flag-5'>实现</b> CAN信号<b class='flag-5'>收发</b> Demo

    TSMaster 中不同总线报文消息过滤的操作方式

    TSMaster软件平台支持对不同总线(CAN、LIN、FlexRay)报文和信号的过滤,包括全局接收过滤、数据流过滤、窗口过滤、字符串过滤、可编程过滤,针对不同的总线信号过滤器的使用方法基本相
    的头像 发表于 06-22 08:21 1516次阅读
    <b class='flag-5'>TSMaster</b> 中不同总线<b class='flag-5'>报文</b>消息过滤的操作方式

    什么是北斗短报文功能?如何实现北斗短报文通信?

    报文功能是指北斗卫星导航系统特有的双向报文通信功能。这种功能允许用户通过北斗卫星进行短报文通信,
    的头像 发表于 05-25 10:16 4460次阅读
    什么是北斗短<b class='flag-5'>报文</b><b class='flag-5'>功能</b>?如何<b class='flag-5'>实现</b>北斗短<b class='flag-5'>报文</b>通信?

    CANFD报文由多少个位组成?

    要想知道CANFD报文由多少个位组成,那么我们就要了解CANFD结构,知道每个段占用位数从而得出CANFD报文位数。
    的头像 发表于 04-27 06:08 4276次阅读
    一<b class='flag-5'>帧</b>CANFD<b class='flag-5'>报文</b>由多少个位组成?

    CAN报文为什么会发送失败?

    CAN总线调试过程中出现报文发送失败。很多工程师都对此只知其一不知其二,今天我们就以CAN报文发送失败的问题来做一次探讨。在了解CAN报文为什么会发送失败之前我们先看看一标准的CAN
    的头像 发表于 04-12 08:25 2056次阅读
    CAN<b class='flag-5'>报文</b>为什么会发送失败?

    在STM32的CAN收发通信中,接收超时为什么不能发出一个报文功能

    在STM32的CAN收发通信中,当接收超时(即在限定的时间内仍然没有接收到数据),发出一个报文功能,查询pending的返回值,为什么不能实现这个
    发表于 03-29 07:11

    虹科技术 | PCAN View功能细讲:从实时监测到错误分析

    相信使用过PCAN工具的朋友都知道虹科PCAN-View这款免费软件,它具有直观的用户界面,可以实时监测和分析CAN总线上的数据,并提供过滤、发送和报文记录。但你知道吗?它其实不只是简单收发报文,虹科PCAN-View还能自动
    的头像 发表于 03-18 13:48 1261次阅读
    虹科技术 | PCAN View<b class='flag-5'>功能</b>细讲:从实时监测到错误<b class='flag-5'>帧</b>分析

    TSMaster 总线记录功能操作指南

    功能模块,本文主要针对总线记录模块的记录功能操作,记录文件配置,并结合总线记录常见的使用需求进行展开。本文关键字:总线记录、自动记录、记录文件大小、报文过滤目录Cat
    的头像 发表于 03-05 08:21 705次阅读
    <b class='flag-5'>TSMaster</b> 总线记录<b class='flag-5'>功能</b>操作指南

    TSMaster 2024年1月最新版本,新功能太实用

    2024年1月底,TSMaster软件迎来一波重磅更新!本次版本更新包括5大模块功能重点升级,新增2大功能模块,比如工具箱支持多线程和多语言、API添加的周期报文变得更加精确、仿真模块
    的头像 发表于 02-19 12:12 1650次阅读
    <b class='flag-5'>TSMaster</b> 2024年1月最新版本,<b class='flag-5'>新功能</b>太实用

    TC3xx连续发CAN报文,超过40就死机了怎么解决?

    之前的应用只发送几个报文很正常,今天测试连续发送100(for循环内)时,发现最多只能连续发送40,超过40就死机了,不知道能从哪个标志上看出原因?如果遇到这种应用有啥好方法吗?
    发表于 02-06 07:18

    求助,为什么在CAN数据库(.dbc文本文件)中找不到报文

    我有CAN数据库(dbc文件)。这是一个文本文件。此文件的扩展名为 dbc。在Vector CANdb++编辑器中打开它时,将填充J1939报文和CAN ID。 但是,在.dbc文本文件中找不到
    发表于 01-23 06:28