
尝试在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。
最初,我尝试使用filter、bus.apply_filters和bus.set_filters设置总线。似乎没有改变输出。
这样做的目的是跟踪网络中的某个特定设备,以密切监视它,并使响应其消息传递的命令更容易。另外,我也不确定如何向设备具体发送消息,除非在消息本身中也可以找到这些信息(设备上的所有技术规范似乎都表明了这一点)。这是我第一次使用CAN总线,所以我正在学习它,我已经阅读了很多关于它的文档,但仍然保留了一些原则。谢谢你的帮助。
我是否误用了"can_id“或"can_mask”设置?
我是不是误解了这是怎么回事?非常感谢你的帮助。由于上面的代码,我还需要添加更多的细节,所以我正在编写系统说明的内容。我想不出任何可能与解决这个特定问题相关的事情。一旦我学习了如何跟踪每条消息,我就可以识别我们添加的网络上的新设备,确保它们是正确的,然后开始发送消息来在网络中设置它们。再次感谢。
发布于 2022-10-26 19:44:22
@Ryan M. Williams.请尝试在您的代码中使用可以标识为== 0x0629和掩码== 0xFFF,并让我知道是否有效。另外,稍后尝试编写如下代码:
filters = [ {"can_id": 0x0629, "can_mask": 0xFFF, "extended": False} ]
bus = can.interface.Bus(channel=0, bustype="ixxat", can_filters=filters,bitrate=250000)必须根据IXXAT行为指定CAN _id/掩码,即CAN_id/掩码参数的位0表示CAN帧中的RTR字段。有关更多信息,请参见IXXAT文档,“消息筛选器”一节。
来自ixxat文档:
要在列表中单独注册一个ID,请在dwCode中指定所需的ID (包括RTR位),在dwMask中指定0xFFF (11位ID)的值。0x3FFFFFFF (29位ID)。
https://stackoverflow.com/questions/73990030
复制相似问题