新功能发布—TSMaster如何实现J1939多帧报文收发
前言众所周知J1939协议是由美国汽车工程师协会SAE定义的一组标准。J1939标准用于卡车、公共汽车和移动液压等重型车辆。如今大多数车辆都通过CAN进行ECU通信。但是CAN总线仅仅是提供了通信的基础就像是电话但是没有提供对话的“语言”来进行更复杂的操作。所以在大多数大型车辆中这个“语言”就是SAE定义的J1939标准。今天我们继续来介绍TSMaster新功能—J1939多帧报文收发。这个功能属于J1939的高级功能需要license的授权具体操作需求可以联系我们。一、J1939功能使用我们假设已经拥有了带license的硬件以TC1005为例选择硬件通道后连接应用程序随后打开about窗口就可以看到拥有license的列表。其中有一个J1939的option接下来介绍这个功能的使用。 首先打开TSMaster的安装目录进入demo文件夹找到示例数据库J1939ILDemo的数据库文件。我们将其拖入TSMaster中这个拖入的过程需要在程序断开连接的时候来完成可以看到这个数据库里面有四帧报文它的PGN分别为EF00EF00FF02和FF01。 其中前两帧为点对点的多帧分别是节点2往1发1往2发后两个是广播分别是地址2的广播和地址1的广播。以第一帧为例他的DLC35个字节这意味着这个信号可以在这35乘以8也就是280个位置里面任意排布。那么报文中的sgn1~4就是模拟了这种情况。如果希望发送这些报文我们可以直接使用发送窗口我们打开CAN Transmit窗口点击左上角的来自数据库的按钮选择刚才看到的四帧报文然后再将视图切换成J1939这样协议相关的信息就一览无余了。前两个是点对点后两个是广播可以从目的地址看出来对于广播报文来讲发送节点只要自顾自的发送就可以了。而对于前两个点对点的发送过程不但需要发送节点还需要接收节点在过程中进行应答才能完成整个发送过程。所以我们还需要激活TSMaster内置的J1939的仿真节点。 接下来我们来到仿真J1939的仿真配置对话框里面可以看到节点1和2分别被标注为Node1和Node2所有的节点都勾选了仿真发送功能但是仿真接收功能默认是没有勾选的。我们可以通过激活rbs的方法来自动激活这两个接收的功能同时呢也可以手动勾上在此我们就手动勾选并且点击应用设置来关闭对话框。 这个时候就可以启动仿真了我们按下F5然后打开trace窗口随后呢我们激活这4个节点的这4个报文的发送就依次点击发送就可以了。于是在右侧的trace窗口中间就可以看到这4个多帧报文的接收情况。他们的DLC分别是右边的353613和33然后右边显示的就是他们的默认的数据段默认都是0。 我们当然可以修改他们的数据字节来任意的修改他们的数据那这里就可以看到这是我们刚才修改的结果我们当然还可以通过信号生成器的方式来改比如说我们选中第一帧报文在这个sgn1 a2上面选择正弦然后点击配置我们可以把峰值改的稍微大一点然后点击应用、点击启动这个时候就可以看到这个sgn1 a2就在发生变化。 接下来可以打开图形窗口将这个信号拖进来就可以看到正弦波当然这个正弦波的频率比较低这是因为它是多帧它发一帧需要200毫秒所以一秒只有5个点我们还可以通过其他的窗口来进行观察比如说数值显示。 最后我们打开数值显示点击这里的添加按钮可以选择我们的信号当然我们也可以通过拖动的方式将信号拖进去之后可以调整窗口的大小使得信号值可以在上面显示。我们还可以通过面板的方式添加当然面板需要设计所以首先需要停止仿真停止仿真之后我们可以将信号拖入面板再启动仿真然后再启动报文的发送这样就可以看到这些信号都可以在测量窗口里面正确的显示。二、J1939一系列API函数J1939有一套API的函数通过这一套API就可以实现J1939的信号读写、报文发送等等一系列功能。 我们打开一个自动化模块然后选中入口点按回车增加一系列的动作。我们选第一个动作然后设置他为API函数调用在过滤器里面敲入1939就可以看到1939的一系列API。这其中有1939的标识符的get和set方法以及下面的多帧报文的发送方法。关于标识符的get和set方法在此就不展开描述大家完全可以查看c代码编辑器里面的小程序的帮助文档里面有详细的介绍在右侧也可以看到示例代码。那么这次我们着重介绍一下1939的多帧发送的API。 首先我们可以选中1939异步发送API那么发送分为同步和异步两种同步意味着发完之后程序才会往下走异步则意味着只要将数据推入发送缓存程序就可以继续往下那么不管是同步还是异步还分了两种类型。一种是不带字符串的发送一种是基于字符串的发送。那么基于字符串方式的发送他的数据是以逗号来进行分隔那么这两种方式自动化模块都是支持的。因为在自动化模块里面数组均以逗号分隔的字符串表达那么我们可以选择一个异步发送函数就可以看到这个函数有7个输入的参数。 那么第一个参数是通道号我们可以选择常量比如说channel1然后PGN在此我们就可以输入。比如说我们可以选广播就是刚才看到的OxFF01然后优先级是6默认源地址是2目的地址是1然后PDU的数据我们可以随意填写。比如说Ox11然后我们可以将这个复制多份密贴多份这里长度是可以很长。他的实际长度是被最后一个参数限制那么在此我们可以保持跟dbc的一致也就是35然后我们就可以启动按F9启动发送或者点击发送按钮那么就可以发送成功。 我们就可以看到trace窗口里面显示的发送的信号内容跟我们的设置是一模一样最后如果说数据不够就会以0来补充。那么我们可以把数据填多一点再启动发送这样的话数据长度就会正好达到我们的所需要的长度。那这是原始报文的发送方法倘若需要修改报文里面的信号的值就需要rbs的仿真引擎来支持那我们可以点击CAN总线仿真窗口来模拟节点的行为我们激活这两个节点然后将总线仿真设置为自动启动这个时候可以看到rbs已经在工作了并且得到了我们通过发送窗口一样的结果。 当然发送窗口这个时候是不应该启动发送回到自动化模块里面删除我们的原始的报文发送的动作设置一个新的动作衍生函数调用在此我们搜索set Signal by address通过这个函数就可以实现rbs里面信号的任意修改。那这里有两个参数分别是信号地址和值那么信号地址就是我们所需要发送的信号的数据库地址我们可以随便选一个比如说A_Node1 signal 1_a1我们可以点击复制数据库地址然后到这里粘贴即可然后他的值我们可以随意修改然后我们可以点击启动那么这样就实现了这个信号的修改可以看到A_Node1里面的这个信号已经变成1111就是我们所设置的值那么这就是信号的发送。如果是希望接收一个信号的值该怎么做呢我们可以用到signal server的方法还是来到函数调用删除我们刚才的发送然后再多加几个动作。我们首先将它改为函数调用然后输入SGN SRV这就是signal server的系列函数。 那这里需要一个流程首先需要注册我们关心的信号需要用到register_can_signal_by_message ID或者是name我们在这里选择message ID那么我们就需要到rbs里面去copy这个报文的IDcopy过来的时候需要把后面的x删掉让这个字符串是一个有效的16进制值通道还是可以用之前的通道1然后信号名称就是我们关心的信号。 比如说sgn1_a1我们自己直接输入sgn1_a1client ID是这个函数注册成功之后给到我们程序的一个handle我们可以新建个变量来存储它就命名ID就行。这个时候直接已经可以点击本地变量关联我们的ID然后我们可以等一会再读取信号的值那这个时候可以调用wait函数比如说等个3秒然后接下去就是一个读取过程同样用到了Signal server sgnsrv get_can_signal物理值。最后通过这个方法去取得得到的信号的物理值那么在这里可以同样选择channel1 client ID就填我们刚才所得到的变量ID然后这里就是输出的值我们同样可以用一个变量来装这里需要添加的就是个double型的变量value写个v就行然后在这个地方选择v然后同时还会返回最后的时间戳如果不需要的话我们这里默认填个0就行或者不填。 然后这个时候我们可以将我们读到的值打印出来这时候就需要用到log函数字符串我们可以写我们的变量v的值作为字符串那么log level可以用一种颜色比如说绿色然后我们点击启动这个时候首先获取ID等待然后最后获取值结束那么我们会看一下每一步骤的运行结果。在这里都有反馈这里是实际传入的参数值wait然后读到的参数值然后我们可以看一下打印出来值就是111就是我们之前设定的值那么我们完全可以改一下这个值比如说改成12345这个值最大就是2047我们就设它为2047这个时候我们只要再启动一下程序我们打开log就可以看到我们获取的值跟我们设定值是一样。这就是1939系列API的用法。

相关新闻

mac安装jdk和maven

mac安装jdk和maven

官网下载地址https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html先解压 jdk-11.0.16.1_macos-x64_bin.tar.gzcdls -avim ~/.bash_profile如果是.gz用这种方式JAVA_HOME/Users/xxx/Downloads/jdk/jdk-11.0.16.1.jdk/Contents/Home CLASSPAHT$JAVA_H…

2026/9/29 2:11:08 阅读更多 →
应用笔记 | TSMaster如何代码自动发送LIN报文

应用笔记 | TSMaster如何代码自动发送LIN报文

“本文目录:一、硬件准备1. 通道选择2. 配置环境二、仿真1. 点击添加C脚本编辑器1-1. 新建快捷键事件1-2. 代码编写1-3. 选择报文编写方式三、查看报文信息1. 查看报文界面2. 下载调度表3. 设置自启动4. 运行工程一、硬件准备使用TSMaster软件中自带的虚拟LIN设备为…

2026/9/30 3:57:29 阅读更多 →
STM32F103C8T6与TB6612电机驱动实战:PWM调速与调试指南

STM32F103C8T6与TB6612电机驱动实战:PWM调速与调试指南

1. 从一堆吃灰的电机说起:为什么选TB6612而不是L298N手头攒了好几个拆机的小型直流电机,有从旧打印机里拆的,有从玩具车上扒的,还有几个带编码器的减速电机。之前一直用L298N驱动,模块便宜、接线简单,但用久…

2026/9/30 3:42:15 阅读更多 →

最新新闻

AI古装大片实战:Image 2.5提示词与参数全解析

AI古装大片实战:Image 2.5提示词与参数全解析

1. 从“摄影师要失业”说起:AI古装大片到底怎么拍女朋友想拍古装大片,这个需求本身就带着几个硬性条件:场景要古风、服装要考究、光影要有电影感、出片速度还得快。传统流程走一遍——约摄影师、租汉服、找园林、等档期、后期修图&#xff0c…

2026/9/30 9:46:45 阅读更多 →
两级解耦:学习决策中路径选择与处理深度调度的架构设计与实践

两级解耦:学习决策中路径选择与处理深度调度的架构设计与实践

1. 学习决策的两级解耦:从路径选择到处理深度调度1.1 为什么“学什么”和“学多深”必须拆开看很多做学习系统或者自适应引擎的朋友都遇到过同一个困境:模型在决定下一步动作时,既要选方向,又要定力度,结果两个目标互相…

2026/9/30 9:46:45 阅读更多 →
Jev轻量AI工具:面向非专业用户的低门槛创作实践

Jev轻量AI工具:面向非专业用户的低门槛创作实践

1. 这不是又一个“全能AI”,而是一次对AI产品节奏的精准踩点最近朋友圈和科技社群里反复刷到“Jev”这个词,标题里那句“没那么强,但足够给有些乏味的AI圈带来新刺激”特别戳人——它没说“颠覆”“革命”“碾压”,反而用“没那么…

2026/9/30 9:46:45 阅读更多 →
C语言结构体:点号和箭头的本质区别与用法详解

C语言结构体:点号和箭头的本质区别与用法详解

有很多C语言新手在学到结构体的时候,会卡在“结构体变量用点,结构体指针用箭头”这个口诀上。但背口诀容易,真正遇到混用、嵌套、链表、函数传参的时候就容易懵:为什么有时候看到 s.name 能编译,有时候又必须要 p-&…

2026/9/30 9:46:45 阅读更多 →
TCPsocket编程从accept到线程池连接型服务器的第一课

TCPsocket编程从accept到线程池连接型服务器的第一课

TCP socket 编程:从 accept 到线程池,连接型服务器的第一课 我的github:(https://github.com/xcx55/ubuntu-linux-project) 感谢各位大佬参观我的github!! UDP 那条线走完后,8 月 30 号到 9 月 1 号进入了 …

2026/9/30 9:46:45 阅读更多 →
把Profiler塞进玩家真机:轻量级性能监控SDK设计与实践

把Profiler塞进玩家真机:轻量级性能监控SDK设计与实践

以前做移动游戏性能优化,最头疼的就是手里的 Profiler 只能在开发机上跑。办公室里数据漂漂亮亮,玩家反馈却永远是“卡顿”“发热”“玩一会儿就掉帧”,你连个像样的采样都拿不到。后来我们干脆换了个思路:既然拉不齐设备环境&…

2026/9/30 9:45:45 阅读更多 →

日新闻

Base64 图片头部特征识别:从文件头到格式判断的完整指南

Base64 图片头部特征识别:从文件头到格式判断的完整指南

1. 项目概述:为什么说看懂 base64 图片头部是基本功这几年跟 base64 打交道的机会越来越多,后端接口返回图片、前端渲染验证码、小程序里存小图、还有一些老系统导出报表,动不动就给你一段长到怀疑人生的 base64 字符串。很多人拿到字符串就直…

2026/9/30 0:00:35 阅读更多 →
Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

简介:本资源是一份面向Java初学者与课程设计学生的公交站牌广告灯箱管理系统毕业设计文档,聚焦城市公共广告资源信息化管理痛点,提供从需求分析到技术实现的完整方案。文档采用标准学术论文结构,含摘要、英文摘要、目录及五章正文…

2026/9/30 0:00:35 阅读更多 →
用 Redis Lua 构建大模型 API 多租户原子配额治理体系

用 Redis Lua 构建大模型 API 多租户原子配额治理体系

我去年年底接了一个内部 AI 平台的治理需求,背景很直接:公司把 DeepSeek、MiniMax 这类大模型 API 统一封装成内部网关,开放给几个业务团队用。结果第一个月账单出来,额度直接超了 4 倍。仔细查日志,发现原因并不复杂—…

2026/9/30 0:00:35 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/29 8:16:59 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/29 16:41:41 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/29 8:24:48 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/29 19:29:29 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/29 5:58:00 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/29 3:55:56 阅读更多 →