问题标签 [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 回答
4933 浏览

python - SocketCAN linux没有可用的缓冲区空间

我想在这个设备上使用 socketCAN 定期发送一条消息

我创建了一个小脚本来实现这一点,如下所示:

我已经在做一些研究,发现对于某些人来说,设置txqueuelen. 但是,这对我没有帮助。此脚本的输出如下所示:

设备在该错误发生之前停止发送这些消息。输入和输出流量的 LED 指示灯会在错误消息出现前大约 10 秒到几分钟停止闪烁。此外,我无法在接收方阅读任何内容。缓冲区填满所需的时间变化很大,从几分钟到几小时不等。不过通常在 10-20 分钟内。

我曾想过可能有类似接收缓冲区的东西,因为我从未从中读到它只是填满。但我不知道这是否真的如此,也不知道如何测试它或如何刷新缓冲区或重置它或其他什么。我只需要发送我的消息。我不关心其他任何事情。

之后唯一的解决方案是重新启动为设备供电的 Raspberry Pi。

0 投票
3 回答
3991 浏览

can-bus - candump如何显示发送、接收和时间戳

正如标题所说,我使用命令candump can0 can1观看CAN总线上的帧,但无法区分接收到哪些帧和发送了哪些帧。

有时我需要接收帧的时间戳来分析问题。

我不知道 candump 是否支持这些。

candump 截图

0 投票
2 回答
1514 浏览

linux-device-driver - 在socketCAN linux驱动下检测CAN总线错误

我们的产品在基于 Beaglebone Black 的嵌入式系统上使用众所周知的 CANopen 堆栈,该堆栈使用 socketCAN,在 Ubuntu 14.04 LTS 下运行。但是由于某种原因,即使我们使用的堆栈会检测 CAN 总线何时进入 PASSIVE 状态甚至 BUS OFF 状态,它也不会指示 CAN 总线何时从错误中恢复并退出 PASSIVE 或警告状态,并进入非错误状态。

如果我直接(通过 ioctl 调用)查询 socketCAN 驱动程序,我是否能够检测到 CAN 总线何时进入和退出警告状态(少于 127 个错误),进入和退出 PASSIVE 状态(大于 127 个错误)或总线关闭(大于 255 个错误)?

我想知道这样做是否会浪费我的时间,还是有更好的方法来准确、实时地检测 CAN 总线的所有状况?

0 投票
1 回答
396 浏览

node.js - SocketCAN + Express.js + Node.js + Socket.io

所以我安装了 SocketCAN、Express 和 Socket.io 节点模块。

我想要做的是: *通过 Express 服务器上的 Socket.io 初始化一个 Socket *使用服务器上的 socketCAN“node-can”模块将消息发送到我的前端(Angular6)

到目前为止我所做的:

*创建了一个 Express 服务器并初始化了 Socket.io 和 node-can 那里 *能够在我的应用程序中连接到我的套接字

这是实现此目的的代码:

因此,当我启动我的应用程序并使用 socketcan 发送 can 消息时:cansend vcan0 37F#0000000012343412 我只会看到我的日志msg.channel.addListener("onMessage", function(data) {console.log(data);});

但不是console.log('Recieved message by', from , 'sayin ', msg);日志

我的 Angular 组件如下所示:

应该连接套接字,因为我socket connected在控制台中获得了日志。

任何帮助,将不胜感激

提前谢谢。

0 投票
0 回答
224 浏览

linux - SocketCAN 和传入数据包控制

我有一个适用于 linux 的应用程序。我正在使用 SocketCAN 与 CAN 总线通信。我们正在我们自己制造的基于 Beaglebone Black 的设备上执行此操作。

我们有另一个设备需要监听来自的流量。该设备以比我们需要或处理它的速度更快的方式发送大量数据。

我正在尝试找出一种好方法来减慢通过 CAN 从该设备到我们的流量的速度。

我找到了有关在 linux 上使用流量控制 (tc) 的文档。我一直在尝试这些示例,但没有看到传入流量有任何差异。

我所读到的所有内容都提供了有关限制从应用程序到 CAN 总线的出站流量的示例。

我的问题是是否可以使用流量控制 (tc) 来限制传入内核(以及正在侦听的应用程序)的流量?

如果没有,那么是否有其他工具可以用于此目的?

我可以丢弃一定百分比的数据包。我认为这将不得不发生。

0 投票
1 回答
304 浏览

python - 如何在 python 中驱动研华 CAN 板?

我用的是研华的can board,型号AMO-2203E。我在 ubuntu14.04,内核 3.13 上成功安装了驱动程序(https://support.advantech.com/support/DownloadSRDetail_New.aspx?SR_ID=GF-GRSC&Doc_Source=Download),并使用提供的示例程序成功发送和接收。
该程序是用 C 编写的,我想将它移植到我的 python 项目中。
我知道有一个基于 Python 的开源 CAN 项目(https://python-can.readthedocs.io/en/2.1.0/),但它只支持以下接口,没有研华支持。

  我想我可以基于这个框架添加对研华的支持,但对我来说感觉有点棘手。
另一个想法是编译用于发送和接收动态库的C文件,这些动态库由python调用用于ctypes。这应该是可行的。
我想知道有没有更好的方法?

0 投票
0 回答
121 浏览

python - 在 Ubuntu 中创建套接字的 Python 权限错误

我正在使用socketCAN连接到 Ubuntu 16.04 中的 CAN 总线。该界面在我的机器上运行良好。但是,当我启动 CI 时,它会在远程代理(也是 Ubuntu 16.04)上执行,并且在尝试创建套接字时收到权限错误:

作为 Linux 和 Python 的新手,我不确定如何解决这个问题。我在几个地方读到这可能是从调用进程继承的文件创建权限问题,所以我在脚本的开头放置了一个“os.umask(0)”并且没有任何影响。

我还读到可能需要以 root 身份运行脚本。这似乎相当冒险。

解决此问题的最佳方法是什么?

0 投票
1 回答
6913 浏览

embedded-linux - 如何检查socketcan中的总线状态

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

我怎样才能can state ERROR-ACTIVE在我的 C 程序中得到它?我还可以在flex can 驱动程序中看到一些寄存器可用于查看状态,但我也不知道如何在我的程序中包含这些值。像这样的寄存器FLEXCAN_ESR_BOFF_INT包含我需要的值。

0 投票
0 回答
152 浏览

c++ - 启动时调用其他 C++ 程序的 C++ 系统调用不起作用

我有一个 C++ 程序,它在启动时通过 cronjob(在 crontab 中)调用:

当 Pi 启动时,它会运行 logfileControl,因为它显示在正在运行的程序列表 (ps -e) 中。LogfileControl 包含对与SocketCAN相关的 C++ 程序的两个系统调用(SocketCAN 是 Linux 内核的一部分,它允许将 CAN 数据作为网络套接字处理)。我希望 logfileControl 在启动时运行,以便它可以初始化 CAN 套接字(系统调用 1),然后启动第一个日志文件(系统调用 2,candumpExternal,这是来自 socketCAN 的 candump,稍作修改以使日志文件成为特定位置而不是就在candump所在的位置,但使用原始版本有同样的问题)。第一个系统调用似乎工作正常,好像我再次尝试初始化套接字它很忙,但第二个系统调用似乎没有发生,因为根本没有创建日志文件,因为没有创建日志文件。如果我从命令行手动运行 logfileControl,它会按预期工作并创建日志文件,这让我很困惑......

有没有人知道这里发生了什么?

编辑:我还尝试在程序开始时添加一个简单的 5 秒暂停,但这似乎没有任何区别。

0 投票
1 回答
770 浏览

c - 我可以在没有 CAN 硬件接口的情况下使用 socketCAN 在 Linux 中实现环回吗?

我是 socketCAN 的新手,想在 Linux 中使用 socketCAN lib,但我的系统没有 CAN 硬件接口,所以我想像在 TCP/IP 套接字编程中那样使用环回来实现它。但我不确定我是否可以在 C 中使用环回和没有 CAN 接口来实现 socketCAN,所以请让我知道我该怎么做。提前致谢