0

我在具有以下操作系统规范的基于 linux 的设备上运行 python 代码:

NAME=Buildroot
VERSION=2020.11.1

该设备使用三线接口(CAN_H、CAN_L、GND)连接到 PLC。

我编写了一个代码,它使用 CAN 总线协议向 PLC 发送消息。这是通过python-can包完成的。

我有以下代码:

import can

def send():
    #USB interface
    #bus = can.interface.Bus(bustype='pcan', channel='PCAN_USBBUS1', bitrate=500000)
    #on linux
    bus = can.interface.Bus(bustype='socketcan', channel='vcan0', bitrate=500000)
    #on windows
    #bus = can.interface.Bus(bustype='serial', channel='COM1', bitrate=500000)
    msg = can.Message(arbitration_id=0x68005,data=[0x10,0x11,0x12],is_extended_id=True)
    try:
        bus.send(msg)
        print("Message sent on {}".format(bus.channel_info))
    except can.CanError:
        print("Message NOT sent")


if __name__ == '__main__':
     send()

面临的问题是设备没有向 PLC 发送任何数据。这可能是由于为bustype和设置了不正确的选项channel

任何人都可以建议使用三根 CAN 线提供什么bustype以及为这个物理接口提供什么?channel

4

1 回答 1

1

警告:我不熟悉 python-can 库,但我使用的是 socketcan。

vcan0 是一个虚拟通道,您可以设置它以启用应用程序之间的虚拟通信(例如测试)。

一个实际的 CAN 设备(例如 PCAN-USB)被列为 can0、can1、canX。请注意,在某些嵌入式系统上,这可能不成立(例如,它可以以 can1 开头)。

编辑:我忘了提到你可以像这样获得所有网络接口的列表,因此包括 CAN 接口:

$ ifconfig -a

参考文档:https ://elinux.org/Bringing_CAN_interface_up

于 2021-05-14T16:59:10.320 回答