Python-can基础使用

713 阅读1分钟

python-can的使用笔记

用于在CAN总线上发送和接收消息

pip install python-can

支持的硬件接口:

NameDocumentation
“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
  1. 创建实例
self.channel="can0"
self.interface="socketcan"
self.bus = can.interface.Bus(channel=self.channel, interface=self.interface)
  1. 发送消息
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) 
  1. 接受消息
#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 秒  
  1. 获取状态
state = bus_instance.status() 
  1. 断开连接
self.bus.close()