问题标签 [socketcan]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
448 浏览

socketcan - SocketCan 设备在发送特定数量的消息后停止发送消息

我正在使用CAN -to-USB 适配器与 CAN 总线通信。要初始化 SocketCan 设备,我使用以下命令:

slcand -c -o -f -s6 /dev/ttyACM0

ifconfig slcan0 up

CAN 总线以 500KHz 运行。我可以在一段时间内很好地传输和阅读消息。但是发送和接收几分钟后,我不再可以发送消息但仍然可以接收。

这是的输出ip -details -statistics link show slcan0

如果我断开设备,重新插入,然后再次运行 slcand 命令,它就可以工作了。

0 投票
1 回答
273 浏览

c - 不清楚为什么十六进制值的第一个数字显示为自身的 +8 版本。套接字CAN

任务

我想编写自己的小版本candump。目的是它本质上是相似的,但唯一的特点是我只想显示来自一个 CAN ID 的传入消息。

代码

问题

我一直在使用cansend命令cansend vcan0 18DA40F1#1234。运行我的代码时,除了 CAN ID 中的第一个字符值大 8+ 之外,我得到的响应几乎就在那里。响应98DA40F1 - [len] - 12 34 0 0 0 0 0 0我回来运行我的代码。

查看前面提到的 candump 的源代码,我认为这与它有关,rfilter但我不是 100% 确定,并且检查SocketCAN文档并感觉不太清楚。是不是跟蒙面有关系?一个如何解决我的问题的例子将不胜感激。如果您觉得我没有提到任何内容,请随时提出问题。

0 投票
0 回答
383 浏览

c++ - C++ 从 Linux 终端读取文本并与字符串进行比较

我写了一些使用socketcan(制作candump)的代码。使用此代码我初始化 socketcan。初始化后,我在终端中创建了一个 candump。我读入变量的那些值。现在我想将此变量与字符串进行比较。

字符串具有一定的格式。当我手动运行 candump 时,我得到以下格式:

can0 71A [1] 7F

(2x 空间)can0(2x 空间)71A(3x 空间)[1](2x 空间)7F。

我能够将终端输出读入变量(结果)

** 现在我希望在变量“result”中的文本不等于以下字符串时执行一些代码:

以下代码块用于进行比较。

当我执行此代码并在总线上发送以下字符串时。与上面相同:

代码打印:

(通常它不应该打印任何东西)

当我在总线上发送以下字符串时:

它还打印:“输入更改”

(这很好)

我也尝试将空格更改为制表符,但没有任何结果。

知道问题可能是什么以及如何解决吗?

* 编辑 1 * 以下是我将值读入变量“结果”的代码。(如果您在我的代码中看到其他愚蠢的东西,请随时提出一些建设性的批评!我想从我的项目中学习。)

亲切的问候,TM

0 投票
1 回答
862 浏览

c++ - C ++仅使用一个命令从终端逐行读取文件流

简短:我想将终端中的数据读入一个变量并将其与字符串进行比较。

Long:我使用的是来自 GOEMBED 的 TI AM3358 开发板,它运行嵌入式 linux。我使用这个工具包从 canbus 读取数据。要将数据从 canbus 读入终端,我使用 socketcan。

当我在终端中运行以下命令时,我会从总线得到一个罐头消息的数据流。

我编写了一些执行上述命令并返回输出的代码。

在 int main() 中,我运行以下代码,将终端输出与字符串进行比较:

代码本身有效,但我错过了来自 canbus 的很多数据。我认为这样做的原因是我总是需要重新初始化canbus(cmd --> candump can0)。

现在我的问题是:如何更改我只需要运行命令“candump can0”并且代码总是将下一个messafes与字符串进行比较的代码。如果这是可能的,我想我已经获得了很多表现。

如果您有其他命令或其他选项来提高性能,请不要犹豫,提出建设性的批评。(我不是专业的!我努力学习)

/ EDIT 1 / 以下数据流是如何输出到终端的

在此先感谢,亲切的问候, TMO

0 投票
0 回答
35 浏览

c - 如何使用C将二进制数据存储到文件中的结构成员写入结构

在以下程序中,我的结构为

如果函数中的结构被其他数据替换,则一切正常,fwrite但对于带有 time_str (十六进制格式)的上述结构,在模式下写入文件时wb,程序崩溃。我确信问题在 time_stri 和fwrite. 因为我尝试了其他方法,如果程序如下,这个程序可以正常工作:

第二个程序运行良好,没有任何崩溃,并将数据以十六进制格式写入文件。但是在第二个程序中,时间不是以十六进制格式写入的,而是以十六进制格式写入时间,第一个程序是正确的,当我puts用来查看时间的十六进制值时,它以十六进制格式显示时间,但程序崩溃当它在将数据写入文件时执行。我该如何解决这个问题,如何使用结构 bin 将时间以十六进制格式写入二进制文件。

在这两个程序中,open_file() 和 close_file() 都是以二进制模式打开文件和关闭文件的两个函数,因为我们大多数人都知道打开文件和关闭文件,所以这些不包含在本文下的程序中。如果有人在这方面提供帮助,那就太好了。提前致谢。

0 投票
1 回答
53 浏览

can-bus - 如何阻止来自 socketCAN 虚拟网络的特定 id?

我有一个虚拟的 socketCAN 网络。如何阻止特定 ID 在网络上发送?

0 投票
1 回答
124 浏览

python-3.x - python中的BCM套接字循环接收

我正在尝试使用 Python 通过 socketcan 监控 can 总线。我以 can4python 包作为参考。

由于我想不断地从 can 套接字获取数据,所以我正在考虑使用 BCM 套接字,因为它在内核级别处理这个问题。在 can4python 包中,我只能找到周期性的 CAN 传输,但没有找到周期性的 CAN 帧接收。

可以用 can4python 做到这一点吗?如果不是,一般情况下可以使用 BCM 插座吗?

谢谢您的帮助。

0 投票
2 回答
132 浏览

python - uint64到Python中的十六进制数组

我有不同的 uint64 数字,我想通过 CAN-Bus 和 Python 中的 SocketCAN 发送。我需要将大数划分为 8 个字节,以便将值分配给 CAN 数据字节。但我正在努力实施。我很感激任何帮助或建议。

谢谢你的帮助!

0 投票
1 回答
265 浏览

ubuntu - socketCAN 与制造商的驱动程序

我对socketCAN和制造商的CAN驱动程序有什么区别感到有些困惑。

我的 Ubuntu 机器上有一张来自 Kvaser 的 mPCIE CAN 卡。它带有自己的驱动程序,这些驱动程序显然基于 socketCAN。但是 socketCAN 带有标准的 Ubuntu 发行版,它也是 CAN 的驱动程序。我只能使用 socketCAN 读取 CAN 总线数据,甚至无需安装 Kvaser 的驱动程序。

所以我的问题是,当 socketCAN 可以单独处理通信时,安装制造商的 CAN 驱动程序有什么意义?

0 投票
1 回答
588 浏览

ip - 从 ip link show 捕获 berr-counter tx/rx

我希望能够在 shell 脚本中捕获 berr-counter 值。我可以通过以下方式查看值 ip -det link show can0

我可以解析这个输出并捕获 tx/rx 错误计数器,但我宁愿直接捕获这些值。所以,我一直在尝试找到访问这些值的位置。我深入研究了https://github.com/shemminger/iproute2的代码,发现这些值ip/iplink_can.c在函数中的打印位置:

有代码:

在同一个文件的底部有一个结构:

但是我在任何地方都找不到can_print_opt,或者can_link_util.print_opt被调用,而且我没有找到任何成功筛选struct rtattrrepo 中的所有内容。

我不确定从这里去哪里获取这些值,而不是从ip -det link show can0