向Socketcan/Pythoncan中的多个指定设备ID发送CAN消息,类似于MCP_CAN Arduino库?

2024-06-14 21:52:01 发布

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

pythonsocketcan/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…)。但是,在运行socketcan的Linux板上,没有与cansend命令等效的Python can

Python/Linux

  import can
  def send_one()
      bus = can.interface.Bus(bustype='socketcan', channel='can0', bitrate=500000)
      msg = can.Message(arbitration_id=0xc0ffee,
                    data=[0, 25, 0, 1, 3, 1, 4, 1],
                    is_extended_id=False)
     try:
         bus.send(msg)
         print("Message sent on {}".format(bus.channel_info))
     except can.CanError:
        print("Message NOT sent")

 if __name__ == '__main__':
     send_one()

用于Arduino的MCP_CAN库

//sendMsgBuf(ID, DLC, DATA)
...sendMsgBuf(0x01, DLC, DATA) //Send to Device ID 0x01
...sendMsgBuf(0x02, DLC, DATA) //Send to Device ID 0x02
...sendMsgBuf(0x02, DLC, DATA) //Send to Device ID 0x03

在一个标准的socketcan示例中,can.Message()命令设置传输设备的仲裁id,但当我有多个连接到can总线的设备正在等待消息时,它没有定义我试图将其发送到的设备的can id。我将如何向CAN设备0x01、设备0x02和设备0x03发送CAN消息


Tags: 命令sendid消息messagedatacanarduino