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站视频哦)

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

    关注

    15

    文章

    4271

    浏览量

    41459
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Renesas IDT82P2288:八通道T1/E1/J1长距离/短距离收发器的技术解析

    Renesas IDT82P2288:八通道T1/E1/J1长距离/短距离收发器的技术解析 在电子工程领域,收发器的性能和模式支持对于通信系统的稳定运行至关重要。Renesas
    的头像 发表于 04-22 17:00 398次阅读

    测试高温实验时出现睡眠唤醒后第三3C诊断报文未响应的情况,为什么?如何处理?

    :.452,主机读,标准校验,3D,,1000,温度,0 正常收到第三3C报文和第一唤醒报文已间隔1s,MCU已经完成初始化实际未响应
    发表于 04-16 07:00

    2026最新CAN转Modbus网关评测:IPCSUN捷宸电子PBC0022如何搞定J1939与私有协议?

    正在寻找2026年靠谱的CAN转Modbus网关?本文深度评测IPCSUN捷宸电子PBC0022,实测其原生J1939解析、CAN长重组及WEB免驱配置功能。对比普通网关,看它如何解决新能源BMS
    的头像 发表于 03-23 14:56 924次阅读
    2026最新CAN转Modbus网关评测:IPCSUN捷宸电子PBC0022如何搞定<b class='flag-5'>J1939</b>与私有协议?

    重型车辆J1939通信协议是什么

    重型车辆J1939通信协议是美国汽车工程师协会(SAE)制定的基于控制器局域网(CAN)的高层通信协议标准,主要用于重型车辆及商用车辆中电子控制单元(ECU)之间的实时、可靠数据交换。 一、协议背景
    的头像 发表于 02-04 17:46 1511次阅读

    Profinet 转 SAE J1939 网关 实现重型车智能控制 西门子 PLC 渣土自卸车改造案例

    互不互通,存在举升动力分配不精准、油耗偏高、故障排查困难等问题。 项目采用 西门子 S7-1500 PLC (Profinet 主站)作为整车控制核心,搭配西门子 SIMOTICS S 系列 伺服电机 (适配 SAE J1939 协议)驱动上装举升机构,并引入 Profinet 转
    的头像 发表于 01-23 09:38 679次阅读
    Profinet 转 SAE <b class='flag-5'>J1939</b> 网关 <b class='flag-5'>实现</b>重型车智能控制 西门子 PLC 渣土自卸车改造案例

    软件更新 | TSMaster 9-10月版本发布:TAC脚本进阶,小程序易用性大幅提升

    为持续赋能用户的研发与测试工作,TSMaster正式发布2025年9-10月功能更新。本次版本聚焦于核心自动化能力的强化与用户体验的优化,重点带来了TAC脚本全面进阶、小程序易用性升级、API更新
    的头像 发表于 10-31 20:04 1693次阅读
    软件更新 | <b class='flag-5'>TSMaster</b> 9-10月版本<b class='flag-5'>发布</b>:TAC脚本进阶,小程序易用性大幅提升

    ADI T1/E1/J1收发器的环回功能

    本文概述了ADI T1/E1/J1收发器的环回功能。T1和E1是术语,用来描述通过任意介质进行的1.544Mbps和2.048Mbps传输。环回模式有助于器件或设备的诊断测试。在环回模式下,
    的头像 发表于 10-22 09:30 3195次阅读
    ADI T1/E1/<b class='flag-5'>J</b>1<b class='flag-5'>收发</b>器的环回<b class='flag-5'>功能</b>

    移植网络PHY芯片驱动,如何融入 rt-thread 的网络体系,并添加新的以太网类型的报文

    PHY 芯片最底层收发以太网报文,有可能组成 VLAN 网络); 我要实现一个新的以太网类型报文(HPGP报文,以太网
    发表于 09-22 06:11

    STM32已经用标准库写好的代码,怎么导入RT THREAD?

    之前已经在裸机上实现了SAE J1939协议,因为要添加IOT 功能,现在想添加RT THREAD.因为之前写裸机程序的时候用的是标准库。而RT THREAD STUDIO自动生成的是HAL库,请问有什么好方法在我原来的代码上添
    发表于 09-19 06:16

    软件更新 | TSMaster 7-8月新功能来了!你升级了吗?

    为持续赋能汽车电子研发,TSMaster在2025年夏季再度升级。TSMaster软件7-8月版本重磅推出了安全管理功能增强、IOAPI优化,并正式释放了RPC/IP与EthernetPDURBS
    的头像 发表于 09-12 20:03 2316次阅读
    软件更新 | <b class='flag-5'>TSMaster</b> 7-8月<b class='flag-5'>新功能</b>来了!你升级了吗?

    用于各种设备协议间做报文转换的网关是什么

    用于各种设备协议间做报文转换的网关通常被称为协议转换网关,也常被称为工业协议网关(在工业场景中)或协议网关。它是一种专门用于解决不同设备、系统或网络之间因协议不兼容而无法直接通信的中间设备,核心功能
    的头像 发表于 08-11 14:08 1315次阅读
    用于各种设备协议间做<b class='flag-5'>报文</b>转换的网关是什么

    从手写代码到AUTOSAR工具链:J1939Tp应用篇

    J1939Tp是我学习AUTOSAR CP诸多BSW模块的起点,其分层架构完美体现了AUTOSAR规范的精髓,掌握J1939Tp有助于深入理解通信(COM)相关模块的程序执行过程。
    的头像 发表于 07-10 16:37 5706次阅读
    从手写代码到AUTOSAR工具链:<b class='flag-5'>J1939</b>Tp应用篇

    告别摸索!TSMaster官方最全学习路径整理

    在汽车电子和总线通信领域,TSMaster已成为工程师们不可或缺的利器。作为一款功能强大的总线分析、仿真、测试和诊断工具,TSMaster广泛应用于CAN、LIN、FlexRay等总线系统的开发
    的头像 发表于 06-13 20:06 1550次阅读
    告别摸索!<b class='flag-5'>TSMaster</b>官方最全学习路径整理

    盟通方案|如何集成J1939协议

    SAEJ1939是美国汽车工程师协会开发的商用车行业标准通信协议,基于CAN总线技术构建,专为重型车辆(卡车、客车)及工业设备设计,实现ECU间实时数据交换与控制。J1939采用CAN29位扩展
    的头像 发表于 06-13 11:35 1066次阅读
    盟通方案|如何集成<b class='flag-5'>J1939</b>协议

    STM32已经用标准库写好的代码,怎么导入RT THREAD?

    之前已经在裸机上实现了SAE J1939协议,因为要添加IOT 功能,现在想添加RT THREAD.因为之前写裸机程序的时候用的是标准库。而RT THREAD STUDIO自动生成的是HAL库,请问有什么好方法在我原来的代码上添
    发表于 05-27 06:01