通过CAN总线接口的通信不工作

2024-04-29 13:24:16 发布

您现在位置:Python中文网/ 问答频道 /正文

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

NAME=Buildroot
VERSION=2020.11.1

该设备通过三线接口(CAN\U H、CAN\U 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发送任何数据。这可能是因为为bustypechannel设置了不正确的选项

有谁能建议为这个带有三根Can线的物理接口提供什么bustypechannel


Tags: 代码sendmessageonlinuxchannelmsgcan
1条回答
网友
1楼 · 发布于 2024-04-29 13:24:16

警告:我不熟悉python can库,但我熟悉socketcan

vcan0是一个虚拟can通道,您可以对其进行设置,以实现应用程序之间的虚拟通信(例如测试)

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

编辑:我忘了提到,您可以获得所有网络接口的列表,例如,包括can接口:

$ ifconfig -a

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

相关问题 更多 >