简而言之,我希望candump只向我显示ID为0x00200200或0x255的帧。
所以我这样做:
candump can0,00200200:0,255:0
但这会给出所有帧,每帧显示两次。即输出:
cansend can0 256#112233
就是这样:
can0 256 [3] 11 22 33
can0 256 [3] 11 22 33
除了过滤器不像我预期的那样并且通过0x256之外,它显示两次的事实表明这些帧实际上是由两个滤波器匹配的,这对我来说更没意义。任何人都可以解释为什么会这样,也许可以告诉我正确的方法吗?
答案 0 :(得分:5)
在candump的帮助下:
library(plyr)
library(dplyr)
library(zoo)
df %>%
mutate(date = Sort.In.Date %>% as.Date,
day_of_week = date %>% format("%w") %>% as.numeric) %>%
full_join(data_frame(date = as.Date("6/1/2015"):as.Date("8/31/2015") %>% as.Date) ) %>%
mutate(OrderedQty.expand = OrderedQty %>% mapvalues(NA, 0) ) %>%
filter(date %>% between(as.Date("6/1/2015"), as.Date("8/31/2015") ) &
day_of_week %>% between(1, 5) ) %>%
group_by(Location.Name, Item.Description) %>%
arrange(date) %>%
summarize(OrderedQty.mean = mean(OrderedQty.expand),
OrderedQty.sd = sd(OrderedQty.expand),
average_interval = date %>% diff %>% mean)
现在,当掩码为0时,每个CAN ID都会匹配它。所以 can_id 没有实际效果,这就是所有消息都通过的原因,can id中的每个必需位都应该在掩码中设置为1。
关于重复问题,可能是因为您使用了两个过滤器,但我不确定。
您想要做的是:
<can_id>:<can_mask> (matches when <received_can_id> & mask == can_id & mask)
示例(由OP提供):
candump can0,00200200:1fffffff,255:7ff
答案 1 :(得分:1)
(对MByD的回应,太久不适合评论)
好的,几乎对我有意义。我说的原因几乎是因为我试过这个:
candump can0,00200200:1fffffff,255:7ff
为第一个ID使用29位掩码的想法,因为它是一个29位ID,同样是第二个ID的11位掩码。
然而,这并没有像我预期的那样工作 - 我没有在我面前输出,我不记得究竟是什么差异,但有一个。
您建议使用32位掩码 - 您能解释为什么会起作用但是使用29位掩码不起作用吗?或者我只是完全误解了它?
(我现在离开我的系统,我明天可以测试它,然后会报告)