有关SAE J1939总线中地址的问题



我正在开发一个程序,通过J1939从总线读取和请求参数。我知道,为了请求PGN,我需要有一个地址,该地址在地址声明过程中声明。我对此有一些疑问。

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

其次,作为一个外部测试设备应用程序,我的程序是否需要在每次打开总线时执行地址声明过程,或者我可以永远存储从地址声明过程中获得的ID用于我的应用程序?

至于地址申请程序,什么是适合我申请的NAME字段?我想做的是建立一个监控系统,监控公交车的不同参数,如速度、燃油、踏板位置等。我的猜测是,没有足够的ECU来填充所有255个可用地址,但我无法确认有多少,所以我可能需要一个名称。它不是一种产品,因此不会大规模生产,只能在我们的设施中使用。

Alex

首先,你想读取哪些变量?我的意思是,如果你试图广播车辆速度,燃油,踏板。。。这些是总线上无需请求即可使用的通用消息。在CAN上应用数字滤波器(屏蔽(可能会以有效的方式解决您的问题。特殊ID的请求方法更多(请参阅J1939-71(。

在Python:中应用过滤器

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)

过滤器/口罩的工作原理:

# 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-ccu工作,因此它们将始终相同。但您需要始终再次请求数据,因为它们不是"在线"的。

对于地址声明过程,什么是合适的NAME字段我的应用?

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

相关内容

  • 没有找到相关文章

最新更新