【发布时间】:2022-11-11 02:49:29
【问题描述】:
尝试在 python 中使用 can 过滤消息,使用以下内容:
bus=can.Bus(interface="ixxat",channel=0, bitrate=250000)
filter=[{"can_id":0x0629, "can_mask"=0xFFFF}]
bus.setfilters(filter)
while True:
msg=bus.recv()
print(msg)
我也尝试过使用“extended”=False,并尝试使用不同的 id,以防我误解了 0629 的含义。尝试过 "can_id" = 629, 0x629 的结果相同。
我尝试过最初使用过滤器、bus.apply_filters 和 bus.set_filters 设置总线。似乎没有改变输出。
这个想法是跟踪网络中的特定设备以密切监视它,并使响应其消息传递的命令更容易发送。在相关说明中,我也不确定如何专门向设备发送消息,除非在消息本身中也找到了该信息(设备上的所有技术规格似乎都表明了这一点)。这是我第一次使用 CAN 总线,所以我正在学习它——已经阅读了很多关于它的文档,但仍然掌握了一些原则。感谢您的任何帮助。
我是否滥用了“can_id”或“can_mask”设置?
我误解了这是如何工作的吗?非常感谢帮忙。由于上面的代码,我还需要添加更多细节,所以我正在编写系统所说的内容。我想不出任何其他可能与解决这个特定问题有关的事情。一旦我学会了如何跟踪每条消息,我就可以识别我们添加的网络上的新设备,确保它们是正确的,然后开始发送消息以在网络中设置它们。再次感谢。
【问题讨论】:
-
没有可重复的例子很难帮助你……你试过用限制较少的面具吗? (例如 0x7F)
-
嗨,@Ryan M. Williams。请尝试在您的代码中使用可以 id == 0x0629 和 mask == 0xFFF 并让我知道是否有效。另外,稍后尝试编写如下代码:
-
过滤器= [ {“can_id”:0x0629,“can_mask”:0xFFF,“扩展”:False}]
-
总线 = can.interface.Bus(channel=0, bustype="ixxat", can_filters=filters,bitrate=250000)