标签: socketcan

Canplayer不会重播candump文件

我正在尝试使用canplayer重播一些candump文件,但没有成功.当我尝试运行canplayer时,它只是执行并返回,不知道发生了什么.

我到目前为止所做的尝试:

设置1

  • 设置vcan界面
  • 使用cansend和cangen将数据发送到vcan界面,并成功(使用candump验证).
  • 在运行cangen时从vcan0录制了一个candump文件.带有绝对时间戳(-ta)和不带时间戳的录制文件.
  • 尝试使用canplayer重现文件.尝试使用几个参数,无济于事.canplayer只是立即返回,没有任何投诉.如果我弄乱它抱怨的文件或参数.

设置2

  • 将2个PEAK CAN USB适配器设备连接到PC.
  • 使用120欧姆端接电缆将适配器相互连接
  • 开始cangen指向can0并使用candump验证消息到达can1
  • 从can0接口录制的candump文件.
  • 尝试使用canplayer重现文件.但没有成功.

我在两台运行Ubuntu 12.04的不同机器上尝试过这些测试,结果相同.

你知道它可能是什么原因吗?

can-bus socketcan canutils

6
推荐指数
1
解决办法
8524
查看次数

Socket-CAN虚拟总线

如何创建多个虚拟套接字并将它们链接在一起以创建虚拟总线?

我想模拟一个应用程序,其中许多节点通过CAN相互通信.

can-bus socketcan

6
推荐指数
1
解决办法
1515
查看次数

写:没有可用的缓冲区空间 socket-can/linux-can

我正在运行一个带有两个 CAN 通道的程序(使用 TowerTech CAN Cape TT3201)。

两个通道是 can0 (500k) 和 can1 (125k)。can0 通道工作正常,但 can1 运行写入:无可用缓冲区空间错误。

我正在使用 ValueCAN3/VehicleSpy 来检查消息。

这是在我运行程序之前。can0 和 can1 似乎都发送,但在 VehicleSpy 中只显示 can0。

root@cantool:~# cansend can0 100#00 
root@cantool:~# cansend can1 100#20
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

这是在我尝试运行程序之后

root@cantool:~# cansend can1 100#20 
write: No buffer space available 
root@cantool:~# cansend can0 111#10
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

当我的程序正在运行时:对于要在 can1 上发送的所有消息,我收到此错误

2016-11-02 15:36:03,052 - can.socketcan.native.tx - WARNING - Failed to send: 0.000000    12f83018    010    1    00 
2016-11-02 15:36:03,131 - can.socketcan.native.tx - WARNING - Failed to send: 0.000000    0af81118    010    6 …
Run Code Online (Sandbox Code Playgroud)

can-bus beagleboneblack socketcan

6
推荐指数
1
解决办法
2万
查看次数

SocketCAN:过滤具有某些 CAN ID 的帧不起作用

我正在尝试过滤具有某些 ID 的 CAN 帧,如下所述:https: //landlock.io/linux-doc/landlock-v8/networking/can.html#raw-protocol-sockets-with-can-filters-sock -生的

我的部分代码:

struct can_filter rfilter[4];

if ((s = socket(PF_CAN, SOCK_RAW, CAN_RAW)) < 0) {
    fprintf(stderr, "Error while opening socket.\n");
    exit(EXIT_FAILURE);
}
rfilter[0].can_id   = 0x0D6 | CAN_INV_FILTER;
rfilter[0].can_mask = CAN_SFF_MASK;
rfilter[1].can_id   = 0x0D8 | CAN_INV_FILTER;
rfilter[1].can_mask = CAN_SFF_MASK;
rfilter[2].can_id   = 0x0E4 | CAN_INV_FILTER;
rfilter[2].can_mask = CAN_SFF_MASK;
rfilter[3].can_id   = 0x77F | CAN_INV_FILTER;
rfilter[3].can_mask = CAN_SFF_MASK;
setsockopt(s, SOL_CAN_RAW, CAN_RAW_FILTER, &rfilter, sizeof(rfilter));
Run Code Online (Sandbox Code Playgroud)

如果我只使用四个过滤器之一并注释掉其他三个,它就会按预期工作。如果我使用所有四个过滤器,它根本不起作用。在这种情况下,我仍然可以接收 CANbus 接口上的所有内容。

所以,我的猜测是我的过滤器以某种方式相互抵消了?!我需要更改什么才能过滤 CAN ID 0x0D6、0x0D8、0x0E4 和 0x77F?

c can-bus socketcan

6
推荐指数
1
解决办法
8760
查看次数

严重混淆了candump(SocketCAN)ID过滤功能

简而言之,我希望candump只向我显示ID为0x00200200或0x255的帧.

所以我这样做:

candump can0,00200200:0,255:0
Run Code Online (Sandbox Code Playgroud)

但这会给出所有帧,每帧显示两次.即输出:

cansend can0 256#112233
Run Code Online (Sandbox Code Playgroud)

会是这样的:

can0      256  [3] 11 22 33
can0      256  [3] 11 22 33
Run Code Online (Sandbox Code Playgroud)

除了过滤器不像我预期的那样并且通过0x256之外,它显示两次的事实表明这些帧实际上是由两个滤波器匹配的,这对我来说更没意义.任何人都可以解释为什么会这样,也许可以告诉我正确的方法吗?

linux can-bus socketcan canutils

5
推荐指数
1
解决办法
1万
查看次数

获取 CAN 比特率

我想用 C++ 读取我的 socketcan 套接字当前配置的 CAN 比特率。

我可以通过以下方式查看比特率ip -det link show can0

9: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP mode DEFAULT group default qlen 10
    link/can  promiscuity 0 
    can state ERROR-ACTIVE restart-ms 100 
    bitrate 1000000 sample-point 0.750 
    tq 125 prop-seg 2 phase-seg1 3 phase-seg2 2 sjw 1
    pcan_usb: tseg1 1..16 tseg2 1..8 sjw 1..4 brp 1..64 brp-inc 1
    clock 8000000
Run Code Online (Sandbox Code Playgroud)

比特率通过设置/etc/network/interfaces,但用户可以手动更改它。

libsocketcan 似乎只支持设置比特率,但不支持读取比特率。

其代码产生上面的输出iproute2rtnetlink。

如何使用libnetlink读取相应的属性?或者还有另一种读取当前比特率的方法吗?

c++ can-bus netlink c++11 socketcan

5
推荐指数
1
解决办法
8960
查看次数

如何检查socketcan中的总线状态

我在嵌入式 Linux 上使用Flexcan 驱动程序,并且有C程序控制 CAN 消息。在我的C程序中,我需要检查 can 总线的状态,例如buss-offerror-active。我可以使用 linux 命令, ip -details -statistics link show can0结果如下:

2: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP mode DEFAULT group default qlen 10
    link/can  promiscuity 0 
    can state *ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 100 
          bitrate 250000 sample-point 0.866 
          tq 266 prop-seg 6 phase-seg1 6 phase-seg2 2 sjw 1
          flexcan: tseg1 4..16 tseg2 2..8 sjw 1..4 brp 1..256 brp-inc 1 …
Run Code Online (Sandbox Code Playgroud)

can-bus embedded-linux socketcan

5
推荐指数
1
解决办法
1万
查看次数

如何在 Linux 中连接两个 VCAN 端口?

我已经设置了两个 vcan 设备,我想将它们视为连接在一起。我希望能够使用 can-utils candump 在一行上侦听,并从另一行发送 can 消息。没有物理设备我怎么能做到这一点?

为了澄清起见,我正在编写软件来通过我已经能够进行的 CAN 通信,但为​​了促进实际数据收集和进一步开发,我需要两个启用了 CAN 的设备相互通信。虽然现实世界中的一个简单解决方案是通过将设备物理连接在一起来解决的,但我需要一个可以在计算机上运行的程序化解决方案。

linux virtual can-bus socketcan canutils

4
推荐指数
1
解决办法
931
查看次数

如何解决此错误——在编译 socketcan 实用程序时

我已经从 SVN 下载了 can 实用程序。因为默认情况下,can 实用程序不在内核中。

svn checkout svn://svn.berlios.de/socketcan/trunk/can-utils
Run Code Online (Sandbox Code Playgroud)

我使用的内核是:--

ignite@ignite:~/socketcan/can-utils$ uname -a
Linux ignite 3.5.0-17-generic #28-Ubuntu SMP Tue Oct 9 19:32:08 UTC 2012 i686 i686 i686 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

然后我重新编译了实用程序。这是找不到错误 isotp.h :---

ignite@ignite:~/socketcan/can-utils$ make all
cc -O2 -Wall -Wno-parentheses -I../kernel/2.6/include -fno-strict-aliasing -DSO_RXQ_OVFL=40 -DPF_CAN=29 -DAF_CAN=PF_CAN    isotprecv.c   -o isotprecv
isotprecv.c:60:29: fatal error: linux/can/isotp.h: No such file or directory
compilation terminated.
make: *** [isotprecv] Error 1
cc -O2 -Wall -Wno-parentheses -I../kernel/2.6/include -fno-strict-aliasing -DSO_RXQ_OVFL=40 -DPF_CAN=29 -DAF_CAN=PF_CAN    isotpsend.c   -o isotpsend
isotpsend.c:60:29: fatal error: linux/can/isotp.h: No such …
Run Code Online (Sandbox Code Playgroud)

linux can-bus socketcan

3
推荐指数
1
解决办法
1763
查看次数

CAN FD 支持 SocketCAN 上的虚拟 CAN (vcan)

我一直在使用 SocketCAN,尤其是 Virtual CAN vcan 已经有一段时间了。但是,到目前为止,我从未使用过 CAN FD(灵活数据速率)。

好吧,我今天早上使用 can-utils 尝试了它:

cansend vcan0 123##122
Run Code Online (Sandbox Code Playgroud)

但是,我得到了“CAN 接口不支持 CAN FD”的响应。已使用以下终端命令创建了 vcan 接口:

ip link add dev vcan0 type vcan
ip link set up vcan0
Run Code Online (Sandbox Code Playgroud)

有人知道vcan是否支持CAN FD吗?如果是,如何设置支持 CAN FD 的 vcan 接口?

系统配置:VirtualBox 上的 Ubuntu 14.04.1。

提前致谢,MAW

linux can-bus socketcan canutils

3
推荐指数
1
解决办法
4991
查看次数

RAW CAN 套接字和广播管理器 CAN 套接字之间有什么区别以及如何使用它们?

我是 CAN 协议的新手,我正在尝试通过 Linux 的 SocketCAN 使用它。然而,我对可用的 2 种不同的 CAN 套接字(RAW 和广播管理器 (BCM))感到困惑。

文档指出,BCM 套接字不适用于发送单独的 CAN 帧。直觉上我猜测 BCM 更适合单主多从配置,但这似乎有些错误。

BCM 的用途是什么?或者说,它们之间的功能有什么区别?在什么情况下我会选择使用广播管理器而不是原始套接字?

linux can-bus socketcan

2
推荐指数
1
解决办法
1974
查看次数

通过 socketCAN 发送 EFF 29 位 ID 消息的问题

我试图通过套接字发送 29 位 EFF CAN 消息,但由于某种原因,它使用 11 位标识符发送它们,从 ID 中删除 5 个字节。使用环回模式,通过 candump 我可以看到消息以 11 位形式接收。

我没有收到任何错误,什么也没有,这就是我感到困惑的原因

我正在使用树莓派 3b+,如果这有什么区别的话。和 Can-utils 库。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <time.h>
#include <net/if.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>

#include <linux/can.h>
#include <linux/can/raw.h>

#include </home/pi/can-utils/lib.h>

int main(int argc, char **argv)
{
int s,loop = 1;
int nbytes;
struct sockaddr_can addr;
struct can_frame frame;
struct ifreq ifr;

//can interface 

if((s=socket(PF_CAN, SOCK_RAW, CAN_RAW))<0){
    perror("socket");
    return 1;
    }


strcpy(ifr.ifr_name, "can0");
if(ioctl(s, SIOCGIFINDEX, &ifr) …
Run Code Online (Sandbox Code Playgroud)

c can-bus socketcan raspberry-pi3

0
推荐指数
1
解决办法
2238
查看次数