问题标签 [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 - 使用 python-can 模块从 IXAAT 自动将数据传输到 CANblue V2 的 CAN 消息的 python 脚本
我有一个问题,比如......我们有一些带有微控制器消息的数据文件。我们使用 Blue CAN v2 [IXXAT] [https://www.ixxat.com/products/products-industrial/can-interfaces/usb-can-interfaces/usb-to-can-v2-professional?ordercode=1.01.0281.12001 ] 用模拟器将消息传输到微控制器。我们是通过GUI做的,我们可以使用python中的一些模块来编写一个脚本来自动化它。
我已阅读有关 CANpy 模块的信息……但无法获得有关此的正确信息。
任何人都可以帮助解决这个问题......我对嵌入式环境和python有点陌生
此流程是否有效:在使用 can.player 模块 python -m can.player -i ixxat 导出数据之前,在 Windows 设置界面和通道中安装 python-can 模块
python - 如何使用 cantools 从 .asc 文件中正确读取 J1939 消息?
我正在尝试创建一个从 .asc 文件到 .csv 文件的 CAN 日志转换器(以人类可读的形式)。我有点成功。我的代码几乎适用于除 j1939.dbc 之外的任何数据库。
问题是,如果我打印出从 dbc 文件读取的消息,我可以看到来自 j1939.dbc 的消息被读入数据库。但它无法在已处理的日志文件中找到任何这些消息。同时,我可以毫无问题地使用 Vector CANalyzer 读取相同的文件。
我想知道为什么会发生这种情况以及为什么它只影响 j1939.dbc 而不会影响其他。
我怀疑我转换这些消息的方式可能是错误的,因为它永远不会通过if msg_id in database:
线路(如上所述,这些消息肯定存在,因为 Vector CANalyzer 可以很好地与它们配合使用)。
编辑:我意识到问题可能不是 cantools 而是 python-can 包,也许can.ASCReader()
j1939 帧做得不好并忽略它们?我要调查自己,但我希望能更好地编码的人会有所帮助。
python - python-can J1939过滤掩码
我一直在使用 MCP2515 CAN 总线设备在 Raspberry 中使用 python 广播读取 J1939 消息的整个值。
我想过滤 J1939 消息,但我不明白 can-mask 的含义以及我如何发现它。在python-can的文档中说:
返回与至少一个过滤器匹配的所有消息。如果过滤器是 None 或零长度序列,则匹配所有消息。
即使我理解这个“无”部分,我也不明白如何识别我的 ID 消息的掩码
例子:
我只想通过脚本获取 ID 为“0xCF00400”和“0x18fee927”的消息
我应该如何填充每个变量以及如何确定 ID 的掩码?
更新 2021 年 3 月 10 日
我已经尝试了下面的代码,但仍然返回所有消息
输出:
python - 向 Socketcan / Python 中的多个指定设备 ID 发送 CAN 消息 - 类似于 MCP_CAN Arduino 库?
Python Socketcan / python-can 中是否有等价物,它允许将 CAN 消息发送到特定的目标设备 ID,就像它在 Arduino 设备上的操作方式一样?Arduino CAN 总线板使用 MCP_CAN 库,它允许在命令 sendMsgBuf(ID, EXT, DLC, DATA) 中定义协议控制器的 ID 过滤模式。我连接了多个设备,可以发送 ID 字段设置为... CAN.sendMsgBuf(0x01...)、CAN.sendMsgBuf(0x02...)、CAN.sendMsgBuf(0x03...) 的特定 CAN 消息。但是,当在 Linux 板上运行 socketcan 时,没有与 cansend 命令等效的 Python-can。
Python-Can / Linux
Arduino 的 MCP_CAN 库
在一个标准的 socketcan 示例中,can.Message() 命令为发送设备设置了仲裁 ID,但是当我有多个连接到 canbus 的设备时,它没有定义我尝试将其发送到的设备的 can_id正在等待消息。我将如何发送 CAN 消息来假设设备 0x01、设备 0x02 和设备 0x03?
python-3.x - cantools.database.errors.Error:标准帧 id 超过 11 位
我使用 cantools python 包来解码 canbus 消息。我使用我创建的 dbc 文件进行测试。我复制了一个示例文件。当我使用像 419358976 这样的 can id 时,我收到错误消息。但是对于像 350 这样的更小的罐头 ID,它可以工作。cantools 是否会因扩展帧 ID 而失败?我如何让这个工作?
我的扩展ID失败的代码如下:
错误:cantools.database.errors.Error: Standard frame id 0x18fee900 is more than 11 bits in message EEC1.
pdo - 使用python canopen包在两个节点之间进行CANopen协议通信
我有两个 USB 转 CAN 设备(can0 和 can1),它们都连接到安装了 socketcan 的 Linux 机器。我已经阅读了 CANopen 协议的基础知识,我还没有看到任何可以使用 Python CANopen 库在两个 CANopen 设备之间建立通信的示例。
我在文档中读到每个设备都必须有一个 .eds 文件,所以我从 christiansandberg github 的 Python CANopen 库中获取了一个示例 .eds 文件,并尝试建立通信并使它们使用 PDO 相互通信,但我不能能够做到这一点。
我们有一个电池并想与它通信,电池工作在可以打开的协议上,他们为电池提供了 .eds 文件。我猜一个带有 CANopen Python 库的 usb2can 设备可以完成这项工作。但是我只是不知道如何在usb2can设备和电池之间建立通信。这对于构建数据包的任何见解都会有所帮助。
python - 通过 CAN 总线接口的通信不起作用
我在具有以下操作系统规范的基于 linux 的设备上运行 python 代码:
该设备使用三线接口(CAN_H、CAN_L、GND)连接到 PLC。
我编写了一个代码,它使用 CAN 总线协议向 PLC 发送消息。这是通过python-can
包完成的。
我有以下代码:
面临的问题是设备没有向 PLC 发送任何数据。这可能是由于为bustype
和设置了不正确的选项channel
。
任何人都可以建议使用三根 CAN 线提供什么bustype
以及为这个物理接口提供什么?channel
python - 如何使用 can.message 类在 pythoncan 中使用 Socket-can 发送多个 CAN/CANFD 帧
我想在单个 can.send() API 调用中发送多条消息(10000 个具有各种仲裁 id 的 canfd 帧)。如何使用 can.message 类构造多个帧。
在下面的示例中,形成了单个 msg 并通过 bus.send(msg) msg=can.Message API 发送
同理,如何形成多个帧并在单个 API 中发送 can.send() 调用。是否可以存储具有不同仲裁 id、数据的多个帧并定期发送它们?
我们应该使用定期 API 发送这个(消息)吗?
简而言之,如何将批量多帧消息(具有各种仲裁 id、数据帧值)存储在一个数组中,并将它们推送到单个周期性发送 API 调用中
你能在这方面支持我吗?你能举个例子吗?
python - Python-CAN 远程请求帧
我正在使用python-can 库来发送和接收 CAN 消息并了解有关该协议的更多信息。
我目前有一个系统可以发送和接收消息,现在我想通过远程帧消息请求 CAN 数据。
我使用此 CAN 消息填充地址 0x480:
这是我传输的远程帧 CAN 消息,用于尝试在 0x480 中提取数据:
发送远程帧消息后,我等待响应:
这是我收到的回复:
我是否错误地请求数据?我本来希望这样:
python - Python CAN isotp 套接字未接收数据,但接收到了 candump
我正在尝试将 Pican3+Raspberry Pi 4(设备 1)与我的笔记本电脑(设备 2)中的独木舟进行通信。我在树莓派中使用 python can isotp 模块。我能够将我的树莓派代码中的数据发送到独木舟,但无法接收从独木舟发送到树莓派到我在 python 代码中创建的 isotp.socket 的数据。但是数据是在树莓派端接收的,用candump验证。下面是使用的代码。
canoe 发送的消息具有消息 ID 701 和标准罐框架。据我了解,套接字已绑定以从 can0 通道接收 ID 为 701 的消息。我错过了什么吗?附上canoe和raspberry的candump的消息截图,请看。