【问题标题】:Python CAN filter and Mask does not filter messagesPython CAN 过滤器和掩码不过滤消息
【发布时间】: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)

标签: python can-bus j1939


【解决方案1】:

@Ryan M.威廉姆斯。请尝试在您的代码中使用可以 id == 0x0629 和 mask == 0xFFF 并让我知道是否有效。此外,稍后尝试编写如下代码:

filters = [ {"can_id": 0x0629, "can_mask": 0xFFF, "extended": False} ]

bus = can.interface.Bus(channel=0, bustype="ixxat", can_filters=filters,bitrate=250000)

can_id/mask 必须根据 IXXAT 行为指定,即 can_id/mask 参数的第 0 位代表 CAN 帧中的 RTR 字段。有关详细信息,请参阅 IXXAT VCI 文档的“消息过滤器”部分。

来自ixxat documentation:

要在列表中专门注册个人 ID,请指定 dwCode 和 dwMask 中的所需 ID(包括 RTR 位)值为 0xFFF (11位ID)分别。 0x3FFFFFFF(29 位 ID)。

【讨论】:

    猜你喜欢
    • 2021-06-03
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    相关资源
    最近更新 更多