问题标签 [python-can]
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.
python-3.x - Python 的 asyncio.Event() 跨不同的类
我正在编写一个 Python 程序来与基于 CAN 总线的设备进行交互。为此,我成功地使用了 python-can 模块。我还使用 asyncio 来响应异步事件。我编写了一个“CanBusSequencer”类使用的“CanBusManager”类。“CanBusManager”类负责生成/发送/接收消息,CanBusSequencer 驱动要发送的消息序列。
在序列中的某个时刻,我想等到收到特定消息以“解锁”序列中要发送的剩余消息。代码概述:
主文件
canBusSequencer.py
canBusManager.py
现在我的程序仍然等待 self.event.wait(),即使收到了相关消息并执行了 self.event.set()。使用 debug = True 运行程序会显示一个
我真的不明白。它与异步事件循环有关,不知何故没有正确定义/管理。我来自 C++ 世界,目前正在用 Python 编写我的第一个大型程序。任何指导将不胜感激:)
python - 使用 python-can 的实时波形
我正在尝试使用 python-can 和 matplotlib 库绘制 can-data。我有一个关于如何使用 matplotlib 绘制实时数据的基本示例:
我使用了一个基本的 python-can 示例并添加了 matplotlib:
但是,一旦我添加 plt 命令,脚本就会停止工作,它就不再输出打印语句了。当我调试它并手动执行它时。有什么我做错了吗?有没有更好的方法来解决这个问题?我没有设置 matplotlib,只是绘制某些东西的最快方法:)
linux - 发送和接收 CAN 消息的简单消费者生产者示例不接收消息
我只是想在linux下使用虚拟can设备vcan0和python-can模块来熟悉CAN总线上的编程和调试。
我设计了一个看起来很简单的程序,它有两个线程,一个线程应该产生罐头消息,另一个线程应该消费。不幸的是,消费者线程没有消费一条消息,我对这个原因有点困惑。
安装 virtual can 设备驱动程序后,设置 vcan0 接口很容易:
python - Matlab不调用Python类继承方法
我正在使用 Matlab 从 python-can 包中调用 Python CAN 函数。
Python 中的代码工作正常,但从 Matlab 调用时却不行。问题似乎是 Matlab 是从父类而不是子类调用 send() 方法。Matlab 需要从子类调用 send() 方法。
此链接显示了 Matlab 对 Python 支持的限制: https ://www.mathworks.com/help/matlab/matlab_external/limitations-to-python-support.html
这是我的python代码:
输出:
这是我在 Matlab 中的代码:
输出:
有没有一种简单的方法可以在 Matlab 中使用 python send() 方法?欢迎任何调用python代码的想法,即使我必须创建一个新的python库或修改python库代码。
python - 显示 ImportError:无法从 'can' 导入名称 'Message'
我正在导入 CAN 消息,Python
并且正在使用python-can
库。所以我的python代码中的行是:
它工作正常,但在我更改文件夹后,我收到以下错误:
谁能帮我解决这个错误?也许它与目录或包有关?同一个can
库在其他 linux 机器上运行良好。我尝试卸载python-can
,但它不起作用。请帮忙。
can-bus - CAN 套接字 - 句柄不是 ACK
我正在尝试测试从 CAN 网络获取 ACK 位。我的系统有一个 RPI 4、PICAN DUO 和其他 CAN 节点的收发器。当 RPI 和另一个节点都连接时,一切都很好,我得到了 2 路通信。
当 RPI 本身时,我正在发送一条消息并且应该收到一个错误,表明没有发生确认,但我什么也没得到。
配置:
can.interface.Bus(interface="socketcan", receive_own_messages=True, channel="can1", bitrate=500000, err_reporting=True)
can-bus - Python-can:CAN 总线上的故障注入可能吗?
我目前正在对 CAN 节点进行一些测试,我正在使用 python-can 和 Linux SocketCAN 从节点发送和接收 CAN 帧。
定期发送和接收工作正常,但现在我想注入故障并查看 CAN 节点的行为。
有谁知道是否可以这样做,例如通过更改帧的 CRC。我已经进行了一项测试,其中我关闭了 CAN 接口,因此节点总线关闭,但还有更多 CAN 错误需要测试。
编辑:为了清楚起见:我正在开发一个测试框架,使用 pytest 和 python-can,并且对于 CAN 帧的定期发送,我有以下代码:
在这里它停止了,我可以为 API 阅读什么,这里没有错误注入选项(Pyhon-can API)。
我今天拥有的另一个例子:
以上代码在总线上生成错误帧,这是我正在设计的故障处理测试的一部分。
python - linux CAN协议最大速率
我正在编写一个每秒必须处理 20000 条 CAN 消息的程序。在linux下使用socketcan用python编写代码时,似乎当msg_per_second超过200时我开始丢失消息。
什么可能是限制因素?如何修改程序或操作系统设置以避免丢失 CAN 消息?
下面的代码显示当 msg_per_second 为 1000 时的计数约为 990。它们应该相等。
输出:
计数:989 计数:988 计数:988 计数:990 计数:990 计数:990 计数:990
我的问题可能与接收缓冲区大小有关。当我运行以下代码时,我总是会阅读 278 条消息:
输出:计数:1 计数:2 ... 计数:277 计数:278
我查看了 socketcan 文档,找不到有关缓冲区大小的信息。
python - 为什么这个 Python-CAN 脚本的频率发生了变化?
在下面的脚本中,我将数据 [0x01, 0x0a] 发送到地址 0x0050000b,然后在地址 0x0790000b 处搜索答案“01 0a”。消息需要每 100 毫秒发送一次。
问题是由于某种原因,我发送的消息被移动了~1.3ms,这导致我的 CAN 设备无法接收它。
我在下面添加了 CAN 消息的屏幕截图,
任何帮助表示赞赏!