问题标签 [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 - 在 CANbus 上接收消息总是返回与 python-can 相同的值
我有一个带有多个输入的 CAN 总线 (PCAN)。我尝试在 python 中读取输入并将它们打印在控制台上。我从总线得到的第一条消息是正确的,但是如果我改变输入的状态,消息中的数据不会改变,并且会不断吐出它得到的第一个数据。在 PCAN-view 中我可以看到数据的变化,所以这不是硬件故障。
我的代码:
我尝试在每次接收之前发送一条消息,但没有帮助。与can.Listener().stop()
打印接收到的消息后在侦听器上调用函数相同。
PCAN-view 显示硬件正在工作,因为我可以看到屏幕上发生的变化。
例如。
- 开始时,输入 0 和 1 在单元 0x1B2 上为高电平
- bus.recv 返回 [00 03],这是正确的
- 我清除输入 0 和 1
- PCAN-view 显示数据 [00 00]
- bus.recv 返回 [00 03],这是不正确的。它没有改变。
我已经阅读了几次 readthedocs,但恐怕我错过了一些东西。我需要刷新输入缓冲区吗?我只看到有关刷新输出缓冲区的函数的信息。
python - 是否可以在 MacOS 上使用 socketCAN 协议
我希望使用 python3 上的模块 python-can 在 MacOS 上使用 socketCAN 协议无线连接到汽车。我不知道如何在 MacOS 上安装 socketCAN 协议。请帮忙。
python - 将 Vector *.blf 数据转换为普通可读数据,以便与 python-can 或 cantools 一起使用电子表格
我有一些文件是通过在 CANalyzer 或 Vector 中导出 CAN-Bus 数据而创建的。问题是文件中主要有趣的数据被编码,如下所示:“40c1 bf1b 490d 34b0 46c5 6ed0 a853 d856”。
有没有办法通过 python-can 或 cantools 将这些数据“转换”为正常的、人类可读的数字?
python - 无法让 python-can-viewer 运行
我想使用 python 来读取 can-bus,然后再通过 python 在总线上发送消息(我是一个完全的 python 新手,但有 C 和 C++ 知识)。所以我开始通过 pip 安装 python-can 模块。我想尝试的第一件事是只使用python-can-viewer从总线读取消息。我从峰值检查了与固件的连接,一切正常我可以看到我的罐头设备的心跳。但是 can-viewer 模块不会启动。
抱歉,错误按摩是德语的,它的意思是:
[WinError 126] 找不到指定的模块
我还尝试使用 python-can 中的一个简单示例
我从https://python-can.readthedocs.io/en/master/得到了这个例子
我也遇到同样的错误,我还发现 winerror 126 可能与缺少 ddls 或库有关,所以我从 microsoft 安装了 x64 vc_redist,但它没有帮助https://support.microsoft.com/en-us/help/2977003 /the-latest-supported-visual-c-downloads
编辑:忘了提到这个网站https://python-can.readthedocs.io/en/3.3.2/installation.html
python - 如何通过 VECTOR DEVICE VN5610A 使用 PYTHON-CAN 发送和接收 canfd isotp 消息?
执行以下代码时出现以下错误:
我的代码是
python - 在 Raspberry 中更新库
我需要你的帮助。我得到了 Raspberry PI 3,我正在用 Python 编程以通过 PiCAN duo 获取 CAN 消息。程序运行得很好,但是为了从源头获取合理的信息,我需要每 100 毫秒向源头发送一次消息。我用这个:
task = can.send_periodic('can0',msg,0.1)
task.start()
但是程序显示错误。我认为这是因为旧库 Python_can-1.4.1。所以我从 Pypi 下载了这个的最新版本。当我打开管理插件并单击从本地文件安装(或任何其他方式)时,它会显示内部错误:
Traceback(最近一次调用最后一次):文件“/usr/lib/python3.7/tkinter/init .py ”,第 1705 行,调用中 返回 self.func(*args) 文件“/usr/lib/python3/dist-packages/thonny/plugins/pip_gui.py”,第 658 行,在 _handle_install_file_click initialdir=get_workbench().get_local_cwd,文件“/usr/lib/ python3/dist-packages/thonny/ui_utils.py”,第 1920 行,在 askopenfilename 返回 _get_dialog_provider().askopenfilename(**options) 文件“/usr/lib/python3/dist-packages/thonny/ui_utils.py”,行1960,在 askopenfilename args = cls._convert_common_options("Open file", **options) File "/usr/lib/python3/dist-packages/thonny/ui_utils.py",第 1994 行,在 _convert_common_options 文件名 = _options_to_zenity_filename(options) _options_to_zenity_filename 中的文件“/usr/lib/python3/dist-packages/thonny/ui_utils.py”,第 2036 行,返回选项 [“initialdir”] + os.path。sep TypeError: +: 'method' 和 'str' 不支持的操作数类型
我试图找到答案很长时间。我做了 PI 升级,但没有任何效果。你可以帮帮我吗?谢谢您的回答
python - Python-can 记录文件时间
我刚开始使用 Python-can,我需要编辑内置日志记录功能的报告格式。下面是我所指的代码片段。
这是来自日志文件的结果标头:
问题在第一行,我不能以微秒为单位报告时间,毫秒是我能走的最远。无论如何在python-can中编辑该值?或者这是否需要额外的代码来手动进入日志文件并对这些值进行条带化?
谢谢你的时间,
python - Python 并发 - CAN 总线
我正处于开发基于 CAN 的可扩展硬件测试系统的初期阶段。测试系统的两个主要功能是记录总线上的所有流量并执行测试用例。测试用例将主要由接收和发送 CAN 消息组成,同时评估消息数据有效负载的内容。还将有一系列必须与串行控制设备集成的测试用例。
由于记录所有 CAN 流量的重要性,我一直在考虑基于并发的程序。但我不确定我应该实现哪种形式的并发。我读过asyncIO、threading和multiprocessing。所以我对他们每个人都有一个高层次的看法。
我还在使用似乎内置了 asyncIO 的 python-can 库,所以这让我相信 asyncIO 应该没问题。我担心如果测试用例协程处理速度不够快,我可能不得不使用 asyncIO 建立某种缓冲。总线速度500kb。CAN 总线上有 2 个模块。最高消息频率为 20 毫秒,我认为这足以让 asyncIO 运行 2 个协程。我还关心可扩展性。
我的假设正确吗?使用 asyncIO 就可以了吗?
非常感谢任何和所有输入。
python - Python-can - can.Logger 监听器问题
Python-can 包中的 can.Logger 侦听器似乎没有将数据记录到文件中。
我知道有 CAN 总线数据,因为 can.Printer() 侦听器正在运行,它将 CAN 流量打印到输出终端。can.Logger 侦听器似乎确实在目录中创建了 .asc 或 .blf 文件(文件arg 中的文件类型是什么,它都会创建该文件),但它不会向其中写入任何信息。
我认为它可能是模式arg,但从 'w' 或 'a' 等更改它似乎并没有什么不同。
知道为什么会发生这种情况吗?
我正在使用 Python 3.8.3、PyCharm 2020.1.2 社区版、Windows 10
编辑 1: 在重新排列代码和一些试验和错误之后,Try-Except 块似乎是问题所在。我仍然不明白为什么它不起作用。但我怀疑这与 PyCharm 的键盘中断功能有关。在我的原始代码中,我希望 KeyboardInterrupt 会发生,当它发生时,我会关闭总线和通知程序。但是我的理论是这没有发生,所以我的文件没有关闭。这是我的新代码有效:
python - python中的can.Bus实例可以同时接收和传输吗?
我一直在使用 python-can 和 cantools 来传输和接收 CAN 总线消息,没有任何问题。但是,当我开始发送定期消息同时还尝试接收消息时,似乎出现了一些错误。我不确定我的操作方式是否存在问题,或者是否根本不可能同时进行发送和接收。当我尝试这样做时,receive()
返回 NoneType 并且我知道这是不正确的,因为我有另一个设备记录并报告我正在寻找的信号确实存在于总线上。
是否可以使用 python-can 在同一总线上同时发送和传输?
追溯:
代码:
tc_1()
调用receive()
以查找总线上的特定消息,还调用periodic_send()
以定期在总线上发送消息。错误发生在我打电话后periodic_send()
,当我试图在公共汽车上查找消息时。似乎一旦我开始发送消息就会receive()
返回无。我知道这不是超时问题,因为错误会在几秒钟内发生,而我的超时时间是 15 秒。如果我发表评论,我不会得到这个问题periodic_send()
。
研究
在文档中,他们提到了该类can.ThreadSafeBus()
,并且它“假设可以同时调用底层总线实例的 send() 和 _recv_internal()”这使我认为我必须使用此类总线实例才能 tx/rx同时发消息。但我看到线程这个词有点害怕。
更新 1:
经过一些测试,can.Bus 实例似乎可以同时发送和接收消息。它实际上不是“同时的”,但如果您尝试同时发送和接收,则没有问题。
我遇到的问题似乎在于我如何实现传输和接收。有时receive()
返回None
(参见下面的代码),当在比较语句中使用该返回值时,这会产生问题,结果如下:TypeError: '<=' not supported between instances of 'float' and 'NoneType'