首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于SAE J1939总线地址的几个问题

关于SAE J1939总线地址的几个问题
EN

Stack Overflow用户
提问于 2022-02-07 10:16:05
回答 1查看 94关注 0票数 0

我正在开发一个程序,用J1939从总线读取和请求参数。我知道,为了请求PGNs,我需要一个地址,这个地址是在address索赔过程中声明的。我对此有一些疑问。

首先,节点地址是经常更改还是静态的?

其次,我的程序作为一个外部测试设备应用程序,是否需要每次打开总线时都执行地址请求过程,还是可以将从地址请求过程中获得的ID永久存储在我的应用程序中?

至于地址要求程序,我的应用程序的合适名称字段是什么?我想要做的是建立一个监控系统,监控公共汽车的不同参数,比如速度、燃油、踏板位置等等。我的猜测是不会有足够的ECU来填满所有255个可用的地址,但我无法确定有多少个,所以我可能需要一个名字。这不是一个产品,因此不会大规模生产,只会在我们的设施工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-07 12:24:29

亚历克斯

首先,你想读哪些变量?我是说,如果你想播放车速燃料踏板..。这些是通用消息,它们可以在总线上使用,而不需要请求。应用数字滤波器(掩码)可以有效地解决你的问题。request方法更适合特殊ID (请参阅这里的更多J 1939-71 )。

应用过滤器n Python:

代码语言:javascript
复制
import can

# CAN Setting
can_interface = 'can0'
bus.set_filters([{"can_id":0xCF00400, "can_mask": 0xFFFFFFF, "extended": True},
                 {"can_id":0x18fee927, "can_mask": 0xFFFFFFF, "extended": True}])
bus = can.interface.Bus(can_interface, bustype='socketcan',can_filters=can_filters)

while True:
     message = bus.recv()
     print(message)

过滤器/口罩是如何工作的:

代码语言:javascript
复制
# The following just equals zero
0xCF00400 & 0 == 0 # True

# The following equals 0xCF00400 (217056256 in decimal) exactly
0xCF00400 & 0xFFFFFFF == 0xCF00400 # True
0xCF00400 & 0xFFFFFFF == 217056256 # True

# The following can_id would not get through the filter + mask:
0x18fee500 & 0xFFFFFFF == 0xCF00400 & 0xFFFFFFF # False

# The following obviously would get through the filter + mask:
0xCF00400 & 0xFFFFFFF == 0xCF00400 & 0xFFFFFFF # True

不管怎样,老实说,我从来没有用过请求的方法,但也许我能帮上忙。

首先,节点地址是经常更改还是静态的?其次,我的程序作为一个外部测试设备应用程序,是否需要每次打开总线时都执行地址请求过程,还是可以将从地址请求过程中获得的ID永久存储在我的应用程序中?

节点作为一个桥ecu工作,所以它们将永远是相同的。但是,您需要始终再次请求数据,因为它们不是“在线”。

至于地址申请程序,适合我的应用的名称字段是什么?

我真的不明白XD这个问题。但我认为您的意思是您正在开发一个数据J1939读取器/记录器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71016813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档