python-can的使用笔记
用于在CAN总线上发送和接收消息
pip install python-can
支持的硬件接口:
| Name | Documentation |
|---|---|
| “socketcan” | SocketCAN |
| “kvaser” | Kvaser’s CANLIB |
| “serial” | CAN over Serial |
| “slcan” | CAN over Serial / SLCAN |
| “ixxat” | IXXAT Virtual CAN Interface |
| “pcan” | PCAN Basic API |
| “usb2can” | USB2CAN Interface |
| “nican” | NI-CAN |
| “iscan” | isCAN |
| “neovi” | NEOVI Interface |
| “vector” | Vector |
| “virtual” | Virtual |
| “canalystii” | CANalyst-II |
| “systec” | SYSTEC interface |
- 创建实例
self.channel="can0"
self.interface="socketcan"
self.bus = can.interface.Bus(channel=self.channel, interface=self.interface)
- 发送消息
arbitration_id=0x123 #消息 ID
data_to_send=[0x11, 0x22, 0x33, 0x44] #消息内容
msg = can.Message(arbitration_id=arbitration_id, data=data_to_send, is_extended_id=False)
self.bus.send(msg)
can.message(
timestamp=0.0, #时间戳
arbitration_id=0, #消息id
is_extended_id=True, #扩展帧
is_remote_frame=False, #远程帧
is_error_frame=False, #错误帧
channel=None, #通道
dlc=None, #dlc大小
data=None, #数据
is_fd=False, #canfd
is_rx=True, #为接收帧
bitrate_switch=False, #比特率开关
error_state_indicator=False, #错误状态指示器
check=False)
- 接受消息
#demo[{"can_id": 0x11, "can_mask": 0x21, "extended": False}]
#总线消息过滤器
can_filter = [{"can_id": rcvId}]
self.bus.set_filters(can_filter)
#接收消息
msg = self.bus.recv(1.0) # 接收消息,超时时间为 1.0 秒
- 获取状态
state = bus_instance.status()
- 断开连接
self.bus.close()